From 54548ffc68e83c0b8964b24e2b8347ccd1c203de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Riis-Knudsen?= Date: Sat, 6 Feb 2016 17:34:36 +0100 Subject: [PATCH 1/6] U4-7819: Use correct messages when saving Media and Member types --- src/Umbraco.Web.UI/umbraco/config/lang/da.xml | 2 ++ src/Umbraco.Web.UI/umbraco/config/lang/en.xml | 2 ++ src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml | 2 ++ src/Umbraco.Web/Editors/MediaTypeController.cs | 2 +- src/Umbraco.Web/Editors/MemberTypeController.cs | 2 +- 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml index 85bc30b4f5..446796dd88 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml @@ -871,6 +871,8 @@ Mange hilsner fra Umbraco robotten Fil gemt Fil gemt uden fejl Sprog gemt + Medietype gemt + Medlemstype gemt Python script ikke gemt Python-script kunne ikke gemmes pga. fejl Python-script gemt diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index 6acbd06127..37c5539a00 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -927,6 +927,8 @@ To manage your website, simply open the Umbraco back office and start adding con File saved File saved without any errors Language saved + Media Type saved + Member Type saved Python script not saved Python script could not be saved due to error Python script saved diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml index a813a67307..b6b67c09de 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml @@ -925,6 +925,8 @@ To manage your website, simply open the Umbraco back office and start adding con File saved File saved without any errors Language saved + Media Type saved + Member Type saved Python script not saved Python script could not be saved due to error Python script saved diff --git a/src/Umbraco.Web/Editors/MediaTypeController.cs b/src/Umbraco.Web/Editors/MediaTypeController.cs index 926cfcb4cc..efa8dde20b 100644 --- a/src/Umbraco.Web/Editors/MediaTypeController.cs +++ b/src/Umbraco.Web/Editors/MediaTypeController.cs @@ -167,7 +167,7 @@ namespace Umbraco.Web.Editors var display = Mapper.Map(savedCt); display.AddSuccessNotification( - Services.TextService.Localize("speechBubbles/contentTypeSavedHeader"), + Services.TextService.Localize("speechBubbles/mediaTypeSavedHeader"), string.Empty); return display; diff --git a/src/Umbraco.Web/Editors/MemberTypeController.cs b/src/Umbraco.Web/Editors/MemberTypeController.cs index 8ed61fd52c..1d8766f253 100644 --- a/src/Umbraco.Web/Editors/MemberTypeController.cs +++ b/src/Umbraco.Web/Editors/MemberTypeController.cs @@ -139,7 +139,7 @@ namespace Umbraco.Web.Editors var display = Mapper.Map(savedCt); display.AddSuccessNotification( - Services.TextService.Localize("speechBubbles/contentTypeSavedHeader"), + Services.TextService.Localize("speechBubbles/memberTypeSavedHeader"), string.Empty); return display; From ac60c63104ea2ad34bc9e2848f7ccbc79cb4daff Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 8 Feb 2016 10:20:09 +0100 Subject: [PATCH 2/6] Fixes: U4-7900 The new content type editor: If you hit save while it generates an alias, the alias will be generatingAlias --- .../common/directives/components/umbGenerateAlias.directive.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbGenerateAlias.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbGenerateAlias.directive.js index b9d633b3d8..90f2a3a614 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbGenerateAlias.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbGenerateAlias.directive.js @@ -28,7 +28,8 @@ angular.module("umbraco.directives") if( value !== undefined && value !== "" && value !== null) { - scope.alias = "Generating Alias..."; + scope.alias = ""; + scope.placeholderText = "Generating Alias..."; generateAliasTimeout = $timeout(function () { updateAlias = true; From aeba68782c5f93e2d1bd2836798a51e9e85a28bc Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 8 Feb 2016 10:54:58 +0100 Subject: [PATCH 3/6] fixes: U4-7903 Using shortcut for "add property" removes "add property"-field for other tabs in document type editor && U4-7904 Add property using shortcut - submit button text is missing --- .../components/forms/hotkey.directive.js | 74 +++++++++++-------- .../components/umbgroupsbuilder.directive.js | 19 ++++- .../notifications/confirmroutechange.html | 4 +- .../views/components/umb-groups-builder.html | 11 ++- 4 files changed, 69 insertions(+), 39 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/hotkey.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/hotkey.directive.js index 310d69a8a2..882e273002 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/hotkey.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/forms/hotkey.directive.js @@ -15,45 +15,55 @@ angular.module("umbraco.directives") keyCombo = scope.$eval(attrs["hotkey"]); } - // disable shortcuts in input fields if keycombo is 1 character - if (keyCombo) { + function activate() { - if (keyCombo.length === 1) { - options = { - inputDisabled: true - }; - } + if (keyCombo) { - keyboardService.bind(keyCombo, function() { - - var element = $(el); - var activeElementType = document.activeElement.tagName; - var clickableElements = ["A", "BUTTON"]; - - if (element.is("a,div,button,input[type='button'],input[type='submit'],input[type='checkbox']") && !element.is(':disabled')) { - - if (element.is(':visible') || attrs.hotkeyWhenHidden) { - - // when keycombo is enter and a link or button has focus - click the link or button instead of using the hotkey - if (keyCombo === "enter" && clickableElements.indexOf(activeElementType) === 0) { - document.activeElement.click(); - } else { - element.click(); - } - - } - - } else { - element.focus(); + // disable shortcuts in input fields if keycombo is 1 character + if (keyCombo.length === 1) { + options = { + inputDisabled: true + }; } - }, options); + keyboardService.bind(keyCombo, function() { - el.on('$destroy', function() { - keyboardService.unbind(keyCombo); - }); + var element = $(el); + var activeElementType = document.activeElement.tagName; + var clickableElements = ["A", "BUTTON"]; + + if (element.is("a,div,button,input[type='button'],input[type='submit'],input[type='checkbox']") && !element.is(':disabled')) { + + if (element.is(':visible') || attrs.hotkeyWhenHidden) { + + if (attrs.hotkeyWhen && attrs.hotkeyWhen === "false") { + return; + } + + // when keycombo is enter and a link or button has focus - click the link or button instead of using the hotkey + if (keyCombo === "enter" && clickableElements.indexOf(activeElementType) === 0) { + document.activeElement.click(); + } else { + element.click(); + } + + } + + } else { + element.focus(); + } + + }, options); + + el.on('$destroy', function() { + keyboardService.unbind(keyCombo); + }); + + } } + activate(); + }; }); 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 328884cfa1..caa79439be 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 @@ -28,6 +28,8 @@ // add init tab addInitGroup(scope.model.groups); + activateFirstGroup(scope.model.groups); + // localize texts localizationService.localize("validation_validation").then(function(value) { validationTranslated = value; @@ -153,14 +155,14 @@ return resourceLookup(scope.model.id, selectedContentTypeAliases, propAliasesExisting).then(function (filteredAvailableCompositeTypes) { _.each(scope.compositionsDialogModel.availableCompositeContentTypes, function (current) { - //reset first + //reset first current.allowed = true; //see if this list item is found in the response (allowed) list var found = _.find(filteredAvailableCompositeTypes, function (f) { return current.contentType.alias === f.contentType.alias; }); - //allow if the item was found in the response (allowed) list - + //allow if the item was found in the response (allowed) list - // and ensure its set to allowed if it is currently checked, // DO not allow if it's a locked content type. current.allowed = scope.model.lockedCompositeContentTypes.indexOf(current.contentType.alias) === -1 && @@ -181,7 +183,7 @@ } function setupAvailableContentTypesModel(result) { - scope.compositionsDialogModel.availableCompositeContentTypes = result; + scope.compositionsDialogModel.availableCompositeContentTypes = result; //iterate each one and set it up _.each(scope.compositionsDialogModel.availableCompositeContentTypes, function (c) { //enable it if it's part of the selected model @@ -276,7 +278,7 @@ // submit overlay if no compositions has been removed // or the action has been confirmed } else { - + // make sure that all tabs has an init property if (scope.model.groups.length !== 0) { angular.forEach(scope.model.groups, function(group) { @@ -454,6 +456,15 @@ return groups; } + function activateFirstGroup(groups) { + if (groups && groups.length > 0) { + var firstGroup = groups[0]; + if(!firstGroup.tabState || firstGroup.tabState === "inActive") { + firstGroup.tabState = "active"; + } + } + } + /* ---------- PROPERTIES ---------- */ scope.addProperty = function(property, group) { diff --git a/src/Umbraco.Web.UI.Client/src/views/common/notifications/confirmroutechange.html b/src/Umbraco.Web.UI.Client/src/views/common/notifications/confirmroutechange.html index 97be02baea..80942baaeb 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/notifications/confirmroutechange.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/notifications/confirmroutechange.html @@ -3,5 +3,5 @@

Are you sure you want to navigate away from this page? - you have unsaved changes

- - \ No newline at end of file + + 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 d6fb05c57e..dd4ed268d4 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 @@ -75,6 +75,7 @@ ng-disabled="tab.inherited" umb-auto-focus umb-auto-resize + on-focus="activateGroup(tab)" required val-server-field="{{'Groups[' + $index + '].Name'}}" /> @@ -109,7 +110,15 @@
  • - +
    From d46d23b372b248cd5a32dcacd7c1b85bead1dfc0 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 8 Feb 2016 12:07:45 +0100 Subject: [PATCH 4/6] Fixes: U4-7732 Grid changes do not trigger Unsaved Changes notification --- .../umbsetdirtyonchange.directive.js | 29 +++++++++++++++++++ .../propertyeditors/grid/grid.controller.js | 15 +++++++--- .../src/views/propertyeditors/grid/grid.html | 3 +- 3 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/common/directives/components/validation/umbsetdirtyonchange.directive.js diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/validation/umbsetdirtyonchange.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/validation/umbsetdirtyonchange.directive.js new file mode 100644 index 0000000000..37a773ae97 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/validation/umbsetdirtyonchange.directive.js @@ -0,0 +1,29 @@ +(function() { + 'use strict'; + + function SetDirtyOnChange() { + + function link(scope, el, attr, ctrl) { + + var initValue = attr.umbSetDirtyOnChange; + + attr.$observe("umbSetDirtyOnChange", function (newValue) { + if(newValue !== initValue) { + ctrl.$setDirty(); + } + }); + + } + + var directive = { + require: "^form", + restrict: 'A', + link: link + }; + + return directive; + } + + angular.module('umbraco.directives').directive('umbSetDirtyOnChange', SetDirtyOnChange); + +})(); diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js index 29176da102..54155574f1 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js @@ -1,9 +1,11 @@ angular.module("umbraco") .controller("Umbraco.PropertyEditors.GridController", - function ($scope, $http, assetsService, localizationService, $rootScope, dialogService, gridService, mediaResource, imageHelper, $timeout, umbRequestHelper) { + function ($scope, $http, assetsService, localizationService, $rootScope, dialogService, gridService, mediaResource, imageHelper, $timeout, umbRequestHelper, angularHelper) { // Grid status variables var placeHolder = ""; + var currentForm = angularHelper.getCurrentForm($scope); + $scope.currentRow = null; $scope.currentCell = null; $scope.currentToolsControl = null; @@ -73,6 +75,7 @@ angular.module("umbraco") tinyMCE.execCommand("mceRemoveEditor", false, id); tinyMCE.init(draggedRteSettings[id]); }); + currentForm.$setDirty(); } }; @@ -160,6 +163,7 @@ angular.module("umbraco") } }); } + currentForm.$setDirty(); }, start: function (e, ui) { @@ -320,6 +324,8 @@ angular.module("umbraco") section.rows.push(row); } + currentForm.$setDirty(); + $scope.showRowConfigurations = false; }; @@ -329,8 +335,7 @@ angular.module("umbraco") section.rows.splice($index, 1); $scope.currentRow = null; $scope.openRTEToolbarId = null; - - //$scope.initContent(); + currentForm.$setDirty(); } if(section.rows.length === 0) { @@ -397,6 +402,8 @@ angular.module("umbraco") gridItem.config = configObject; gridItem.hasConfig = gridItemHasConfig(styleObject, configObject); + currentForm.$setDirty(); + $scope.gridItemSettingsDialog.show = false; $scope.gridItemSettingsDialog = null; }; @@ -407,7 +414,7 @@ angular.module("umbraco") }; }; - + function stripModifier(val, modifier) { if (!val || !modifier || modifier.indexOf(placeHolder) < 0) { return val; diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.html index 99b207a627..339ee9d455 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.html @@ -174,7 +174,8 @@ ng-click="clickControl($index, area.controls, area)" ng-class="{'-active': control.active}" on-outside-click="clickOutsideControl($index, area.controls, area)" - bind-click-on="{{control.active}}"> + bind-click-on="{{control.active}}" + umb-set-dirty-on-change="{{control.value}}">
    From 624d3a9b8232f837edcc624d3888456125823ebf Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 8 Feb 2016 13:35:59 +0100 Subject: [PATCH 5/6] fixes: U4-7905 val-highlight directive not highlighting error fields (red border) in 7.4.0 --- .../components/validation/valHighlight.directive.js | 6 +++--- .../src/views/prevalueeditors/multivalues.html | 2 +- .../imagecropper/imagecropper.prevalues.html | 8 ++++---- .../views/propertyeditors/relatedlinks/relatedlinks.html | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/validation/valHighlight.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/validation/valHighlight.directive.js index 599cda766c..2afd75eb29 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/validation/valHighlight.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/validation/valHighlight.directive.js @@ -8,9 +8,9 @@ function valHighlight($timeout) { return { restrict: "A", link: function (scope, element, attrs, ctrl) { - + attrs.$observe("valHighlight", function (newVal) { - if (newVal === true) { + if (newVal === "true") { element.addClass("highlight-error"); $timeout(function () { //set the bound scope property to false @@ -25,4 +25,4 @@ function valHighlight($timeout) { } }; } -angular.module('umbraco.directives.validation').directive("valHighlight", valHighlight); \ No newline at end of file +angular.module('umbraco.directives.validation').directive("valHighlight", valHighlight); diff --git a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/multivalues.html b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/multivalues.html index edc2db2f74..4d820bc310 100644 --- a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/multivalues.html +++ b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/multivalues.html @@ -1,6 +1,6 @@
    - +
    diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.prevalues.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.prevalues.html index 3ba6979905..09534cb32b 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.prevalues.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.prevalues.html @@ -24,16 +24,16 @@
    + ng-model="newItem.alias" val-highlight="{{hasError}}" />
    + ng-model="newItem.width" class="umb-editor-tiny" val-highlight="{{hasError}}" /> × + ng-model="newItem.height" class="umb-editor-tiny" val-highlight="{{hasError}}" />
    @@ -46,4 +46,4 @@
    -
    \ No newline at end of file +
    diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/relatedlinks/relatedlinks.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/relatedlinks/relatedlinks.html index d4e6ed76ba..8b3381bf75 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/relatedlinks/relatedlinks.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/relatedlinks/relatedlinks.html @@ -54,7 +54,7 @@ - +
    From 54c1d252961799a95ea1d6fe5b21d9a93d6e491b Mon Sep 17 00:00:00 2001 From: Claus Date: Mon, 8 Feb 2016 14:39:16 +0100 Subject: [PATCH 6/6] Fixes: U4-6407 Change Document Type feature on a node doesn't support compositions --- src/Umbraco.Web.UI/umbraco/dialogs/ChangeDocType.aspx.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI/umbraco/dialogs/ChangeDocType.aspx.cs b/src/Umbraco.Web.UI/umbraco/dialogs/ChangeDocType.aspx.cs index f3769fbe1f..783506a1d1 100644 --- a/src/Umbraco.Web.UI/umbraco/dialogs/ChangeDocType.aspx.cs +++ b/src/Umbraco.Web.UI/umbraco/dialogs/ChangeDocType.aspx.cs @@ -193,14 +193,7 @@ namespace Umbraco.Web.UI.Umbraco.Dialogs private IEnumerable GetPropertiesOfContentType(IContentType contentType) { - var properties = contentType.PropertyTypes.ToList(); - while (contentType.ParentId > -1 && contentType.CompositionAliases().Any()) - { - contentType = Services.ContentTypeService.GetContentType(contentType.ParentId); - properties.AddRange(contentType.PropertyTypes); - } - - return properties.OrderBy(x => x.Name); + return contentType.CompositionPropertyTypes; } private void DisplayNotAvailable()