From 7804e8aa44b2b001f1a3e7a793300fb791d9c2d5 Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 13 Oct 2014 18:31:35 +1100 Subject: [PATCH] Copy dialog with search is basically working, just needs a few tweaks. --- .../common/dialogs/linkpicker.controller.js | 4 +- .../views/content/content.copy.controller.js | 88 +++++++++++++++++-- .../src/views/content/copy.html | 31 +++++-- 3 files changed, 106 insertions(+), 17 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js index ce2780ddc9..232372fd68 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/dialogs/linkpicker.controller.js @@ -11,7 +11,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController", $scope.dialogTreeEventHandler = $({}); $scope.target = {}; $scope.searchInfo = { - searchFromId: dialogOptions.startNodeId, + searchFromId: null, searchFromName: null, showSearch: false, results: [], @@ -119,7 +119,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController", $scope.hideSearch = function () { $scope.searchInfo.showSearch = false; - $scope.searchInfo.searchFromId = dialogOptions.startNodeId; + $scope.searchInfo.searchFromId = null; $scope.searchInfo.searchFromName = null; $scope.searchInfo.results = []; } diff --git a/src/Umbraco.Web.UI.Client/src/views/content/content.copy.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/content.copy.controller.js index aea8aaf888..cbcc275a99 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/content.copy.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/content/content.copy.controller.js @@ -1,32 +1,100 @@ angular.module("umbraco") .controller("Umbraco.Editors.Content.CopyController", - function ($scope, eventsService, contentResource, navigationService, appState, treeService) { + function ($scope, eventsService, contentResource, navigationService, appState, treeService, localizationService) { var dialogOptions = $scope.dialogOptions; + var searchText = "Search..."; + localizationService.localize("general_search").then(function (value) { + searchText = value + "..."; + }); $scope.relateToOriginal = false; $scope.dialogTreeEventHandler = $({}); + $scope.searchInfo = { + searchFromId: null, + searchFromName: null, + showSearch: false, + results: [], + selectedSearchResults: [] + } + var node = dialogOptions.currentNode; function nodeSelectHandler(ev, args) { args.event.preventDefault(); args.event.stopPropagation(); - eventsService.emit("editors.content.copyController.select", args); + if (args.node.metaData.listViewNode) { + //check if list view 'search' node was selected - if ($scope.target) { - //un-select if there's a current one selected - $scope.target.selected = false; + $scope.searchInfo.showSearch = true; + $scope.searchInfo.searchFromId = args.node.metaData.listViewNode.id; + $scope.searchInfo.searchFromName = args.node.metaData.listViewNode.name; } + else { + eventsService.emit("editors.content.copyController.select", args); - $scope.target = args.node; - $scope.target.selected = true; + if ($scope.target) { + //un-select if there's a current one selected + $scope.target.selected = false; + } + + $scope.target = args.node; + $scope.target.selected = true; + } + } - $scope.dialogTreeEventHandler.bind("treeNodeSelect", nodeSelectHandler); + function nodeExpandedHandler(ev, args) { + if (angular.isArray(args.children)) { + //iterate children + _.each(args.children, function (child) { + //check if any of the items are list views, if so we need to add a custom + // child: A node to activate the search + if (child.metaData.isContainer) { + child.hasChildren = true; + child.children = [ + { + level: child.level + 1, + hasChildren: false, + name: searchText, + metaData: { + listViewNode: child, + }, + cssClass: "icon umb-tree-icon sprTree icon-search", + cssClasses: ["not-published"] + } + ]; + } + }); + } + } + + $scope.hideSearch = function () { + $scope.searchInfo.showSearch = false; + $scope.searchInfo.searchFromId = null; + $scope.searchInfo.searchFromName = null; + $scope.searchInfo.results = []; + } + + // method to select a search result + $scope.selectResult = function (evt, result) { + result.selected = result.selected === true ? false : true; + nodeSelectHandler(evt, { event: evt, node: result }); + }; + + //callback when there are search results + $scope.onSearchResults = function (results) { + $scope.searchInfo.results = results; + $scope.searchInfo.showSearch = true; + }; + $scope.copy = function () { + + $scope.hideSearch(); + contentResource.copy({ parentId: $scope.target.id, id: node.id, relateToOriginal: $scope.relateToOriginal }) .then(function (path) { $scope.error = false; @@ -52,7 +120,11 @@ angular.module("umbraco") }); }; + $scope.dialogTreeEventHandler.bind("treeNodeSelect", nodeSelectHandler); + $scope.dialogTreeEventHandler.bind("treeNodeExpanded", nodeExpandedHandler); + $scope.$on('$destroy', function () { $scope.dialogTreeEventHandler.unbind("treeNodeSelect", nodeSelectHandler); + $scope.dialogTreeEventHandler.unbind("treeNodeExpanded", nodeExpandedHandler); }); }); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/content/copy.html b/src/Umbraco.Web.UI.Client/src/views/content/copy.html index dc3da2f4bf..0a54258ab9 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/copy.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/copy.html @@ -22,14 +22,31 @@
- - + + + +
+ + + + +
+ + +