diff --git a/src/Orchard.Web/Core/Settings/Views/Admin/Culture.ascx b/src/Orchard.Web/Core/Settings/Views/Admin/Culture.ascx index 452c8091e..2ffdd3fad 100644 --- a/src/Orchard.Web/Core/Settings/Views/Admin/Culture.ascx +++ b/src/Orchard.Web/Core/Settings/Views/Admin/Culture.ascx @@ -1,7 +1,8 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Core.Settings.ViewModels" %><% Html.RegisterStyle("admin.css"); %> -

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

+

<%:Html.TitleForPage(T("Supported Cultures").ToString()) %>

+

<%:T("Cultures this site supports") %>

<%=Html.UnorderedList( Model.SiteCultures.OrderBy(s => s), @@ -10,7 +11,7 @@ <% using (Html.BeginFormAntiForgeryPost("AddCulture")) { %> <%:Html.ValidationSummary() %>
- <%:T("Add a culture...") %> + <%:Html.DropDownList("CultureName", new SelectList(Model.AvailableSystemCultures.OrderBy(s => s), Model.CurrentCulture)) %>
diff --git a/src/Orchard.Web/Core/Settings/Views/DisplayTemplates/RemovableCulture.ascx b/src/Orchard.Web/Core/Settings/Views/DisplayTemplates/RemovableCulture.ascx index 3abc6bfdf..7de8fff75 100644 --- a/src/Orchard.Web/Core/Settings/Views/DisplayTemplates/RemovableCulture.ascx +++ b/src/Orchard.Web/Core/Settings/Views/DisplayTemplates/RemovableCulture.ascx @@ -2,5 +2,5 @@
<%:Model %>
<% using (Html.BeginFormAntiForgeryPost(Url.Action("DeleteCulture", "Admin", new { area = "Settings" }), FormMethod.Post, new {@class = "inline link"})) { %> <%=Html.Hidden("cultureName", Model, new { id = "" }) %> - + <% } %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs index 30724ae32..7560d079f 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs @@ -2,24 +2,25 @@ using System.Web.Mvc; using Orchard.Blogs.Models; using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; +using Orchard.Localization; using Orchard.Mvc.Html; namespace Orchard.Blogs.Extensions { public static class HtmlHelperExtensions { - public static string PublishedState(this HtmlHelper htmlHelper) { - return htmlHelper.PublishedState(htmlHelper.ViewData.Model); + public static LocalizedString PublishedState(this HtmlHelper htmlHelper, Localizer T) { + return htmlHelper.PublishedState(htmlHelper.ViewData.Model, T); } - public static string PublishedState(this HtmlHelper htmlHelper, BlogPost blogPost) { - return htmlHelper.DateTime(blogPost.As().VersionPublishedUtc, "Draft"); + public static LocalizedString PublishedState(this HtmlHelper htmlHelper, BlogPost blogPost, Localizer T) { + return htmlHelper.DateTime(blogPost.As().VersionPublishedUtc, T("Draft")); } - public static string PublishedWhen(this HtmlHelper htmlHelper) { - return htmlHelper.PublishedWhen(htmlHelper.ViewData.Model); + public static LocalizedString PublishedWhen(this HtmlHelper htmlHelper, Localizer T) { + return htmlHelper.PublishedWhen(htmlHelper.ViewData.Model, T); } - public static string PublishedWhen(this HtmlHelper htmlHelper, BlogPost blogPost) { - return htmlHelper.DateTimeRelative(blogPost.As().VersionPublishedUtc, "as a Draft"); + public static LocalizedString PublishedWhen(this HtmlHelper htmlHelper, BlogPost blogPost, Localizer T) { + return htmlHelper.DateTimeRelative(blogPost.As().VersionPublishedUtc, T("as a Draft"), T); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 31650d86f..ab3177a20 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -1,9 +1,7 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> -<%@ Import Namespace="Orchard.ContentManagement"%> -<%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%>

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item)) %>

-
<%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
+
<%=Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%>
<% Html.Zone("primary", ":manage :metadata");%>
diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx index 748288226..a75a35aa9 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx @@ -1,7 +1,6 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> <%@ Import Namespace="Orchard.ContentManagement.Aspects"%> <%@ Import Namespace="Orchard.ContentManagement"%> -<%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> @@ -11,15 +10,15 @@
  • <% if (Model.Item.HasPublished) { %> - " alt="<%: T("Online") %>" title="<%: T("The page is currently online") %>" /><%: T(" Published")%><% + " alt="<%: T("Online") %>" title="<%: T("The page is currently online") %>" /> <%: T("Published")%><% } else { %> - " alt="<%: T("Offline") %>" title="<%: T("The page is currently offline") %>" /><%: T(" Not Published")%><% + " alt="<%: T("Offline") %>" title="<%: T("The page is currently offline") %>" /> <%: T("Not Published")%><% } %> | 
  • <% if (Model.Item.HasDraft) { %> - " alt="<%: T("Draft") %>" title="<%: T("The post has a draft") %>" /><%=Html.PublishedState(Model.Item)%><% + " alt="<%: T("Draft") %>" title="<%: T("The post has a draft") %>" /><%=Html.PublishedState(Model.Item, T) %><% } else { %> <%: T("No draft")%><% @@ -31,10 +30,10 @@ <%=Html.DateTime(Model.Item.ScheduledPublishUtc.Value, "M/d/yyyy h:mm tt")%><% } else if (Model.Item.IsPublished) { %> - <%: T("Published: ") + Html.DateTimeRelative(Model.Item.As().VersionPublishedUtc.Value)%><% + <%: T("Published: {0}", Html.DateTimeRelative(Model.Item.As().VersionPublishedUtc.Value, T)) %><% } else { %> - <%: T("Last modified: ") + Html.DateTimeRelative(Model.Item.As().ModifiedUtc.Value) %><% + <%: T("Last modified: {0}", Html.DateTimeRelative(Model.Item.As().ModifiedUtc.Value, T)) %><% } %> | 
  • <%: T("By {0}", Model.Item.Creator.UserName)%>
  • diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.Summary.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.Summary.ascx index c46697732..402274d10 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.Summary.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.Summary.ascx @@ -2,5 +2,5 @@ <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%><% if (Model.Creator != null) { - %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model)) %> | <% + %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %> | <% } %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx index ae7698531..a54802281 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx @@ -3,6 +3,6 @@ <%@ Import Namespace="Orchard.Blogs.Models"%> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Views/ListOfComments.ascx b/src/Orchard.Web/Modules/Orchard.Comments/Views/ListOfComments.ascx index b92e64e06..789fc37d7 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Views/ListOfComments.ascx +++ b/src/Orchard.Web/Modules/Orchard.Comments/Views/ListOfComments.ascx @@ -6,7 +6,7 @@ foreach (var comment in Model) { %>
    <%=Html.LinkOrDefault(Html.Encode(comment.Record.UserName), Html.Encode(comment.Record.SiteName), new { rel = "nofollow" })%> <%-- todo: (heskew) need comment permalink --%> - said <%=Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault()), "#")%> + said <%=Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault(), T).Text, "#")%>
    <%-- todo: (heskew) comment text needs processing depending on comment markup style --%> diff --git a/src/Orchard.Web/Modules/Orchard.Pages/Views/Admin/List.aspx b/src/Orchard.Web/Modules/Orchard.Pages/Views/Admin/List.aspx index 2851aaa6f..f9f514bd2 100644 --- a/src/Orchard.Web/Modules/Orchard.Pages/Views/Admin/List.aspx +++ b/src/Orchard.Web/Modules/Orchard.Pages/Views/Admin/List.aspx @@ -1,7 +1,6 @@ <%@ Page Language="C#" Inherits="Orchard.Mvc.ViewPage" %> <%@ Import Namespace="Orchard.ContentManagement.Aspects"%> <%@ Import Namespace="Orchard.ContentManagement"%> -<%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Mvc.Html"%> <%@ Import Namespace="Orchard.Pages.ViewModels"%><% Html.RegisterStyle("admin.css"); %> @@ -45,10 +44,10 @@ using (Html.BeginFormAntiForgeryPost()) { %>
  • <% // Published or not if (pageEntry.Page.HasPublished) { %> - " alt="<%: T("Online") %>" title="<%: T("The page is currently online") %>" /><%: T("Published") %> | <% + " alt="<%: T("Online") %>" title="<%: T("The page is currently online") %>" /> <%: T("Published") %> | <% } else { %> - " alt="<%: T("Offline") %>" title="<%: T("The page is currently offline") %>" /><%: T("Not Published")%> | <% + " alt="<%: T("Offline") %>" title="<%: T("The page is currently offline") %>" /> <%: T("Not Published")%> | <% } %>
  • <% @@ -66,10 +65,10 @@ using (Html.BeginFormAntiForgeryPost()) { %> <%=Html.DateTime(pageEntry.Page.ScheduledPublishUtc.Value, "M/d/yyyy h:mm tt")%><% } else if (pageEntry.Page.IsPublished) { %> - <%: T("Published: ") + Html.DateTimeRelative(pageEntry.Page.As().VersionPublishedUtc.Value) %><% + <%: T("Published: {0}", Html.DateTimeRelative(pageEntry.Page.As().VersionPublishedUtc.Value, T)) %><% } else { %> - <%: T("Last modified: ") + Html.DateTimeRelative(pageEntry.Page.As().ModifiedUtc.Value) %><% + <%: T("Last modified: {0}", Html.DateTimeRelative(pageEntry.Page.As().ModifiedUtc.Value, T)) %><% } %> | 
  • <%: T("By {0}", pageEntry.Page.Creator.UserName)%>
  • diff --git a/src/Orchard.Web/Modules/Orchard.Search/Views/Admin/Index.ascx b/src/Orchard.Web/Modules/Orchard.Search/Views/Admin/Index.ascx index 151100a64..e7202166b 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Views/Admin/Index.ascx +++ b/src/Orchard.Web/Modules/Orchard.Search/Views/Admin/Index.ascx @@ -4,7 +4,7 @@ Html.RegisterStyle("admin.css"); %>

    <%=Html.TitleForPage(T("Search Index Management").ToString()) %>

    <% using (Html.BeginForm("update", "admin", FormMethod.Post, new {area = "Orchard.Search"})) { %>
    -

    <%=T("The search index was last updated {0}. ", Html.DateTimeRelative(Model.IndexUpdatedUtc))%>

    +

    <%=T("The search index was last updated {0}. ", Html.DateTimeRelative(Model.IndexUpdatedUtc, T))%>

    <%=Html.AntiForgeryTokenOrchard() %>
    <% } diff --git a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 2037687d2..637da3b4b 100644 --- a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -1,12 +1,10 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> -<%@ Import Namespace="Orchard.ContentManagement"%> -<%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> <%Model.Zones.AddRenderPartial("zonetest", "ZoneTest", Model); %>

    <%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item)) %>

    -
    <%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
    +
    <%=Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%>
    <% Html.Zone("primary"); %>
    \ No newline at end of file diff --git a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx index 623e3985c..e91472533 100644 --- a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx +++ b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx @@ -1,7 +1,6 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%> -<% - if (Model.Creator != null) { - %><%: T("Posted by {0} {1}", Model.Creator.UserName, "|", Html.PublishedWhen(Model)) %><% - } %> +<%@ Import Namespace="Orchard.Blogs.Models"%><% +if (Model.Creator != null) { + %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><% +} %> \ No newline at end of file diff --git a/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 2037687d2..637da3b4b 100644 --- a/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -1,12 +1,10 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> -<%@ Import Namespace="Orchard.ContentManagement"%> -<%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> <%Model.Zones.AddRenderPartial("zonetest", "ZoneTest", Model); %>

    <%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item)) %>

    -
    <%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
    +
    <%=Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%>
    <% Html.Zone("primary"); %>
    \ No newline at end of file diff --git a/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx b/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx index 623e3985c..e91472533 100644 --- a/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx +++ b/src/Orchard.Web/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx @@ -1,7 +1,6 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%> -<% - if (Model.Creator != null) { - %><%: T("Posted by {0} {1}", Model.Creator.UserName, "|", Html.PublishedWhen(Model)) %><% - } %> +<%@ Import Namespace="Orchard.Blogs.Models"%><% +if (Model.Creator != null) { + %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><% +} %> \ No newline at end of file diff --git a/src/Orchard.Web/Themes/Contoso/Views/ListOfComments.ascx b/src/Orchard.Web/Themes/Contoso/Views/ListOfComments.ascx index c86a1eea1..17545b07d 100644 --- a/src/Orchard.Web/Themes/Contoso/Views/ListOfComments.ascx +++ b/src/Orchard.Web/Themes/Contoso/Views/ListOfComments.ascx @@ -3,15 +3,12 @@
      <% foreach (var comment in Model) { %>
    • - -
      -

      <%: comment.Record.CommentText %>

      -
      - -
      -<%=Html.LinkOrDefault(Html.Encode(comment.Record.UserName), Html.Encode(comment.Record.SiteName), new { rel = "nofollow" })%> said <%=Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault()), "#")%> -
      - +
      +

      <%: comment.Record.CommentText %>

      +
      +
      + <%=Html.LinkOrDefault(Html.Encode(comment.Record.UserName), Html.Encode(comment.Record.SiteName), new { rel = "nofollow" })%> said <%=Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault(), T).Text, "#")%> +
    • <% } %>
    diff --git a/src/Orchard.Web/Themes/Corporate/Views/ListOfComments.ascx b/src/Orchard.Web/Themes/Corporate/Views/ListOfComments.ascx index c86a1eea1..17545b07d 100644 --- a/src/Orchard.Web/Themes/Corporate/Views/ListOfComments.ascx +++ b/src/Orchard.Web/Themes/Corporate/Views/ListOfComments.ascx @@ -3,15 +3,12 @@
      <% foreach (var comment in Model) { %>
    • - -
      -

      <%: comment.Record.CommentText %>

      -
      - -
      -<%=Html.LinkOrDefault(Html.Encode(comment.Record.UserName), Html.Encode(comment.Record.SiteName), new { rel = "nofollow" })%> said <%=Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault()), "#")%> -
      - +
      +

      <%: comment.Record.CommentText %>

      +
      +
      + <%=Html.LinkOrDefault(Html.Encode(comment.Record.UserName), Html.Encode(comment.Record.SiteName), new { rel = "nofollow" })%> said <%=Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault(), T).Text, "#")%> +
    • <% } %>
    diff --git a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 52e19c18c..bd4a18de9 100644 --- a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -1,14 +1,9 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> -<%@ Import Namespace="Orchard.ContentManagement"%> -<%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> -

    <%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item)) %>

    - -
    <%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
    - +
    <%=Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%>
    <% Html.Zone("primary"); %> -
    +
    \ No newline at end of file diff --git a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx index 623e3985c..e91472533 100644 --- a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx +++ b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx @@ -1,7 +1,6 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Blogs.Extensions"%> -<%@ Import Namespace="Orchard.Blogs.Models"%> -<% - if (Model.Creator != null) { - %><%: T("Posted by {0} {1}", Model.Creator.UserName, "|", Html.PublishedWhen(Model)) %><% - } %> +<%@ Import Namespace="Orchard.Blogs.Models"%><% +if (Model.Creator != null) { + %><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><% +} %> \ No newline at end of file diff --git a/src/Orchard.Web/Themes/Green/Views/ListOfComments.ascx b/src/Orchard.Web/Themes/Green/Views/ListOfComments.ascx index c86a1eea1..17545b07d 100644 --- a/src/Orchard.Web/Themes/Green/Views/ListOfComments.ascx +++ b/src/Orchard.Web/Themes/Green/Views/ListOfComments.ascx @@ -3,15 +3,12 @@
      <% foreach (var comment in Model) { %>
    • - -
      -

      <%: comment.Record.CommentText %>

      -
      - -
      -<%=Html.LinkOrDefault(Html.Encode(comment.Record.UserName), Html.Encode(comment.Record.SiteName), new { rel = "nofollow" })%> said <%=Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault()), "#")%> -
      - +
      +

      <%: comment.Record.CommentText %>

      +
      +
      + <%=Html.LinkOrDefault(Html.Encode(comment.Record.UserName), Html.Encode(comment.Record.SiteName), new { rel = "nofollow" })%> said <%=Html.Link(Html.DateTimeRelative(comment.Record.CommentDateUtc.GetValueOrDefault(), T).Text, "#")%> +
    • <% } %>
    diff --git a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css index e692f8aeb..58829e83f 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css +++ b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css @@ -721,6 +721,9 @@ table .button { /* ---------- Generic ---------- */ +#main .breadcrumb { + margin-top:-1.5em; +} /* todo: needed? */ .clearBoth { clear:both; diff --git a/src/Orchard/ContentManagement/ContentField.cs b/src/Orchard/ContentManagement/ContentField.cs index 671ac54fd..e1edebb52 100644 --- a/src/Orchard/ContentManagement/ContentField.cs +++ b/src/Orchard/ContentManagement/ContentField.cs @@ -1,8 +1,20 @@ -using Orchard.ContentManagement.MetaData.Models; +using System.Collections.Generic; +using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentManagement.Utilities; namespace Orchard.ContentManagement { - public class ContentField { + public class ContentField : ContentPart { + public virtual ContentPart ContentPart { get; set; } public string Name { get; set; } - public ContentFieldDefinition Definition { get; set; } + public IDictionary Settings { get; private set; } + + public new ContentPartDefinition PartDefinition { get { return ContentPart.PartDefinition; } } + public ContentPartDefinition.Field PartFieldDefinition { get; set; } + public ContentFieldDefinition FieldDefinition { get { return PartFieldDefinition.FieldDefinition; } } + } + + public class ContentField : ContentField { + public readonly LazyField _record = new LazyField(); + public TRecord Record { get { return _record.Value; } set { _record.Value = value; } } } } diff --git a/src/Orchard/ContentManagement/ContentPart.cs b/src/Orchard/ContentManagement/ContentPart.cs index 8f485aa9a..5c3f35728 100644 --- a/src/Orchard/ContentManagement/ContentPart.cs +++ b/src/Orchard/ContentManagement/ContentPart.cs @@ -1,12 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.Utilities; namespace Orchard.ContentManagement { public abstract class ContentPart : IContent { + private readonly IList _fields; + + public ContentPart() { + _fields = new List(); + } + public virtual ContentItem ContentItem { get; set; } public ContentTypeDefinition TypeDefinition { get { return ContentItem.TypeDefinition; } } public ContentTypeDefinition.Part TypePartDefinition { get; set; } public ContentPartDefinition PartDefinition { get { return TypePartDefinition.PartDefinition; } } + + public IEnumerable Fields { get { return _fields; } } + + + public bool Has(Type fieldType) { + return fieldType == typeof(ContentItem) || _fields.Any(field => fieldType.IsAssignableFrom(field.GetType())); + } + + public IContent Get(Type fieldType) { + if (fieldType == typeof(ContentItem)) + return this; + return _fields.FirstOrDefault(field => fieldType.IsAssignableFrom(field.GetType())); + } + + public void Weld(ContentField field) { + field.ContentPart = this; + _fields.Add(field); + } } public class ContentPart : ContentPart { diff --git a/src/Orchard/ContentManagement/Drivers/ContentFieldDriver.cs b/src/Orchard/ContentManagement/Drivers/ContentFieldDriver.cs new file mode 100644 index 000000000..91d42a0be --- /dev/null +++ b/src/Orchard/ContentManagement/Drivers/ContentFieldDriver.cs @@ -0,0 +1,51 @@ +using Orchard.ContentManagement.Handlers; + +namespace Orchard.ContentManagement.Drivers { + + public interface IContentFieldDriver : IEvents { + DriverResult BuildDisplayModel(BuildDisplayModelContext context); + DriverResult BuildEditorModel(BuildEditorModelContext context); + DriverResult UpdateEditorModel(UpdateEditorModelContext context); + } + + public abstract class ContentFieldDriver : IContentFieldDriver where TContent : ContentField, new() { + protected virtual string Prefix { get { return ""; } } + protected virtual string Zone { get { return "body"; } } + + DriverResult IContentFieldDriver.BuildDisplayModel(BuildDisplayModelContext context) { + var field = context.ContentItem.As(); + return field == null ? null : Display(field, context.DisplayType); + } + + DriverResult IContentFieldDriver.BuildEditorModel(BuildEditorModelContext context) { + var field = context.ContentItem.As(); + return field == null ? null : Editor(field); + } + + DriverResult IContentFieldDriver.UpdateEditorModel(UpdateEditorModelContext context) { + var field = context.ContentItem.As(); + return field == null ? null : Editor(field, context.Updater); + } + + protected virtual DriverResult Display(TContent field, string displayType) { return null; } + protected virtual DriverResult Editor(TContent field) { return null; } + protected virtual DriverResult Editor(TContent field, IUpdateModel updater) { return null; } + + + public ContentFieldTemplateResult ContentPartTemplate(object model) { + return new ContentFieldTemplateResult(model, null, Prefix).Location(Zone); + } + + public ContentFieldTemplateResult ContentPartTemplate(object model, string template) { + return new ContentFieldTemplateResult(model, template, Prefix).Location(Zone); + } + + public ContentFieldTemplateResult ContentPartTemplate(object model, string template, string prefix) { + return new ContentFieldTemplateResult(model, template, prefix).Location(Zone); + } + + public CombinedResult Combined(params DriverResult[] results) { + return new CombinedResult(results); + } + } +} \ No newline at end of file diff --git a/src/Orchard/ContentManagement/Drivers/ContentFieldDriverHandler.cs b/src/Orchard/ContentManagement/Drivers/ContentFieldDriverHandler.cs new file mode 100644 index 000000000..89c1da793 --- /dev/null +++ b/src/Orchard/ContentManagement/Drivers/ContentFieldDriverHandler.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using JetBrains.Annotations; +using Orchard.ContentManagement.Handlers; +using Orchard.Logging; + +namespace Orchard.ContentManagement.Drivers { + [UsedImplicitly] + public class ContentFieldDriverHandler : ContentHandlerBase { + private readonly IEnumerable _drivers; + + public ContentFieldDriverHandler(IEnumerable drivers) { + _drivers = drivers; + Logger = NullLogger.Instance; + } + + public ILogger Logger { get; set; } + + public override void BuildDisplayModel(BuildDisplayModelContext context) { + _drivers.Invoke(driver => { + var result = driver.BuildDisplayModel(context); + if (result != null) + result.Apply(context); + }, Logger); + } + + public override void BuildEditorModel(BuildEditorModelContext context) { + _drivers.Invoke(driver => { + var result = driver.BuildEditorModel(context); + if (result != null) + result.Apply(context); + }, Logger); + } + + public override void UpdateEditorModel(UpdateEditorModelContext context) { + _drivers.Invoke(driver => { + var result = driver.UpdateEditorModel(context); + if (result != null) + result.Apply(context); + }, Logger); + } + } +} \ No newline at end of file diff --git a/src/Orchard/ContentManagement/Drivers/ContentFieldTemplateResult.cs b/src/Orchard/ContentManagement/Drivers/ContentFieldTemplateResult.cs new file mode 100644 index 000000000..e94241b5e --- /dev/null +++ b/src/Orchard/ContentManagement/Drivers/ContentFieldTemplateResult.cs @@ -0,0 +1,56 @@ +using System.Linq; +using Orchard.ContentManagement.Handlers; + +namespace Orchard.ContentManagement.Drivers { + public class ContentFieldTemplateResult : DriverResult { + public object Model { get; set; } + public string TemplateName { get; set; } + public string Prefix { get; set; } + public string Zone { get; set; } + public string Position { get; set; } + + public ContentFieldTemplateResult(object model, string templateName, string prefix) { + Model = model; + TemplateName = templateName; + Prefix = prefix; + } + + public override void Apply(BuildDisplayModelContext context) { + context.ViewModel.Zones.AddDisplayPart( + Zone + ":" + Position, Model, TemplateName, Prefix); + } + + public override void Apply(BuildEditorModelContext context) { + context.ViewModel.Zones.AddEditorPart( + Zone + ":" + Position, Model, TemplateName, Prefix); + } + + public ContentFieldTemplateResult Location(string zone) { + Zone = zone; + return this; + } + + public ContentFieldTemplateResult Location(string zone, string position) { + Zone = zone; + Position = position; + return this; + } + + public ContentFieldTemplateResult LongestMatch(string displayType, params string[] knownDisplayTypes) { + + if (string.IsNullOrEmpty(displayType)) + return this; + + var longest = knownDisplayTypes.Aggregate("", (best, x) => { + if (displayType.StartsWith(x) && x.Length > best.Length) return x; + return best; + }); + + if (string.IsNullOrEmpty(longest)) + return this; + + TemplateName += "." + longest; + return this; + } + } +} \ No newline at end of file diff --git a/src/Orchard/ContentManagement/Drivers/ContentPartDriverHandler.cs b/src/Orchard/ContentManagement/Drivers/ContentPartDriverHandler.cs index eb6cc6130..119ac4b48 100644 --- a/src/Orchard/ContentManagement/Drivers/ContentPartDriverHandler.cs +++ b/src/Orchard/ContentManagement/Drivers/ContentPartDriverHandler.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Linq; using JetBrains.Annotations; using Orchard.ContentManagement.Handlers; using Orchard.Logging; diff --git a/src/Orchard/ContentManagement/Handlers/ContentHandler.cs b/src/Orchard/ContentManagement/Handlers/ContentHandler.cs index 61264e60f..630c41f0d 100644 --- a/src/Orchard/ContentManagement/Handlers/ContentHandler.cs +++ b/src/Orchard/ContentManagement/Handlers/ContentHandler.cs @@ -25,6 +25,14 @@ namespace Orchard.ContentManagement.Handlers { Filters.Add(new InlineStorageFilter { OnCreated = handler }); } + protected void OnSaving(Action handler) where TPart : class, IContent { + Filters.Add(new InlineStorageFilter { OnSaving = handler }); + } + + protected void OnSaved(Action handler) where TPart : class, IContent { + Filters.Add(new InlineStorageFilter { OnSaved = handler }); + } + protected void OnLoading(Action handler) where TPart : class, IContent { Filters.Add(new InlineStorageFilter { OnLoading = handler }); } @@ -84,6 +92,8 @@ namespace Orchard.ContentManagement.Handlers { public Action OnActivated { get; set; } public Action OnCreating { get; set; } public Action OnCreated { get; set; } + public Action OnSaving { get; set; } + public Action OnSaved { get; set; } public Action OnLoading { get; set; } public Action OnLoaded { get; set; } public Action OnVersioning { get; set; } @@ -103,6 +113,12 @@ namespace Orchard.ContentManagement.Handlers { protected override void Created(CreateContentContext context, TPart instance) { if (OnCreated != null) OnCreated(context, instance); } + protected override void Saving(SaveContentContext context, TPart instance) { + if (OnSaving != null) OnSaving(context, instance); + } + protected override void Saved(SaveContentContext context, TPart instance) { + if (OnSaved != null) OnSaved(context, instance); + } protected override void Loading(LoadContentContext context, TPart instance) { if (OnLoading != null) OnLoading(context, instance); } @@ -185,6 +201,18 @@ namespace Orchard.ContentManagement.Handlers { Created(context); } + void IContentHandler.Saving(SaveContentContext context) { + foreach (var filter in Filters.OfType()) + filter.Saving(context); + Saving(context); + } + + void IContentHandler.Saved(SaveContentContext context) { + foreach (var filter in Filters.OfType()) + filter.Saved(context); + Saved(context); + } + void IContentHandler.Loading(LoadContentContext context) { foreach (var filter in Filters.OfType()) filter.Loading(context); @@ -272,6 +300,9 @@ namespace Orchard.ContentManagement.Handlers { protected virtual void Creating(CreateContentContext context) { } protected virtual void Created(CreateContentContext context) { } + protected virtual void Saving(SaveContentContext context) { } + protected virtual void Saved(SaveContentContext context) { } + protected virtual void Loading(LoadContentContext context) { } protected virtual void Loaded(LoadContentContext context) { } diff --git a/src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs b/src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs index f8026393a..a75ef9ed3 100644 --- a/src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs +++ b/src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; namespace Orchard.ContentManagement.Handlers { @@ -20,6 +19,12 @@ namespace Orchard.ContentManagement.Handlers { public virtual void Created(CreateContentContext context) { } + public virtual void Saving(SaveContentContext context) { + } + + public virtual void Saved(SaveContentContext context) { + } + public virtual void Loading(LoadContentContext context) { } diff --git a/src/Orchard/ContentManagement/Handlers/IContentHandler.cs b/src/Orchard/ContentManagement/Handlers/IContentHandler.cs index 7dc37cfa7..03cc514b8 100644 --- a/src/Orchard/ContentManagement/Handlers/IContentHandler.cs +++ b/src/Orchard/ContentManagement/Handlers/IContentHandler.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using Orchard.Events; +using System.Collections.Generic; namespace Orchard.ContentManagement.Handlers { public interface IContentHandler : IEvents { @@ -10,6 +8,8 @@ namespace Orchard.ContentManagement.Handlers { void Activated(ActivatedContentContext context); void Creating(CreateContentContext context); void Created(CreateContentContext context); + void Saving(SaveContentContext context); + void Saved(SaveContentContext context); void Loading(LoadContentContext context); void Loaded(LoadContentContext context); void Versioning(VersionContentContext context); diff --git a/src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs b/src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs index a3bbe7b40..b4ddfbdef 100644 --- a/src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs +++ b/src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs @@ -3,6 +3,8 @@ namespace Orchard.ContentManagement.Handlers { void Activated(ActivatedContentContext context); void Creating(CreateContentContext context); void Created(CreateContentContext context); + void Saving(SaveContentContext context); + void Saved(SaveContentContext context); void Loading(LoadContentContext context); void Loaded(LoadContentContext context); void Versioning(VersionContentContext context); diff --git a/src/Orchard/ContentManagement/Handlers/SaveContentContext.cs b/src/Orchard/ContentManagement/Handlers/SaveContentContext.cs new file mode 100644 index 000000000..0cbe96598 --- /dev/null +++ b/src/Orchard/ContentManagement/Handlers/SaveContentContext.cs @@ -0,0 +1,12 @@ +using Orchard.ContentManagement.Records; + +namespace Orchard.ContentManagement.Handlers { + public class SaveContentContext : ContentContextBase { + public SaveContentContext(ContentItem contentItem) + : base(contentItem) { + ContentItemVersionRecord = contentItem.VersionRecord; + } + + public ContentItemVersionRecord ContentItemVersionRecord { get; set; } + } +} diff --git a/src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs b/src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs index d63e0e4a7..ae0884097 100644 --- a/src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs +++ b/src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs @@ -4,6 +4,8 @@ namespace Orchard.ContentManagement.Handlers { protected virtual void Activated(ActivatedContentContext context, TPart instance) { } protected virtual void Creating(CreateContentContext context, TPart instance) { } protected virtual void Created(CreateContentContext context, TPart instance) { } + protected virtual void Saving(SaveContentContext context, TPart instance) { } + protected virtual void Saved(SaveContentContext context, TPart instance) { } protected virtual void Loading(LoadContentContext context, TPart instance) { } protected virtual void Loaded(LoadContentContext context, TPart instance) { } protected virtual void Versioning(VersionContentContext context, TPart existing, TPart building) { } @@ -31,6 +33,16 @@ namespace Orchard.ContentManagement.Handlers { Created(context, context.ContentItem.As()); } + void IContentStorageFilter.Saving(SaveContentContext context) { + if (context.ContentItem.Is()) + Saving(context, context.ContentItem.As()); + } + + void IContentStorageFilter.Saved(SaveContentContext context) { + if (context.ContentItem.Is()) + Saved(context, context.ContentItem.As()); + } + void IContentStorageFilter.Loading(LoadContentContext context) { if (context.ContentItem.Is()) Loading(context, context.ContentItem.As()); diff --git a/src/Orchard/ContentManagement/MetaData/Models/ContentPartDefinition.cs b/src/Orchard/ContentManagement/MetaData/Models/ContentPartDefinition.cs index dd8bd4e9c..c49981ce2 100644 --- a/src/Orchard/ContentManagement/MetaData/Models/ContentPartDefinition.cs +++ b/src/Orchard/ContentManagement/MetaData/Models/ContentPartDefinition.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Orchard.Utility.Extensions; diff --git a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs index b38925545..bc38d3340 100644 --- a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs +++ b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs @@ -7,6 +7,7 @@ using System.Web.Mvc; using System.Web.Mvc.Html; using System.Web.Routing; using Orchard.Collections; +using Orchard.Localization; using Orchard.Mvc.ViewModels; using Orchard.Services; using Orchard.Settings; @@ -178,44 +179,44 @@ namespace Orchard.Mvc.Html { #region Format Date/Time - public static string DateTimeRelative(this HtmlHelper htmlHelper, DateTime? value, string defaultIfNull) { - return value.HasValue ? htmlHelper.DateTimeRelative(value.Value) : defaultIfNull; + public static LocalizedString DateTimeRelative(this HtmlHelper htmlHelper, DateTime? value, LocalizedString defaultIfNull, Localizer T) { + return value.HasValue ? htmlHelper.DateTimeRelative(value.Value, T) : defaultIfNull; } //TODO: (erikpo) This method needs localized - public static string DateTimeRelative(this HtmlHelper htmlHelper, DateTime value) { - TimeSpan time = htmlHelper.Resolve().UtcNow - value; + public static LocalizedString DateTimeRelative(this HtmlHelper htmlHelper, DateTime value, Localizer T) { + var time = htmlHelper.Resolve().UtcNow - value; if (time.TotalDays > 7) - return "on " + htmlHelper.DateTime(value, "MMM d yyyy 'at' h:mm tt"); + return htmlHelper.DateTime(value, T("'on' MMM d yyyy 'at' h:mm tt")); if (time.TotalHours > 24) - return string.Format("{0} day{1} ago", time.Days, time.Days == 1 ? "" : "s"); + return T.Plural("1 day ago", "{0} days ago", time.Days); if (time.TotalMinutes > 60) - return string.Format("{0} hour{1} ago", time.Hours, time.Hours == 1 ? "" : "s"); + return T.Plural("1 hour ago", "{0} hours ago", time.Hours); if (time.TotalSeconds > 60) - return string.Format("{0} minute{1} ago", time.Minutes, time.Minutes == 1 ? "" : "s"); + return T.Plural("1 minute ago", "{0} minutes ago", time.Minutes); if (time.TotalSeconds > 10) - return string.Format("{0} second{1} ago", time.Seconds, time.Seconds == 1 ? "" : "s"); + return T.Plural("1 second ago", "{0} seconds ago", time.Seconds); //aware that the singular won't be used - return "a moment ago"; + return T("a moment ago"); } - public static string DateTime(this HtmlHelper htmlHelper, DateTime? value, string defaultIfNull) { + public static LocalizedString DateTime(this HtmlHelper htmlHelper, DateTime? value, LocalizedString defaultIfNull) { return value.HasValue ? htmlHelper.DateTime(value.Value) : defaultIfNull; } - public static string DateTime(this HtmlHelper htmlHelper, DateTime? value, string defaultIfNull, string customFormat) { + public static LocalizedString DateTime(this HtmlHelper htmlHelper, DateTime? value, LocalizedString defaultIfNull, LocalizedString customFormat) { return value.HasValue ? htmlHelper.DateTime(value.Value, customFormat) : defaultIfNull; } - public static string DateTime(this HtmlHelper htmlHelper, DateTime value) { + public static LocalizedString DateTime(this HtmlHelper htmlHelper, DateTime value) { //TODO: (erikpo) This default format should come from a site setting - return htmlHelper.DateTime(value, "MMM d yyyy h:mm tt"); + return htmlHelper.DateTime(value, new LocalizedString("MMM d yyyy h:mm tt")); //todo: above comment and get rid of just wrapping this as a localized string } - public static string DateTime(this HtmlHelper htmlHelper, DateTime value, string customFormat) { + public static LocalizedString DateTime(this HtmlHelper htmlHelper, DateTime value, LocalizedString customFormat) { //TODO: (erikpo) In the future, convert this to "local" time before calling ToString - return value.ToString(customFormat); + return value.ToString(customFormat.Text); } #endregion diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 24e78320b..5c982d60e 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -170,6 +170,9 @@ Code + + + Code @@ -255,6 +258,7 @@ Code + Code