diff --git a/umbraco/presentation/umbraco/Trees/BaseContentTree.cs b/umbraco/presentation/umbraco/Trees/BaseContentTree.cs index 7c31331c32..6e39346bd0 100644 --- a/umbraco/presentation/umbraco/Trees/BaseContentTree.cs +++ b/umbraco/presentation/umbraco/Trees/BaseContentTree.cs @@ -187,8 +187,9 @@ function openContent(id) { if (node != null) { Tree.Add(node); + OnAfterNodeRender(ref Tree, ref node, EventArgs.Empty); } - OnAfterNodeRender(ref Tree, ref node, EventArgs.Empty); + } } } diff --git a/umbraco/presentation/umbraco/Trees/BaseMediaTree.cs b/umbraco/presentation/umbraco/Trees/BaseMediaTree.cs index fac401638d..312def0895 100644 --- a/umbraco/presentation/umbraco/Trees/BaseMediaTree.cs +++ b/umbraco/presentation/umbraco/Trees/BaseMediaTree.cs @@ -142,8 +142,9 @@ function openMedia(id) { if (xNode != null) { tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); } - OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } } diff --git a/umbraco/presentation/umbraco/Trees/BaseTree.cs b/umbraco/presentation/umbraco/Trees/BaseTree.cs index a143bd69d2..3506610014 100644 --- a/umbraco/presentation/umbraco/Trees/BaseTree.cs +++ b/umbraco/presentation/umbraco/Trees/BaseTree.cs @@ -380,7 +380,9 @@ namespace umbraco.cms.presentation.Trees this.id = id; else this.NodeKey = nodeId; - this.Render(ref xTree); + + this.Render(ref xTree); + return xTree.ToString(); } @@ -460,18 +462,18 @@ namespace umbraco.cms.presentation.Trees return treeCaption; } - //EVENTS - /// - /// The before node render event handler - /// + + #region Events + + //These events are poorly designed because they cannot be implemented in the tree inheritance structure, + //it would be up to the individual trees to ensure they launch the events which is poor design. + //they are also named in appropriately in regards to standards and because everything is by ref, there is no need to + //have 2 events, makes no difference if you want to modify the contents of the data. public delegate void BeforeNodeRenderEventHandler(ref XmlTree sender, ref XmlTreeNode node, EventArgs e); - - /// - /// The after node render event handler - /// public delegate void AfterNodeRenderEventHandler(ref XmlTree sender, ref XmlTreeNode node, EventArgs e); - public static event BeforeNodeRenderEventHandler BeforeNodeRender; + public static event AfterNodeRenderEventHandler AfterNodeRender; + /// /// Raises the event. /// @@ -482,7 +484,7 @@ namespace umbraco.cms.presentation.Trees BeforeNodeRender(ref sender, ref node, e); } - public static event AfterNodeRenderEventHandler AfterNodeRender; + /// /// Raises the event. /// @@ -493,6 +495,10 @@ namespace umbraco.cms.presentation.Trees AfterNodeRender(ref sender, ref node, e); } + #endregion + + + } -} +} \ No newline at end of file diff --git a/umbraco/presentation/umbraco/Trees/FileSystemTree.cs b/umbraco/presentation/umbraco/Trees/FileSystemTree.cs index 49dbc82c06..51f0840971 100644 --- a/umbraco/presentation/umbraco/Trees/FileSystemTree.cs +++ b/umbraco/presentation/umbraco/Trees/FileSystemTree.cs @@ -65,9 +65,16 @@ namespace umbraco.cms.presentation.Trees xDirNode.Icon = FolderIcon; xDirNode.OpenIcon = FolderIconOpen; xDirNode.HasChildren = dir.GetFiles().Length > 0 || dir.GetDirectories().Length > 0; + OnRenderFolderNode(ref xDirNode); - - tree.Add(xDirNode); + OnBeforeNodeRender(ref tree, ref xDirNode, EventArgs.Empty); + if (xDirNode != null) + { + tree.Add(xDirNode); + OnAfterNodeRender(ref tree, ref xDirNode, EventArgs.Empty); + } + + } } FileInfo[] fileInfo = dirInfo.GetFiles(FileSearchPattern); @@ -86,8 +93,14 @@ namespace umbraco.cms.presentation.Trees xFileNode.OpenIcon = "doc.gif"; OnRenderFileNode(ref xFileNode); + OnBeforeNodeRender(ref tree, ref xFileNode, EventArgs.Empty); + if (xFileNode != null) + { + tree.Add(xFileNode); + OnAfterNodeRender(ref tree, ref xFileNode, EventArgs.Empty); + } + - tree.Add(xFileNode); } } } diff --git a/umbraco/presentation/umbraco/Trees/MediaRecycleBin.cs b/umbraco/presentation/umbraco/Trees/MediaRecycleBin.cs index e0be6c9313..483f955b4f 100644 --- a/umbraco/presentation/umbraco/Trees/MediaRecycleBin.cs +++ b/umbraco/presentation/umbraco/Trees/MediaRecycleBin.cs @@ -6,6 +6,7 @@ using System.IO; using System.Text; using System.Web; using System.Xml; +using System.Linq; using System.Configuration; using umbraco.BasePages; using umbraco.BusinessLogic; diff --git a/umbraco/presentation/umbraco/Trees/NullTree.cs b/umbraco/presentation/umbraco/Trees/NullTree.cs index dcb3eee763..0186d8f0f8 100644 --- a/umbraco/presentation/umbraco/Trees/NullTree.cs +++ b/umbraco/presentation/umbraco/Trees/NullTree.cs @@ -35,7 +35,14 @@ namespace umbraco.cms.presentation.Trees XmlTreeNode xNode = XmlTreeNode.Create(this); xNode.Text = "Error"; xNode.Menu = null; - tree.Add(xNode); + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } protected override void CreateRootNode(ref XmlTreeNode rootNode) diff --git a/umbraco/presentation/umbraco/Trees/UserPermissions.cs b/umbraco/presentation/umbraco/Trees/UserPermissions.cs index 44c58351f0..01c5b1785b 100644 --- a/umbraco/presentation/umbraco/Trees/UserPermissions.cs +++ b/umbraco/presentation/umbraco/Trees/UserPermissions.cs @@ -52,8 +52,14 @@ namespace umbraco.cms.presentation.Trees node.Text = user.Name; node.Action = "javascript:openUserPermissions('" + user.Id.ToString() + "');"; node.Icon = "user.gif"; + + OnBeforeNodeRender(ref tree, ref node, EventArgs.Empty); + if (node != null) + { + tree.Add(node); + OnAfterNodeRender(ref tree, ref node, EventArgs.Empty); + } - tree.Add(node); } } } diff --git a/umbraco/presentation/umbraco/Trees/UserTypes.cs b/umbraco/presentation/umbraco/Trees/UserTypes.cs index 54229d07d1..3fd781e2ba 100644 --- a/umbraco/presentation/umbraco/Trees/UserTypes.cs +++ b/umbraco/presentation/umbraco/Trees/UserTypes.cs @@ -39,8 +39,13 @@ function openUserTypes(id) { node.Action = string.Format("javascript:openUserTypes({0})", userType.Id.ToString()); node.Icon = "user.gif"; node.Text = userType.Alias; - - tree.Add(node); + + OnBeforeNodeRender(ref tree, ref node, EventArgs.Empty); + if (node != null) + { + tree.Add(node); + OnAfterNodeRender(ref tree, ref node, EventArgs.Empty); + } } } } diff --git a/umbraco/presentation/umbraco/Trees/XmlTree.cs b/umbraco/presentation/umbraco/Trees/XmlTree.cs index 048eceff79..ea2d94fd07 100644 --- a/umbraco/presentation/umbraco/Trees/XmlTree.cs +++ b/umbraco/presentation/umbraco/Trees/XmlTree.cs @@ -101,12 +101,6 @@ namespace umbraco.cms.presentation.Trees return ""; } - [System.Runtime.InteropServices.DispIdAttribute(-4)] - public IEnumerator GetEnumerator() - { - return treeCollection.GetEnumerator(); - } - public void Add(XmlTreeNode obj) { treeCollection.Add(obj); @@ -155,7 +149,13 @@ namespace umbraco.cms.presentation.Trees set { __treeCollection = value; } } - } + [System.Runtime.InteropServices.DispIdAttribute(-4)] + public IEnumerator GetEnumerator() + { + return (treeCollection as IEnumerable).GetEnumerator(); + } + + } /// /// Used for serializing data to XML as the data structure for the JavaScript tree diff --git a/umbraco/presentation/umbraco/Trees/loadCache.cs b/umbraco/presentation/umbraco/Trees/loadCache.cs index e8b0d29b74..8120e2d921 100644 --- a/umbraco/presentation/umbraco/Trees/loadCache.cs +++ b/umbraco/presentation/umbraco/Trees/loadCache.cs @@ -72,7 +72,14 @@ namespace umbraco xNode.Icon = "developerCacheTypes.gif"; xNode.OpenIcon = "developerCacheTypes.gif"; xNode.HasChildren = itemCount > 0; - tree.Add(xNode); + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } diff --git a/umbraco/presentation/umbraco/Trees/loadCacheItem.cs b/umbraco/presentation/umbraco/Trees/loadCacheItem.cs index fe72e8f231..e114f56109 100644 --- a/umbraco/presentation/umbraco/Trees/loadCacheItem.cs +++ b/umbraco/presentation/umbraco/Trees/loadCacheItem.cs @@ -80,8 +80,14 @@ function openCacheItem(id) { xNode.Action = "javascript:openCacheItem('" + a[i] + "');"; xNode.Icon = "developerCacheItem.gif"; xNode.OpenIcon = "developerCacheItem.gif"; + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } - tree.Add(xNode); } } diff --git a/umbraco/presentation/umbraco/Trees/loadDataTypes.cs b/umbraco/presentation/umbraco/Trees/loadDataTypes.cs index d5f67b94f4..6d0e4aaaae 100644 --- a/umbraco/presentation/umbraco/Trees/loadDataTypes.cs +++ b/umbraco/presentation/umbraco/Trees/loadDataTypes.cs @@ -64,8 +64,14 @@ function openDataType(id) { xNode.Action = "javascript:openDataType(" + dt.Id + ");"; xNode.Icon = "developerDatatype.gif"; xNode.OpenIcon = "developerDatatype.gif"; + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } - tree.Add(xNode); } } diff --git a/umbraco/presentation/umbraco/Trees/loadDictionary.cs b/umbraco/presentation/umbraco/Trees/loadDictionary.cs index 7c90e43c05..a9ec4f56e8 100644 --- a/umbraco/presentation/umbraco/Trees/loadDictionary.cs +++ b/umbraco/presentation/umbraco/Trees/loadDictionary.cs @@ -77,7 +77,14 @@ namespace umbraco xNode.NodeType = "DictionaryItem"; //this shouldn't be like this, it should be this.TreeAlias but the ui.config file points to this name. xNode.Source = this.GetTreeServiceUrl(di.id); xNode.HasChildren = di.hasChildren; - tree.Add(xNode); + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } diff --git a/umbraco/presentation/umbraco/Trees/loadLanguages.cs b/umbraco/presentation/umbraco/Trees/loadLanguages.cs index bbfd7166dc..51cc3893ee 100644 --- a/umbraco/presentation/umbraco/Trees/loadLanguages.cs +++ b/umbraco/presentation/umbraco/Trees/loadLanguages.cs @@ -60,8 +60,14 @@ function openDictionary() { xNode.Action = "javascript:openLanguage(" + l.id + ");"; xNode.Icon = "settingLanguage.gif"; xNode.OpenIcon = "settingLanguage.gif"; + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } - tree.Add(xNode); } } diff --git a/umbraco/presentation/umbraco/Trees/loadMediaTypes.cs b/umbraco/presentation/umbraco/Trees/loadMediaTypes.cs index 4ff36edb22..07ad27ab3f 100644 --- a/umbraco/presentation/umbraco/Trees/loadMediaTypes.cs +++ b/umbraco/presentation/umbraco/Trees/loadMediaTypes.cs @@ -56,7 +56,13 @@ function openMediaType(id) { xNode.Icon = "settingDataType.gif"; xNode.OpenIcon = "settingDataType.gif"; - tree.Add(xNode); + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } diff --git a/umbraco/presentation/umbraco/Trees/loadMemberGroups.cs b/umbraco/presentation/umbraco/Trees/loadMemberGroups.cs index 907278a132..4153f3c513 100644 --- a/umbraco/presentation/umbraco/Trees/loadMemberGroups.cs +++ b/umbraco/presentation/umbraco/Trees/loadMemberGroups.cs @@ -75,7 +75,13 @@ function openMemberGroup(id) { { xNode.Menu = null; } - tree.Add(xNode); + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + } + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); } } diff --git a/umbraco/presentation/umbraco/Trees/loadNodeTypes.cs b/umbraco/presentation/umbraco/Trees/loadNodeTypes.cs index 485988187a..c826acade7 100644 --- a/umbraco/presentation/umbraco/Trees/loadNodeTypes.cs +++ b/umbraco/presentation/umbraco/Trees/loadNodeTypes.cs @@ -91,7 +91,14 @@ function openNodeType(id) { xNode.Icon = "settingMasterDataType.gif"; xNode.OpenIcon = "settingMasterDataType.gif"; } - tree.Add(xNode); + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } diff --git a/umbraco/presentation/umbraco/Trees/loadStylesheetProperty.cs b/umbraco/presentation/umbraco/Trees/loadStylesheetProperty.cs index f9c4bc9fa6..f23e367911 100644 --- a/umbraco/presentation/umbraco/Trees/loadStylesheetProperty.cs +++ b/umbraco/presentation/umbraco/Trees/loadStylesheetProperty.cs @@ -59,7 +59,13 @@ namespace umbraco xNode.Icon = "settingCssItem.gif"; xNode.OpenIcon = "settingCssItem.gif"; - tree.Add(xNode); + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } diff --git a/umbraco/presentation/umbraco/Trees/loadStylesheets.cs b/umbraco/presentation/umbraco/Trees/loadStylesheets.cs index 9ba7d54cdf..f29a5f989c 100644 --- a/umbraco/presentation/umbraco/Trees/loadStylesheets.cs +++ b/umbraco/presentation/umbraco/Trees/loadStylesheets.cs @@ -69,7 +69,14 @@ namespace umbraco xNode.Icon = "settingCss.gif"; xNode.OpenIcon = "settingCss.gif"; xNode.NodeType = "stylesheet"; //this shouldn't be like this, it should be this.TreeAlias but the ui.config file points to this name. - tree.Add(xNode); + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } diff --git a/umbraco/presentation/umbraco/Trees/loadTemplates.cs b/umbraco/presentation/umbraco/Trees/loadTemplates.cs index be58072842..0b547fdece 100644 --- a/umbraco/presentation/umbraco/Trees/loadTemplates.cs +++ b/umbraco/presentation/umbraco/Trees/loadTemplates.cs @@ -69,7 +69,14 @@ function openTemplate(id) { xNode.Icon = "settingMasterTemplate.gif"; xNode.OpenIcon = "settingMasterTemplate.gif"; } - tree.Add(xNode); + + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } diff --git a/umbraco/presentation/umbraco/Trees/loadTranslationTasks.cs b/umbraco/presentation/umbraco/Trees/loadTranslationTasks.cs index 68c79c3fe0..a285aa229a 100644 --- a/umbraco/presentation/umbraco/Trees/loadTranslationTasks.cs +++ b/umbraco/presentation/umbraco/Trees/loadTranslationTasks.cs @@ -69,7 +69,13 @@ namespace umbraco { xNode.Icon = ".sprTreeSettingLanguage"; xNode.OpenIcon = ".sprTreeSettingLanguage"; - tree.Add(xNode); + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } @@ -114,7 +120,13 @@ namespace umbraco { xNode.Icon = ".sprTreeSettingLanguage"; xNode.OpenIcon = ".sprTreeSettingLanguage"; - tree.Add(xNode); + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } } diff --git a/umbraco/presentation/umbraco/Trees/loadUsers.cs b/umbraco/presentation/umbraco/Trees/loadUsers.cs index e58616054c..50977a0536 100644 --- a/umbraco/presentation/umbraco/Trees/loadUsers.cs +++ b/umbraco/presentation/umbraco/Trees/loadUsers.cs @@ -98,7 +98,13 @@ function openUser(id) { xNode.Icon = "user.gif"; xNode.OpenIcon = "user.gif"; - tree.Add(xNode); + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); + if (xNode != null) + { + tree.Add(xNode); + OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty); + } + } }