// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
//
-#if NET_2_0
using System.Collections;
using System.Text;
using System.IO;
using System.Security.Permissions;
using System.Collections.Generic;
+using System.Web.Util;
namespace System.Web.UI.WebControls
{
[Designer ("System.Web.UI.Design.WebControls.TreeViewDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
public class TreeView: HierarchicalDataBoundControl, IPostBackEventHandler, IPostBackDataHandler, ICallbackEventHandler
{
+ static readonly char[] postDataSplitChars = {'|'};
+
string activeSiteMapPath;
bool stylesPrepared;
Style hoverNodeStyle;
class ImageStyle
{
- public ImageStyle (string expand, string collapse, string noExpand, string icon, string iconLeaf, string iconRoot) {
+ public ImageStyle (string expand, string collapse, string noExpand, string icon, string iconLeaf, string iconRoot)
+ {
Expand = expand;
Collapse = collapse;
NoExpand = noExpand;
{
if (Events != null) {
TreeNodeEventHandler eh = (TreeNodeEventHandler) Events [TreeNodeCheckChangedEvent];
- if (eh != null) eh (this, e);
+ if (eh != null)
+ eh (this, e);
}
}
{
if (Events != null) {
EventHandler eh = (EventHandler) Events [SelectedNodeChangedEvent];
- if (eh != null) eh (this, e);
+ if (eh != null)
+ eh (this, e);
}
}
{
if (Events != null) {
TreeNodeEventHandler eh = (TreeNodeEventHandler) Events [TreeNodeCollapsedEvent];
- if (eh != null) eh (this, e);
+ if (eh != null)
+ eh (this, e);
}
}
{
if (Events != null) {
TreeNodeEventHandler eh = (TreeNodeEventHandler) Events [TreeNodeDataBoundEvent];
- if (eh != null) eh (this, e);
+ if (eh != null)
+ eh (this, e);
}
}
{
if (Events != null) {
TreeNodeEventHandler eh = (TreeNodeEventHandler) Events [TreeNodeExpandedEvent];
- if (eh != null) eh (this, e);
+ if (eh != null)
+ eh (this, e);
}
}
{
if (Events != null) {
TreeNodeEventHandler eh = (TreeNodeEventHandler) Events [TreeNodePopulateEvent];
- if (eh != null) eh (this, e);
+ if (eh != null)
+ eh (this, e);
}
}
[Localizable (true)]
public string CollapseImageToolTip {
- get {
- return ViewState.GetString ("CollapseImageToolTip", "Collapse {0}");
- }
- set {
- ViewState["CollapseImageToolTip"] = value;
- }
+ get { return ViewState.GetString ("CollapseImageToolTip", "Collapse {0}"); }
+ set { ViewState["CollapseImageToolTip"] = value; }
}
[MonoTODO ("Implement support for this")]
[WebSysDescription ("Whether the tree will automatically generate bindings.")]
[DefaultValue (true)]
public bool AutoGenerateDataBindings {
- get {
- return ViewState.GetBool ("AutoGenerateDataBindings", true);
- }
- set {
- ViewState["AutoGenerateDataBindings"] = value;
- }
+ get { return ViewState.GetBool ("AutoGenerateDataBindings", true); }
+ set { ViewState["AutoGenerateDataBindings"] = value; }
}
[DefaultValue ("")]
[WebCategory ("Appearance")]
[Editor ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public string CollapseImageUrl {
- get {
- return ViewState.GetString ("CollapseImageUrl", "");
- }
- set {
- ViewState["CollapseImageUrl"] = value;
- }
+ get { return ViewState.GetString ("CollapseImageUrl", String.Empty); }
+ set { ViewState["CollapseImageUrl"] = value; }
}
[WebCategory ("Data")]
[Themeable (false)]
[DefaultValue (true)]
public bool EnableClientScript {
- get {
- return ViewState.GetBool ("EnableClientScript", true);
- }
- set {
- ViewState["EnableClientScript"] = value;
- }
+ get { return ViewState.GetBool ("EnableClientScript", true); }
+ set { ViewState["EnableClientScript"] = value; }
}
[DefaultValue (-1)]
[WebSysDescription ("The initial expand depth.")]
[TypeConverter ("System.Web.UI.WebControls.TreeView+TreeViewExpandDepthConverter, " + Consts.AssemblySystem_Web)]
public int ExpandDepth {
- get {
- return ViewState.GetInt ("ExpandDepth", -1);
- }
- set {
- ViewState["ExpandDepth"] = value;
- }
+ get { return ViewState.GetInt ("ExpandDepth", -1); }
+ set { ViewState["ExpandDepth"] = value; }
}
[Localizable (true)]
public string ExpandImageToolTip {
- get {
- return ViewState.GetString ("ExpandImageToolTip", "Expand {0}");
- }
- set {
- ViewState["ExpandImageToolTip"] = value;
- }
+ get { return ViewState.GetString ("ExpandImageToolTip", "Expand {0}"); }
+ set { ViewState["ExpandImageToolTip"] = value; }
}
[DefaultValue ("")]
[WebCategory ("Appearance")]
[Editor ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public string ExpandImageUrl {
- get {
- return ViewState.GetString ("ExpandImageUrl", "");
- }
- set {
- ViewState["ExpandImageUrl"] = value;
- }
+ get { return ViewState.GetString ("ExpandImageUrl", String.Empty); }
+ set { ViewState["ExpandImageUrl"] = value; }
}
[PersistenceMode (PersistenceMode.InnerProperty)]
[DefaultValue (TreeViewImageSet.Custom)]
public TreeViewImageSet ImageSet {
- get {
- return (TreeViewImageSet)ViewState.GetInt ("ImageSet", (int)TreeViewImageSet.Custom);
- }
+ get { return (TreeViewImageSet)ViewState.GetInt ("ImageSet", (int)TreeViewImageSet.Custom); }
set {
if (!Enum.IsDefined (typeof (TreeViewImageSet), value))
throw new ArgumentOutOfRangeException ();
[DefaultValue ("")]
public string LineImagesFolder {
- get {
- return ViewState.GetString ("LineImagesFolder", "");
- }
- set {
- ViewState["LineImagesFolder"] = value;
- }
+ get { return ViewState.GetString ("LineImagesFolder", String.Empty); }
+ set { ViewState["LineImagesFolder"] = value; }
}
[DefaultValue (-1)]
public int MaxDataBindDepth {
- get {
- return ViewState.GetInt ("MaxDataBindDepth", -1);
- }
- set {
- ViewState["MaxDataBindDepth"] = value;
- }
+ get { return ViewState.GetInt ("MaxDataBindDepth", -1); }
+ set { ViewState["MaxDataBindDepth"] = value; }
}
[DefaultValue (20)]
public int NodeIndent {
- get {
- return ViewState.GetInt ("NodeIndent", 20);
- }
- set {
- ViewState["NodeIndent"] = value;
- }
+ get { return ViewState.GetInt ("NodeIndent", 20); }
+ set { ViewState["NodeIndent"] = value; }
}
[PersistenceMode (PersistenceMode.InnerProperty)]
[DefaultValue (false)]
public bool NodeWrap {
- get {
- return ViewState.GetBool ("NodeWrap", false);
- }
- set {
- ViewState ["NodeWrap"] = value;
- }
+ get { return ViewState.GetBool ("NodeWrap", false); }
+ set { ViewState ["NodeWrap"] = value; }
}
[UrlProperty]
[WebCategory ("Appearance")]
[Editor ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public string NoExpandImageUrl {
- get {
- return ViewState.GetString ("NoExpandImageUrl", "");
- }
- set {
- ViewState ["NoExpandImageUrl"] = value;
- }
+ get { return ViewState.GetString ("NoExpandImageUrl", String.Empty); }
+ set { ViewState ["NoExpandImageUrl"] = value; }
}
[PersistenceMode (PersistenceMode.InnerProperty)]
[DefaultValue ('/')]
public char PathSeparator {
- get {
- return ViewState.GetChar ("PathSeparator", '/');
- }
- set {
- ViewState ["PathSeparator"] = value;
- }
+ get { return ViewState.GetChar ("PathSeparator", '/'); }
+ set { ViewState ["PathSeparator"] = value; }
}
[DefaultValue (true)]
public bool PopulateNodesFromClient {
- get {
- return ViewState.GetBool ("PopulateNodesFromClient", true);
- }
- set {
- ViewState ["PopulateNodesFromClient"] = value;
- }
+ get { return ViewState.GetBool ("PopulateNodesFromClient", true); }
+ set { ViewState ["PopulateNodesFromClient"] = value; }
}
[PersistenceMode (PersistenceMode.InnerProperty)]
Style RootNodeLinkStyle {
get {
- if (rootNodeLinkStyle == null) {
+ if (rootNodeLinkStyle == null)
rootNodeLinkStyle = new Style ();
- }
return rootNodeLinkStyle;
}
}
Style ParentNodeLinkStyle {
get {
- if (parentNodeLinkStyle == null) {
+ if (parentNodeLinkStyle == null)
parentNodeLinkStyle = new Style ();
- }
return parentNodeLinkStyle;
}
}
Style SelectedNodeLinkStyle {
get {
- if (selectedNodeLinkStyle == null) {
+ if (selectedNodeLinkStyle == null)
selectedNodeLinkStyle = new Style ();
- }
return selectedNodeLinkStyle;
}
}
Style LeafNodeLinkStyle {
get {
- if (leafNodeLinkStyle == null) {
+ if (leafNodeLinkStyle == null)
leafNodeLinkStyle = new Style ();
- }
return leafNodeLinkStyle;
}
}
Style HoverNodeLinkStyle {
get {
- if (hoverNodeLinkStyle == null) {
+ if (hoverNodeLinkStyle == null)
hoverNodeLinkStyle = new Style ();
- }
return hoverNodeLinkStyle;
}
}
[DefaultValue (TreeNodeTypes.None)]
public TreeNodeTypes ShowCheckBoxes {
- get {
- return (TreeNodeTypes)ViewState.GetInt ("ShowCheckBoxes", (int)TreeNodeTypes.None);
- }
+ get { return (TreeNodeTypes)ViewState.GetInt ("ShowCheckBoxes", (int)TreeNodeTypes.None); }
set {
if ((int) value > 7)
throw new ArgumentOutOfRangeException ();
[DefaultValue (true)]
public bool ShowExpandCollapse {
- get {
- return ViewState.GetBool ("ShowExpandCollapse", true);
- }
- set {
- ViewState ["ShowExpandCollapse"] = value;
- }
+ get { return ViewState.GetBool ("ShowExpandCollapse", true); }
+ set { ViewState ["ShowExpandCollapse"] = value; }
}
[DefaultValue (false)]
public bool ShowLines {
- get {
- return ViewState.GetBool ("ShowLines", false);
- }
- set {
- ViewState ["ShowLines"] = value;
- }
+ get { return ViewState.GetBool ("ShowLines", false); }
+ set { ViewState ["ShowLines"] = value; }
}
[Localizable (true)]
public string SkipLinkText
{
- get {
- return ViewState.GetString ("SkipLinkText", "Skip Navigation Links.");
- }
- set {
- ViewState ["SkipLinkText"] = value;
- }
+ get { return ViewState.GetString ("SkipLinkText", "Skip Navigation Links."); }
+ set { ViewState ["SkipLinkText"] = value; }
}
[DefaultValue ("")]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
public string SelectedValue {
- get { return selectedNode != null ? selectedNode.Value : ""; }
+ get { return selectedNode != null ? selectedNode.Value : String.Empty; }
}
[DefaultValue ("")]
public string Target {
- get {
- return ViewState.GetString ("Target", "");
- }
- set {
- ViewState ["Target"] = value;
- }
+ get { return ViewState.GetString ("Target", String.Empty); }
+ set { ViewState ["Target"] = value; }
}
[MonoTODO ("why override?")]
public override bool Visible
{
- get {
- return base.Visible;
- }
- set {
- base.Visible = value;
- }
+ get { return base.Visible; }
+ set { base.Visible = value; }
}
[Browsable (false)]
void FindCheckedNodes (TreeNodeCollection nodeList, TreeNodeCollection result)
{
foreach (TreeNode node in nodeList) {
- if (node.Checked) result.Add (node, false);
+ if (node.Checked)
+ result.Add (node, false);
FindCheckedNodes (node.ChildNodes, result);
}
}
public TreeNode FindNode (string valuePath)
{
- if (valuePath == null) throw new ArgumentNullException ("valuePath");
+ if (valuePath == null)
+ throw new ArgumentNullException ("valuePath");
string[] path = valuePath.Split (PathSeparator);
int n = 0;
TreeNodeCollection col = Nodes;
foundBranch = false;
foreach (TreeNode node in col) {
if (node.Value == path [n]) {
- if (++n == path.Length) return node;
+ if (++n == path.Length)
+ return node;
col = node.ChildNodes;
foundBranch = true;
break;
internal void SetSelectedNode (TreeNode node, bool loading)
{
- if (selectedNode == node) return;
+ if (selectedNode == node)
+ return;
if (selectedNode != null)
selectedNode.SelectedFlag = false;
selectedNode = node;
EnsureDataBound ();
base.TrackViewState();
- if (hoverNodeStyle != null) {
+ if (hoverNodeStyle != null)
hoverNodeStyle.TrackViewState();
- }
- if (leafNodeStyle != null) {
+ if (leafNodeStyle != null)
leafNodeStyle.TrackViewState();
- }
- if (levelStyles != null && levelStyles.Count > 0) {
+ if (levelStyles != null && levelStyles.Count > 0)
((IStateManager)levelStyles).TrackViewState();
- }
- if (nodeStyle != null) {
+ if (nodeStyle != null)
nodeStyle.TrackViewState();
- }
- if (parentNodeStyle != null) {
+ if (parentNodeStyle != null)
parentNodeStyle.TrackViewState();
- }
- if (rootNodeStyle != null) {
+ if (rootNodeStyle != null)
rootNodeStyle.TrackViewState();
- }
- if (selectedNodeStyle != null) {
+ if (selectedNodeStyle != null)
selectedNodeStyle.TrackViewState();
- }
- if (dataBindings != null) {
+ if (dataBindings != null)
((IStateManager)dataBindings).TrackViewState ();
- }
- if (nodes != null) {
+ if (nodes != null)
((IStateManager)nodes).TrackViewState();;
- }
}
protected override object SaveViewState()
ValidateEvent (UniqueID, eventArgument);
string[] args = eventArgument.Split ('|');
TreeNode node = FindNodeByPos (args[1]);
- if (node == null) return;
+ if (node == null)
+ return;
if (args [0] == "sel")
HandleSelectEvent (node);
protected virtual void RaisePostDataChangedEvent ()
{
}
+
+ TreeNode MakeNodeTree (string[] args)
+ {
+ string[] segments = args [0].Split ('_');
+ TreeNode ret = null, node;
+
+ foreach (string seg in segments) {
+ int idx = Int32.Parse (seg);
+ node = new TreeNode (seg);
+ if (ret != null) {
+ ret.ChildNodes.Add (node);
+ node.Index = idx;
+ }
+ ret = node;
+ }
+
+ ret.Value = args [1].Replace ("U+007C", "|");
+ ret.ImageUrl = args [2].Replace ("U+007C", "|");
+ ret.NavigateUrl = args [3].Replace ("U+007C", "|");
+ ret.Target = args [4].Replace ("U+007C", "|");
+ ret.Tree = this;
+
+ NotifyPopulateRequired (ret);
+
+ return ret;
+ }
string callbackResult;
protected virtual void RaiseCallbackEvent (string eventArgs)
{
+ string[] args = eventArgs.Split ('|');
RequiresDataBinding = true;
EnsureDataBound ();
- TreeNode node = FindNodeByPos (eventArgs);
+ TreeNode node = MakeNodeTree (args);
ArrayList levelLines = new ArrayList ();
TreeNode nd = node;
while (nd != null) {
StringWriter sw = new StringWriter ();
HtmlTextWriter writer = new HtmlTextWriter (sw);
EnsureStylesPrepared ();
-
+
node.Expanded = true;
int num = node.ChildNodes.Count;
for (int n=0; n<num; n++)
RenderNode (writer, node.ChildNodes [n], node.Depth + 1, levelLines, true, n<num-1);
string res = sw.ToString ();
- callbackResult = res != "" ? res : "*";
+ callbackResult = res.Length > 0 ? res : "*";
}
protected virtual string GetCallbackResult ()
{
base.PerformDataBinding ();
InitializeDataBindings ();
- HierarchicalDataSourceView data = GetData ("");
+ HierarchicalDataSourceView data = GetData (String.Empty);
if (data == null)
return;
Nodes.Clear ();
if (EnableClientScript && PopulateNodesFromClient) {
string states = postCollection [ClientID + "_PopulatedStates"];
if (states != null) {
- foreach (string id in states.Split ('|')) {
- if (String.IsNullOrEmpty(id))
- continue;
+ foreach (string id in states.Split (postDataSplitChars, StringSplitOptions.RemoveEmptyEntries)) {
TreeNode node = FindNodeByPos (id);
- if (node != null && node.PopulateOnDemand && !node.Populated)
- node.Populate();
+ if (node != null && node.PopulateOnDemand && !node.Populated) {
+ Page page = Page;
+ if (page != null && page.IsCallback)
+ node.Populated = true; // Bug #492307
+ else
+ node.Populate (); // Bug #626829
+ }
}
}
res = true;
if (EnableClientScript) {
string states = postCollection [ClientID + "_ExpandStates"];
if (states != null) {
- string[] ids = states.Split ('|');
+ string[] ids = states.Split (postDataSplitChars, StringSplitOptions.RemoveEmptyEntries);
UnsetExpandStates (Nodes, ids);
SetExpandStates (ids);
- }
- else
+ } else
UnsetExpandStates (Nodes, new string[0]);
res = true;
}
return res;
}
+
+ const string _OnPreRender_Script_Preamble =
+ "var {0} = new Object ();\n" +
+ "{0}.treeId = {1};\n" +
+ "{0}.uid = {2};\n" +
+ "{0}.showImage = {3};\n";
+
+ const string _OnPreRender_Script_ShowExpandCollapse =
+ "{0}.expandImage = {1};\n" +
+ "{0}.collapseImage = {2};\n";
+
+ const string _OnPreRender_Script_ShowExpandCollapse_Populate =
+ "{0}.noExpandImage = {1};\n";
+
+ const string _OnPreRender_Script_PopulateCallback =
+ "{0}.form = {1};\n" +
+ "{0}.PopulateNode = function (nodeId, nodeValue, nodeImageUrl, nodeNavigateUrl, nodeTarget) {{\n" +
+ "\t{2}.__theFormPostData = \"\";\n" +
+ "\t{2}.__theFormPostCollection = new Array ();\n" +
+ "\t{2}.WebForm_InitCallback ();\n" +
+ "\tTreeView_PopulateNode (this.uid, this.treeId, nodeId, nodeValue, nodeImageUrl, nodeNavigateUrl, nodeTarget)\n}};\n";
+
+ const string _OnPreRender_Script_CallbackOptions =
+ "{0}.populateFromClient = {1};\n" +
+ "{0}.expandAlt = {2};\n" +
+ "{0}.collapseAlt = {3};\n";
+
+ const string _OnPreRender_Script_HoverStyle =
+ "{0}.hoverClass = {1};\n" +
+ "{0}.hoverLinkClass = {2};\n";
protected internal override void OnPreRender (EventArgs e)
{
base.OnPreRender (e);
- if (Page != null) {
- if (Enabled)
- Page.RegisterRequiresPostBack (this);
+ Page page = Page;
+ if (page != null) {
+ if (IsEnabled)
+ page.RegisterRequiresPostBack (this);
- if (EnableClientScript && !Page.ClientScript.IsClientScriptIncludeRegistered (typeof(TreeView), "TreeView.js")) {
- string url = Page.ClientScript.GetWebResourceUrl (typeof(TreeView), "TreeView.js");
- Page.ClientScript.RegisterClientScriptInclude (typeof(TreeView), "TreeView.js", url);
+ if (EnableClientScript && !page.ClientScript.IsClientScriptIncludeRegistered (typeof(TreeView), "TreeView.js")) {
+ string url = page.ClientScript.GetWebResourceUrl (typeof(TreeView), "TreeView.js");
+ page.ClientScript.RegisterClientScriptInclude (typeof(TreeView), "TreeView.js", url);
}
}
string ctree = ClientID + "_data";
- string script = string.Format ("var {0} = new Object ();\n", ctree);
- script += string.Format ("{0}.treeId = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (ClientID));
- script += string.Format ("{0}.uid = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (UniqueID));
- script += string.Format ("{0}.showImage = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (ShowExpandCollapse));
+ StringBuilder script = new StringBuilder ();
+ script.AppendFormat (_OnPreRender_Script_Preamble,
+ ctree,
+ ClientScriptManager.GetScriptLiteral (ClientID),
+ ClientScriptManager.GetScriptLiteral (UniqueID),
+ ClientScriptManager.GetScriptLiteral (ShowExpandCollapse));
if (ShowExpandCollapse) {
ImageStyle imageStyle = GetImageStyle ();
- script += string.Format ("{0}.expandImage = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (GetNodeImageUrl ("plus", imageStyle)));
- script += string.Format ("{0}.collapseImage = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (GetNodeImageUrl ("minus", imageStyle)));
+ script.AppendFormat (_OnPreRender_Script_ShowExpandCollapse,
+ ctree,
+ ClientScriptManager.GetScriptLiteral (GetNodeImageUrl ("plus", imageStyle)),
+ ClientScriptManager.GetScriptLiteral (GetNodeImageUrl ("minus", imageStyle)));
+
if (PopulateNodesFromClient)
- script += string.Format ("{0}.noExpandImage = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (GetNodeImageUrl ("noexpand", imageStyle)));
- }
-
- if (Page != null) {
- script += string.Format ("{0}.form = {1};\n", ctree, Page.theForm);
- script += string.Format (
-@"{0}.PopulateNode = function(nodeId) {{
- " + Page.WebFormScriptReference + @".__theFormPostData = """";
- " + Page.WebFormScriptReference + @".__theFormPostCollection = new Array();
- " + Page.WebFormScriptReference + @".WebForm_InitCallback();
- {1};
-}};
-", ctree, Page.ClientScript.GetCallbackEventReference ("this.uid", "nodeId", "TreeView_PopulateCallback", "this.treeId + \" \" + nodeId", "TreeView_PopulateCallback", false));
- script += string.Format ("{0}.populateFromClient = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (PopulateNodesFromClient));
- script += string.Format ("{0}.expandAlt = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (GetNodeImageToolTip (true, null)));
- script += string.Format ("{0}.collapseAlt = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (GetNodeImageToolTip (false, null)));
-
- if (!Page.IsPostBack) {
+ script.AppendFormat (_OnPreRender_Script_ShowExpandCollapse_Populate,
+ ctree,
+ ClientScriptManager.GetScriptLiteral (GetNodeImageUrl ("noexpand", imageStyle)));
+ }
+
+ if (page != null) {
+ script.AppendFormat (_OnPreRender_Script_PopulateCallback,
+ ctree,
+ page.theForm,
+ page.WebFormScriptReference);
+
+ // Page.ClientScript.GetCallbackEventReference (
+ // "this.uid", "nodeId",
+ // "TreeView_PopulateCallback",
+ // "this.treeId + \" \" + nodeId", "TreeView_PopulateCallback", false));
+
+ script.AppendFormat (_OnPreRender_Script_CallbackOptions,
+ ctree,
+ ClientScriptManager.GetScriptLiteral (PopulateNodesFromClient),
+ ClientScriptManager.GetScriptLiteral (GetNodeImageToolTip (true, null)),
+ ClientScriptManager.GetScriptLiteral (GetNodeImageToolTip (false, null)));
+
+ if (!page.IsPostBack)
SetNodesExpandedToDepthRecursive (Nodes);
- }
- if (EnableClientScript) {
- Page.ClientScript.RegisterHiddenField (ClientID + "_ExpandStates", GetExpandStates ());
+ bool enableClientScript = EnableClientScript;
+ if (enableClientScript) {
+ page.ClientScript.RegisterHiddenField (ClientID + "_ExpandStates", GetExpandStates ());
// Make sure the basic script infrastructure is rendered
- Page.ClientScript.RegisterWebFormClientScript ();
+ page.ClientScript.RegisterWebFormClientScript ();
}
- if (EnableClientScript && PopulateNodesFromClient) {
- Page.ClientScript.RegisterHiddenField (ClientID + "_PopulatedStates", "|");
- }
+ if (enableClientScript && PopulateNodesFromClient)
+ page.ClientScript.RegisterHiddenField (ClientID + "_PopulatedStates", "|");
EnsureStylesPrepared ();
if (hoverNodeStyle != null) {
- if (Page.Header == null)
+ if (page.Header == null)
throw new InvalidOperationException ("Using TreeView.HoverNodeStyle requires Page.Header to be non-null (e.g. <head runat=\"server\" />).");
RegisterStyle (HoverNodeStyle, HoverNodeLinkStyle);
- script += string.Format ("{0}.hoverClass = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (HoverNodeStyle.RegisteredCssClass));
- script += string.Format ("{0}.hoverLinkClass = {1};\n", ctree, ClientScriptManager.GetScriptLiteral (HoverNodeLinkStyle.RegisteredCssClass));
+ script.AppendFormat (_OnPreRender_Script_HoverStyle,
+ ctree,
+ ClientScriptManager.GetScriptLiteral (HoverNodeStyle.RegisteredCssClass),
+ ClientScriptManager.GetScriptLiteral (HoverNodeLinkStyle.RegisteredCssClass));
}
- Page.ClientScript.RegisterStartupScript (typeof(TreeView), this.UniqueID, script, true);
+ page.ClientScript.RegisterStartupScript (typeof(TreeView), this.UniqueID, script.ToString (), true);
+ script = null;
}
}
- void EnsureStylesPrepared () {
+ void EnsureStylesPrepared ()
+ {
if (stylesPrepared)
return;
stylesPrepared = true;
PrepareStyles ();
}
- void PrepareStyles () {
+ void PrepareStyles ()
+ {
// The order in which styles are defined matters when more than one class
// is assigned to an element
ControlLinkStyle.CopyTextStylesFrom (ControlStyle);
RegisterStyle (SelectedNodeStyle, SelectedNodeLinkStyle);
}
- void SetNodesExpandedToDepthRecursive (TreeNodeCollection nodes) {
+ void SetNodesExpandedToDepthRecursive (TreeNodeCollection nodes)
+ {
foreach (TreeNode node in nodes) {
if (!node.Expanded.HasValue) {
if (ExpandDepth < 0 || node.Depth < ExpandDepth)
}
}
- string IncrementStyleClassName () {
+ string IncrementStyleClassName ()
+ {
registeredStylesCounter++;
return ClientID + "_" + registeredStylesCounter;
}
- void RegisterStyle (Style baseStyle, Style linkStyle) {
+ void RegisterStyle (Style baseStyle, Style linkStyle)
+ {
linkStyle.CopyTextStylesFrom (baseStyle);
linkStyle.BorderStyle = BorderStyle.None;
+ linkStyle.AddCssClass (baseStyle.CssClass);
baseStyle.Font.Reset ();
RegisterStyle (linkStyle);
RegisterStyle (baseStyle);
}
- void RegisterStyle (Style baseStyle) {
+ void RegisterStyle (Style baseStyle)
+ {
if (Page.Header == null)
return;
string className = IncrementStyleClassName ().Trim ('_');
return dataMember + " " + depth;
}
- void InitializeDataBindings () {
+ void InitializeDataBindings ()
+ {
if (dataBindings != null && dataBindings.Count > 0) {
bindings = new Hashtable ();
foreach (TreeNodeBinding bin in dataBindings) {
if (!bindings.ContainsKey(key))
bindings [key] = bin;
}
- }
- else
+ } else
bindings = null;
}
return null;
TreeNodeBinding bin = (TreeNodeBinding) bindings [GetBindingKey (type, depth)];
- if (bin != null) return bin;
+ if (bin != null)
+ return bin;
bin = (TreeNodeBinding) bindings [GetBindingKey (type, -1)];
- if (bin != null) return bin;
+ if (bin != null)
+ return bin;
- bin = (TreeNodeBinding) bindings [GetBindingKey ("", depth)];
- if (bin != null) return bin;
+ bin = (TreeNodeBinding) bindings [GetBindingKey (String.Empty, depth)];
+ if (bin != null)
+ return bin;
- return (TreeNodeBinding) bindings [GetBindingKey ("", -1)];
+ return (TreeNodeBinding) bindings [GetBindingKey (String.Empty, -1)];
}
internal void DecorateNode(TreeNode node)
public override void RenderBeginTag (HtmlTextWriter writer)
{
- if (SkipLinkText != "") {
+ string skipLinkText = SkipLinkText;
+
+ if (!String.IsNullOrEmpty (skipLinkText)) {
writer.AddAttribute (HtmlTextWriterAttribute.Href, "#" + ClientID + "_SkipLink");
writer.RenderBeginTag (HtmlTextWriterTag.A);
- Image img = new Image ();
ClientScriptManager csm = new ClientScriptManager (null);
- img.ImageUrl = csm.GetWebResourceUrl (typeof (SiteMapPath), "transparent.gif");
- img.Attributes.Add ("height", "0");
- img.Attributes.Add ("width", "0");
- img.AlternateText = SkipLinkText;
- img.Render (writer);
-
- writer.RenderEndTag ();
+
+ writer.AddAttribute (HtmlTextWriterAttribute.Alt, skipLinkText);
+ writer.AddAttribute (HtmlTextWriterAttribute.Src, csm.GetWebResourceUrl (typeof (SiteMapPath), "transparent.gif"));
+ writer.AddAttribute (HtmlTextWriterAttribute.Height, "0");
+ writer.AddAttribute (HtmlTextWriterAttribute.Width, "0");
+ writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px");
+ writer.RenderBeginTag (HtmlTextWriterTag.Img);
+
+ writer.RenderEndTag (); // img
+ writer.RenderEndTag (); // a
}
base.RenderBeginTag (writer);
}
{
base.RenderEndTag (writer);
- if (SkipLinkText != "") {
+ if (!String.IsNullOrEmpty (SkipLinkText)) {
writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_SkipLink");
writer.RenderBeginTag (HtmlTextWriterTag.A);
writer.RenderEndTag ();
void RenderNode (HtmlTextWriter writer, TreeNode node, int level, ArrayList levelLines, bool hasPrevious, bool hasNext)
{
+ // FIXME: disabled for now - needs closer investigation
+ //if (node.PopulateOnDemand && node.HadChildrenBeforePopulating)
+ // throw new InvalidOperationException ("PopulateOnDemand cannot be set to true on a node that already has children.");
+
DecorateNode(node);
string nodeImage;
else
hasChildNodes = (node.PopulateOnDemand && !node.Populated) || node.ChildNodes.Count > 0;
- writer.AddAttribute ("cellpadding", "0", false);
- writer.AddAttribute ("cellspacing", "0", false);
- writer.AddStyleAttribute ("border-width", "0");
+ writer.AddAttribute (HtmlTextWriterAttribute.Cellpadding, "0", false);
+ writer.AddAttribute (HtmlTextWriterAttribute.Cellspacing, "0", false);
+ writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0");
writer.RenderBeginTag (HtmlTextWriterTag.Table);
- Unit nodeSpacing = GetNodeSpacing (node);
-
- if (nodeSpacing != Unit.Empty && (node.Depth > 0 || node.Index > 0))
- RenderMenuItemSpacing (writer, nodeSpacing);
-
writer.RenderBeginTag (HtmlTextWriterTag.Tr);
// Vertical lines from previous levels
nodeImage = GetNodeImageUrl ("i", imageStyle);
for (int n=0; n<level; n++) {
writer.RenderBeginTag (HtmlTextWriterTag.Td);
- writer.AddStyleAttribute ("width", NodeIndent + "px");
- writer.AddStyleAttribute ("height", "1px");
+ writer.AddStyleAttribute (HtmlTextWriterStyle.Width, NodeIndent + "px");
+ writer.AddStyleAttribute (HtmlTextWriterStyle.Height, "1px");
writer.RenderBeginTag (HtmlTextWriterTag.Div);
if (ShowLines && levelLines [n] != null) {
- writer.AddAttribute ("src", nodeImage);
- writer.AddAttribute (HtmlTextWriterAttribute.Alt, "", false);
+ writer.AddAttribute (HtmlTextWriterAttribute.Src, nodeImage);
+ writer.AddAttribute (HtmlTextWriterAttribute.Alt, String.Empty, false);
writer.RenderBeginTag (HtmlTextWriterTag.Img);
writer.RenderEndTag ();
}
}
// Node image + line
-
- if (ShowExpandCollapse || ShowLines) {
+ bool showExpandCollapse = ShowExpandCollapse;
+ bool showLines = ShowLines;
+ if (showExpandCollapse || showLines) {
bool buttonImage = false;
- string tooltip = "";
- string shape = "";
+ string tooltip = String.Empty;
+ string shape = String.Empty;
- if (ShowLines) {
- if (hasPrevious && hasNext) shape = "t";
- else if (hasPrevious && !hasNext) shape = "l";
- else if (!hasPrevious && hasNext) shape = "r";
- else shape = "dash";
+ if (showLines) {
+ if (hasPrevious && hasNext)
+ shape = "t";
+ else if (hasPrevious && !hasNext)
+ shape = "l";
+ else if (!hasPrevious && hasNext)
+ shape = "r";
+ else
+ shape = "dash";
}
- if (ShowExpandCollapse) {
+ if (showExpandCollapse) {
if (hasChildNodes) {
buttonImage = true;
- if (node.Expanded.HasValue && node.Expanded.Value) shape += "minus";
- else shape += "plus";
+ if (node.Expanded.HasValue && node.Expanded.Value)
+ shape += "minus";
+ else
+ shape += "plus";
tooltip = GetNodeImageToolTip (!(node.Expanded.HasValue && node.Expanded.Value), node.Text);
- } else if (!ShowLines)
+ } else if (!showLines)
shape = "noexpand";
}
- if (shape != "") {
+ if (!String.IsNullOrEmpty (shape)) {
nodeImage = GetNodeImageUrl (shape, imageStyle);
writer.RenderBeginTag (HtmlTextWriterTag.Td); // TD
if (buttonImage) {
if (!clientExpand || (!PopulateNodesFromClient && node.PopulateOnDemand && !node.Populated))
- writer.AddAttribute ("href", GetClientEvent (node, "ec"));
+ writer.AddAttribute (HtmlTextWriterAttribute.Href, GetClientEvent (node, "ec"));
else
- writer.AddAttribute ("href", GetClientExpandEvent(node));
+ writer.AddAttribute (HtmlTextWriterAttribute.Href, GetClientExpandEvent(node));
writer.RenderBeginTag (HtmlTextWriterTag.A); // Anchor
}
- writer.AddAttribute ("alt", tooltip);
+ // tooltip is 'HtmlAttributeEncoded'
+ writer.AddAttribute (HtmlTextWriterAttribute.Alt, tooltip);
if (buttonImage && clientExpand)
- writer.AddAttribute ("id", GetNodeClientId (node, "img"));
- writer.AddAttribute ("src", nodeImage);
+ writer.AddAttribute (HtmlTextWriterAttribute.Id, GetNodeClientId (node, "img"));
+ writer.AddAttribute (HtmlTextWriterAttribute.Src, nodeImage);
if (buttonImage)
writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0");
writer.RenderBeginTag (HtmlTextWriterTag.Img);
if (!String.IsNullOrEmpty (imageUrl)) {
writer.RenderBeginTag (HtmlTextWriterTag.Td); // TD
+ writer.AddAttribute (HtmlTextWriterAttribute.Tabindex, "-1");
BeginNodeTag (writer, node, clientExpand);
- writer.AddAttribute ("src", imageUrl);
+ writer.AddAttribute (HtmlTextWriterAttribute.Src, imageUrl);
writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0");
- writer.AddAttribute ("alt", node.ImageToolTip);
+ writer.AddAttribute (HtmlTextWriterAttribute.Alt, node.ImageToolTip);
writer.RenderBeginTag (HtmlTextWriterTag.Img);
writer.RenderEndTag (); // IMG
writer.RenderEndTag (); // style tag
}
if (!NodeWrap)
- writer.AddStyleAttribute ("white-space", "nowrap");
+ writer.AddStyleAttribute (HtmlTextWriterStyle.WhiteSpace, "nowrap");
bool nodeIsSelected = node == SelectedNode && selectedNodeStyle != null;
if (!nodeIsSelected && selectedNodeStyle != null) {
if (!String.IsNullOrEmpty (activeSiteMapPath))
- nodeIsSelected = String.Compare (activeSiteMapPath,
- node.NavigateUrl,
- HttpRuntime.CaseInsensitive ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal) == 0;
+ nodeIsSelected = String.Compare (activeSiteMapPath, node.NavigateUrl, RuntimeHelpers.StringComparison) == 0;
}
AddNodeStyle (writer, node, level, nodeIsSelected);
// Checkbox
if (node.ShowCheckBoxInternal) {
- writer.AddAttribute ("name", ClientID + "_cs_" + node.Path);
- writer.AddAttribute ("type", "checkbox", false);
- writer.AddAttribute ("title", node.Text);
- if (node.Checked) writer.AddAttribute ("checked", "checked", false);
+ writer.AddAttribute (HtmlTextWriterAttribute.Name, ClientID + "_cs_" + node.Path);
+ writer.AddAttribute (HtmlTextWriterAttribute.Type, "checkbox", false);
+ string str = node.ToolTip;
+ if (!String.IsNullOrEmpty (str))
+ writer.AddAttribute (HtmlTextWriterAttribute.Title, str);
+ if (node.Checked)
+ writer.AddAttribute (HtmlTextWriterAttribute.Checked, "checked", false);
writer.RenderBeginTag (HtmlTextWriterTag.Input); // INPUT
writer.RenderEndTag (); // INPUT
}
node.BeginRenderText (writer);
if (clientExpand)
- writer.AddAttribute ("id", GetNodeClientId (node, "txt"));
+ writer.AddAttribute (HtmlTextWriterAttribute.Id, GetNodeClientId (node, "txt"));
AddNodeLinkStyle (writer, node, level, nodeIsSelected);
BeginNodeTag (writer, node, clientExpand);
writer.Write (node.Text);
writer.RenderEndTag (); // TD
writer.RenderEndTag (); // TR
-
- if (nodeSpacing != Unit.Empty)
- RenderMenuItemSpacing (writer, nodeSpacing);
writer.RenderEndTag (); // TABLE
if (clientExpand) {
if (!(node.Expanded.HasValue && node.Expanded.Value))
- writer.AddStyleAttribute ("display", "none");
+ writer.AddStyleAttribute (HtmlTextWriterStyle.Display, "none");
else
- writer.AddStyleAttribute ("display", "block");
- writer.AddAttribute ("id", GetNodeClientId (node, null));
+ writer.AddStyleAttribute (HtmlTextWriterStyle.Display, "block");
+ writer.AddAttribute (HtmlTextWriterAttribute.Id, GetNodeClientId (node, null));
writer.RenderBeginTag (HtmlTextWriterTag.Span);
if (renderChildNodes) {
return;
writer.RenderBeginTag (HtmlTextWriterTag.Table);
- writer.AddAttribute ("height", ((int) value).ToString (), false);
+ writer.AddAttribute (HtmlTextWriterAttribute.Height, ((int) value).ToString (), false);
writer.RenderBeginTag (HtmlTextWriterTag.Tr);
writer.RenderBeginTag (HtmlTextWriterTag.Td);
writer.RenderEndTag (); // td
writer.RenderEndTag (); // table
}
- void RenderMenuItemSpacing (HtmlTextWriter writer, Unit itemSpacing) {
- writer.AddStyleAttribute ("height", itemSpacing.ToString ());
+ void RenderMenuItemSpacing (HtmlTextWriter writer, Unit itemSpacing)
+ {
writer.RenderBeginTag (HtmlTextWriterTag.Tr);
writer.RenderBeginTag (HtmlTextWriterTag.Td);
writer.RenderEndTag ();
writer.RenderEndTag ();
}
- Unit GetNodeSpacing (TreeNode node) {
- if (node.Selected && selectedNodeStyle != null && selectedNodeStyle.NodeSpacing != Unit.Empty) {
+ Unit GetNodeSpacing (TreeNode node)
+ {
+ if (node.Selected && selectedNodeStyle != null && selectedNodeStyle.NodeSpacing != Unit.Empty)
return selectedNodeStyle.NodeSpacing;
- }
- if (levelStyles != null && node.Depth < levelStyles.Count && levelStyles [node.Depth].NodeSpacing != Unit.Empty) {
+ if (levelStyles != null && node.Depth < levelStyles.Count && levelStyles [node.Depth].NodeSpacing != Unit.Empty)
return levelStyles [node.Depth].NodeSpacing;
- }
if (node.IsLeafNode) {
if (leafNodeStyle != null && leafNodeStyle.NodeSpacing != Unit.Empty)
return leafNodeStyle.NodeSpacing;
- }
- else if (node.IsRootNode) {
+ } else if (node.IsRootNode) {
if (rootNodeStyle != null && rootNodeStyle.NodeSpacing != Unit.Empty)
return rootNodeStyle.NodeSpacing;
- }
- else if (node.IsParentNode) {
+ } else if (node.IsParentNode) {
if (parentNodeStyle != null && parentNodeStyle.NodeSpacing != Unit.Empty)
return parentNodeStyle.NodeSpacing;
}
if (Page.Header != null) {
// styles are registered
if (nodeStyle != null) {
- style.AddCssClass (nodeStyle.CssClass);
- style.AddCssClass (nodeStyle.RegisteredCssClass);
+ style.PrependCssClass (nodeStyle.RegisteredCssClass);
+ style.PrependCssClass (nodeStyle.CssClass);
}
if (node.IsLeafNode) {
if (leafNodeStyle != null) {
- style.AddCssClass (leafNodeStyle.CssClass);
- style.AddCssClass (leafNodeStyle.RegisteredCssClass);
+ style.PrependCssClass (leafNodeStyle.RegisteredCssClass);
+ style.PrependCssClass (leafNodeStyle.CssClass);
}
} else if (node.IsRootNode) {
if (rootNodeStyle != null) {
- style.AddCssClass (rootNodeStyle.CssClass);
- style.AddCssClass (rootNodeStyle.RegisteredCssClass);
+ style.PrependCssClass (rootNodeStyle.RegisteredCssClass);
+ style.PrependCssClass (rootNodeStyle.CssClass);
}
} else if (node.IsParentNode) {
if (parentNodeStyle != null) {
- style.AddCssClass (parentNodeStyle.CssClass);
style.AddCssClass (parentNodeStyle.RegisteredCssClass);
+ style.AddCssClass (parentNodeStyle.CssClass);
}
}
+
if (levelStyles != null && levelStyles.Count > level) {
- style.AddCssClass (levelStyles [level].CssClass);
- style.AddCssClass (levelStyles [level].RegisteredCssClass);
+ style.PrependCssClass (levelStyles [level].RegisteredCssClass);
+ style.PrependCssClass (levelStyles [level].CssClass);
}
if (nodeIsSelected) {
- style.AddCssClass (selectedNodeStyle.CssClass);
style.AddCssClass (selectedNodeStyle.RegisteredCssClass);
+ style.AddCssClass (selectedNodeStyle.CssClass);
}
} else {
// styles are not registered
if (leafNodeStyle != null) {
style.CopyFrom (leafNodeStyle);
}
- }
- else if (node.IsRootNode) {
+ } else if (node.IsRootNode) {
if (rootNodeStyle != null) {
style.CopyFrom (rootNodeStyle);
}
- }
- else if (node.IsParentNode) {
+ } else if (node.IsParentNode) {
if (parentNodeStyle != null) {
style.CopyFrom (parentNodeStyle);
}
}
- if (levelStyles != null && levelStyles.Count > level) {
+ if (levelStyles != null && levelStyles.Count > level)
style.CopyFrom (levelStyles [level]);
- }
- if (nodeIsSelected) {
+ if (nodeIsSelected)
style.CopyFrom (selectedNodeStyle);
- }
}
style.AddAttributesToRender (writer);
}
void AddNodeLinkStyle (HtmlTextWriter writer, TreeNode node, int level, bool nodeIsSelected)
{
Style style = new Style ();
+ bool addBorderStyle = false;
if (Page.Header != null) {
// styles are registered
style.AddCssClass (ControlLinkStyle.RegisteredCssClass);
style.AddCssClass (nodeLinkStyle.CssClass);
style.AddCssClass (nodeLinkStyle.RegisteredCssClass);
}
+
+ if (levelLinkStyles != null && levelLinkStyles.Count > level) {
+ style.AddCssClass (levelLinkStyles [level].CssClass);
+ style.AddCssClass (levelLinkStyles [level].RegisteredCssClass);
+ addBorderStyle = true;
+ }
+
if (node.IsLeafNode) {
if (leafNodeStyle != null) {
style.AddCssClass (leafNodeLinkStyle.CssClass);
style.AddCssClass (leafNodeLinkStyle.RegisteredCssClass);
}
- }
- else if (node.IsRootNode) {
+ } else if (node.IsRootNode) {
if (rootNodeStyle != null) {
style.AddCssClass (rootNodeLinkStyle.CssClass);
style.AddCssClass (rootNodeLinkStyle.RegisteredCssClass);
}
- }
- else if (node.IsParentNode) {
+ } else if (node.IsParentNode) {
if (parentNodeStyle != null) {
style.AddCssClass (parentNodeLinkStyle.CssClass);
style.AddCssClass (parentNodeLinkStyle.RegisteredCssClass);
}
}
- if (levelStyles != null && levelStyles.Count > level) {
- style.AddCssClass (levelLinkStyles [level].CssClass);
- style.AddCssClass (levelLinkStyles [level].RegisteredCssClass);
- }
+
if (nodeIsSelected) {
style.AddCssClass (selectedNodeLinkStyle.CssClass);
style.AddCssClass (selectedNodeLinkStyle.RegisteredCssClass);
}
- }
- else {
+ } else {
// styles are not registered
style.CopyFrom (ControlLinkStyle);
- if (nodeStyle != null) {
+ if (nodeStyle != null)
style.CopyFrom (nodeLinkStyle);
+
+ if (levelLinkStyles != null && levelLinkStyles.Count > level) {
+ style.CopyFrom (levelLinkStyles [level]);
+ addBorderStyle = true;
}
+
if (node.IsLeafNode) {
- if (node.IsLeafNode && leafNodeStyle != null) {
+ if (node.IsLeafNode && leafNodeStyle != null)
style.CopyFrom (leafNodeLinkStyle);
- }
- }
- else if (node.IsRootNode) {
- if (node.IsRootNode && rootNodeStyle != null) {
+ } else if (node.IsRootNode) {
+ if (node.IsRootNode && rootNodeStyle != null)
style.CopyFrom (rootNodeLinkStyle);
- }
- }
- else if (node.IsParentNode) {
- if (node.IsParentNode && parentNodeStyle != null) {
+ } else if (node.IsParentNode) {
+ if (node.IsParentNode && parentNodeStyle != null)
style.CopyFrom (parentNodeLinkStyle);
- }
- }
- if (levelStyles != null && levelStyles.Count > level) {
- style.CopyFrom (levelLinkStyles [level]);
}
- if (nodeIsSelected) {
+
+ if (nodeIsSelected)
style.CopyFrom (selectedNodeLinkStyle);
- }
+
style.AlwaysRenderTextDecoration = true;
}
+ if (addBorderStyle) {
+ // This appears not to come from any style. Instead, it's added
+ // whenever a level style is present.
+ writer.AddStyleAttribute (HtmlTextWriterStyle.BorderStyle, "none");
+ writer.AddStyleAttribute (HtmlTextWriterStyle.FontSize, "1em");
+ }
style.AddAttributesToRender (writer);
}
void BeginNodeTag (HtmlTextWriter writer, TreeNode node, bool clientExpand)
{
if(node.ToolTip.Length>0)
- writer.AddAttribute ("title", node.ToolTip);
+ writer.AddAttribute (HtmlTextWriterAttribute.Title, node.ToolTip);
- if (node.NavigateUrl != "") {
+ string navigateUrl = node.NavigateUrl;
+ if (!String.IsNullOrEmpty (navigateUrl)) {
string target = node.Target.Length > 0 ? node.Target : Target;
-#if TARGET_J2EE
- string navUrl = ResolveClientUrl (node.NavigateUrl, String.Compare (target, "_blank", StringComparison.InvariantCultureIgnoreCase) != 0);
-#else
- string navUrl = ResolveClientUrl (node.NavigateUrl);
-#endif
- writer.AddAttribute ("href", navUrl);
+ string navUrl = ResolveClientUrl (navigateUrl);
+ writer.AddAttribute (HtmlTextWriterAttribute.Href, navUrl);
if (target.Length > 0)
- writer.AddAttribute ("target", target);
+ writer.AddAttribute (HtmlTextWriterAttribute.Target, target);
writer.RenderBeginTag (HtmlTextWriterTag.A);
- }
- else if (node.SelectAction != TreeNodeSelectAction.None) {
+ } else if (node.SelectAction != TreeNodeSelectAction.None) {
if (node.SelectAction == TreeNodeSelectAction.Expand && clientExpand)
- writer.AddAttribute ("href", GetClientExpandEvent (node));
+ writer.AddAttribute (HtmlTextWriterAttribute.Href, GetClientExpandEvent (node));
else
- writer.AddAttribute ("href", GetClientEvent (node, "sel"));
+ writer.AddAttribute (HtmlTextWriterAttribute.Href, GetClientEvent (node, "sel"));
+
writer.RenderBeginTag (HtmlTextWriterTag.A);
- }
- else
+ } else
writer.RenderBeginTag (HtmlTextWriterTag.Span);
}
- string GetNodeImageToolTip (bool expand, string txt) {
- if (expand) {
- if (ExpandImageToolTip != "")
- return String.Format (ExpandImageToolTip, txt);
+ string GetNodeImageToolTip (bool expand, string txt)
+ {
+ if (expand) {
+ string expandImageToolTip = ExpandImageToolTip;
+ if (!String.IsNullOrEmpty (expandImageToolTip))
+ return String.Format (expandImageToolTip, HttpUtility.HtmlAttributeEncode (txt));
else if (txt != null)
- return "Expand " + txt;
+ return "Expand " + HttpUtility.HtmlAttributeEncode (txt);
else
return "Expand {0}";
} else {
- if (CollapseImageToolTip != "")
- return String.Format (CollapseImageToolTip, txt);
+ string collapseImageToolTip = CollapseImageToolTip;
+ if (!String.IsNullOrEmpty (collapseImageToolTip))
+ return String.Format (collapseImageToolTip, HttpUtility.HtmlAttributeEncode (txt));
else if (txt != null)
- return "Collapse " + txt;
+ return "Collapse " + HttpUtility.HtmlAttributeEncode (txt);
else
return "Collapse {0}";
}
string GetNodeClientId (TreeNode node, string sufix)
{
- return ClientID + "_" + node.Path + (sufix != null ? "_" + sufix : "");
+ return ClientID + "_" + node.Path + (sufix != null ? "_" + sufix : String.Empty);
}
string GetNodeImageUrl (string shape, ImageStyle imageStyle)
if (shape == "plus") {
if (!String.IsNullOrEmpty (imageStyle.Expand))
return GetNodeIconUrl (imageStyle.Expand);
- }
- else if (shape == "minus") {
+ } else if (shape == "minus") {
if (!String.IsNullOrEmpty (imageStyle.Collapse))
return GetNodeIconUrl (imageStyle.Collapse);
- }
- else if (shape == "noexpand") {
+ } else if (shape == "noexpand") {
if (!String.IsNullOrEmpty (imageStyle.NoExpand))
return GetNodeIconUrl (imageStyle.NoExpand);
}
- }
- else {
+ } else {
if (shape == "plus") {
if (!String.IsNullOrEmpty (ExpandImageUrl))
return ResolveClientUrl (ExpandImageUrl);
- }
- else if (shape == "minus") {
+ } else if (shape == "minus") {
if (!String.IsNullOrEmpty (CollapseImageUrl))
return ResolveClientUrl (CollapseImageUrl);
- }
- else if (shape == "noexpand") {
+ } else if (shape == "noexpand") {
if (!String.IsNullOrEmpty (NoExpandImageUrl))
return ResolveClientUrl (NoExpandImageUrl);
}
string GetClientExpandEvent (TreeNode node)
{
- return "javascript:TreeView_ToggleExpand ('" + ClientID + "', '" + node.Path + "')";
+ return String.Format ("javascript:TreeView_ToggleExpand ('{0}','{1}','{2}','{3}','{4}','{5}')",
+ ClientID,
+ node.Path,
+ HttpUtility.HtmlAttributeEncode (node.Value).Replace ("'", "\\'").Replace ("|","U+007C"),
+ HttpUtility.HtmlAttributeEncode (node.ImageUrl).Replace ("'", "\\'").Replace ("|","U+007c"),
+ HttpUtility.HtmlAttributeEncode (node.NavigateUrl).Replace ("'", "\\'").Replace ("|","U+007C"),
+ HttpUtility.HtmlAttributeEncode (node.Target).Replace ("'", "\\'").Replace ("|","U+007C"));
}
-
+
TreeNode FindNodeByPos (string path)
{
string[] indexes = path.Split ('_');
void SetExpandStates (string[] states)
{
foreach (string id in states) {
- if (id == null || id == "") continue;
+ if (String.IsNullOrEmpty (id))
+ continue;
TreeNode node = FindNodeByPos (id);
if (node != null)
node.Expanded = true;
}
}
}
-
-#endif