Menu adapter and Sharepoint 2007 tr2

Last post 11-01-2006 11:43 AM by bigbaddcp. 0 replies.

Sort Posts:

  • Menu adapter and Sharepoint 2007 tr2

    11-01-2006, 11:43 AM
    • Member
      5 point Member
    • bigbaddcp
    • Member since 11-01-2006, 12:39 PM
    • Posts 1

    I am having a bit of trouble with the Menu adapter and Sharepoint 2007 tr2. I have the adapter working fine and it is outputting the appropraite HTML. The problem is that it is not recognizing the current page as selected. When I turn off the adapters the selected item works fine. Any thoughts? I have included my adapter code if it is helpful.

     

    -dcp

     

    1    using System;
    2    using System.IO;
    3    using System.Web;
    4    using System.Web.Configuration;
    5    using System.Web.UI;
    6    using System.Web.UI.WebControls;
    7    using System.Web.UI.HtmlControls;
    8    
    9    namespace CSSFriendly
    10   {
    11       public class MenuAdapter : System.Web.UI.WebControls.Adapters.MenuAdapter
    12       {
    13           private WebControlAdapterExtender _extender = null;
    14           private WebControlAdapterExtender Extender
    15           {
    16               get
    17               {
    18                   if (((_extender == null) && (Control != null)) ||
    19                       ((_extender != null) && (Control != _extender.AdaptedControl)))
    20                   {
    21                       _extender = new WebControlAdapterExtender(Control);
    22                   }
    23   
    24                   System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance");
    25                   return _extender;
    26               }
    27           }
    28   
    29           protected override void OnInit(EventArgs e)
    30           {
    31               base.OnInit(e);
    32   
    33               if (Extender.AdapterEnabled)
    34               {
    35                   RegisterScripts();
    36               }
    37           }
    38   
    39           private void RegisterScripts()
    40           {
    41               Extender.RegisterScripts();
    42               string folderPath = WebConfigurationManager.AppSettings.Get("CSSFriendly-JavaScript-Path");
    43               if (String.IsNullOrEmpty(folderPath))
    44               {
    45                   folderPath = "~/JavaScript";
    46               }
    47               string filePath = folderPath.EndsWith("/") ? folderPath + "MenuAdapter.js" : folderPath + "/MenuAdapter.js";
    48               Page.ClientScript.RegisterClientScriptInclude(GetType(), GetType().ToString(), Page.ResolveUrl(filePath));
    49           }
    50   
    51           protected override void RenderBeginTag(HtmlTextWriter writer)
    52           {
    53               if (Extender.AdapterEnabled)
    54               {
    55                   //Extender.RenderBeginTag(writer, "AspNet-Menu-" + Control.Orientation.ToString());
    56                   Extender.RenderBeginTag(writer, "");
    57               }
    58               else
    59               {
    60                   base.RenderBeginTag(writer);
    61               }
    62           }
    63   
    64           protected override void RenderEndTag(HtmlTextWriter writer)
    65           {
    66               if (Extender.AdapterEnabled)
    67               {
    68                   Extender.RenderEndTag(writer);
    69               }
    70               else
    71               {
    72                   base.RenderEndTag(writer);
    73               }
    74           }
    75   
    76           protected override void RenderContents(HtmlTextWriter writer)
    77           {
    78               if (Extender.AdapterEnabled)
    79               {
    80                   writer.Indent++;
    81                   BuildItems(Control.Items, true, writer);
    82                   writer.Indent--;
    83                   writer.WriteLine();
    84               }
    85               else
    86               {
    87                   base.RenderContents(writer);
    88               }
    89           }
    90   
    91           private void BuildItems(MenuItemCollection items, bool isRoot, HtmlTextWriter writer)
    92           {
    93               Menu menu = Control as Menu;
    94               if (items.Count > 0)
    95               {
    96                   writer.WriteLine();
    97   
    98                   writer.WriteBeginTag("ul");
    99                   if ((isRoot) && menu.StaticMenuStyle.CssClass != "")
    100                  {
    101                      writer.WriteAttribute("id", menu.StaticMenuStyle.CssClass);
    102                  }
    103                  writer.Write(HtmlTextWriter.TagRightChar);
    104                  writer.Indent++;
    105                                 
    106                  foreach (MenuItem item in items)
    107                  {
    108                      BuildItem(item, writer);
    109                  }
    110  
    111                  writer.Indent--;
    112                  writer.WriteLine();
    113                  writer.WriteEndTag("ul");
    114              }
    115          }
    116  
    117          private void BuildItem(MenuItem item, HtmlTextWriter writer)
    118          {
    119              Menu menu = Control as Menu;
    120              if ((menu != null) && (item != null) && (writer != null))
    121              {
    122                  writer.WriteLine();
    123                  writer.WriteBeginTag("li");
    124                  if (item.Selected)
    125                  {
    126                      writer.WriteAttribute("class", "AspNet-Menu-Leaf-Selected");
    127                  }
    128                  else
    129                  {
    130                      writer.WriteAttribute("class", item.ChildItems.Count > 0 ? "AspNet-Menu-WithChildren" : "AspNet-Menu-Leaf");
    131                  }
    132                  ////string theClass = (item.ChildItems.Count > 0) ? "AspNet-Menu-WithChildren" : "AspNet-Menu-Leaf";
    133                  string theClass = String.Empty;
    134                  string selectedStatusClass = GetSelectStatusClass(item);
    135                  if (!String.IsNullOrEmpty(selectedStatusClass))
    136                  {
    137                      theClass += " " + selectedStatusClass;
    138                      writer.WriteAttribute("class", theClass);
    139                  }
    140                  //writer.WriteAttribute("class", theClass);
    141  
    142                  string strID = item.Text.ToLower();
    143                  strID = strID.Replace(" ", "_").Replace("&", "and");
    144                  writer.WriteAttribute("id", menu.StaticMenuItemStyle.CssClass + strID);
    145  
    146                  writer.Write(HtmlTextWriter.TagRightChar);
    147                  writer.Indent++;
    148                  writer.WriteLine();
    149  
    150                  if (((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null)) ||
    151                      ((item.Depth >= menu.StaticDisplayLevels) && (menu.DynamicItemTemplate != null)))
    152                  {
    153                      writer.WriteBeginTag("div");
    154                      writer.WriteAttribute("class", GetItemClass(menu, item));
    155                      writer.Write(HtmlTextWriter.TagRightChar);
    156                      writer.Indent++;
    157                      writer.WriteLine();
    158  
    159                      MenuItemTemplateContainer container = new MenuItemTemplateContainer(menu.Items.IndexOf(item), item);
    160                      if ((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null))
    161                      {
    162                          menu.StaticItemTemplate.InstantiateIn(container);
    163                      }
    164                      else
    165                      {
    166                          menu.DynamicItemTemplate.InstantiateIn(container);
    167                      }
    168                      container.DataBind();
    169                      container.RenderControl(writer);
    170  
    171                      writer.Indent--;
    172                      writer.WriteLine();
    173                      writer.WriteEndTag("div");
    174                  }
    175                  else
    176                  {
    177                      if (IsLink(item))
    178                      {
    179                          writer.WriteBeginTag("a");
    180                          if (!String.IsNullOrEmpty(item.NavigateUrl))
    181                          {
    182                              writer.WriteAttribute("href", Page.Server.HtmlEncode(menu.ResolveClientUrl(item.NavigateUrl)));
    183                          }
    184                          else
    185                          {
    186                              writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(menu, "b" +  item.ValuePath.Replace(menu.PathSeparator.ToString(), "\\"), true));
    187                          }
    188  
    189                          //writer.WriteAttribute("class", GetItemClass(menu, item));
    190                          WebControlAdapterExtender.WriteTargetAttribute(writer, item.Target);
    191  
    192                          if (!String.IsNullOrEmpty(item.ToolTip))
    193                          {
    194                              writer.WriteAttribute("title", item.ToolTip);
    195                          }
    196                          else if (!String.IsNullOrEmpty(menu.ToolTip))
    197                          {
    198                              writer.WriteAttribute("title", menu.ToolTip);
    199                          }
    200                          writer.Write(HtmlTextWriter.TagRightChar);
    201                          writer.Indent++;
    202                          writer.WriteLine();
    203                      }
    204                      else
    205                      {
    206                          writer.WriteBeginTag("span");
    207                          writer.WriteAttribute("class", GetItemClass(menu, item));
    208                          writer.Write(HtmlTextWriter.TagRightChar);
    209                          writer.Indent++;
    210                          writer.WriteLine();
    211                      }
    212  
    213                      if (!String.IsNullOrEmpty(item.ImageUrl))
    214                      {
    215                          writer.WriteBeginTag("img");
    216                          writer.WriteAttribute("src", menu.ResolveClientUrl(item.ImageUrl));
    217                          writer.WriteAttribute("alt", !String.IsNullOrEmpty(item.ToolTip) ? item.ToolTip : (!String.IsNullOrEmpty(menu.ToolTip) ? menu.ToolTip : item.Text));
    218                          writer.Write(HtmlTextWriter.SelfClosingTagEnd);
    219                      }
    220  
    221                      writer.Write(item.Text);
    222  
    223                      if (IsLink(item))
    224                      {
    225                          writer.Indent--;
    226                          writer.WriteLine();
    227                          writer.WriteEndTag("a");
    228                      }
    229                      else
    230                      {
    231                          writer.Indent--;
    232                          writer.WriteLine();
    233                          writer.WriteEndTag("span");
    234                      }
    235  
    236                  }
    237  
    238                  if ((item.ChildItems != null) && (item.ChildItems.Count > 0))
    239                  {
    240                      BuildItems(item.ChildItems, false, writer);
    241                  }
    242  
    243                  writer.Indent--;
    244                  writer.WriteLine();
    245                  writer.WriteEndTag("li");
    246              }
    247          }
    248  
    249          private bool IsLink(MenuItem item)
    250          {
    251              return (item != null) && item.Enabled && ((!String.IsNullOrEmpty(item.NavigateUrl)) || item.Selectable);
    252          }
    253  
    254          private string GetItemClass(Menu menu, MenuItem item)
    255          {
    256              string value = "AspNet-Menu-NonLink";
    257              if (item != null)
    258              {
    259                  if (((item.Depth < menu.StaticDisplayLevels) && (menu.StaticItemTemplate != null)) ||
    260                      ((item.Depth >= menu.StaticDisplayLevels) && (menu.DynamicItemTemplate != null)))
    261                  {
    262                      value = "AspNet-Menu-Template";
    263                  }
    264                  else if (IsLink(item))
    265                  {
    266                      value =  "AspNet-Menu-Link";
    267                  }
    268                  string selectedStatusClass = GetSelectStatusClass(item);
    269                  if (!String.IsNullOrEmpty(selectedStatusClass))
    270                  {
    271                      value += " " + selectedStatusClass;
    272                  }
    273              }
    274              return value;
    275          }
    276  
    277          private string GetSelectStatusClass(MenuItem item)
    278          {
    279              string value = "";
    280              if (item.Selected)
    281              {
    282                  //value += " AspNet-Menu-Selected";
    283                  value += "active";
    284              }
    285              else if (IsChildItemSelected(item))
    286              {
    287                  //value += " AspNet-Menu-ChildSelected";
    288                  value += "active";
    289              }
    290              else if (IsParentItemSelected(item))
    291              {
    292                  //value += " AspNet-Menu-ParentSelected";
    293                  value += "active";
    294              }
    295              return value;
    296          }
    297  
    298          private bool IsChildItemSelected(MenuItem item)
    299          {
    300              bool bRet = false;
    301  
    302              if ((item != null) && (item.ChildItems != null))
    303              {
    304                  bRet = IsChildItemSelected(item.ChildItems);
    305              }
    306  
    307              return bRet;
    308          }
    309  
    310          private bool IsChildItemSelected(MenuItemCollection items)
    311          {
    312              bool bRet = false;
    313  
    314              if (items != null)
    315              {
    316                  foreach (MenuItem item in items)
    317                  {
    318                      if (item.Selected || IsChildItemSelected(item.ChildItems))
    319                      {
    320                          bRet = true;
    321                          break;
    322                      }
    323                  }
    324              }
    325  
    326              return bRet;
    327          }
    328  
    329          private bool IsParentItemSelected(MenuItem item)
    330          {
    331              bool bRet = false;
    332  
    333              if ((item != null) && (item.Parent != null))
    334              {
    335                  if (item.Parent.Selected)
    336                  {
    337                      bRet = true;
    338                  }
    339                  else
    340                  {
    341                      bRet = IsParentItemSelected(item.Parent);
    342                  }
    343              }
    344  
    345              return bRet;
    346          }
    347      }
    348  }
    349  
    
      
Page 1 of 1 (1 items)