Files
Umbraco-CMS/src/Umbraco.Web.UI.Client/src/views/content/content.move.controller.js
T

139 lines
4.7 KiB
JavaScript

angular.module("umbraco").controller("Umbraco.Editors.Content.MoveController",
function ($scope, userService, eventsService, contentResource, navigationService, appState, treeService, localizationService, notificationsService) {
var searchText = "Search...";
localizationService.localize("general_search").then(function (value) {
searchText = value + "...";
});
$scope.dialogTreeApi = {};
$scope.busy = false;
$scope.searchInfo = {
searchFromId: null,
searchFromName: null,
showSearch: false,
results: [],
selectedSearchResults: []
}
$scope.treeModel = {
hideHeader: false
}
userService.getCurrentUser().then(function (userData) {
$scope.treeModel.hideHeader = userData.startContentIds.length > 0 && userData.startContentIds.indexOf(-1) == -1;
});
$scope.source = _.clone($scope.currentNode);
function treeLoadedHandler(args) {
if ($scope.source && $scope.source.path) {
$scope.dialogTreeApi.syncTree({ path: $scope.source.path, activate: false });
}
}
function nodeSelectHandler(args) {
if(args && args.event) {
args.event.preventDefault();
args.event.stopPropagation();
}
eventsService.emit("editors.content.moveController.select", args);
if ($scope.target) {
//un-select if there's a current one selected
$scope.target.selected = false;
}
$scope.target = args.node;
$scope.target.selected = true;
}
function nodeExpandedHandler(args) {
// open mini list view for list views
if (args.node.metaData.isContainer) {
openMiniListView(args.node);
}
}
$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({ event: evt, node: result });
};
//callback when there are search results
$scope.onSearchResults = function (results) {
$scope.searchInfo.results = results;
$scope.searchInfo.showSearch = true;
};
$scope.close = function() {
navigationService.hideDialog();
};
$scope.move = function () {
$scope.busy = true;
$scope.error = false;
contentResource.move({ parentId: $scope.target.id, id: $scope.source.id })
.then(function (path) {
$scope.error = false;
$scope.success = true;
$scope.busy = false;
//first we need to remove the node that launched the dialog
treeService.removeNode($scope.currentNode);
//get the currently edited node (if any)
var activeNode = appState.getTreeState("selectedNode");
//we need to do a double sync here: first sync to the moved content - but don't activate the node,
//then sync to the currently edited content (note: this might not be the content that was moved!!)
navigationService.syncTree({ tree: "content", path: path, forceReload: true, activate: false }).then(function (args) {
if (activeNode) {
var activeNodePath = treeService.getPath(activeNode).join();
//sync to this node now - depending on what was copied this might already be synced but might not be
navigationService.syncTree({ tree: "content", path: activeNodePath, forceReload: false, activate: true });
}
});
}, function (err) {
$scope.success = false;
$scope.error = err;
$scope.busy = false;
});
};
$scope.onTreeInit = function () {
$scope.dialogTreeApi.callbacks.treeLoaded(treeLoadedHandler);
$scope.dialogTreeApi.callbacks.treeNodeSelect(nodeSelectHandler);
$scope.dialogTreeApi.callbacks.treeNodeExpanded(nodeExpandedHandler);
}
// Mini list view
$scope.selectListViewNode = function (node) {
node.selected = node.selected === true ? false : true;
nodeSelectHandler({ node: node });
};
$scope.closeMiniListView = function () {
$scope.miniListView = undefined;
};
function openMiniListView(node) {
$scope.miniListView = node;
}
});