mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-23 04:43:35 +08:00
Adding the ability to put (CSS) classes on menu items.
Making use of it by adding a "collapsed" class to the admin menu's settings top-level item to have it collapse by default (with some adjustment to the admin.js) work item: 17599 --HG-- branch : 1.x
This commit is contained in:
@@ -21,7 +21,7 @@ namespace Orchard.Core.Settings {
|
||||
builder.AddImageSet("settings")
|
||||
.Add(T("Settings"), "99",
|
||||
menu => menu.Add(T("General"), "0", item => item.Action("Index", "Admin", new { area = "Settings", groupInfoId = "Index" })
|
||||
.Permission(StandardPermissions.SiteOwner)));
|
||||
.Permission(StandardPermissions.SiteOwner)), new [] {"collapsed"});
|
||||
|
||||
var site = _siteService.GetSiteSettings();
|
||||
if (site == null)
|
||||
|
@@ -23,7 +23,8 @@
|
||||
}
|
||||
|
||||
if ((settings.remember && "closed" === $.orchard.setting(__cookieName, { key: settings.key + "-" + controller.text(), path: settings.path }))
|
||||
|| settings.collapse) {
|
||||
|| settings.collapse
|
||||
|| (controller.closest("li").hasClass("collapsed") && !(settings.remember && "open" === $.orchard.setting(__cookieName, { key: settings.key + "-" + controller.text(), path: settings.path })))) {
|
||||
glyph.addClass("closed").data("controllees").hide();
|
||||
}
|
||||
else if (settings.collapse) {
|
||||
|
@@ -192,7 +192,7 @@ namespace Orchard.UI.Navigation {
|
||||
/// <param name="menuItem">The menu item to build the shape for.</param>
|
||||
/// <returns>The menu item shape.</returns>
|
||||
protected dynamic BuildMenuItemShape(dynamic shapeFactory, dynamic parentShape, dynamic menu, MenuItem menuItem) {
|
||||
return shapeFactory.MenuItem()
|
||||
var menuItemShape = shapeFactory.MenuItem()
|
||||
.Text(menuItem.Text)
|
||||
.IdHint(menuItem.IdHint)
|
||||
.Href(menuItem.Href)
|
||||
@@ -203,6 +203,11 @@ namespace Orchard.UI.Navigation {
|
||||
.Item(menuItem)
|
||||
.Menu(menu)
|
||||
.Parent(parentShape);
|
||||
|
||||
foreach (var className in menuItem.Classes)
|
||||
menuItemShape.Classes.Add(className);
|
||||
|
||||
return menuItemShape;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -214,7 +219,7 @@ namespace Orchard.UI.Navigation {
|
||||
/// <param name="menuItem">The menu item to build the shape for.</param>
|
||||
/// <returns>The menu item shape.</returns>
|
||||
protected dynamic BuildLocalMenuItemShape(dynamic shapeFactory, dynamic parentShape, dynamic menu, MenuItem menuItem) {
|
||||
return shapeFactory.LocalMenuItem()
|
||||
var menuItemShape = shapeFactory.LocalMenuItem()
|
||||
.Text(menuItem.Text)
|
||||
.IdHint(menuItem.IdHint)
|
||||
.Href(menuItem.Href)
|
||||
@@ -225,6 +230,11 @@ namespace Orchard.UI.Navigation {
|
||||
.Item(menuItem)
|
||||
.Menu(menu)
|
||||
.Parent(parentShape);
|
||||
|
||||
foreach (var className in menuItem.Classes)
|
||||
menuItemShape.Classes.Add(className);
|
||||
|
||||
return menuItemShape;
|
||||
}
|
||||
|
||||
public void OnResultExecuted(ResultExecutedContext filterContext) { }
|
||||
|
@@ -6,12 +6,14 @@ using Orchard.Security.Permissions;
|
||||
|
||||
namespace Orchard.UI.Navigation {
|
||||
public class MenuItem {
|
||||
private IList<string> _classes = new List<string>();
|
||||
|
||||
public MenuItem() {
|
||||
Permissions = Enumerable.Empty<Permission>();
|
||||
LinkToFirstChild = true;
|
||||
}
|
||||
|
||||
public LocalizedString Text { get; set; }
|
||||
public LocalizedString Text { get; set; }
|
||||
public string IdHint { get; set; }
|
||||
public string Url { get; set; }
|
||||
public string Href { get; set; }
|
||||
@@ -22,5 +24,13 @@ namespace Orchard.UI.Navigation {
|
||||
public RouteValueDictionary RouteValues { get; set; }
|
||||
public IEnumerable<MenuItem> Items { get; set; }
|
||||
public IEnumerable<Permission> Permissions { get; set; }
|
||||
}
|
||||
public IList<string> Classes {
|
||||
get { return _classes; }
|
||||
set {
|
||||
if (value == null)
|
||||
return;
|
||||
_classes = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -9,27 +9,33 @@ namespace Orchard.UI.Navigation {
|
||||
private readonly IList<string> _imageSets = new List<string>();
|
||||
IEnumerable<MenuItem> Contained { get; set; }
|
||||
|
||||
public NavigationBuilder Add(LocalizedString caption, string position, Action<NavigationItemBuilder> itemBuilder) {
|
||||
public NavigationBuilder Add(LocalizedString caption, string position, Action<NavigationItemBuilder> itemBuilder, IEnumerable<string> classes = null) {
|
||||
var childBuilder = new NavigationItemBuilder();
|
||||
|
||||
childBuilder.Caption(caption);
|
||||
childBuilder.Position(position);
|
||||
itemBuilder(childBuilder);
|
||||
Contained = (Contained ?? Enumerable.Empty<MenuItem>()).Concat(childBuilder.Build());
|
||||
|
||||
if (classes != null) {
|
||||
foreach (var className in classes)
|
||||
childBuilder.AddClass(className);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public NavigationBuilder Add(LocalizedString caption, Action<NavigationItemBuilder> itemBuilder) {
|
||||
return Add(caption, null, itemBuilder);
|
||||
public NavigationBuilder Add(LocalizedString caption, Action<NavigationItemBuilder> itemBuilder, IEnumerable<string> classes = null) {
|
||||
return Add(caption, null, itemBuilder, classes);
|
||||
}
|
||||
public NavigationBuilder Add(Action<NavigationItemBuilder> itemBuilder) {
|
||||
return Add(null, null, itemBuilder);
|
||||
public NavigationBuilder Add(Action<NavigationItemBuilder> itemBuilder, IEnumerable<string> classes = null) {
|
||||
return Add(null, null, itemBuilder, classes);
|
||||
}
|
||||
public NavigationBuilder Add(LocalizedString caption, string position) {
|
||||
return Add(caption, position, x=> { });
|
||||
public NavigationBuilder Add(LocalizedString caption, string position, IEnumerable<string> classes = null) {
|
||||
return Add(caption, position, x=> { }, classes);
|
||||
}
|
||||
public NavigationBuilder Add(LocalizedString caption) {
|
||||
return Add(caption, null, x => { });
|
||||
public NavigationBuilder Add(LocalizedString caption, IEnumerable<string> classes = null) {
|
||||
return Add(caption, null, x => { }, classes);
|
||||
}
|
||||
|
||||
public NavigationBuilder AddImageSet(string imageSet) {
|
||||
|
@@ -32,6 +32,18 @@ namespace Orchard.UI.Navigation {
|
||||
return this;
|
||||
}
|
||||
|
||||
public NavigationItemBuilder AddClass(string className) {
|
||||
if (!_item.Classes.Contains(className))
|
||||
_item.Classes.Add(className);
|
||||
return this;
|
||||
}
|
||||
|
||||
public NavigationItemBuilder RemoveClass(string className) {
|
||||
if (_item.Classes.Contains(className))
|
||||
_item.Classes.Remove(className);
|
||||
return this;
|
||||
}
|
||||
|
||||
public NavigationItemBuilder LinkToFirstChild(bool value) {
|
||||
_item.LinkToFirstChild = value;
|
||||
return this;
|
||||
|
@@ -77,6 +77,7 @@ namespace Orchard.UI.Navigation {
|
||||
LocalNav = item.LocalNav,
|
||||
Text = item.Text,
|
||||
IdHint = item.IdHint,
|
||||
Classes = item.Classes,
|
||||
Url = item.Url,
|
||||
LinkToFirstChild = item.LinkToFirstChild,
|
||||
Href = item.Href
|
||||
@@ -145,6 +146,7 @@ namespace Orchard.UI.Navigation {
|
||||
var joined = new MenuItem {
|
||||
Text = items.First().Text,
|
||||
IdHint = items.Select(x => x.IdHint).FirstOrDefault(x => !string.IsNullOrWhiteSpace(x)),
|
||||
Classes = items.Select(x => x.Classes).FirstOrDefault(x => x != null && x.Count > 0),
|
||||
Url = items.Select(x => x.Url).FirstOrDefault(x => !string.IsNullOrWhiteSpace(x)),
|
||||
Href = items.Select(x => x.Href).FirstOrDefault(x => !string.IsNullOrWhiteSpace(x)),
|
||||
LinkToFirstChild = items.First().LinkToFirstChild,
|
||||
|
Reference in New Issue
Block a user