Exemple #1
0
        /// <summary>
        /// This will return null if the item text begins with --
        /// </summary>
        /// <param name="dataItem"></param>
        /// <returns></returns>
        private MenuExItem CreateItem(object dataItem)
        {
            MenuExItem item = new MenuExItem();

            item.Text = DataBinder.Eval(dataItem, this.DataTextField, "{0}");
            if (this.DataFilterFields != null && this.DataFilterFields.Length > 0)
            {
                if (_evaluator == null)
                {
                    _evaluator = new XPathEvaluator();
                }
                Dictionary <string, object> dict = this.DataFilterFields.Select((p, i) => new
                {
                    Field = string.Format("Filter{0}", i),
                    Value = DataBinder.Eval(dataItem, p)
                }).ToDictionary(p => p.Field, p => p.Value);
                _evaluator.Callback = p => dict[p];
                if (!_evaluator.Matches(this.FilterExpression))
                {
                    return(null);
                }
            }
            item.NavigateUrl = DataBinder.Eval(dataItem, this.DataNavigateUrlField, "{0}");
            item.ToolTip     = DataBinder.Eval(dataItem, this.DataToolTipField, "{0}");
            if (!string.IsNullOrEmpty(this.DataRolesField))
            {
                IEnumerable roles      = (IEnumerable)DataBinder.Eval(dataItem, this.DataRolesField);
                string[]    rolesArray = roles.Cast <string>().ToArray();
                if (rolesArray.Length > 0)
                {
                    item.RolesRequired = rolesArray;
                }
            }
            return(item);
        }
Exemple #2
0
        /// <summary>
        /// Add <see cref="Items"/> from the data source. Derived classes should override this to add items
        /// from their custom data source.
        /// </summary>
        protected virtual void PerformDataBinding()
        {
            IEnumerable data = PerformSelect();

            if (data == null)
            {
                // Do nothing. This happens when no data source has been assigned to us
                return;
            }
            _items.Clear();

            if (data != null)
            {
                //DropDownItemEventArgs args = new DropDownItemEventArgs();
                foreach (object dataItem in data)
                {
                    MenuExItem item = CreateItem(dataItem);
                    // Sharad 5 Aug 2010: In security trimming scenarios, we get items with empty text. We should just ignore these.
                    if (item != null && !string.IsNullOrEmpty(item.Text))
                    {
                        if (this.DisplayChildItems)
                        {
                            IEnumerable children = (IEnumerable)DataBinder.Eval(dataItem, this.DataChildItemsField);
                            foreach (object childItem in children)
                            {
                                MenuExItem item2 = CreateItem(childItem);
                                if (item2 != null)
                                {
                                    item.ChildItems.Add(item2);
                                }
                            }
                        }
                        _items.Add(item);
                    }
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// Renders A tag and possibly a lock icon
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="item"></param>
        /// <param name="itemWidth"></param>
        private void RenderItem(HtmlTextWriter writer, MenuExItem item, Unit itemWidth)
        {
            if (!string.IsNullOrEmpty(item.ToolTip))
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Title, item.ToolTip);
            }


            string iconName = string.Empty;

            string[]      y          = new string[] { "ui-button", "ui-widget", "ui-corner-all" };
            List <string> cssClasses = new List <string>(y);

            if (IsSamePageUrl(item))
            {
                cssClasses.Add("ui-state-active");
            }
            else
            {
                cssClasses.Add("ui-state-default");
                if (item.NavigateUrl.EndsWith("#"))
                {
                    writer.AddStyleAttribute(HtmlTextWriterStyle.Cursor, "default");
                    iconName = "ui-icon-triangle-1-s";
                }
                else
                {
                    string url = this.ResolveUrl(item.NavigateUrl);
                    writer.AddAttribute(HtmlTextWriterAttribute.Href, url);

                    int  index = item.NavigateUrl.IndexOf('?');
                    bool isAccessible;
                    // Do not pass query string as part of URL
                    if (index < 0)
                    {
                        isAccessible = UrlAuthorizationModule.CheckUrlAccessForPrincipal(item.NavigateUrl, this.Page.User, "GET");
                    }
                    else
                    {
                        isAccessible = UrlAuthorizationModule.CheckUrlAccessForPrincipal(item.NavigateUrl.Substring(0, index), this.Page.User, "GET");
                    }
                    if (!isAccessible)
                    {
                        iconName = "ui-icon-locked";
                        cssClasses.Add("ui-priority-secondary");
                    }
                }
            }

            if (string.IsNullOrEmpty(iconName))
            {
                cssClasses.Add("ui-button-text-only");
            }
            else
            {
                cssClasses.Add("ui-button-text-icon-primary");
            }

            writer.AddAttribute(HtmlTextWriterAttribute.Class, string.Join(" ", cssClasses.ToArray()));
            if (itemWidth != Unit.Empty)
            {
                writer.AddStyleAttribute(HtmlTextWriterStyle.Width, itemWidth.ToString());
            }
            writer.RenderBeginTag(HtmlTextWriterTag.A);
            if (!string.IsNullOrEmpty(iconName))
            {
                // Show lock icon
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "ui-button-icon-primary ui-icon " + iconName);
                writer.RenderBeginTag(HtmlTextWriterTag.Span);
                writer.RenderEndTag();
            }

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "ui-button-text");
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.Write(item.Text);
            writer.RenderEndTag();      // span
            writer.RenderEndTag();      // a
        }
Exemple #4
0
        private bool IsSamePageUrl(MenuExItem item)
        {
            string url = this.ResolveUrl(item.NavigateUrl);

            return(url == this.Page.Request.RawUrl);
        }