From 625b1fb6782cfcb135cd3a8e741967fc3fd1eb86 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Sun, 25 Jul 2010 01:12:07 -0700 Subject: [PATCH 1/4] Updating the content type/part management UI with some expand/collapse bits and a little UI cleanup --HG-- branch : dev --- .../Settings/LocationSettingsEditorEvents.cs | 8 ++-- .../Core/ContentsLocation/Styles/admin.css | 23 ++++++++++ .../DefinitionTemplates/LocationSettings.ascx | 28 +++++++------ src/Orchard.Web/Core/Orchard.Core.csproj | 1 + .../Orchard.ContentTypes/Styles/admin.css | 42 +++++++++++++++---- .../Views/Admin/Edit.ascx | 22 +++++++--- .../Views/Admin/EditPart.ascx | 12 ++++-- .../Views/DisplayTemplates/Settings.ascx | 1 + .../Views/EditorTemplates/Settings.ascx | 2 +- .../Views/EditorTemplates/TypePart.ascx | 13 +++--- .../Themes/TheAdmin/Scripts/admin.js | 9 +++- .../Themes/TheAdmin/Styles/site.css | 30 ++++++++----- .../Mvc/Html/FileRegistrationContext.cs | 5 +-- src/Orchard/Mvc/Html/HtmlHelperExtensions.cs | 4 +- 14 files changed, 143 insertions(+), 57 deletions(-) create mode 100644 src/Orchard.Web/Core/ContentsLocation/Styles/admin.css diff --git a/src/Orchard.Web/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs b/src/Orchard.Web/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs index d2c2c9f04..19af09230 100644 --- a/src/Orchard.Web/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs +++ b/src/Orchard.Web/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs @@ -20,10 +20,10 @@ namespace Orchard.Core.ContentsLocation.Settings { private IEnumerable 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) { diff --git a/src/Orchard.Web/Core/ContentsLocation/Styles/admin.css b/src/Orchard.Web/Core/ContentsLocation/Styles/admin.css new file mode 100644 index 000000000..619ebfa2b --- /dev/null +++ b/src/Orchard.Web/Core/ContentsLocation/Styles/admin.css @@ -0,0 +1,23 @@ +fieldset.location-setting { + overflow:auto; +} +fieldset.location-setting legend { + font-weight:normal; +} +fieldset.location-setting label { + display:inline; +} +fieldset.location-setting input { + display:block; + width:20em; +} +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; +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/ContentsLocation/Views/DefinitionTemplates/LocationSettings.ascx b/src/Orchard.Web/Core/ContentsLocation/Views/DefinitionTemplates/LocationSettings.ascx index 035f883de..77858d7b9 100644 --- a/src/Orchard.Web/Core/ContentsLocation/Views/DefinitionTemplates/LocationSettings.ascx +++ b/src/Orchard.Web/Core/ContentsLocation/Views/DefinitionTemplates/LocationSettings.ascx @@ -1,14 +1,18 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -
+<% + Html.RegisterStyle("admin.css"); %> +
<%:T("{0}", Model.Definition.DisplayName) %> - - - <%:Html.EditorFor(m => m.Location.Zone)%> - <%: string.IsNullOrEmpty(Model.DefaultLocation.Zone) ? T("") : T("({0})", Model.DefaultLocation.Zone) %> - <%:Html.ValidationMessageFor(m => m.Location.Zone)%> - - - <%:Html.EditorFor(m => m.Location.Position)%> - <%: string.IsNullOrEmpty(Model.DefaultLocation.Position) ? T("") : T("({0})", Model.DefaultLocation.Position) %> - <%:Html.ValidationMessageFor(m => m.Location.Position)%> -
+
+ <% + if (!string.IsNullOrWhiteSpace(Model.DefaultLocation.Zone)) { + %><%:T(" - default: {0}", Model.DefaultLocation.Zone) %><% + } %><%:Html.EditorFor(m => m.Location.Zone) %><%:Html.ValidationMessageFor(m => m.Location.Zone)%> +
+
+ <% + if (!string.IsNullOrWhiteSpace(Model.DefaultLocation.Zone)) { + %><%:T(" - default: {0}", Model.DefaultLocation.Position) %><% + } %><%:Html.EditorFor(m => m.Location.Position) %> +
<%:Html.ValidationMessageFor(m => m.Location.Position)%> +
\ No newline at end of file diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index 18eafc8b7..4e0195c64 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -241,6 +241,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Styles/admin.css b/src/Orchard.Web/Modules/Orchard.ContentTypes/Styles/admin.css index 89a597190..a39291ea6 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Styles/admin.css +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Styles/admin.css @@ -15,20 +15,40 @@ .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-part .manage-field, +.manage-type .manage-field fieldset, +.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-part .details { + overflow:auto; +} .manage-part .manage.minor { margin:0 0 -1.2em; } @@ -37,13 +57,16 @@ font-weight:normal; } .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 +83,10 @@ fieldset.action { } .manage-part dt, .manage-part dd { - display:inline; + float:left; +} +.manage-part dt { + clear:left; } .manage-part dt::after { content:":"; diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx index 8dba00cd8..d525ed5d2 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx @@ -15,14 +15,24 @@ using (Html.BeginFormAntiForgeryPost()) { %> <%:Html.HiddenFor(m => m.Name) %> <% Html.RenderTemplates(Model.Templates); %> -

<%:T("Fields") %>

-
<%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %>
<%: - Html.EditorFor(m => m.Fields, "Fields", "") %> -

<%:T("Parts") %>

-
<%: Html.ActionLink(T("Add").Text, "AddPartsTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" })%>
<%: - Html.EditorFor(m => m.Parts, "TypeParts", "") %> +
+

<%:T("Fields") %>

+
<%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %>
<%: + Html.EditorFor(m => m.Fields, "Fields", "") %> +

<%:T("Parts") %>

+
<%: Html.ActionLink(T("Add").Text, "AddPartsTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" })%>
<%: + Html.EditorFor(m => m.Parts, "TypeParts", "") %> +
<% +} +using (this.Capture("end-of-page-scripts")) { %> +<% } %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx index f468cd1b4..36c8d2715 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx @@ -10,10 +10,14 @@ using (Html.BeginFormAntiForgeryPost()) { %> <%:Html.TextBoxFor(m => m.Name, new {@class = "textMedium", disabled = "disabled"}) %> <%:Html.HiddenFor(m => m.Name) %> - <% Html.RenderTemplates(Model.Templates); %> -

<%:T("Fields") %>

-
<%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %>
- <%:Html.EditorFor(m => m.Fields, "Fields", "") %> +
+
+ <% Html.RenderTemplates(Model.Templates); %> +
+

<%:T("Fields") %>

+
<%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" }) %>
+ <%:Html.EditorFor(m => m.Fields, "Fields", "") %> +
<% diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/DisplayTemplates/Settings.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/DisplayTemplates/Settings.ascx index a539ce5b1..1cefbbcda 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/DisplayTemplates/Settings.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/DisplayTemplates/Settings.ascx @@ -2,6 +2,7 @@ <%@ import Namespace="Orchard.ContentManagement.MetaData.Models" %> <% if (Model.Any()) { %> + <%--

<%:T("Global Settings") %>

--%>
<% foreach (var setting in Model) { %>
<%:setting.Key %>
diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Settings.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Settings.ascx index 002f1224d..efe01d478 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Settings.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Settings.ascx @@ -13,4 +13,4 @@ if (Model.Any()) { %> <%:Html.TextBox(htmlFieldName + ".Value", s.Value)%><% } %> <% -} %> \ No newline at end of file +} %>asdf \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePart.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePart.ascx index b73de83f4..c58dfec34 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePart.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePart.ascx @@ -3,14 +3,17 @@

<%:Model.PartDefinition.DisplayName %>

<%:Html.ActionLink(T("Remove").Text, "RemovePartFrom", new { area = "Orchard.ContentTypes", id = Model.Type.Name, Model.PartDefinition.Name }, new { itemprop = "RemoveUrl UnsafeUrl" })%><%--// <- some experimentation--%> -
<% + +
<%:Html.EditorFor(m => m.PartDefinition.Fields, "TypePartFields", "PartDefinition") + %><% if (Model.Templates.Any()) { %> -
<% +
+

<%:T("{0} Settings:", Model.PartDefinition.DisplayName) %>

<% Html.RenderTemplates(Model.Templates); %>
<% } %> - <%: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) %> +
\ No newline at end of file diff --git a/src/Orchard.Web/Themes/TheAdmin/Scripts/admin.js b/src/Orchard.Web/Themes/TheAdmin/Scripts/admin.js index 255272479..6d71878d6 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Scripts/admin.js +++ b/src/Orchard.Web/Themes/TheAdmin/Scripts/admin.js @@ -14,9 +14,14 @@ }, options); _this.each(function (index, element) { var controller = $(element); - var glyph = $(""); + var glyph = $(""); 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; diff --git a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css index f26a37369..f27e590a0 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css +++ b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css @@ -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; diff --git a/src/Orchard/Mvc/Html/FileRegistrationContext.cs b/src/Orchard/Mvc/Html/FileRegistrationContext.cs index 30d1b8b36..2f5bbc74d 100644 --- a/src/Orchard/Mvc/Html/FileRegistrationContext.cs +++ b/src/Orchard/Mvc/Html/FileRegistrationContext.cs @@ -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; diff --git a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs index 92b4b0ea5..d22ef9ac4 100644 --- a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs +++ b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs @@ -30,7 +30,9 @@ namespace Orchard.Mvc.Html { } public static string FieldIdFor(this HtmlHelper html, Expression> 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(this HtmlHelper html, T currentValue, T optionValue, string text) { From 89864bee85fd60bb22c0c64d603bde8e700507f9 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Sun, 25 Jul 2010 02:05:48 -0700 Subject: [PATCH 2/4] A little more cleanup for the content type/part edit UI --HG-- branch : dev --- .../Core/ContentsLocation/Styles/admin.css | 6 ++++-- .../Modules/Orchard.ContentTypes/Styles/admin.css | 6 ++++-- .../ViewModels/EditTypeViewModel.cs | 7 ++++--- .../Orchard.ContentTypes/Views/Admin/Edit.ascx | 2 +- .../Views/EditorTemplates/Field.ascx | 12 +++++++----- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/Orchard.Web/Core/ContentsLocation/Styles/admin.css b/src/Orchard.Web/Core/ContentsLocation/Styles/admin.css index 619ebfa2b..376c52109 100644 --- a/src/Orchard.Web/Core/ContentsLocation/Styles/admin.css +++ b/src/Orchard.Web/Core/ContentsLocation/Styles/admin.css @@ -3,13 +3,15 @@ } fieldset.location-setting legend { font-weight:normal; + margin:0; + padding-bottom:0; } fieldset.location-setting label { display:inline; } -fieldset.location-setting input { +fieldset.location-setting input.text-box { display:block; - width:20em; + width:24em; } fieldset.location-setting fieldset { clear:none; diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Styles/admin.css b/src/Orchard.Web/Modules/Orchard.ContentTypes/Styles/admin.css index a39291ea6..ad2620ebe 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Styles/admin.css +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Styles/admin.css @@ -10,7 +10,7 @@ margin-top:-3.1em; } .manage-part { - margin-bottom:2em; + margin-bottom:1em; } .manage-part h3, .manage-field h3 { @@ -23,8 +23,8 @@ .manage-part h3, .manage-field h3, .manage-part h4, +.manage-type .manage-field .details, .manage-type .manage-part .manage-field, -.manage-type .manage-field fieldset, .manage-type .manage-part .settings { padding-left:20px; } @@ -46,6 +46,7 @@ font-size:1.4em; margin-top:-2.4em; } +.manage-field .details, .manage-part .details { overflow:auto; } @@ -56,6 +57,7 @@ .manage-field label { font-weight:normal; } +.manage-field fieldset, .manage-part fieldset { margin:.5em 0 1em; padding:0; diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypeViewModel.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypeViewModel.cs index 28e548d61..386cbcc9b 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypeViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypeViewModel.cs @@ -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 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() @@ -40,7 +41,7 @@ namespace Orchard.ContentTypes.ViewModels { private IEnumerable 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 }); } } diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx index d525ed5d2..89c8f540d 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx @@ -31,7 +31,7 @@ using (Html.BeginFormAntiForgeryPost()) { %> using (this.Capture("end-of-page-scripts")) { %> <% diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Field.ascx b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Field.ascx index 65e6fc7e8..0970b33a6 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Field.ascx +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/Field.ascx @@ -3,9 +3,11 @@

<%:Model.Name %> (<%:Model.FieldDefinition.Name %>)

<%:Html.ActionLink(T("Remove").Text, "RemoveFieldFrom", new { area = "Orchard.ContentTypes", id = Model.Part.Name, Model.Name }, new { itemprop = "RemoveUrl UnsafeUrl" })%><%--// <- some experimentation--%> -
<% - Html.RenderTemplates(Model.Templates); - %><%:Html.HiddenFor(m => m.Name) - %><%:Html.HiddenFor(m => m.FieldDefinition.Name) - %><%:Html.HiddenFor(m => m.Index) %> +
+
<% + Html.RenderTemplates(Model.Templates); + %><%:Html.HiddenFor(m => m.Name) + %><%:Html.HiddenFor(m => m.FieldDefinition.Name) + %><%:Html.HiddenFor(m => m.Index) %> +
\ No newline at end of file From 8a33ee043a80199f7c8eac6d655c95c56c65de12 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Sun, 25 Jul 2010 02:36:21 -0700 Subject: [PATCH 3/4] Updating the features admin UI to drop the "Core" category to the bottom of the page --HG-- branch : dev --- .../Models/DoghouseComparer.cs | 27 +++++++++++++++++++ .../Orchard.Modules/Orchard.Modules.csproj | 1 + .../Orchard.Modules/Views/Admin/Features.ascx | 5 ++-- 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Modules/Models/DoghouseComparer.cs diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Models/DoghouseComparer.cs b/src/Orchard.Web/Modules/Orchard.Modules/Models/DoghouseComparer.cs new file mode 100644 index 000000000..f7b2d7f5a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Modules/Models/DoghouseComparer.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; + +namespace Orchard.Modules.Models { + public class DoghouseComparer : IComparer { + 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); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj b/src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj index 8d4e95be6..614870786 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj +++ b/src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj @@ -69,6 +69,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.ascx b/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.ascx index 7525eb440..a8c3472b7 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.ascx +++ b/src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.ascx @@ -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"); %>

<%: Html.TitleForPage(T("Manage Features").ToString()) %>

<% if (Model.Features.Count() > 0) { %>
    "><% - 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())); From 46af6ee2f285554b858ddc6999f69f895198ad30 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Sun, 25 Jul 2010 02:43:56 -0700 Subject: [PATCH 4/4] Small fix to the search input & button alignment in the Contoso theme --HG-- branch : dev --- src/Orchard.Web/Themes/Contoso/Styles/site.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Web/Themes/Contoso/Styles/site.css b/src/Orchard.Web/Themes/Contoso/Styles/site.css index 9d119314c..492b6586b 100644 --- a/src/Orchard.Web/Themes/Contoso/Styles/site.css +++ b/src/Orchard.Web/Themes/Contoso/Styles/site.css @@ -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 =========*/