diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js
index bf87d764a6..e425bde042 100644
--- a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js
+++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorheader.directive.js
@@ -1,52 +1,57 @@
(function() {
- 'use strict';
+ 'use strict';
- function EditorHeaderDirective(iconHelper) {
+ function EditorHeaderDirective(iconHelper) {
- function link(scope, el, attr, ctrl) {
+ function link(scope, el, attr, ctrl) {
- scope.openIconPicker = function() {
- scope.dialogModel = {
- view: "iconpicker",
- show: true,
- submit: function(model) {
- if (model.color) {
- scope.icon = model.icon + " " + model.color;
- } else {
- scope.icon = model.icon;
+ scope.openIconPicker = function() {
+ scope.dialogModel = {
+ view: "iconpicker",
+ show: true,
+ submit: function(model) {
+ if (model.color) {
+ scope.icon = model.icon + " " + model.color;
+ } else {
+ scope.icon = model.icon;
+ }
+
+ // set form to dirty
+ ctrl.$setDirty();
+
+ scope.dialogModel.show = false;
+ scope.dialogModel = null;
}
- scope.dialogModel.show = false;
- scope.dialogModel = null;
- }
+ };
};
- };
- }
+ }
- var directive = {
- transclude: true,
- restrict: 'E',
- replace: true,
- templateUrl: 'views/components/editor/umb-editor-header.html',
- scope: {
- tabs: "=",
- actions: "=",
- name: "=",
- nameLocked: "=",
- menu: "=",
- icon: "=",
- hideIcon: "@",
- alias: "=",
- hideAlias: "@",
- description: "=",
- hideDescription: "@",
- navigation: "="
- },
- link: link
- };
+ var directive = {
+ require: '^form',
+ transclude: true,
+ restrict: 'E',
+ replace: true,
+ templateUrl: 'views/components/editor/umb-editor-header.html',
+ scope: {
+ tabs: "=",
+ actions: "=",
+ name: "=",
+ nameLocked: "=",
+ menu: "=",
+ icon: "=",
+ hideIcon: "@",
+ alias: "=",
+ hideAlias: "@",
+ description: "=",
+ hideDescription: "@",
+ navigation: "="
+ },
+ link: link
+ };
- return directive;
- }
+ return directive;
+ }
- angular.module('umbraco.directives').directive('umbEditorHeader', EditorHeaderDirective);
+ angular.module('umbraco.directives').directive('umbEditorHeader', EditorHeaderDirective);
})();
diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgroupsbuilder.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgroupsbuilder.directive.js
index 81c6a6612e..328884cfa1 100644
--- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgroupsbuilder.directive.js
+++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbgroupsbuilder.directive.js
@@ -1,10 +1,13 @@
(function() {
'use strict';
- function GroupsBuilderDirective(contentTypeHelper, contentTypeResource, mediaTypeResource, dataTypeHelper, dataTypeResource, $filter, iconHelper, $q, $timeout) {
+ function GroupsBuilderDirective(contentTypeHelper, contentTypeResource, mediaTypeResource, dataTypeHelper, dataTypeResource, $filter, iconHelper, $q, $timeout, notificationsService, localizationService) {
function link(scope, el, attr, ctrl) {
+ var validationTranslated = "";
+ var tabNoSortOrderTranslated = "";
+
scope.sortingMode = false;
scope.toolbar = [];
scope.sortableOptionsGroup = {};
@@ -25,6 +28,14 @@
// add init tab
addInitGroup(scope.model.groups);
+ // localize texts
+ localizationService.localize("validation_validation").then(function(value) {
+ validationTranslated = value;
+ });
+
+ localizationService.localize("contentTypeEditor_tabHasNoSortOrder").then(function(value) {
+ tabNoSortOrderTranslated = value;
+ });
}
function setSortingOptions() {
@@ -202,13 +213,30 @@
scope.toggleSortingMode = function(tool) {
- scope.sortingMode = !scope.sortingMode;
+ if (scope.sortingMode === true) {
- if(scope.sortingMode === true) {
- scope.sortingButtonKey = "general_reorderDone";
- } else {
- scope.sortingButtonKey = "general_reorder";
- }
+ var sortOrderMissing = false;
+
+ for (var i = 0; i < scope.model.groups.length; i++) {
+ var group = scope.model.groups[i];
+ if (group.tabState !== "init" && group.sortOrder === undefined) {
+ sortOrderMissing = true;
+ group.showSortOrderMissing = true;
+ notificationsService.error(validationTranslated + ": " + group.name + " " + tabNoSortOrderTranslated);
+ }
+ }
+
+ if (!sortOrderMissing) {
+ scope.sortingMode = false;
+ scope.sortingButtonKey = "general_reorder";
+ }
+
+ } else {
+
+ scope.sortingMode = true;
+ scope.sortingButtonKey = "general_reorderDone";
+
+ }
};
@@ -394,8 +422,12 @@
}
};
- scope.changeSortOrderValue = function() {
- scope.model.groups = $filter('orderBy')(scope.model.groups, 'sortOrder');
+ scope.changeSortOrderValue = function(group) {
+
+ if (group.sortOrder !== undefined) {
+ group.showSortOrderMissing = false;
+ }
+ scope.model.groups = $filter('orderBy')(scope.model.groups, 'sortOrder');
};
function addInitGroup(groups) {
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less
index 3012b5a30b..868fbb3437 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less
@@ -21,7 +21,6 @@
}
.umb-group-builder__group.-inherited {
- background: #FDFDFD;
border-color: #F2F2F2;
animation: fadeIn 0.5s;
}
@@ -90,7 +89,6 @@
font-weight: bold;
display: flex;
align-items: center;
- margin-right: 10px;
}
.umb-group-builder__group-title-icon {
@@ -109,7 +107,6 @@
.umb-group-builder__group-title.-inherited {
border-color: #F2F2F2;
- background: #FDFDFD;
}
input.umb-group-builder__group-title-input {
@@ -134,6 +131,15 @@ input.umb-group-builder__group-title-input {
display: inline-block;
position: relative;
top: 2px;
+ margin-left: 10px;
+}
+
+.umb-group-builder__group-sort-order {
+ display: flex;
+ align-items: center;
+ margin-left: 10px;
+ position: relative;
+ top: 2px;
}
input.umb-group-builder__group-sort-value {
@@ -141,10 +147,7 @@ input.umb-group-builder__group-sort-value {
padding: 0px 0 0px 5px;
width: 40px;
margin-bottom: 0;
- margin-right: 10px;
border-color: #d9d9d9;
- position: relative;
- top: 2px;
}
/* ---------- PROPERTIES ---------- */
@@ -182,7 +185,6 @@ input.umb-group-builder__group-sort-value {
.umb-group-builder__property.-inherited {
border: transparent;
- background: #FDFDFD;
animation: fadeIn 0.5s;
}
@@ -232,7 +234,9 @@ input.umb-group-builder__group-sort-value {
.umb-group-builder__property-meta-alias {
font-size: 10px;
color: @gray;
- word-wrap: break-word;
+ word-break: break-word;
+ line-height: 1.5;
+ margin-bottom: 5px;
}
.umb-group-builder__property-meta-label textarea {
@@ -256,6 +260,7 @@ input.umb-group-builder__group-sort-value {
.umb-group-builder__property-meta-description textarea {
font-size: 12px;
+ line-height: 1.5;
color: @grayDark;
margin-bottom: 0;
padding: 0;
diff --git a/src/Umbraco.Web.UI.Client/src/less/property-editors.less b/src/Umbraco.Web.UI.Client/src/less/property-editors.less
index b3cb034596..7ea8cfe949 100644
--- a/src/Umbraco.Web.UI.Client/src/less/property-editors.less
+++ b/src/Umbraco.Web.UI.Client/src/less/property-editors.less
@@ -200,10 +200,6 @@ ul.color-picker li a {
border: 1px solid #f8f8f8;
}
-.umb-sortable-thumbnails li:hover a {
- display: block;
-}
-
.umb-sortable-thumbnails li img {
max-width:100%;
max-height:100%;
@@ -228,6 +224,43 @@ ul.color-picker li a {
display: block;
}
+.umb-sortable-thumbnails .umb-sortable-thumbnails__actions {
+ position: absolute;
+ bottom: 10px;
+ right: 10px;
+ text-decoration: none;
+ display: flex;
+ flex-direction: row;
+ opacity: 0;
+ visibility: hidden;
+}
+
+.umb-sortable-thumbnails li:hover .umb-sortable-thumbnails__actions {
+ opacity: 1;
+ visibility: visible;
+}
+
+.umb-sortable-thumbnails .umb-sortable-thumbnails__action {
+ font-size: 16px;
+ background: white;
+ height: 25px;
+ width: 25px;
+ border-radius: 15px;
+ color: @grayDarker;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-left: 5px;
+}
+
+.umb-sortable-thumbnails .umb-sortable-thumbnails__action.-red {
+ color: red;
+}
+
+.umb-sortable-thumbnails .umb-sortable-thumbnails__action:hover {
+ text-decoration: none;
+}
+
//
// Cropper
diff --git a/src/Umbraco.Web.UI.Client/src/views/components/umb-groups-builder.html b/src/Umbraco.Web.UI.Client/src/views/components/umb-groups-builder.html
index fd169ca86a..c58ebcf364 100644
--- a/src/Umbraco.Web.UI.Client/src/views/components/umb-groups-builder.html
+++ b/src/Umbraco.Web.UI.Client/src/views/components/umb-groups-builder.html
@@ -84,7 +84,13 @@
-
+