Adding specializations for additional core shapes

MenuItem now has Parent and Menu back-pointer properties
Menu-{name} and MenuItem-{name} templates are added as specializations

--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-10-11 11:24:55 -07:00
parent 7515f955fa
commit 7021670529
4 changed files with 34 additions and 13 deletions

View File

@@ -46,24 +46,30 @@ namespace Orchard.Core.Shapes {
}); });
// 'Zone' shapes are built on the Zone base class // 'Zone' shapes are built on the Zone base class
// They have class="zone zone-{name}"
// and the template can be specialized with "Zone-{Name}" base file name
builder.Describe("Zone") builder.Describe("Zone")
.OnCreating(creating => creating.BaseType = typeof(Zone)) .OnCreating(creating => creating.BaseType = typeof(Zone))
.OnDisplaying(displaying => { .OnDisplaying(displaying => {
var zone = displaying.Shape; var zone = displaying.Shape;
ShapeMetadata zoneMetadata = zone.Metadata; zone.Classes.Add("zone-" + zone.ZoneName.ToLower());
String name = zone.ZoneName;
zone.Classes.Add("zone-" + name.ToLower());
zone.Classes.Add("zone"); zone.Classes.Add("zone");
zoneMetadata.Alternates.Add("Zone__" + name); zone.Metadata.Alternates.Add("Zone__" + zone.ZoneName);
}); });
//builder.Describe("menu") builder.Describe("Menu")
// .OnDisplaying(displaying => { .OnDisplaying(displaying => {
// var name = displaying.Shape.MenuName.ToLower(); var menu = displaying.Shape;
// var menu = displaying.Shape; menu.Classes.Add("menu-" + menu.MenuName.ToLower());
// menu.Classes.Add("menu-" + name); menu.Classes.Add("menu");
// menu.Classes.Add("menu"); menu.Metadata.Alternates.Add("Menu__" + menu.MenuName);
// }); });
builder.Describe("MenuItem")
.OnDisplaying(displaying => {
var menu = displaying.Shape.Menu;
menu.Metadata.Alternates.Add("MenuItem__" + menu.MenuName);
});
// 'List' shapes start with several empty collections // 'List' shapes start with several empty collections
builder.Describe("List") builder.Describe("List")

View File

@@ -139,6 +139,9 @@
<Content Include="Themes\TheThemeMachine\Styles\site.css" /> <Content Include="Themes\TheThemeMachine\Styles\site.css" />
<Content Include="Themes\TheThemeMachine\Theme.png" /> <Content Include="Themes\TheThemeMachine\Theme.png" />
<Content Include="Themes\TheThemeMachine\Theme.txt" /> <Content Include="Themes\TheThemeMachine\Theme.txt" />
<None Include="Themes\Classic\Views\Menu-Main.cshtml">
<SubType>Designer</SubType>
</None>
<None Include="Themes\Classic\Views\Zone-Navigation.cshtml" /> <None Include="Themes\Classic\Views\Zone-Navigation.cshtml" />
<None Include="Themes\TheThemeMachine\Views\TempFeatured.cshtml"> <None Include="Themes\TheThemeMachine\Views\TempFeatured.cshtml">
<SubType>Designer</SubType> <SubType>Designer</SubType>

View File

@@ -0,0 +1,10 @@
@{
// Model is Model.Menu from the layout (Layout.Menu)
var tag = Tag(Model, "ul");
}
<nav>2
[@tag.StartElement
@* see MenuItem shape template *@
@DisplayChildren(Model)
@tag.EndElement]
</nav>

View File

@@ -39,7 +39,9 @@ namespace Orchard.UI.Navigation {
.Text(menuItem.Text) .Text(menuItem.Text)
.Href(menuItem.Href) .Href(menuItem.Href)
.RouteValues(menuItem.RouteValues) .RouteValues(menuItem.RouteValues)
.Item(menuItem); .Item(menuItem)
.Menu(shape)
.Parent(parentShape);
if (menuItem.Items != null && menuItem.Items.Any()) { if (menuItem.Items != null && menuItem.Items.Any()) {
PopulateMenu(shape, menuItemShape, menuItem.Items); PopulateMenu(shape, menuItemShape, menuItem.Items);