From a2ebb1b06fe6eb7d0f49e10f038bcc6fc3af9adb Mon Sep 17 00:00:00 2001 From: perploug Date: Tue, 8 Oct 2013 15:04:47 +0200 Subject: [PATCH] support for loading actions directly from search results --- .../common/directives/umbtree.directive.js | 2 +- .../directives/umbtreeitem.directive.js | 17 +-- .../src/common/services/navigation.service.js | 4 + .../src/common/services/search.service.js | 2 + .../src/views/common/navigation.controller.js | 6 +- .../umbraco/members/EditMemberType.aspx | 5 +- src/Umbraco.Web/Umbraco.Web.csproj | 2 +- .../umbraco/Trees/loadPackager.cs | 107 +++++++++--------- 8 files changed, 78 insertions(+), 67 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/umbtree.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/umbtree.directive.js index a95d12a315..6f02c67f9f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/umbtree.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/umbtree.directive.js @@ -36,7 +36,7 @@ angular.module("umbraco.directives") ''; } template += '' + '' + ''; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/umbtreeitem.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/umbtreeitem.directive.js index a4c64994c3..427399fbea 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/umbtreeitem.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/umbtreeitem.directive.js @@ -29,7 +29,8 @@ angular.module("umbraco.directives") eventhandler: '=', path: '@', node:'=', - activetree:'@' + activetree:'@', + tree:'=' }, template: '
  • ' + @@ -61,7 +62,7 @@ angular.module("umbraco.directives") about it. */ scope.options = function(e, n, ev){ - emitEvent("treeOptionsClick", {element: e, node: n, event: ev}); + emitEvent("treeOptionsClick", {element: e, tree: scope.tree, node: n, event: ev}); }; /** @@ -71,7 +72,7 @@ angular.module("umbraco.directives") defined on the tree */ scope.select = function(e,n,ev){ - emitEvent("treeNodeSelect", { element: e, node: n, event: ev }); + emitEvent("treeNodeSelect", { element: e, tree: scope.tree, node: n, event: ev }); }; /** method to set the current animation for the node. @@ -95,7 +96,7 @@ angular.module("umbraco.directives") scope.load = function(arrow, node) { if (node.expanded) { enableDeleteAnimations = false; - emitEvent("treeNodeCollapsing", { element: arrow, node: node }); + emitEvent("treeNodeCollapsing", { element: arrow, tree: scope.tree, node: node }); node.expanded = false; } else { @@ -106,19 +107,19 @@ angular.module("umbraco.directives") /* helper to force reloading children of a tree node */ scope.loadChildren = function(arrow, node, forceReload){ //emit treeNodeExpanding event, if a callback object is set on the tree - emitEvent("treeNodeExpanding", { element: arrow, node: node }); + emitEvent("treeNodeExpanding", { element: arrow, tree: scope.tree, node: node }); if (node.hasChildren && (forceReload || !node.children || (angular.isArray(node.children) && node.children.length === 0))) { //get the children from the tree service treeService.loadNodeChildren({ node: node, section: scope.section }) .then(function(data) { //emit expanded event - emitEvent("treeNodeExpanded", { element: arrow, node: node, children: data }); + emitEvent("treeNodeExpanded", { element: arrow, tree: scope.tree, node: node, children: data }); enableDeleteAnimations = true; }); } else { - emitEvent("treeNodeExpanded", { element: arrow, node: node, children: node.children }); + emitEvent("treeNodeExpanded", { element: arrow, tree: scope.tree, node: node, children: node.children }); node.expanded = true; enableDeleteAnimations = true; } @@ -152,7 +153,7 @@ angular.module("umbraco.directives") scope.expandActivePath(scope.node, scope.activetree, scope.path); scope.node.stateCssClass = scope.node.cssClasses.join(" "); - var template = '
    '; + var template = '
    '; var newElement = angular.element(template); $compile(newElement)(scope); element.append(newElement); diff --git a/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js b/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js index 12b0f4b6f4..d07157f962 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js @@ -168,6 +168,10 @@ angular.module('umbraco.services') //TODO: investicate if we need to halt watch triggers //and instead pause them and then manually tell the tree to digest path changes //as this might be a bit heavy loading + if(!angular.isArray(path)){ + path = path.split(","); + } + this.ui.currentPath = path; }, diff --git a/src/Umbraco.Web.UI.Client/src/common/services/search.service.js b/src/Umbraco.Web.UI.Client/src/common/services/search.service.js index 39dda8f5d5..2801ba300a 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/search.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/search.service.js @@ -13,6 +13,7 @@ angular.module('umbraco.services') _.each(data, function(el){ el.menuUrl = "UmbracoTrees/ContentTree/GetMenu?id=" + el.id + "&application=content"; + el.metaData = {treeAlias: "content"}; }); m.results.push({ @@ -32,6 +33,7 @@ angular.module('umbraco.services') _.each(data, function(el){ el.menuUrl = "UmbracoTrees/MediaTree/GetMenu?id=" + el.id + "&application=media"; + el.metaData = {treeAlias: "media"}; }); m.results.push({ diff --git a/src/Umbraco.Web.UI.Client/src/views/common/navigation.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/navigation.controller.js index 20703fe9c7..51421b9b16 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/navigation.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/navigation.controller.js @@ -43,6 +43,7 @@ function NavigationController($scope,$rootScope, $location, $log, $routeParams, } }); + //this reacts to the options item in the tree $scope.treeEventHandler.bind("treeOptionsClick", function (ev, args) { ev.stopPropagation(); @@ -64,9 +65,8 @@ function NavigationController($scope,$rootScope, $location, $log, $routeParams, $scope.currentNode = args.node; args.scope = $scope; - if(args.event && args.event.altKey){ - args.skipDefault = true; - } + //always skip default + args.skipDefault = true; navigationService.showMenu(ev, args); }; diff --git a/src/Umbraco.Web.UI/umbraco/members/EditMemberType.aspx b/src/Umbraco.Web.UI/umbraco/members/EditMemberType.aspx index 3e274b567f..324f8fb0fa 100644 --- a/src/Umbraco.Web.UI/umbraco/members/EditMemberType.aspx +++ b/src/Umbraco.Web.UI/umbraco/members/EditMemberType.aspx @@ -13,20 +13,23 @@ - + + + + diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 457bfc6b6d..1988830f85 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -387,6 +387,7 @@ ASPXCodeBehind + @@ -1587,7 +1588,6 @@ - diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadPackager.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadPackager.cs index 4935886e9a..19d303cbc2 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadPackager.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadPackager.cs @@ -23,6 +23,7 @@ using umbraco.interfaces; using umbraco.DataLayer; using umbraco.BusinessLogic.Utils; using Umbraco.Core; +using umbraco.cms.presentation.Trees; namespace umbraco { @@ -30,9 +31,14 @@ namespace umbraco /// Handles loading of the packager application into the developer application tree /// [Tree(Constants.Applications.Developer, "packager", "Packages", sortOrder: 3)] - public class loadPackager : ITree + public class loadPackager : BaseTree { #region TreeI Members + public loadPackager(string application) : base(application) { } + protected override void CreateRootNode(ref XmlTreeNode rootNode) + { + + } private int _id; private string _app; @@ -59,7 +65,7 @@ namespace umbraco /// Renders the Javascript. /// /// The javascript. - public void RenderJS(ref StringBuilder Javascript) + public override void RenderJS(ref StringBuilder Javascript) { Javascript.Append( @"function openPackageCategory(url) { @@ -71,37 +77,37 @@ namespace umbraco /// Renders the specified tree item. /// /// The tree. - public void Render(ref XmlDocument Tree) + public override void Render(ref XmlTree tree) { - XmlElement root = Tree.DocumentElement; + string[,] items = { { "BrowseRepository.aspx", "Install from repository" }, { "CreatePackage.aspx", "Createdjjj Packages" }, { "installedPackages.aspx", "Installedjj packages" }, { "StarterKits.aspx", "Starter kit" }, { "installer.aspx", "Install local package" } }; for (int i = 0; i <= items.GetUpperBound(0); i++) { - - XmlElement treeElement = Tree.CreateElement("tree"); - treeElement.SetAttribute("nodeID", "-1"); - treeElement.SetAttribute("text", items[i, 1]); - treeElement.SetAttribute("icon", "icon-folder"); - treeElement.SetAttribute("openIcon", "folder_o.gif"); - + XmlTreeNode xNode = XmlTreeNode.Create(this); + xNode.NodeID = "-1"; + xNode.Text = items[i, 1]; + xNode.Icon = "icon-folder"; + xNode.OpenIcon = "icon-folder"; + + //Make sure the different sections load the correct childnodes. switch (items[i, 0]) { case "installedPackages.aspx": if (cms.businesslogic.packager.InstalledPackage.GetAllInstalledPackages().Count > 0) { - treeElement.SetAttribute("src", "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=installed" + "&rnd=" + Guid.NewGuid()); - treeElement.SetAttribute("nodeType", "installedPackages"); - treeElement.SetAttribute("menu", "L"); - treeElement.SetAttribute("text", ui.Text("treeHeaders", "installedPackages")); - treeElement.SetAttribute("hasChildren", "true"); + xNode.Source = "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=installed" + "&rnd=" + Guid.NewGuid(); + xNode.NodeType = "installedPackages"; + xNode.Menu.Add(umbraco.BusinessLogic.Actions.ActionRefresh.Instance); + xNode.Text = ui.Text("treeHeaders", "installedPackages"); + xNode.HasChildren = true; } else { - treeElement.SetAttribute("text", ""); + xNode.Text = ""; } break; @@ -116,63 +122,59 @@ namespace umbraco // the repositories will then be fetched from the loadPackages class. if (repos.Count > 1) { - treeElement.SetAttribute("src", "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=repositories" + "&rnd=" + Guid.NewGuid()); - treeElement.SetAttribute("nodeType", "packagesRepositories"); - treeElement.SetAttribute("menu", "L"); - treeElement.SetAttribute("text", ui.Text("treeHeaders", "repositories")); - treeElement.SetAttribute("hasChildren", "true"); + xNode.Source = "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=repositories" + "&rnd=" + Guid.NewGuid(); + xNode.NodeType = "packagesRepositories"; + xNode.Menu.Add(umbraco.BusinessLogic.Actions.ActionRefresh.Instance); + xNode.Text = ui.Text("treeHeaders", "repositories"); + xNode.HasChildren = true; } //if only one repo, then just list it directly and name it as the repository. //the packages will be loaded from the loadPackages class with a repoAlias querystring else if (repos.Count == 1) { - treeElement.SetAttribute("text", repos[0].Name); - treeElement.SetAttribute("src", "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=repository&repoGuid=" + repos[0].Guid + "&rnd=" + Guid.NewGuid()); - treeElement.SetAttribute("nodeType", "packagesRepository"); - treeElement.SetAttribute("menu", "L"); - treeElement.SetAttribute("action", "javascript:openPackageCategory('BrowseRepository.aspx?repoGuid=" + repos[0].Guid + "');"); - treeElement.SetAttribute("icon", "icon-server-alt"); - treeElement.SetAttribute("openIcon", "icon-server-alt"); - treeElement.SetAttribute("hasChildren", "true"); + xNode.Text = repos[0].Name; + xNode.Source = "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=repository&repoGuid=" + repos[0].Guid + "&rnd=" + Guid.NewGuid(); + xNode.NodeType = "packagesRepository"; + xNode.Menu.Add(umbraco.BusinessLogic.Actions.ActionRefresh.Instance); + xNode.Action = "javascript:openPackageCategory('BrowseRepository.aspx?repoGuid=" + repos[0].Guid + "');"; + xNode.Icon = "icon-server-alt"; + xNode.HasChildren = true; } //if none registered, then remove the repo node. else if (repos.Count == 0) { - treeElement.SetAttribute("text", ""); + xNode.Text = ""; } break; case "CreatePackage.aspx": - treeElement.SetAttribute("src", "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=created" + "&rnd=" + Guid.NewGuid()); - treeElement.SetAttribute("nodeType", "createdPackages"); - treeElement.SetAttribute("menu", "C,L"); - treeElement.SetAttribute("text", ui.Text("treeHeaders", "createdPackages")); - treeElement.SetAttribute("hasChildren", "true"); + xNode.Source = "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=created" + "&rnd=" + Guid.NewGuid(); + xNode.NodeType = "createdPackages"; + xNode.Menu.Add(umbraco.BusinessLogic.Actions.ActionNew.Instance); + xNode.Menu.Add(umbraco.BusinessLogic.Actions.ActionRefresh.Instance); + xNode.Text = ui.Text("treeHeaders", "createdPackages"); + xNode.HasChildren = true; break; case "installer.aspx": - treeElement.SetAttribute("src", ""); - treeElement.SetAttribute("nodeType", "uploadPackage"); + xNode.Source = ""; + xNode.NodeType = "uploadPackage"; //treeElement.SetAttribute("menu", ""); - treeElement.SetAttribute("icon", "icon-page-up"); - treeElement.SetAttribute("openIcon", "icon-page-up"); - treeElement.SetAttribute("action", "javascript:openPackageCategory('" + items[i, 0] + "');"); - treeElement.SetAttribute("text", ui.Text("treeHeaders", "localPackage")); + xNode.Icon = "icon-page-up"; + xNode.Action = "javascript:openPackageCategory('" + items[i, 0] + "');"; + xNode.Text = ui.Text("treeHeaders", "localPackage"); break; case "StarterKits.aspx": - treeElement.SetAttribute("src", ""); - treeElement.SetAttribute("nodeType", "starterKits"); - //treeElement.SetAttribute("menu", "L"); - treeElement.SetAttribute("action", "javascript:openPackageCategory('" + items[i, 0] + "');"); - treeElement.SetAttribute("icon", "icon-flash"); - treeElement.SetAttribute("openIcon", "icon-flash"); - - treeElement.SetAttribute("text", ui.Text("treeHeaders", "installStarterKit")); + xNode.Source = ""; + xNode.NodeType = "starterKits"; + xNode.Action = "javascript:openPackageCategory('" + items[i, 0] + "');"; + xNode.Icon = "icon-flash"; + xNode.Text = ui.Text("treeHeaders", "installStarterKit"); break; @@ -180,9 +182,8 @@ namespace umbraco break; } - if (treeElement.GetAttribute("text") != "") - root.AppendChild(treeElement); - + if (xNode.Text != "") + tree.Add(xNode); } }