From 463dfc45a60593bc3dd40a924b72fbf1b3ec8ce9 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Thu, 6 Jun 2019 09:34:27 +0200 Subject: [PATCH] Copy all items from one NC to another (WIP) --- .../nestedcontent/nestedcontent.controller.js | 52 +++++++++++++++++-- .../nestedcontent/nestedcontent.html | 3 ++ src/Umbraco.Web.UI/Umbraco/config/lang/en.xml | 1 + .../Umbraco/config/lang/en_us.xml | 1 + 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.controller.js index 4e8b35a276..b02ab3ffff 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.controller.js @@ -93,8 +93,10 @@ angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.Prop "iconHelper", "clipboardService", "eventsService", - - function ($scope, $interpolate, $filter, $timeout, contentResource, localizationService, iconHelper, clipboardService, eventsService) { + "$routeParams", + "editorState", + + function ($scope, $interpolate, $filter, $timeout, contentResource, localizationService, iconHelper, clipboardService, eventsService, $routeParams, editorState) { var contentTypeAliases = []; _.each($scope.model.config.contentTypes, function (contentType) { @@ -160,7 +162,15 @@ angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.Prop view: "itempicker", event: $event, clickPasteItem: function(item) { - $scope.pasteFromClipboard(item.data); + if (item.alias === "nc_pasteAllItems") { + _.each(item.data, function (node) { + delete node.$$hashKey; + $scope.pasteFromClipboard(node); + }); + } else { + $scope.pasteFromClipboard(item.data); + } + $scope.overlayMenu.show = false; $scope.overlayMenu = null; }, @@ -194,6 +204,20 @@ angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.Prop $scope.overlayMenu.size = $scope.overlayMenu.availableItems.length > 6 ? "medium" : "small"; $scope.overlayMenu.pasteItems = []; + var nestedContentForPaste = clipboardService.retriveDataOfType("nestedContent", ["nc_copyOfAllItems"]); + _.each(nestedContentForPaste, function (nestedContent) { + if (_.every(nestedContent.nodes, + function(node) { + return contentTypeAliases.indexOf(node.contentTypeAlias) >= 0; + })) { + $scope.overlayMenu.pasteItems.push({ + alias: "nc_pasteAllItems", + name: nestedContent.name, // source property name + data: nestedContent.nodes, // all items from source property + icon: "icon-bulleted-list" + }); + } + }); var availableNodesForPaste = clipboardService.retriveDataOfType("elementType", contentTypeAliases); _.each(availableNodesForPaste, function (node) { $scope.overlayMenu.pasteItems.push({ @@ -210,6 +234,7 @@ angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.Prop $event.stopPropagation(); $event.preventDefault(); clipboardService.clearEntriesOfType("elementType", contentTypeAliases); + clipboardService.clearEntriesOfType("nestedContent", ["nc_copyOfAllItems"]); $scope.overlayMenu.pasteItems = [];// This dialog is not connected via the clipboardService events, so we need to update manually. }; @@ -359,7 +384,26 @@ angular.module("umbraco").controller("Umbraco.PropertyEditors.NestedContent.Prop clipboardService.copy("elementType", node.contentTypeAlias, node); $event.stopPropagation(); } - + + $scope.clickCopyAll = function () { + + syncCurrentNode(); + + var culture = $routeParams.cculture ? $routeParams.cculture : $routeParams.mculture; + var activeVariant = _.find(editorState.current.variants, function (v) { + return !v.language || v.language.culture === culture; + }); + + localizationService.localize("content_nestedContentCopyAllItemsName", [$scope.model.label, activeVariant.name]).then(function(data) { + var model = { + nodes: $scope.nodes, + key: "nc_" + $scope.model.alias, + name: data + }; + clipboardService.copy("nestedContent", "nc_copyOfAllItems", model); + }); + } + $scope.pasteFromClipboard = function(newNode) { if (newNode === undefined) { diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.html index 1eb7311ca7..a3196e8928 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/nestedcontent/nestedcontent.html @@ -42,6 +42,9 @@ + + + diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml index 189bd9f10b..c439ed01c3 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml @@ -273,6 +273,7 @@ Are you sure you want to delete this item? Property %0% uses editor %1% which is not supported by Nested Content. No content types are configured for this property. + %0% from %1% Add another text box Remove this text box Content root 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 6ce6f82ccc..efcfcdc056 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml @@ -277,6 +277,7 @@ Are you sure you want to delete this item? Property %0% uses editor %1% which is not supported by Nested Content. No content types are configured for this property. + %0% from %1% Add another text box Remove this text box Content root