--HG--
branch : dev
This commit is contained in:
Renaud Paquay
2010-07-25 11:50:45 -07:00
20 changed files with 193 additions and 71 deletions

View File

@@ -20,10 +20,10 @@ namespace Orchard.Core.ContentsLocation.Settings {
private IEnumerable<LocationDefinition> GetPredefinedLocations() {
yield return new LocationDefinition { Name = "Default", DisplayName = T("Default location (i.e. fallback if no specific override)") };
yield return new LocationDefinition { Name = "Detail", DisplayName = T("Location in a \"Detail\" screen") };
yield return new LocationDefinition { Name = "Editor", DisplayName = T("Location in a \"Editor\" screen") };
yield return new LocationDefinition { Name = "Summary", DisplayName = T("Location in a \"Summary\" screen (Front-end)") };
yield return new LocationDefinition { Name = "SummaryAdmin", DisplayName = T("Location in a \"Summary\" screen (Admin)") };
yield return new LocationDefinition { Name = "Detail", DisplayName = T("\"Detail\" display location") };
yield return new LocationDefinition { Name = "Editor", DisplayName = T("\"Editor\" display location") };
yield return new LocationDefinition { Name = "Summary", DisplayName = T("\"Summary\" (front-end) display location") };
yield return new LocationDefinition { Name = "SummaryAdmin", DisplayName = T("\"Summary\" (admin) display location") };
}
private LocationSettings MergeSettings(LocationSettings partSettings, LocationSettings partDefinitionSettings) {

View File

@@ -0,0 +1,25 @@
fieldset.location-setting {
overflow:auto;
}
fieldset.location-setting legend {
font-weight:normal;
margin:0;
padding-bottom:0;
}
fieldset.location-setting label {
display:inline;
}
fieldset.location-setting input.text-box {
display:block;
width:24em;
}
fieldset.location-setting fieldset {
clear:none;
float:left;
margin-right:1em;
margin-top:.5em;
}
fieldset.location-setting .default {
font-size:1.2em;
font-style:italic;
}

View File

@@ -1,14 +1,18 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Core.ContentsLocation.ViewModels.LocationSettingsViewModel>" %>
<fieldset >
<%
Html.RegisterStyle("admin.css"); %>
<fieldset class="location-setting">
<legend><%:T("{0}", Model.Definition.DisplayName) %></legend>
<label for="<%:Html.FieldIdFor(m => m.Location.Zone) %>"><%:T("Zone name (e.g. body, primary)") %></label>
<%:Html.EditorFor(m => m.Location.Zone)%>
<%: string.IsNullOrEmpty(Model.DefaultLocation.Zone) ? T("") : T("({0})", Model.DefaultLocation.Zone) %>
<%:Html.ValidationMessageFor(m => m.Location.Zone)%>
<label for="<%:Html.FieldIdFor(m => m.Location.Position) %>"><%:T("Position in zone (e.g. 1, 1.0, 2.5.1)") %></label>
<%:Html.EditorFor(m => m.Location.Position)%>
<%: string.IsNullOrEmpty(Model.DefaultLocation.Position) ? T("") : T("({0})", Model.DefaultLocation.Position) %>
<%:Html.ValidationMessageFor(m => m.Location.Position)%>
</fieldset>
<fieldset>
<label for="<%:Html.FieldIdFor(m => m.Location.Zone) %>"><%:T("Zone name (e.g. body, primary)") %></label><%
if (!string.IsNullOrWhiteSpace(Model.DefaultLocation.Zone)) {
%><span class="default"><%:T(" - default: {0}", Model.DefaultLocation.Zone) %></span><%
} %><%:Html.EditorFor(m => m.Location.Zone) %><%:Html.ValidationMessageFor(m => m.Location.Zone)%>
</fieldset>
<fieldset>
<label for="<%:Html.FieldIdFor(m => m.Location.Position) %>"><%:T("Position in zone (e.g. 1, 1.0, 2.5.1)") %></label><%
if (!string.IsNullOrWhiteSpace(Model.DefaultLocation.Zone)) {
%><span class="default"><%:T(" - default: {0}", Model.DefaultLocation.Position) %></span><%
} %><%:Html.EditorFor(m => m.Location.Position) %>
</fieldset><%:Html.ValidationMessageFor(m => m.Location.Position)%>
</fieldset>

View File

@@ -242,6 +242,7 @@
<Content Include="Common\Views\DisplayTemplates\Parts\Common.Metadata.ascx" />
<Content Include="Common\Views\DisplayTemplates\Parts\Common.Metadata.SummaryAdmin.ascx" />
<Content Include="ContentsLocation\Module.txt" />
<Content Include="ContentsLocation\Styles\admin.css" />
<Content Include="ContentsLocation\Views\DefinitionTemplates\LocationSettings.ascx" />
<Content Include="Contents\Views\DisplayTemplates\Parts\Contents.Publish.SummaryAdmin.ascx" />
<Content Include="Contents\Views\DisplayTemplates\Parts\Contents.Publish.ascx" />

View File

@@ -10,25 +10,46 @@
margin-top:-3.1em;
}
.manage-part {
margin-bottom:2em;
margin-bottom:1em;
}
.manage-part h3,
.manage-field h3 {
border-bottom:1px solid #EAEAEA;
display:relative;
line-height:1.4em;
padding-bottom:0;
padding-top:0;
}
.manage-part h3,
.manage-field h3,
.manage-part .manage-field,
.manage-field fieldset,
.manage-part .settings {
.manage-part h4,
.manage-type .manage-field .details,
.manage-type .manage-part .manage-field,
.manage-type .manage-part .settings {
padding-left:20px;
}
.manage-part .manage,
.manage-field .manage {
.manage-type .manage-field .settings {
padding-bottom:10px;
padding-left:0;
}
.manage-part h4 {
padding-left:0;
}
.manage-part .manage-field h4 {
line-height:1.8em;
padding-bottom:0;
padding-left:15px;
}
.manage-type .manage-part .manage,
.manage-type .manage-field .manage,
.manage-part .manage-field .manage {
font-size:1.4em;
margin-top:-2.4em;
}
.manage-field .details,
.manage-part .details {
overflow:auto;
}
.manage-part .manage.minor {
margin:0 0 -1.2em;
}
@@ -36,14 +57,18 @@
.manage-field label {
font-weight:normal;
}
.manage-field fieldset,
.manage-part fieldset {
margin:1.5em 0 0;
margin:.5em 0 1em;
padding:0;
}
.manage-field .settings {
margin:-1.5em 0 0 1em;
margin:0 0 0 15px;
padding-left:0;
}
.manage-part .settings {
overflow:auto;
}
.manage-part .settings fieldset {
padding-left:0;
}
@@ -60,7 +85,10 @@ fieldset.action {
}
.manage-part dt,
.manage-part dd {
display:inline;
float:left;
}
.manage-part dt {
clear:left;
}
.manage-part dt::after {
content:":";

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.ContentManagement.MetaData.Models;
using Orchard.ContentManagement.ViewModels;
@@ -31,7 +32,7 @@ namespace Orchard.ContentTypes.ViewModels {
public ContentTypeDefinition _Definition { get; private set; }
private IEnumerable<EditPartFieldViewModel> GetTypeFields(ContentTypeDefinition contentTypeDefinition) {
var implicitTypePart = contentTypeDefinition.Parts.SingleOrDefault(p => p.PartDefinition.Name == Name);
var implicitTypePart = contentTypeDefinition.Parts.SingleOrDefault(p => string.Equals(p.PartDefinition.Name, Name, StringComparison.OrdinalIgnoreCase));
return implicitTypePart == null
? Enumerable.Empty<EditPartFieldViewModel>()
@@ -40,7 +41,7 @@ namespace Orchard.ContentTypes.ViewModels {
private IEnumerable<EditTypePartViewModel> GetTypeParts(ContentTypeDefinition contentTypeDefinition) {
return contentTypeDefinition.Parts
.Where(p => p.PartDefinition.Name != Name)
.Where(p => !string.Equals(p.PartDefinition.Name, Name, StringComparison.OrdinalIgnoreCase))
.Select((p, i) => new EditTypePartViewModel(i, p) { Type = this });
}
}

View File

@@ -15,14 +15,24 @@ using (Html.BeginFormAntiForgeryPost()) { %>
<%:Html.HiddenFor(m => m.Name) %>
</fieldset><%
Html.RenderTemplates(Model.Templates); %>
<h2><%:T("Fields") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %></div><%:
Html.EditorFor(m => m.Fields, "Fields", "") %>
<h2><%:T("Parts") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddPartsTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" })%></div><%:
Html.EditorFor(m => m.Parts, "TypeParts", "") %>
<div class="manage-type">
<h2><%:T("Fields") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %></div><%:
Html.EditorFor(m => m.Fields, "Fields", "") %>
<h2><%:T("Parts") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddPartsTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" })%></div><%:
Html.EditorFor(m => m.Parts, "TypeParts", "") %>
</div>
<fieldset class="action">
<button class="primaryAction" type="submit"><%:T("Save") %></button>
</fieldset>
</div><%
}
using (this.Capture("end-of-page-scripts")) { %>
<script type="text/javascript">
(function ($) {
$(".manage-field h3,.manage-part h3").expandoControl(function (controller) { return controller.nextAll(".details"); }, { collapse: true, remember: false });
$(".manage-field h4").expandoControl(function (controller) { return controller.nextAll(".settings"); }, { collapse: true, remember: false });
})(jQuery);
</script><%
} %>

View File

@@ -10,10 +10,14 @@ using (Html.BeginFormAntiForgeryPost()) { %>
<%:Html.TextBoxFor(m => m.Name, new {@class = "textMedium", disabled = "disabled"}) %>
<%:Html.HiddenFor(m => m.Name) %>
</fieldset>
<% Html.RenderTemplates(Model.Templates); %>
<h2><%:T("Fields") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %></div>
<%:Html.EditorFor(m => m.Fields, "Fields", "") %>
<div class="manage-part">
<div class="settings">
<% Html.RenderTemplates(Model.Templates); %>
</div>
<h2><%:T("Fields") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %></div>
<%:Html.EditorFor(m => m.Fields, "Fields", "") %>
</div>
<fieldset class="action">
<button class="primaryAction" type="submit"><%:T("Save") %></button>
</fieldset><%

View File

@@ -2,6 +2,7 @@
<%@ import Namespace="Orchard.ContentManagement.MetaData.Models" %>
<%
if (Model.Any()) { %>
<%--<h4><%:T("Global Settings") %></h4>--%>
<dl class="settings"><%
foreach (var setting in Model) { %>
<dt><%:setting.Key %></dt>

View File

@@ -3,9 +3,11 @@
<h3><%:Model.Name %> <span>(<%:Model.FieldDefinition.Name %>)</span></h3>
<div class="manage">
<%:Html.ActionLink(T("Remove").Text, "RemoveFieldFrom", new { area = "Orchard.ContentTypes", id = Model.Part.Name, Model.Name }, new { itemprop = "RemoveUrl UnsafeUrl" })%><%--// <- some experimentation--%>
</div><%
Html.RenderTemplates(Model.Templates);
%><%:Html.HiddenFor(m => m.Name)
%><%:Html.HiddenFor(m => m.FieldDefinition.Name)
%><%:Html.HiddenFor(m => m.Index) %>
</div>
<div class="details"><%
Html.RenderTemplates(Model.Templates);
%><%:Html.HiddenFor(m => m.Name)
%><%:Html.HiddenFor(m => m.FieldDefinition.Name)
%><%:Html.HiddenFor(m => m.Index) %>
</div>
</fieldset>

View File

@@ -13,4 +13,4 @@ if (Model.Any()) { %>
<%:Html.TextBox(htmlFieldName + ".Value", s.Value)%><%
} %>
</fieldset><%
} %>
} %>asdf

View File

@@ -3,14 +3,17 @@
<h3 itemprop="Name"><%:Model.PartDefinition.DisplayName %></h3>
<div class="manage">
<%:Html.ActionLink(T("Remove").Text, "RemovePartFrom", new { area = "Orchard.ContentTypes", id = Model.Type.Name, Model.PartDefinition.Name }, new { itemprop = "RemoveUrl UnsafeUrl" })%><%--// <- some experimentation--%>
</div><%
</div>
<div class="details"><%:Html.EditorFor(m => m.PartDefinition.Fields, "TypePartFields", "PartDefinition")
%><%
if (Model.Templates.Any()) { %>
<div class="settings"><%
<div class="settings">
<h4><%:T("{0} Settings:", Model.PartDefinition.DisplayName) %></h4><%
Html.RenderTemplates(Model.Templates); %>
</div><%
} %>
<%:Html.DisplayFor(m => m.PartDefinition.Settings, "Settings", "PartDefinition")
%><%:Html.EditorFor(m => m.PartDefinition.Fields, "TypePartFields", "PartDefinition")
%><%:Html.HiddenFor(m => m.PartDefinition.Name)
<%-- don't show global part settings for now - <%:Html.DisplayFor(m => m.PartDefinition.Settings, "Settings", "PartDefinition")
%>--%><%:Html.HiddenFor(m => m.PartDefinition.Name)
%><%:Html.HiddenFor(m => m.Index) %>
</div>
</fieldset>

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
namespace Orchard.Modules.Models {
public class DoghouseComparer : IComparer<string> {
private readonly string _theDog;
public DoghouseComparer(string theDog) {
_theDog = theDog;
}
public int Compare(string x, string y) {
if (x == null || y == null)
return x == null && y == null ? 0 : (x == null ? -1 : 1);
if (string.Equals(x, y, StringComparison.OrdinalIgnoreCase))
return 0;
if (string.Equals(x, _theDog, StringComparison.OrdinalIgnoreCase))
return 1;
if (string.Equals(y, _theDog, StringComparison.OrdinalIgnoreCase))
return -1;
return string.Compare(x, y, StringComparison.OrdinalIgnoreCase);
}
}
}

View File

@@ -69,6 +69,7 @@
<Compile Include="Commands\FeatureCommands.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Extensions\StringExtensions.cs" />
<Compile Include="Models\DoghouseComparer.cs" />
<Compile Include="Models\ModuleFeature.cs" />
<Compile Include="ViewModels\FeaturesViewModel.cs" />
<Compile Include="Models\Module.cs" />

View File

@@ -2,12 +2,13 @@
<%@ Import Namespace="Orchard.Localization" %>
<%@ Import Namespace="Orchard.Modules.Extensions" %>
<%@ Import Namespace="Orchard.Modules.ViewModels"%>
<%@ Import Namespace="Orchard.Utility.Extensions" %><%
<%@ Import Namespace="Orchard.Utility.Extensions" %>
<%@ Import Namespace="Orchard.Modules.Models" %><%
Html.RegisterStyle("admin.css"); %>
<h1><%: Html.TitleForPage(T("Manage Features").ToString()) %></h1>
<% if (Model.Features.Count() > 0) { %>
<ul class="<% Html.RenderPartial("UI/Switchable", "features summary-view"); %>"><%
var featureGroups = Model.Features.OrderBy(f => f.Descriptor.Category).GroupBy(f => f.Descriptor.Category);
var featureGroups = Model.Features.OrderBy(f => f.Descriptor.Category, new DoghouseComparer("Core")).GroupBy(f => f.Descriptor.Category);
foreach (var featureGroup in featureGroups) {
var categoryName = LocalizedString.TextOrDefault(featureGroup.First().Descriptor.Category, T("Uncategorized"));
var categoryClassName = string.Format("category {0}", Html.Encode(categoryName.ToString().HtmlClassify()));

View File

@@ -280,10 +280,10 @@ body { background: #f3f4f4 url('../Content/Images/bkg.jpg') repeat-x; }
.admin li a {}
/*- Search -*/
#nav .search { display: inline; float: right; height: 40px; margin: -40px 8px 0 0; }
#nav .search { display: inline; float: right; height: 40px; margin: -40px 8px 0 0; overflow: auto; }
#nav .search input { border-color: #87B7CB; }
#nav .search input, #nav .search button { font-size: 1.2em; height:17px; padding: 3px; }
#nav .search button { background: #87B7CB; border: none; color: #FFF; float: right; height:25px; line-height: 1.5em; margin:7px 0; padding: 2px 6px 5px; text-shadow: 0px -1px 0px #A6A6A6; }
#nav .search input, #nav .search button { float: left; font-size: 1.2em; height:17px; padding: 3px; }
#nav .search button { background: #87B7CB; border: none; color: #FFF; height:25px; line-height: 1.5em; margin:7px 0; padding: 2px 6px 5px; text-shadow: 0px -1px 0px #A6A6A6; }
/*========= Footer =========*/

View File

@@ -14,9 +14,14 @@
}, options);
_this.each(function (index, element) {
var controller = $(element);
var glyph = $("<span class=\"expandoGlyph\"></span>");
var glyph = $("<span class=\"expando-glyph-container\"><span class=\"expando-glyph\"></span></span>");
glyph.data("controllees", getControllees(controller));
if (glyph.data("controllees").length === 0) {
return;
}
if ((settings.remember && "closed" === $.orchard.setting(__cookieName, { key: settings.key + "-" + controller.text(), path: settings.path }))
|| settings.collapse) {
glyph.addClass("closed").data("controllees").hide();
@@ -45,7 +50,7 @@
return false;
});
controller.before(glyph);
controller.prepend(glyph);
});
return this;

View File

@@ -246,11 +246,10 @@ form.link button:hover {
margin:0;
}
#navigation li h3 {
padding:0 0 0 8px;
padding:0 0 2px 8px;
}
#navigation li h3 a, #navigation li h3 span {
display:block;
padding:6px 4px 8px 0;
padding:6px 4px px 0;
}
#navigation ul a, #navigation ul a:link, #navigation ul a:visited {
color:#2d2f25;
@@ -268,31 +267,40 @@ form.link button:hover {
}
/* todo: make generic so all toggles can use this and clean up jQuery */
.expandoGlyph {
.expando-glyph-container {
display:inline !important;
line-height:1em;
padding:0 !important;
position:relative;
text-align:sub;
}
.expando-glyph {
background:#fcfcfc no-repeat center center;
background-image:url(data:image/gif;base64,R0lGODlhCwALAKIFAPDz2/b70mhpREJEPjI0Lf///wAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkQzQjUyNTNFOTQyODExREY5MDkxQ0U0MzJGRTdGNEExIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkQzQjUyNTNEOTQyODExREY5MDkxQ0U0MzJGRTdGNEExIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJENDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAABQAsAAAAAAsACwAAAx1YutxeIbYIghBgWVwA4daQKZ4QjkspPsD6dG8sJwA7);
/*url("images/menuOpen.gif")*/
bottom:0;
cursor:pointer;
display:block;
height:17px;
margin:0 0 -2.5em -11px;
left:-20px;
padding:0 !important;
position:absolute;
width:17px;
position:relative;
-webkit-transform:rotate(0deg);
}
.expandoGlyph:hover {
.expando-glyph:hover {
background-image:url(data:image/gif;base64,R0lGODlhCwALAJEDAB5dfcbVyMvbwf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUxMUUzODE2OTQyODExREZBN0ZBOURGNEI3NDVDRkMxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUxMUUzODE1OTQyODExREZBN0ZBOURGNEI3NDVDRkMxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJENDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAwAsAAAAAAsACwAAAhqcj6kjnR0EAOFIOsKstxoNdAmIKZq3oMvKFgA7);
/*url("images/menuOpenHover.gif");*/
}
.expandoGlyph.closed {
.expando-glyph-container.closed .expando-glyph {
background-image:url(data:image/gif;base64,R0lGODlhCwALAKIFAPDz2/b70mhpREJEPjI0Lf///wAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY2OEJCRkEyOTQyODExREY5ODMwQkQwQjI2MEMzREUwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY2OEJCRkExOTQyODExREY5ODMwQkQwQjI2MEMzREUwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJENDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAABQAsAAAAAAsACwAAAx1YBaD+QbTn4pi0WEx3Vh4FCASnjGUWpar0acGXAAA7);
/*url("images/menuClosed.gif");*/
}
.expandoGlyph.closed:hover {
.expando-glyph-container.closed .expando-glyph:hover {
background-image:url(data:image/gif;base64,R0lGODlhCwALAJEDAB5dfcbVyMvbwf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA1NTdBNkZFOTQyOTExREY4QjNERjI1RjMzMUYxRjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA1NTdBNkZEOTQyOTExREY4QjNERjI1RjMzMUYxRjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJENDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJDNDlGNjgyMjg5NERGMTE4RUZGQkY0Q0JCRDA3OTc2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAwAsAAAAAAsACwAAAhrcEqYrkKuagxFMOuSjmga7Kd/FgFgTMgJWAAA7);
/*url("images/menuClosedHover.gif");*/
}
.expandoGlyph.closing {
.expando-glyph-container.closing .expando-glyph {
-webkit-transition:all .2s ease-in-out;
-moz-transition:all .2s ease-in-out;
transition:all .2s ease-in-out;
@@ -300,7 +308,7 @@ form.link button:hover {
-moz-transform:rotate(-90deg);
transform:rotate(-90deg);
}
.expandoGlyph.opening {
.expando-glyph-container.opening .expando-glyph {
-webkit-transition:all .2s ease-in-out;
-moz-transition:all .2s ease-in-out;
transition:all .2s ease-in-out;

View File

@@ -79,13 +79,12 @@ namespace Orchard.Mvc.Html {
if (ReferenceEquals(this, other)) {
return true;
}
return Equals(other.Container, Container) && Equals(other.ContainerVirtualPath, ContainerVirtualPath) && Equals(other.FileName, FileName) && Equals(other.Condition, Condition);
return Equals(other.ContainerVirtualPath, ContainerVirtualPath) && Equals(other.FileName, FileName) && Equals(other.Condition, Condition);
}
public override int GetHashCode() {
unchecked {
var result = (Container != null ? Container.GetHashCode() : 0);
result = (result*397) ^ (ContainerVirtualPath != null ? ContainerVirtualPath.GetHashCode() : 0);
var result = (ContainerVirtualPath != null ? ContainerVirtualPath.GetHashCode() : 0);
result = (result*397) ^ (FileName != null ? FileName.GetHashCode() : 0);
result = (result*397) ^ (Condition != null ? Condition.GetHashCode() : 0);
return result;

View File

@@ -30,7 +30,9 @@ namespace Orchard.Mvc.Html {
}
public static string FieldIdFor<T, TResult>(this HtmlHelper<T> html, Expression<Func<T, TResult>> expression) {
return html.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
var id = html.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
// because "[" and "]" aren't replaced with "_" in GetFullHtmlFieldId
return id.Replace('[', '_').Replace(']', '_');
}
public static MvcHtmlString SelectOption<T>(this HtmlHelper html, T currentValue, T optionValue, string text) {