From bfd289bea8696150cadc6c32698167609b93e271 Mon Sep 17 00:00:00 2001 From: Nathan Woulfe Date: Tue, 28 Jul 2020 10:18:37 +1000 Subject: [PATCH] rmove underscore from content overlays, some refactoring as appropriate --- .../content/overlays/publish.controller.js | 135 +++++++++--------- .../overlays/publishdescendants.controller.js | 44 +++--- .../views/content/overlays/save.controller.js | 64 ++++----- .../content/overlays/schedule.controller.js | 72 ++++------ .../overlays/sendtopublish.controller.js | 26 ++-- .../content/overlays/unpublish.controller.js | 50 +++---- 6 files changed, 178 insertions(+), 213 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js index decf05be5f94..ffcd518ecefa 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function PublishController($scope, localizationService, contentEditingHelper) { + function PublishController($scope, localizationService) { var vm = this; vm.loading = true; @@ -9,23 +9,23 @@ vm.changeSelection = changeSelection; - /** Returns true if publish meets the requirements of mandatory languages */ + /** + * Returns true if publish meets the requirements of mandatory languages + * */ function canPublish() { var hasSomethingToPublish = false; - for (var i = 0; i < vm.variants.length; i++) { - var variant = vm.variants[i]; - - // if varaint is mandatory and not already published: + vm.variants.forEach(variant => { + // if variant is mandatory and not already published: if (variant.publish === false && notPublishedMandatoryFilter(variant)) { return false; } if (variant.publish === true) { hasSomethingToPublish = true; } + }); - } return hasSomethingToPublish; } @@ -36,7 +36,6 @@ variant.save = variant.publish; } - function hasAnyDataFilter(variant) { if (variant.name == null || variant.name.length === 0) { @@ -47,49 +46,64 @@ return true; } - for (var t=0; t < variant.tabs.length; t++){ - for (var p=0; p < variant.tabs[t].properties.length; p++){ - var property = variant.tabs[t].properties[p]; + variant.tabs.forEach(tab => { + tab.properties.forEach(property => { if (property.value != null && property.value.length > 0) { return true; } - } - } + }); + }); return false; } + /** + * determine a variant is 'dirty' (meaning it will show up as publish-able) if it's + * * it's editor is in a $dirty state + * * it has pending saves + * * it is unpublished + * @param {*} variant + */ function dirtyVariantFilter(variant) { - //determine a variant is 'dirty' (meaning it will show up as publish-able) if it's - // * it's editor is in a $dirty state - // * it has pending saves - // * it is unpublished return (variant.isDirty || variant.state === "Draft" || variant.state === "PublishedPendingChanges"); } + /** + * determine a variant is 'dirty' (meaning it will show up as publish-able) if it's + * * variant is active + * * it's editor is in a $dirty state + * * it has pending saves + * * it is unpublished + * @param {*} variant + */ function publishableVariantFilter(variant) { - //determine a variant is 'dirty' (meaning it will show up as publish-able) if it's - // * variant is active - // * it's editor is in a $dirty state - // * it has pending saves - // * it is unpublished + return (variant.active || variant.isDirty || variant.state === "Draft" || variant.state === "PublishedPendingChanges"); } function notPublishedMandatoryFilter(variant) { return variant.state !== "Published" && isMandatoryFilter(variant); } - function isMandatoryFilter(variant) { - //determine a variant is 'dirty' (meaning it will show up as publish-able) if it's - // * has a mandatory language - // * without having a segment, segments cant be mandatory at current state of code. + + /** + * determine a variant is 'dirty' (meaning it will show up as publish-able) if it's + * * has a mandatory language + * * without having a segment, segments cant be mandatory at current state of code. + * @param {*} variant + */ + function isMandatoryFilter(variant) { return (variant.language && variant.language.isMandatory === true && variant.segment == null); } + + /** + * determine a variant is needed, but not already a choice. + * * publishable — aka. displayed as a publish option. + * * published — its already published and everything is then fine. + * * mandatory — this is needed, and thats why we highlight it. + * @param {*} variant + */ function notPublishableButMandatoryFilter(variant) { - //determine a variant is needed, but not already a choice. - // * publishable — aka. displayed as a publish option. - // * published — its already published and everything is then fine. - // * mandatory — this is needed, and thats why we highlight it. + return !publishableVariantFilter(variant) && variant.state !== "Published" && variant.isMandatory === true; } @@ -97,54 +111,48 @@ vm.variants = $scope.model.variants; - _.each(vm.variants, (variant) => { + // If we have a variant that's not in the state of NotCreated, + // then we know we have data and it's not a new content node. + vm.isNew = vm.variants.some(variant => variant.state === 'NotCreated'); + + vm.variants.forEach(variant => { // reset to not be published - variant.publish = false; - variant.save = false; - - variant.isMandatory = isMandatoryFilter(variant); + variant.publish = variant.save = false; - // If we have a variant thats not in the state of NotCreated, then we know we have adata and its not a new content node. - if(variant.state !== "NotCreated") { - vm.isNew = false; - } - }); + variant.isMandatory = isMandatoryFilter(variant); - _.each(vm.variants, (variant) => { - // if this is a new node and we have data on this variant. - if(vm.isNew === true && hasAnyDataFilter(variant)) { + if (vm.isNew === true && hasAnyDataFilter(variant)) { variant.save = true; } - }); vm.availableVariants = vm.variants.filter(publishableVariantFilter); vm.missingMandatoryVariants = vm.variants.filter(notPublishableButMandatoryFilter); // if any active varaiant that is available for publish, we set it to be published: - _.each(vm.availableVariants, (v) => { + vm.availableVariants.forEach(v => { if(v.active) { v.save = v.publish = true; } }); if (vm.availableVariants.length !== 0) { - vm.availableVariants.sort(function (a, b) { + vm.availableVariants.sort((a, b) => { if (a.language && b.language) { - if (a.language.name > b.language.name) { + if (a.language.name < b.language.name) { return -1; } - if (a.language.name < b.language.name) { + if (a.language.name > b.language.name) { return 1; } } if (a.segment && b.segment) { - if (a.segment > b.segment) { + if (a.segment < b.segment) { return -1; } - if (a.segment < b.segment) { + if (a.segment > b.segment) { return 1; } } @@ -152,35 +160,28 @@ }); } - $scope.model.disableSubmitButton = !canPublish(); - if (vm.missingMandatoryVariants.length > 0) { - localizationService.localize("content_notReadyToPublish").then(function (value) { + const localizeKey = vm.missingMandatoryVariants.length > 0 ? 'content_notReadyToPublish' : + !$scope.model.title ? 'content_readyToPublish' : ''; + + if (localizeKey) { + localizationService.localize(localizeKey).then(value => { $scope.model.title = value; vm.loading = false; }); } else { - if (!$scope.model.title) { - localizationService.localize("content_readyToPublish").then(function (value) { - $scope.model.title = value; - vm.loading = false; - }); - } else { - vm.loading = false; - } + vm.loading = false; } - } onInit(); //when this dialog is closed, reset all 'publish' flags - $scope.$on('$destroy', function () { - for (var i = 0; i < vm.variants.length; i++) { - vm.variants[i].publish = false; - vm.variants[i].save = false; - } + $scope.$on('$destroy', () => { + vm.variants.forEach(variant => { + variant.publish = variant.save = false; + }); }); } diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js index 095c4f3fe1d4..f0d8eafddefb 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js @@ -4,13 +4,11 @@ function PublishDescendantsController($scope, localizationService) { var vm = this; - vm.includeUnpublished = false; vm.changeSelection = changeSelection; vm.toggleIncludeUnpublished = toggleIncludeUnpublished; - function onInit() { vm.variants = $scope.model.variants; @@ -18,45 +16,42 @@ vm.labels = {}; if (!$scope.model.title) { - localizationService.localize("buttons_publishDescendants").then(function (value) { + localizationService.localize("buttons_publishDescendants").then(value => { $scope.model.title = value; }); } - _.each(vm.variants, function (variant) { + vm.variants.forEach(variant => { variant.isMandatory = isMandatoryFilter(variant); }); if (vm.variants.length > 1) { - vm.displayVariants.sort(function (a, b) { + vm.displayVariants.sort((a, b) => { if (a.language && b.language) { - if (a.language.name > b.language.name) { + if (a.language.name < b.language.name) { return -1; } - if (a.language.name < b.language.name) { + if (a.language.name > b.language.name) { return 1; } } if (a.segment && b.segment) { - if (a.segment > b.segment) { + if (a.segment < b.segment) { return -1; } - if (a.segment < b.segment) { + if (a.segment > b.segment) { return 1; } } return 0; }); - var active = _.find(vm.variants, function (v) { - return v.active; - }); + var active = vm.variants.find(v => v.active); if (active) { //ensure that the current one is selected - active.publish = true; - active.save = true; + active.publish = active.save = true; } $scope.model.disableSubmitButton = !canPublish(); @@ -67,24 +62,21 @@ "key": "content_publishDescendantsHelp", "tokens": [vm.variants[0].name] }; - } - + } } function toggleIncludeUnpublished() { - console.log("toggleIncludeUnpublished") vm.includeUnpublished = !vm.includeUnpublished; } /** Returns true if publishing is possible based on if there are un-published mandatory languages */ function canPublish() { var selected = []; - for (var i = 0; i < vm.variants.length; i++) { - var variant = vm.variants[i]; + vm.variants.forEach(variant => { var published = !(variant.state === "NotCreated" || variant.state === "Draft"); - if (variant.segment == null && variant.language && variant.language.isMandatory && !published && !variant.publish) { + if (variant.segment == null && variant.language && variant.language.isMandatory && !published && !variant.publish) { //if a mandatory variant isn't published //and not flagged for saving //then we cannot continue @@ -96,7 +88,8 @@ if (variant.publish) { selected.push(variant.publish); } - } + }); + return selected.length > 0; } @@ -115,11 +108,10 @@ } //when this dialog is closed, reset all 'publish' flags - $scope.$on('$destroy', function () { - for (var i = 0; i < vm.variants.length; i++) { - vm.variants[i].publish = false; - vm.variants[i].save = false; - } + $scope.$on('$destroy', () => { + vm.variants.forEach(variant => { + variant.publish = variant.save = false; + }); }); onInit(); diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js index 2d400056183a..aa0d3797d4a4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js @@ -58,57 +58,47 @@ function onInit() { vm.variants = $scope.model.variants; vm.availableVariants = vm.variants.filter(saveableVariantFilter); + vm.isNew = vm.variants.some(variant => variant.state === 'NotCreated'); - if(!$scope.model.title) { - localizationService.localize("content_readyToSave").then(function(value){ + if (!$scope.model.title) { + localizationService.localize("content_readyToSave").then(value => { $scope.model.title = value; }); } - _.each(vm.variants, - function (variant) { + vm.variants.forEach(variant => { - //reset state: - variant.save = false; - variant.publish = false; + //reset state: + variant.save = variant.publish = false; + variant.isMandatory = isMandatoryFilter(variant); - variant.isMandatory = isMandatoryFilter(variant); - - if(variant.state !== "NotCreated"){ - vm.isNew = false; - } - }); - - _.each(vm.variants, - function (variant) { - if(vm.isNew && hasAnyData(variant)){ - variant.save = true; - } - }); + if(vm.isNew && hasAnyData(variant)){ + variant.save = true; + } + }); if (vm.variants.length !== 0) { - - _.find(vm.variants, function (v) { - if(v.active) { - //ensure that the current one is selected - v.save = true; - } - }); - - vm.availableVariants.sort(function (a, b) { + + //ensure that the current one is selected + var active = vm.variants.find(v => v.active); + if (active) { + active.save = true; + } + + vm.availableVariants.sort((a, b) => { if (a.language && b.language) { - if (a.language.name > b.language.name) { + if (a.language.name < b.language.name) { return -1; } - if (a.language.name < b.language.name) { + if (a.language.name > b.language.name) { return 1; } } if (a.segment && b.segment) { - if (a.segment > b.segment) { + if (a.segment < b.segment) { return -1; } - if (a.segment < b.segment) { + if (a.segment > b.segment) { return 1; } } @@ -126,10 +116,10 @@ onInit(); //when this dialog is closed, reset all 'save' flags - $scope.$on('$destroy', function () { - for (var i = 0; i < vm.variants.length; i++) { - vm.variants[i].save = false; - } + $scope.$on('$destroy', () => { + vm.variants.forEach(variant => { + variant.save = false; + }); }); } diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/schedule.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/schedule.controller.js index e7f31ac707a6..8bf23ae6d5b4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/schedule.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/schedule.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function ScheduleContentController($scope, $timeout, localizationService, dateHelper, userService, contentEditingHelper) { + function ScheduleContentController($scope, $timeout, localizationService, dateHelper, userService) { var vm = this; @@ -25,64 +25,60 @@ vm.variants = $scope.model.variants; vm.displayVariants = vm.variants.slice(0);// shallow copy, we dont want to share the array-object(because we will be performing a sort method) but each entry should be shared (because we need validation and notifications). - for (let i = 0; i < vm.variants.length; i++) { - origDates.push({ - releaseDate: vm.variants[i].releaseDate, - expireDate: vm.variants[i].expireDate - }); - } - if(!$scope.model.title) { - localizationService.localize("general_scheduledPublishing").then(function(value){ + localizationService.localize("general_scheduledPublishing").then(value => { $scope.model.title = value; }); } - - _.each(vm.variants, function (variant) { - variant.isMandatory = isMandatoryFilter(variant); + vm.variants.forEach(variant => { + origDates.push({ + releaseDate: variant.releaseDate, + expireDate: variant.expireDate + }); + + variant.isMandatory = isMandatoryFilter(variant); }); // Check for variants: if a node is invariant it will still have the default language in variants // so we have to check for length > 1 if (vm.variants.length > 1) { - vm.displayVariants.sort(function (a, b) { + vm.displayVariants.sort((a, b) => { if (a.language && b.language) { - if (a.language.name > b.language.name) { + if (a.language.name < b.language.name) { return -1; } - if (a.language.name < b.language.name) { + if (a.language.name > b.language.name) { return 1; } } if (a.segment && b.segment) { - if (a.segment > b.segment) { + if (a.segment < b.segment) { return -1; } - if (a.segment < b.segment) { + if (a.segment > b.segment) { return 1; } } return 0; }); - _.each(vm.variants, function (v) { + vm.variants.forEach(v => { if (v.active) { v.save = true; } }); - $scope.model.disableSubmitButton = !canSchedule(); - + $scope.model.disableSubmitButton = !canSchedule(); } // get current backoffice user and format dates - userService.getCurrentUser().then(function (currentUser) { + userService.getCurrentUser().then(currentUser => { vm.currentUser = currentUser; - angular.forEach(vm.variants, function(variant) { + vm.variants.forEach(variant => { // prevent selecting publish/unpublish date before today var now = new Date(); @@ -103,9 +99,7 @@ formatDatesToLocal(variant); } }); - }); - } /** @@ -132,7 +126,6 @@ * @param {any} type publish or unpublish */ function datePickerChange(variant, dateStr, type) { - console.log("datePickerChange", variant, dateStr, type) if (type === 'publish') { setPublishDate(variant, dateStr); } else if (type === 'unpublish') { @@ -179,9 +172,7 @@ */ function checkForBackdropClick() { - var open = _.find(vm.variants, function (variant) { - return variant.releaseDatePickerOpen || variant.expireDatePickerOpen; - }); + var open = vm.variants.find(variant => variant.releaseDatePickerOpen || variant.expireDatePickerOpen); if(open) { $scope.model.disableBackdropClick = true; @@ -247,7 +238,6 @@ * @param {any} variant */ function clearPublishDate(variant) { - console.log("clearPublishDate", variant, variant.releaseDate) if(variant && variant.releaseDate) { variant.releaseDate = null; // we don't have a publish date anymore so we can clear the min date for unpublish @@ -263,7 +253,6 @@ * @param {any} variant */ function clearUnpublishDate(variant) { - console.log("clearUnpublishDate", variant) if(variant && variant.expireDate) { variant.expireDate = null; // we don't have a unpublish date anymore so we can clear the max date for publish @@ -358,20 +347,19 @@ onInit(); //when this dialog is closed, clean up - $scope.$on('$destroy', function () { - for (var i = 0; i < vm.variants.length; i++) { - vm.variants[i].save = false; + $scope.$on('$destroy', () => { + vm.variants.forEach(variant => { + variant.save = false; // remove properties only needed for this dialog - delete vm.variants[i].releaseDateFormatted; - delete vm.variants[i].expireDateFormatted; - delete vm.variants[i].datePickerConfig; - delete vm.variants[i].releaseDatePickerInstance; - delete vm.variants[i].expireDatePickerInstance; - delete vm.variants[i].releaseDatePickerOpen; - delete vm.variants[i].expireDatePickerOpen; - } + delete variant.releaseDateFormatted; + delete variant.expireDateFormatted; + delete variant.datePickerConfig; + delete variant.releaseDatePickerInstance; + delete variant.expireDatePickerInstance; + delete variant.releaseDatePickerOpen; + delete variant.expireDatePickerOpen; + }); }); - } angular.module("umbraco").controller("Umbraco.Overlays.ScheduleContentController", ScheduleContentController); diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js index f425dce4a3f1..d91d8148863f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function SendToPublishController($scope, localizationService, contentEditingHelper) { + function SendToPublishController($scope, localizationService) { var vm = this; vm.loading = true; @@ -19,7 +19,7 @@ }); } - _.each(vm.variants, function (variant) { + vm.variants.forEach(variant => { variant.isMandatory = isMandatoryFilter(variant); }); @@ -27,27 +27,27 @@ if (vm.availableVariants.length !== 0) { - vm.availableVariants = vm.availableVariants.sort(function (a, b) { + vm.availableVariants.sort((a, b) => { if (a.language && b.language) { - if (a.language.name > b.language.name) { + if (a.language.name < b.language.name) { return -1; } - if (a.language.name < b.language.name) { + if (a.language.name > b.language.name) { return 1; } } if (a.segment && b.segment) { - if (a.segment > b.segment) { + if (a.segment < b.segment) { return -1; } - if (a.segment < b.segment) { + if (a.segment > b.segment) { return 1; } } return 0; }); - _.each(vm.availableVariants, function (v) { + vm.availableVariants.forEach(v => { if(v.active) { v.save = true; } @@ -63,9 +63,7 @@ } function changeSelection() { - var firstSelected = _.find(vm.variants, function (v) { - return v.save; - }); + var firstSelected = vm.variants.find(v => v.save); $scope.model.disableSubmitButton = !firstSelected; //disable submit button if there is none selected } @@ -87,9 +85,9 @@ //when this dialog is closed, reset all 'save' flags $scope.$on('$destroy', function () { - for (var i = 0; i < vm.variants.length; i++) { - vm.variants[i].save = false; - } + vm.variants.forEach(variant => { + variant.save = false; + }); }); onInit(); diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.controller.js index 3db76ee49f19..63c5b2da263a 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/unpublish.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function UnpublishController($scope, localizationService, contentEditingHelper) { + function UnpublishController($scope, localizationService) { var vm = this; var autoSelectedVariants = []; @@ -15,41 +15,39 @@ // set dialog title if (!$scope.model.title) { - localizationService.localize("content_unpublish").then(function (value) { + localizationService.localize("content_unpublish").then(value => { $scope.model.title = value; }); } - _.each(vm.variants, function (variant) { + vm.variants.forEach(variant => { variant.isMandatory = isMandatoryFilter(variant); }); // node has variants if (vm.variants.length !== 1) { - vm.unpublishableVariants.sort(function (a, b) { + vm.unpublishableVariants.sort((a, b) => { if (a.language && b.language) { - if (a.language.name > b.language.name) { + if (a.language.name < b.language.name) { return -1; } - if (a.language.name < b.language.name) { + if (a.language.name > b.language.name) { return 1; } } if (a.segment && b.segment) { - if (a.segment > b.segment) { + if (a.segment < b.segment) { return -1; } - if (a.segment < b.segment) { + if (a.segment > b.segment) { return 1; } } return 0; }); - var active = _.find(vm.variants, function (v) { - return v.active; - }); + var active = vm.variants.find(v => v.active); if (active && publishedVariantFilter(active)) { //ensure that the current one is selected @@ -66,10 +64,10 @@ // if a mandatory variant is selected we want to select all other variants, we cant have anything published if a mandatory variants gets unpublished. // and disable selection for the others - if(selectedVariant.save && selectedVariant.segment == null && selectedVariant.language && selectedVariant.language.isMandatory) { + if (selectedVariant.save && selectedVariant.segment == null && selectedVariant.language && selectedVariant.language.isMandatory) { - vm.variants.forEach(function(variant) { - if(!variant.save) { + vm.variants.forEach(variant => { + if (!variant.save) { // keep track of the variants we automaically select // so we can remove the selection again autoSelectedVariants.push(variant); @@ -80,30 +78,29 @@ // make sure the mandatory isn't disabled so we can deselect again selectedVariant.disabled = false; - } // if a mandatory variant is deselected we want to deselet all the variants // that was automatically selected so it goes back to the state before the mandatory language was selected. // We also want to enable all checkboxes again - if(!selectedVariant.save && selectedVariant.segment == null && selectedVariant.language && selectedVariant.language.isMandatory) { + if (!selectedVariant.save && selectedVariant.segment == null && selectedVariant.language && selectedVariant.language.isMandatory) { - vm.variants.forEach( function(variant){ + vm.variants.forEach(variant => { // check if variant was auto selected, then deselect - if(_.contains(autoSelectedVariants, variant)) { + let autoSelected = autoSelectedVariants.find(x => x.culture === variant.culture); + if (autoSelected) { variant.save = false; - }; + } variant.disabled = false; }); + autoSelectedVariants = []; } // disable submit button if nothing is selected - var firstSelected = _.find(vm.variants, function (v) { - return v.save; - }); + var firstSelected = vm.variants.find(v => v.save); $scope.model.disableSubmitButton = !firstSelected; //disable submit button if there is none selected } @@ -123,11 +120,10 @@ } //when this dialog is closed, remove all unpublish and disabled flags - $scope.$on('$destroy', function () { - for (var i = 0; i < vm.variants.length; i++) { - vm.variants[i].save = false; - vm.variants[i].disabled = false; - } + $scope.$on('$destroy', () => { + vm.variants.forEach(variant => { + variant.save = variant.disabled = false; + }); }); onInit();