Installation completed!
"; diff --git a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs index 5bca64e1e1..ed6e684cc6 100644 --- a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs +++ b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs @@ -25,10 +25,15 @@ namespace Umbraco.Core.Migrations.Install public DatabaseSchemaCreator(IUmbracoDatabase database, ILogger
diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcolorswatches.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcolorswatches.directive.js
index 9d7927f59a..d6eda76940 100644
--- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcolorswatches.directive.js
+++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcolorswatches.directive.js
@@ -30,15 +30,15 @@ Use this directive to generate color swatches to pick from.
function link(scope, el, attr, ctrl) {
// Set default to true if not defined
- if (angular.isUndefined(scope.useColorClass)) {
+ if (Utilities.isUndefined(scope.useColorClass)) {
scope.useColorClass = false;
}
// Set default to "btn" if not defined
- if (angular.isUndefined(scope.colorClassNamePrefix)) {
+ if (Utilities.isUndefined(scope.colorClassNamePrefix)) {
scope.colorClassNamePrefix = "btn";
}
-
+
scope.setColor = function (color, $index, $event) {
if (scope.onSelect) {
// did the value change?
diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/validation/showvalidationonsubmit.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/validation/showvalidationonsubmit.directive.js
index 78dd00e64b..ad646748b7 100644
--- a/src/Umbraco.Web.UI.Client/src/common/directives/validation/showvalidationonsubmit.directive.js
+++ b/src/Umbraco.Web.UI.Client/src/common/directives/validation/showvalidationonsubmit.directive.js
@@ -11,6 +11,7 @@
link: function (scope, element, attr, ctrl) {
var formMgr = ctrl.length > 1 ? ctrl[1] : null;
+ const hiddenClass = 'ng-hide';
//We can either get the form submitted status by the parent directive valFormManager
//or we can check upwards in the DOM for the css class... lets try both :)
@@ -18,17 +19,17 @@
//reset the status.
var submitted = element.closest(".show-validation").length > 0 || (formMgr && formMgr.showValidation);
if (!submitted) {
- element.hide();
+ element[0].classList.add(hiddenClass);
}
var unsubscribe = [];
unsubscribe.push(scope.$on("formSubmitting", function (ev, args) {
- element.show();
+ element[0].classList.remove(hiddenClass);
}));
unsubscribe.push(scope.$on("formSubmitted", function (ev, args) {
- element.hide();
+ element[0].classList.add(hiddenClass);
}));
//no isolate scope to listen to element destroy
diff --git a/src/Umbraco.Web.UI.Client/src/common/filters/umbCmsJoinArray.filter.js b/src/Umbraco.Web.UI.Client/src/common/filters/umbCmsJoinArray.filter.js
index a519f81054..870e497541 100644
--- a/src/Umbraco.Web.UI.Client/src/common/filters/umbCmsJoinArray.filter.js
+++ b/src/Umbraco.Web.UI.Client/src/common/filters/umbCmsJoinArray.filter.js
@@ -13,7 +13,7 @@
*/
angular.module("umbraco.filters").filter('umbCmsJoinArray', function () {
return function join(array, separator, prop) {
- return (!angular.isUndefined(prop) ? array.map(function (item) {
+ return (!Utilities.isUndefined(prop) ? array.map(function (item) {
return item[prop];
}) : array).join(separator || '');
};
diff --git a/src/Umbraco.Web.UI.Client/src/common/filters/umbwordlimit.filter.js b/src/Umbraco.Web.UI.Client/src/common/filters/umbwordlimit.filter.js
index 93f0bddc96..bd597b21d0 100644
--- a/src/Umbraco.Web.UI.Client/src/common/filters/umbwordlimit.filter.js
+++ b/src/Umbraco.Web.UI.Client/src/common/filters/umbwordlimit.filter.js
@@ -17,7 +17,7 @@
return collection;
}
- if (angular.isUndefined(property)) {
+ if (Utilities.isUndefined(property)) {
return collection;
}
diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/auth.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/auth.resource.js
index 7dc34c3b5a..78fefc8db5 100644
--- a/src/Umbraco.Web.UI.Client/src/common/resources/auth.resource.js
+++ b/src/Umbraco.Web.UI.Client/src/common/resources/auth.resource.js
@@ -12,7 +12,24 @@
function authResource($q, $http, umbRequestHelper, angularHelper) {
return {
-
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.authResource#get2FAProviders
+ * @methodOf umbraco.resources.authResource
+ *
+ * @description
+ * Logs the Umbraco backoffice user in if the credentials are good
+ *
+ * ##usage
+ *
+ * authResource.get2FAProviders()
+ * .then(function(data) {
+ * //Do stuff ...
+ * });
+ *
+ * @returns {Promise} resourcePromise object
+ *
+ */
get2FAProviders: function () {
return umbRequestHelper.resourcePromise(
@@ -23,6 +40,25 @@ function authResource($q, $http, umbRequestHelper, angularHelper) {
'Could not retrive two factor provider info');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.authResource#get2FAProviders
+ * @methodOf umbraco.resources.authResource
+ *
+ * @description
+ * Generate the two-factor authentication code for the provider and send it to the user
+ *
+ * ##usage
+ *
+ * authResource.send2FACode(provider)
+ * .then(function(data) {
+ * //Do stuff ...
+ * });
+ *
+ * @param {string} provider Name of the provider
+ * @returns {Promise} resourcePromise object
+ *
+ */
send2FACode: function (provider) {
return umbRequestHelper.resourcePromise(
@@ -34,6 +70,26 @@ function authResource($q, $http, umbRequestHelper, angularHelper) {
'Could not send code');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.authResource#get2FAProviders
+ * @methodOf umbraco.resources.authResource
+ *
+ * @description
+ * Verify the two-factor authentication code entered by the user against the provider
+ *
+ * ##usage
+ *
+ * authResource.verify2FACode(provider, code)
+ * .then(function(data) {
+ * //Do stuff ...
+ * });
+ *
+ * @param {string} provider Name of the provider
+ * @param {string} code The two-factor authentication code
+ * @returns {Promise} resourcePromise object
+ *
+ */
verify2FACode: function (provider, code) {
return umbRequestHelper.resourcePromise(
diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js
index 4a8c65c322..c5a353d746 100644
--- a/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js
+++ b/src/Umbraco.Web.UI.Client/src/common/resources/contenttype.resource.js
@@ -7,6 +7,25 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
return {
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#getCount
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Gets the count of content types
+ *
+ * ##usage
+ *
+ * contentTypeResource.getCount()
+ * .then(function(data) {
+ * console.log(data);
+ * });
+ *
+ *
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getCount: function () {
return umbRequestHelper.resourcePromise(
$http.get(
@@ -16,6 +35,29 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to retrieve count');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#getAvailableCompositeContentTypes
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Gets the compositions for a content type
+ *
+ * ##usage
+ *
+ * contentTypeResource.getAvailableCompositeContentTypes()
+ * .then(function(data) {
+ * console.log(data);
+ * });
+ *
+ *
+ * @param {Int} contentTypeId id of the content type to retrieve the list of the compositions
+ * @param {Array} filterContentTypes array of content types to filter out
+ * @param {Array} filterPropertyTypes array of property aliases to filter out. If specified any content types with the property aliases will be filtered out
+ * @param {Boolean} isElement whether the composite content types should be applicable for an element type
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getAvailableCompositeContentTypes: function (contentTypeId, filterContentTypes, filterPropertyTypes, isElement) {
if (!filterContentTypes) {
filterContentTypes = [];
@@ -86,6 +128,7 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
* $scope.type = type;
* });
*
+ *
* @param {Int} contentTypeId id of the content item to retrive allowed child types for
* @returns {Promise} resourcePromise object.
*
@@ -110,6 +153,14 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
* @description
* Returns a list of defined property type aliases
*
+ * ##usage
+ *
+ * contentTypeResource.getAllPropertyTypeAliases()
+ * .then(function(array) {
+ * Do stuff...
+ * });
+ *
+ *
* @returns {Promise} resourcePromise object.
*
*/
@@ -123,6 +174,25 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to retrieve property type aliases');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#getAllStandardFields
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Returns a list of standard property type aliases
+ *
+ * ##usage
+ *
+ * contentTypeResource.getAllStandardFields()
+ * .then(function(array) {
+ * Do stuff...
+ * });
+ *
+ *
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getAllStandardFields: function () {
return umbRequestHelper.resourcePromise(
@@ -133,6 +203,26 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to retrieve standard fields');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#getPropertyTypeScaffold
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Returns the property display for a given datatype id
+ *
+ * ##usage
+ *
+ * contentTypeResource.getPropertyTypeScaffold(1234)
+ * .then(function(array) {
+ * Do stuff...
+ * });
+ *
+ *
+ * @param {Int} id the id of the datatype
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getPropertyTypeScaffold: function (id) {
return umbRequestHelper.resourcePromise(
$http.get(
@@ -143,6 +233,26 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to retrieve property type scaffold');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#getById
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Get the content type with a given id
+ *
+ * ##usage
+ *
+ * contentTypeResource.getById("64058D0F-4911-4AB7-B3BA-000D89F00A26")
+ * .then(function(array) {
+ * Do stuff...
+ * });
+ *
+ *
+ * @param {String} id the guid id of the content type
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getById: function (id) {
return umbRequestHelper.resourcePromise(
@@ -154,6 +264,26 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to retrieve content type');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#deleteById
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Delete the content type of a given id
+ *
+ * ##usage
+ *
+ * contentTypeResource.deleteById(1234)
+ * .then(function(array) {
+ * Do stuff...
+ * });
+ *
+ *
+ * @param {Int} id the id of the content type
+ * @returns {Promise} resourcePromise object.
+ *
+ */
deleteById: function (id) {
return umbRequestHelper.resourcePromise(
@@ -165,6 +295,26 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to delete content type');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#deleteContainerById
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Delete the content type container of a given id
+ *
+ * ##usage
+ *
+ * contentTypeResource.deleteContainerById(1234)
+ * .then(function(array) {
+ * Do stuff...
+ * });
+ *
+ *
+ * @param {Int} id the id of the content type container
+ * @returns {Promise} resourcePromise object.
+ *
+ */
deleteContainerById: function (id) {
return umbRequestHelper.resourcePromise(
@@ -177,16 +327,16 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
},
/**
- * @ngdoc method
- * @name umbraco.resources.contentTypeResource#getAll
- * @methodOf umbraco.resources.contentTypeResource
- *
- * @description
- * Returns a list of all content types
- *
- * @returns {Promise} resourcePromise object.
- *
- */
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#getAll
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Returns a list of all content types
+ *
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getAll: function () {
return umbRequestHelper.resourcePromise(
@@ -197,6 +347,26 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to retrieve all content types');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#getScaffold
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Returns an empty content type for use as a scaffold when creating a new content type
+ *
+ * ##usage
+ *
+ * contentTypeResource.getScaffold(1234)
+ * .then(function(array) {
+ * Do stuff...
+ * });
+ *
+ *
+ * @param {Int} id the parent id
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getScaffold: function (parentId) {
return umbRequestHelper.resourcePromise(
@@ -240,14 +410,14 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
*
* contentTypeResource.move({ parentId: 1244, id: 123 })
* .then(function() {
- * alert("node was moved");
+ * alert("content type was moved");
* }, function(err){
- * alert("node didnt move:" + err.data.Message);
+ * alert("content type didnt move:" + err.data.Message);
* });
*
* @param {Object} args arguments object
- * @param {Int} args.idd the ID of the node to move
- * @param {Int} args.parentId the ID of the parent node to move to
+ * @param {Int} args.id the ID of the content type to move
+ * @param {Int} args.parentId the ID of the parent content type to move to
* @returns {Promise} resourcePromise object.
*
*/
@@ -271,6 +441,29 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to move content');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#copy
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Copied a content type underneath a new parentId
+ *
+ * ##usage
+ *
+ * contentTypeResource.copy({ parentId: 1244, id: 123 })
+ * .then(function() {
+ * alert("content type was copied");
+ * }, function(err){
+ * alert("content type didnt copy:" + err.data.Message);
+ * });
+ *
+ * @param {Object} args arguments object
+ * @param {Int} args.id the ID of the content type to copy
+ * @param {Int} args.parentId the ID of the parent content type to copy to
+ * @returns {Promise} resourcePromise object.
+ *
+ */
copy: function (args) {
if (!args) {
throw "args cannot be null";
@@ -291,6 +484,27 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
'Failed to copy content');
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#createContainer
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Create a new content type container of a given name underneath a given parent item
+ *
+ * ##usage
+ *
+ * contentTypeResource.createContainer(1244,"testcontainer")
+ * .then(function() {
+ * Do stuff..
+ * });
+ *
+ *
+ * @param {Int} parentId the ID of the parent content type underneath which to create the container
+ * @param {String} name the name of the container
+ * @returns {Promise} resourcePromise object.
+ *
+ */
createContainer: function (parentId, name) {
return umbRequestHelper.resourcePromise(
@@ -299,6 +513,32 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#createCollection
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Create a collection of a content types
+ *
+ * ##usage
+ *
+ * contentTypeResource.createCollection(1244,"testcollectionname",true,"collectionItemName",true,"icon-name","icon-name")
+ * .then(function() {
+ * Do stuff..
+ * });
+ *
+ *
+ * @param {Int} parentId the ID of the parent content type underneath which to create the collection
+ * @param {String} collectionName the name of the collection
+ * @param {Boolean} collectionCreateTemplate true/false to specify whether to create a default template for the collection
+ * @param {String} collectionItemName the name of the collection item
+ * @param {Boolean} collectionItemCreateTemplate true/false to specify whether to create a default template for the collection item
+ * @param {String} collectionIcon the icon for the collection
+ * @param {String} collectionItemIcon the icon for the collection item
+ * @returns {Promise} resourcePromise object.
+ *
+ */
createCollection: function (parentId, collectionName, collectionCreateTemplate, collectionItemName, collectionItemCreateTemplate, collectionIcon, collectionItemIcon) {
return umbRequestHelper.resourcePromise(
@@ -307,6 +547,27 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#renameContainer
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Rename a container of a given id
+ *
+ * ##usage
+ *
+ * contentTypeResource.renameContainer( 1244,"testcontainer")
+ * .then(function() {
+ * Do stuff..
+ * });
+ *
+ *
+ * @param {Int} id the ID of the container to rename
+ * @param {String} name the new name of the container
+ * @returns {Promise} resourcePromise object.
+ *
+ */
renameContainer: function (id, name) {
return umbRequestHelper.resourcePromise(
@@ -318,6 +579,27 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#export
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Export a content type of a given id.
+ *
+ * ##usage
+ *
+ * contentTypeResource.export(1234){
+ * .then(function() {
+ * Do stuff..
+ * });
+ *
+ *
+ * @param {Int} id the ID of the container to rename
+ * @param {String} name the new name of the container
+ * @returns {Promise} resourcePromise object.
+ *
+ */
export: function (id) {
if (!id) {
throw "id cannot be null";
@@ -336,6 +618,26 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
});
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#import
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Import a content type from a file
+ *
+ * ##usage
+ *
+ * contentTypeResource.import("path to file"){
+ * .then(function() {
+ * Do stuff..
+ * });
+ *
+ *
+ * @param {String} file path of the file to import
+ * @returns {Promise} resourcePromise object.
+ *
+ */
import: function (file) {
if (!file) {
throw "file cannot be null";
@@ -347,12 +649,52 @@ function contentTypeResource($q, $http, umbRequestHelper, umbDataFormatter, loca
);
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#createDefaultTemplate
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Create a default template for a content type with a given id
+ *
+ * ##usage
+ *
+ * contentTypeResource.createDefaultTemplate(1234){
+ * .then(function() {
+ * Do stuff..
+ * });
+ *
+ *
+ * @param {Int} id the id of the content type for which to create the default template
+ * @returns {Promise} resourcePromise object.
+ *
+ */
createDefaultTemplate: function (id) {
return umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper.getApiUrl("contentTypeApiBaseUrl", "PostCreateDefaultTemplate", { id: id })),
'Failed to create default template for content type with id ' + id);
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.contentTypeResource#hasContentNodes
+ * @methodOf umbraco.resources.contentTypeResource
+ *
+ * @description
+ * Returns whether a content type has content nodes
+ *
+ * ##usage
+ *
+ * contentTypeResource.hasContentNodes(1234){
+ * .then(function() {
+ * Do stuff..
+ * });
+ *
+ *
+ * @param {Int} id the id of the content type
+ * @returns {Promise} resourcePromise object.
+ *
+ */
hasContentNodes: function (id) {
return umbRequestHelper.resourcePromise(
$http.get(
diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/elementtype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/elementtype.resource.js
index acc0a94485..b097a65447 100644
--- a/src/Umbraco.Web.UI.Client/src/common/resources/elementtype.resource.js
+++ b/src/Umbraco.Web.UI.Client/src/common/resources/elementtype.resource.js
@@ -7,6 +7,25 @@ function elementTypeResource($q, $http, umbRequestHelper) {
return {
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.elementTypeResource#getAll
+ * @methodOf umbraco.resources.elementTypeResource
+ *
+ * @description
+ * Gets a list of all element types
+ *
+ * ##usage
+ *
+ * elementTypeResource.getAll()
+ * .then(function() {
+ * alert('Found it!');
+ * });
+ *
+ *
+ * @returns {Promise} resourcePromise object.
+ *
+ **/
getAll: function () {
return umbRequestHelper.resourcePromise(
diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/modelsbuildermanagement.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/modelsbuildermanagement.resource.js
index ee3cd80c71..8352ca07e6 100644
--- a/src/Umbraco.Web.UI.Client/src/common/resources/modelsbuildermanagement.resource.js
+++ b/src/Umbraco.Web.UI.Client/src/common/resources/modelsbuildermanagement.resource.js
@@ -1,18 +1,82 @@
+
+/**
+* @ngdoc service
+* @name umbraco.resources.modelsBuilderManagementResource
+* @description Resources to get information on modelsbuilder status and build models
+**/
function modelsBuilderManagementResource($q, $http, umbRequestHelper) {
return {
+
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.modelsBuilderManagementResource#getModelsOutOfDateStatus
+ * @methodOf umbraco.resources.modelsBuilderManagementResource
+ *
+ * @description
+ * Gets the status of modelsbuilder
+ *
+ * ##usage
+ *
+ * modelsBuilderManagementResource.getModelsOutOfDateStatus()
+ * .then(function() {
+ * Do stuff...*
+ * });
+ *
+ *
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getModelsOutOfDateStatus: function () {
return umbRequestHelper.resourcePromise(
$http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetModelsOutOfDateStatus")),
"Failed to get models out-of-date status");
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.modelsBuilderManagementResource#buildModels
+ * @methodOf umbraco.resources.modelsBuilderManagementResource
+ *
+ * @description
+ * Builds the models
+ *
+ * ##usage
+ *
+ * modelsBuilderManagementResource.buildModels()
+ * .then(function() {
+ * Do stuff...*
+ * });
+ *
+ *
+ * @returns {Promise} resourcePromise object.
+ *
+ */
buildModels: function () {
return umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")),
"Failed to build models");
},
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.modelsBuilderManagementResource#getDashboard
+ * @methodOf umbraco.resources.modelsBuilderManagementResource
+ *
+ * @description
+ * Gets the modelsbuilder dashboard
+ *
+ * ##usage
+ *
+ * modelsBuilderManagementResource.getDashboard()
+ * .then(function() {
+ * Do stuff...*
+ * });
+ *
+ *
+ * @returns {Promise} resourcePromise object.
+ *
+ */
getDashboard: function () {
return umbRequestHelper.resourcePromise(
$http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetDashboard")),
diff --git a/src/Umbraco.Web.UI.Client/src/install.loader.js b/src/Umbraco.Web.UI.Client/src/install.loader.js
index 997c8cbe84..8c17b8cd64 100644
--- a/src/Umbraco.Web.UI.Client/src/install.loader.js
+++ b/src/Umbraco.Web.UI.Client/src/install.loader.js
@@ -1,6 +1,6 @@
LazyLoad.js([
'lib/jquery/jquery.min.js',
-
+
'lib/angular/angular.js',
'lib/angular-cookies/angular-cookies.js',
'lib/angular-touch/angular-touch.js',
@@ -8,10 +8,14 @@ LazyLoad.js([
'lib/angular-messages/angular-messages.js',
'lib/angular-aria/angular-aria.min.js',
'lib/underscore/underscore-min.js',
- 'lib/angular-ui-sortable/sortable.js',
+ 'lib/angular-ui-sortable/sortable.js',
+
+ 'js/utilities.js',
+
'js/installer.app.js',
'js/umbraco.directives.js',
'js/umbraco.installer.js'
+
], function () {
jQuery(document).ready(function () {
angular.bootstrap(document, ['umbraco']);
diff --git a/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js b/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js
index ae2fc63293..d236d45568 100644
--- a/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/installer/steps/database.controller.js
@@ -1,28 +1,28 @@
angular.module("umbraco.install").controller("Umbraco.Installer.DataBaseController", function($scope, $http, installerService){
-
+
$scope.checking = false;
$scope.invalidDbDns = false;
-
+
$scope.dbs = $scope.installer.current.model.databases;
if (angular.isUndefined(installerService.status.current.model.dbType) || installerService.status.current.model.dbType === null) {
installerService.status.current.model.dbType = $scope.dbs[0].id;
}
-
+
$scope.validateAndForward = function() {
if (!$scope.checking && this.myForm.$valid)
{
$scope.checking = true;
$scope.invalidDbDns = false;
-
+
var model = installerService.status.current.model;
$http.post(
Umbraco.Sys.ServerVariables.installApiBaseUrl + "PostValidateDatabaseConnection",
model).then(function(response) {
-
+
if (response.data === true) {
- installerService.forward();
+ installerService.forward();
}
else {
$scope.invalidDbDns = true;
diff --git a/src/Umbraco.Web.UI.Client/src/less/application/grid.less b/src/Umbraco.Web.UI.Client/src/less/application/grid.less
index 9e91da4792..68160923c8 100644
--- a/src/Umbraco.Web.UI.Client/src/less/application/grid.less
+++ b/src/Umbraco.Web.UI.Client/src/less/application/grid.less
@@ -171,13 +171,13 @@ body.umb-drawer-is-visible #mainwrapper{
}
@media (min-width: 1101px) {
- #contentwrapper, #speechbubble {left: 360px;}
- .emptySection #contentwrapper {left:0px;}
+ #contentwrapper, #speechbubble { left: 360px; }
+ .emptySection #contentwrapper { left: 0 !important; }
}
//empty section modification
-.emptySection #speechbubble {left: 0;}
-.emptySection #navigation {display: none}
+.emptySection #speechbubble { left: 0; }
+.emptySection #navigation { display: none }
.login-only #speechbubble {
z-index: 10000;
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-button.less b/src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-button.less
index d523b24141..b6800aba65 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-button.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-button.less
@@ -63,6 +63,11 @@
border-left-color: @white;
}
+.umb-button__progress.-black {
+ border-color: rgba(255, 255, 255, 0.4);
+ border-left-color: @black;
+}
+
.umb-button__success,
.umb-button__error {
position: absolute;
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/html/umb-expansion-panel.less b/src/Umbraco.Web.UI.Client/src/less/components/html/umb-expansion-panel.less
index 2a8137e5f9..ea08794c23 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/html/umb-expansion-panel.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/html/umb-expansion-panel.less
@@ -10,11 +10,12 @@
font-weight: bold;
display: flex;
align-items: center;
- cursor: pointer;
justify-content: space-between;
color: @black;
+ width: 100%;
- &:hover .umb-expansion-panel__expand {
+ &:hover .umb-expansion-panel__expand,
+ &:focus .umb-expansion-panel__expand {
color: @gray-6;
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-checkbox-list.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-checkbox-list.less
index 11194eeb43..c9f47a66df 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/umb-checkbox-list.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-checkbox-list.less
@@ -37,6 +37,7 @@
align-items: center;
flex: 0 0 30px;
margin-right: 5px;
+ position: relative;
}
.umb-checkbox-list__item-icon {
@@ -44,6 +45,17 @@
font-size: 16px;
}
+.umb-checkbox-list__item-icon-wrapper {
+ position: relative;
+
+ .umb-button__progress {
+ width: 10px;
+ height: 10px;
+ margin-left: -10px;
+ margin-top: -8px;
+ }
+}
+
.umb-checkbox-list__item-text {
font-size: 14px;
margin-bottom: 0;
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less
index 784598e84a..e1fc5573e5 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-grid.less
@@ -392,7 +392,7 @@
// EDITOR PLACEHOLDER
// -------------------------
.umb-grid .umb-editor-placeholder {
- min-height: 65px;
+ min-height: 110px;
padding: 20px;
padding-bottom: 30px;
position: relative;
@@ -400,7 +400,7 @@
border: 4px dashed @gray-8;
text-align: center;
text-align: -moz-center;
- cursor: pointer;
+ width: 100%;
}
.umb-grid .umb-editor-placeholder i {
@@ -413,6 +413,7 @@
.umb-grid .umb-editor-preview {
position: relative;
+ width: 100%;
.umb-editor-preview-overlay {
cursor: pointer;
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less
index 05824ba425..834a1a69e9 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less
@@ -4,6 +4,7 @@
.umb-nested-content-property-container {
position: relative;
+
&:not(:last-child){
margin-bottom: 12px;
}
@@ -54,19 +55,19 @@
visibility: visible !important;
}
-.umb-nested-content__item--single > .umb-nested-content__content {
+.umb-nested-content__item--single {
border: 0;
-}
-.umb-nested-content__item--single > .umb-nested-content__content > .umb-pane {
- margin: 0;
+ > .umb-nested-content__content {
+ > .umb-pane {
+ margin: 0;
+ }
+ }
}
.umb-nested-content__header-bar {
-
cursor: pointer;
background-color: @white;
-
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
@@ -78,21 +79,19 @@
padding-right: 60px;
}
}
-
}
.umb-nested-content__heading {
+ display: flex;
+ padding: 15px;
line-height: 20px;
- position: relative;
- padding: 15px 5px;
- color:@ui-option-type;
+ color: @ui-option-type;
&:hover {
- color:@ui-option-type-hover;
+ color: @ui-option-type-hover;
}
.umb-nested-content__item-icon {
- position: absolute;
margin-top: -3px;
font-size: 22px;
}
@@ -106,10 +105,9 @@
padding-left: 5px;
&.--has-icon {
- padding-left: 30px;
+ padding-left: 10px;
}
}
-
}
.umb-nested-content__icons {
@@ -125,13 +123,16 @@
.umb-nested-content__item--active > .umb-nested-content__header-bar {
.umb-nested-content__heading {
background-color: @ui-active;
+
&:hover {
- color:@ui-option-type;
+ color: @ui-option-type;
}
+
.umb-nested-content__item-name {
padding-right: 60px;
}
}
+
.umb-nested-content__icons {
background-color: @ui-active;
&:before {
@@ -140,8 +141,6 @@
}
}
-
-
.umb-nested-content__header-bar:hover .umb-nested-content__icons,
.umb-nested-content__header-bar:focus .umb-nested-content__icons,
.umb-nested-content__header-bar:focus-within .umb-nested-content__icons,
@@ -149,8 +148,6 @@
opacity: 1;
}
-
-
.umb-nested-content__icon {
background: transparent;
border: 0 none;
@@ -180,9 +177,6 @@
}
}
-
-
-
.umb-nested-content__footer-bar {
margin-top: 20px;
}
@@ -212,7 +206,6 @@
cursor: not-allowed;
}
-
.umb-nested-content__content {
border-top: 1px solid transparent;
border-bottom: 1px solid transparent;
@@ -240,17 +233,17 @@
}
.umb-nested-content__doctypepicker table td.icon-navigation,
-.umb-nested-content__doctypepicker i.umb-nested-content__help-icon {
+.umb-nested-content__doctypepicker .umb-nested-content__help-icon {
vertical-align: middle;
color: @gray-7;
}
.umb-nested-content__doctypepicker table td.icon-navigation:hover,
-.umb-nested-content__doctypepicker i.umb-nested-content__help-icon:hover {
+.umb-nested-content__doctypepicker .umb-nested-content__help-icon:hover {
color: @gray-2;
}
-.umb-nested-content__doctypepicker i.umb-nested-content__help-icon {
+.umb-nested-content__doctypepicker .umb-nested-content__help-action {
margin-left: 10px;
}
diff --git a/src/Umbraco.Web.UI.Client/src/less/navs.less b/src/Umbraco.Web.UI.Client/src/less/navs.less
index e45a4d46bb..6dab771c94 100644
--- a/src/Umbraco.Web.UI.Client/src/less/navs.less
+++ b/src/Umbraco.Web.UI.Client/src/less/navs.less
@@ -12,7 +12,10 @@
padding-right: 7px;
}
-.icon.handle{color: @gray-8;}
+.umb-icon.handle,
+.icon.handle {
+ color: @gray-8;
+}
// BASE CLASS
diff --git a/src/Umbraco.Web.UI.Client/src/preview/preview.controller.js b/src/Umbraco.Web.UI.Client/src/preview/preview.controller.js
index 44ff1d1cdf..aa17b4a7c2 100644
--- a/src/Umbraco.Web.UI.Client/src/preview/preview.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/preview/preview.controller.js
@@ -117,6 +117,13 @@ var app = angular.module("umbraco.preview", ['umbraco.resources', 'umbraco.servi
}
}
+ function fixExternalLinks(iframe) {
+ // Make sure external links don't open inside the iframe
+ Array.from(iframe.contentDocument.getElementsByTagName("a"))
+ .filter(a => a.hostname !== location.hostname && !a.target)
+ .forEach(a => a.target = "_top");
+ }
+
var isInit = getParameterByName("init");
if (isInit === "true") {
//do not continue, this is the first load of this new window, if this is passed in it means it's been
@@ -443,6 +450,7 @@ var app = angular.module("umbraco.preview", ['umbraco.resources', 'umbraco.servi
$scope.frameLoaded = true;
configureSignalR(iframe);
+ fixExternalLinks(iframe);
$scope.currentCultureIso = $location.search().culture || null;
};
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/drawers/help/help.html b/src/Umbraco.Web.UI.Client/src/views/common/drawers/help/help.html
index 04b5501846..4f6b283fd8 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/drawers/help/help.html
+++ b/src/Umbraco.Web.UI.Client/src/views/common/drawers/help/help.html
@@ -97,7 +97,7 @@