support for loading actions directly from search results

This commit is contained in:
perploug
2013-10-08 15:04:47 +02:00
parent 196ce492be
commit a2ebb1b06f
8 changed files with 78 additions and 67 deletions

View File

@@ -36,7 +36,7 @@ angular.module("umbraco.directives")
'</div>';
}
template += '<ul>' +
'<umb-tree-item ng-repeat="child in tree.root.children" eventhandler="eventhandler" path="{{path}}" activetree="{{activetree}}" node="child" section="{{section}}" ng-animate="animation()"></umb-tree-item>' +
'<umb-tree-item ng-repeat="child in tree.root.children" eventhandler="eventhandler" path="{{path}}" activetree="{{activetree}}" node="child" tree="child" section="{{section}}" ng-animate="animation()"></umb-tree-item>' +
'</ul>' +
'</li>' +
'</ul>';

View File

@@ -29,7 +29,8 @@ angular.module("umbraco.directives")
eventhandler: '=',
path: '@',
node:'=',
activetree:'@'
activetree:'@',
tree:'='
},
template: '<li ng-swipe-right="options(this, node, $event)"><div ng-style="setTreePadding(node)" class="{{node.stateCssClass}}" ng-class="{\'loading\': node.loading}">' +
@@ -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 = '<ul ng-class="{collapsed: !node.expanded}"><umb-tree-item ng-repeat="child in node.children" eventhandler="eventhandler" activetree="{{activetree}}" path="{{path}}" node="child" section="{{section}}" ng-animate="animation()"></umb-tree-item></ul>';
var template = '<ul ng-class="{collapsed: !node.expanded}"><umb-tree-item ng-repeat="child in node.children" eventhandler="eventhandler" activetree="{{activetree}}" path="{{path}}" tree="tree" node="child" section="{{section}}" ng-animate="animation()"></umb-tree-item></ul>';
var newElement = angular.element(template);
$compile(newElement)(scope);
element.append(newElement);

View File

@@ -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;
},

View File

@@ -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({

View File

@@ -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);
};

View File

@@ -13,20 +13,23 @@
<uc1:ContentTypeControlNew id="ContentTypeControlNew1" HideStructure="true" runat="server"></uc1:ContentTypeControlNew>
<cc1:Pane id="Pane1andmore" runat="server">
<asp:DataGrid id="dgEditExtras" runat="server" AutoGenerateColumns="False" Width="100%" BorderStyle="None" HeaderStyle-CssClass="gridHeader" ItemStyle-CssClass="gridItem" GridLines="Horizontal" HeaderStyle-Font-Bold=True OnItemDataBound="dgEditExtras_itemdatabound">
<asp:DataGrid id="dgEditExtras" runat="server" ItemStyle-BorderStyle="NotSet" HeaderStyle-BorderStyle="NotSet" BorderStyle="NotSet" AutoGenerateColumns="False" CssClass="table" OnItemDataBound="dgEditExtras_itemdatabound">
<Columns>
<asp:BoundColumn DataField="id" HeaderText="" Visible="False"></asp:BoundColumn>
<asp:BoundColumn DataField="name" HeaderText="Property name"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Member can edit">
<ItemTemplate>
<asp:CheckBox ID="ckbMemberCanEdit" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Show on profile">
<ItemTemplate>
<asp:CheckBox ID="ckbMemberCanView" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

View File

@@ -387,6 +387,7 @@
<Compile Include="umbraco.presentation\umbraco\create.aspx.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="umbraco.presentation\umbraco\Trees\loadPackager.cs" />
<Compile Include="WebApi\Binders\MemberBinder.cs" />
<Compile Include="WebApi\ControllerContextExtensions.cs" />
<Compile Include="WebApi\CustomDateTimeConvertor.cs" />
@@ -1587,7 +1588,6 @@
<Compile Include="umbraco.presentation\umbraco\Trees\BaseTree.cs" />
<Compile Include="umbraco.presentation\umbraco\Trees\ContentRecycleBin.cs" />
<Compile Include="umbraco.presentation\umbraco\Trees\FileSystemTree.cs" />
<Compile Include="umbraco.presentation\umbraco\Trees\loadPackager.cs" />
<Compile Include="umbraco.presentation\umbraco\Trees\loadContent.cs" />
<Compile Include="umbraco.presentation\umbraco\Trees\loadcontentItemType.cs" />
<Compile Include="umbraco.presentation\umbraco\Trees\loadDataTypes.cs" />

View File

@@ -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
/// </summary>
[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.
/// </summary>
/// <param name="Javascript">The javascript.</param>
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.
/// </summary>
/// <param name="Tree">The tree.</param>
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);
}
}