From 59d95f11ee0b23f95f0019b52181335bba571588 Mon Sep 17 00:00:00 2001 From: Erik Scofield Date: Wed, 23 Sep 2015 00:11:43 -0500 Subject: [PATCH 1/3] Enhancement to allow multi-select for the content picker --- .../Orchard.ContentPicker.csproj | 1 + .../Orchard.ContentPicker/ResourceManifest.cs | 1 + .../Scripts/ContentPicker.js | 26 ++++++++--- .../Scripts/RecentContentTab.js | 29 ++++++++++++ .../Styles/ContentPicker.css | 21 +++++++++ .../Views/ContentPicker.SummaryAdmin.cshtml | 45 ++++++++++--------- .../Views/RecentContentTab.cshtml | 4 ++ 7 files changed, 99 insertions(+), 28 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/RecentContentTab.js diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj b/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj index 49094ddf4..cf4fe9fa3 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj @@ -72,6 +72,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/ResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.ContentPicker/ResourceManifest.cs index 9e3346f47..ec420aac9 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/ResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/ResourceManifest.cs @@ -5,6 +5,7 @@ namespace Orchard.ContentPicker { public void BuildManifests(ResourceManifestBuilder builder) { var manifest = builder.Add(); manifest.DefineScript("ContentPicker").SetUrl("ContentPicker.js", "ContentPicker.js").SetDependencies("jQuery"); + manifest.DefineScript("RecentContentTab").SetUrl("RecentContentTab.js", "RecentContentTab.js").SetDependencies("jQuery"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/ContentPicker.js b/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/ContentPicker.js index c60c6f6c3..609978b65 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/ContentPicker.js +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/ContentPicker.js @@ -80,14 +80,26 @@ addButton.click(function() { addButton.trigger("orchard-admin-contentpicker-open", { callback: function(data) { - var tmpl = template.replace( /\{contentItemId\}/g , data.id) - .replace( /\{edit-link\}/g , data.editLink) - .replace( /\{status-text}/g , data.published? "" : " - " + notPublishedText); - var content = $(tmpl); - $(self).find('table.content-picker tbody').append(content); + if (Array.isArray && Array.isArray(data)) { + data.forEach(function (d) { + var tmpl = template.replace(/\{contentItemId\}/g, d.id) + .replace(/\{edit-link\}/g, d.editLink) + .replace(/\{status-text}/g, d.published ? "" : " - " + notPublishedText); + var content = $(tmpl); + $(self).find('table.content-picker tbody').append(content); + }); + refreshIds(); + $(self).find('.content-picker-message').show(); + } else { + var tmpl = template.replace(/\{contentItemId\}/g, data.id) + .replace(/\{edit-link\}/g, data.editLink) + .replace(/\{status-text}/g, data.published ? "" : " - " + notPublishedText); + var content = $(tmpl); + $(self).find('table.content-picker tbody').append(content); - refreshIds(); - $(self).find('.content-picker-message').show(); + refreshIds(); + $(self).find('.content-picker-message').show(); + } }, baseUrl: baseUrl, part: partName, diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/RecentContentTab.js b/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/RecentContentTab.js new file mode 100644 index 000000000..6c675da5f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/RecentContentTab.js @@ -0,0 +1,29 @@ +jQuery(function ($) { + + Initialize = function () { + + $('.button.addSelected').on('click', function () { + var selectedItems = $('.content-picker-itemCheck:checked'); + var itemsToAdd = new Array(); + $.each(selectedItems, function (index, item) { + var related = $(item).siblings('.content-picker-item').children('.related'); + var data = { + id: related.data("id"), + displayText: related.data("display-text"), + editLink: related.data("edit-link"), + editUrl: related.data("edit-url"), + adminUrl: related.data("admin-url"), + displayLink: related.data("display-link"), + published: related.data("published") + }; + return itemsToAdd.push(data); + }); + window.opener.jQuery[query("callback")](itemsToAdd); + window.close(); + }); + }; + + $(document).ready(function () { + return Initialize(); + }); +}); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Styles/ContentPicker.css b/src/Orchard.Web/Modules/Orchard.ContentPicker/Styles/ContentPicker.css index 0b501787a..0e7e9a6b6 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Styles/ContentPicker.css +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Styles/ContentPicker.css @@ -19,4 +19,25 @@ body { padding: 18px; background: white; border: 1px solid #E4E5E6; +} + +.content-picker-item +{ + margin-left: 20px; +} + +.content-picker-itemCheck +{ + position:absolute; + +} + +.addSelected +{ + margin-bottom: 10px; +} + +.page-size-options > div:first-child +{ + display:inline-block; } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/ContentPicker.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/ContentPicker.SummaryAdmin.cshtml index cca2889ac..168b4afde 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/ContentPicker.SummaryAdmin.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/ContentPicker.SummaryAdmin.cshtml @@ -3,27 +3,30 @@ ContentItem contentItem = Model.ContentItem; }
-
- @**@ -

@Html.ItemDisplayText(contentItem)

-
@contentItem.TypeDefinition.DisplayName
- @if (Model.Header != null) { -
@Display(Model.Header)
- } - @if (Model.Meta != null) { - + +
+
+ @**@ +

@Html.ItemDisplayText(contentItem)

-
@contentItem.TypeDefinition.DisplayName
+ @if (Model.Header != null) { +
@Display(Model.Header)
+ } + @if (Model.Meta != null) { + + } +
+ + @if (Model.Content != null) { +
@Display(Model.Content)
}
- - @if (Model.Content != null) { -
@Display(Model.Content)
- }
diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/RecentContentTab.cshtml b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/RecentContentTab.cshtml index 382ad3a5b..c1b53aa0f 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/RecentContentTab.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/RecentContentTab.cshtml @@ -1,5 +1,7 @@ @using Orchard.Core.Contents.ViewModels; @{ + Script.Include("RecentContentTab.js"); + var typeDisplayName = Model.TypeDisplayName; var pageTitle = T("Recent Content"); @@ -8,6 +10,7 @@ } Layout.Title = pageTitle; + }
@@ -33,6 +36,7 @@
@Display(Model.ContentItems)
+ @Html.Link(T("Add Selected").Text, "#", new { @class = "button addSelected"}) @Display(Model.Pager) } From 2620dc820da566bee26e6930589737ce7d5595c6 Mon Sep 17 00:00:00 2001 From: Erik Scofield Date: Tue, 6 Oct 2015 23:22:09 -0500 Subject: [PATCH 2/3] ~Fix resource include ~Rename javascript resource from RecentContentTab to SelectableContentTab for use in Search content picker as well. +Add Selectable to Search Content Picker +Add Select All to Search Content Picker --- .../Orchard.ContentPicker/ResourceManifest.cs | 2 +- ...RecentContentTab.js => SelectableContentTab.js} | 3 +++ .../Orchard.ContentPicker/Styles/ContentPicker.css | 12 ++++++++++++ .../Views/RecentContentTab.cshtml | 2 +- .../Orchard.Search/Views/SearchContentTab.cshtml | 14 ++++++++++++-- 5 files changed, 29 insertions(+), 4 deletions(-) rename src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/{RecentContentTab.js => SelectableContentTab.js} (86%) diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/ResourceManifest.cs b/src/Orchard.Web/Modules/Orchard.ContentPicker/ResourceManifest.cs index ec420aac9..85639aaf4 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/ResourceManifest.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/ResourceManifest.cs @@ -5,7 +5,7 @@ namespace Orchard.ContentPicker { public void BuildManifests(ResourceManifestBuilder builder) { var manifest = builder.Add(); manifest.DefineScript("ContentPicker").SetUrl("ContentPicker.js", "ContentPicker.js").SetDependencies("jQuery"); - manifest.DefineScript("RecentContentTab").SetUrl("RecentContentTab.js", "RecentContentTab.js").SetDependencies("jQuery"); + manifest.DefineScript("SelectableContentTab").SetUrl("SelectableContentTab.js", "SelectableContentTab.js").SetDependencies("jQuery"); } } } diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/RecentContentTab.js b/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/SelectableContentTab.js similarity index 86% rename from src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/RecentContentTab.js rename to src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/SelectableContentTab.js index 6c675da5f..2bc82e196 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/RecentContentTab.js +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/SelectableContentTab.js @@ -21,6 +21,9 @@ window.opener.jQuery[query("callback")](itemsToAdd); window.close(); }); + $('.content-picker-SelectAll').on('click', function () { + $('.content-picker-itemCheck').prop('checked', $(this).prop("checked")); + }); }; $(document).ready(function () { diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Styles/ContentPicker.css b/src/Orchard.Web/Modules/Orchard.ContentPicker/Styles/ContentPicker.css index 0e7e9a6b6..4b452248c 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Styles/ContentPicker.css +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Styles/ContentPicker.css @@ -32,6 +32,18 @@ body { } +label[for="selectAll"]:before +{ + content:''; + display:block; + margin-top:20px; +} + +label[for="selectAll"] +{ + display:inline; +} + .addSelected { margin-bottom: 10px; diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/RecentContentTab.cshtml b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/RecentContentTab.cshtml index c1b53aa0f..f880bef25 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/RecentContentTab.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/RecentContentTab.cshtml @@ -1,6 +1,6 @@ @using Orchard.Core.Contents.ViewModels; @{ - Script.Include("RecentContentTab.js"); + Script.Require("SelectableContentTab"); var typeDisplayName = Model.TypeDisplayName; var pageTitle = T("Recent Content"); diff --git a/src/Orchard.Web/Modules/Orchard.Search/Views/SearchContentTab.cshtml b/src/Orchard.Web/Modules/Orchard.Search/Views/SearchContentTab.cshtml index 56256144f..32426f58b 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Views/SearchContentTab.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Search/Views/SearchContentTab.cshtml @@ -1,4 +1,6 @@ @{ + Script.Require("SelectableContentTab"); + var pageTitle = T("Search Content"); Layout.Title = pageTitle; } @@ -11,10 +13,18 @@ + if (Model.ContentItems.Items.Count > 0) + { + + + }
- @Display(Model.ContentItems) + @Display(Model.ContentItems)
- + if (Model.ContentItems.Items.Count > 0) + { + @Html.Link(T("Add Selected").Text, "#", new { @class = "button addSelected"}) + } @Display(Model.Pager) } From 7fb63fd9eb270fef1d4b41dc4f2b024ad3ba45be Mon Sep 17 00:00:00 2001 From: Erik Scofield Date: Fri, 9 Oct 2015 11:08:15 -0500 Subject: [PATCH 3/3] Fix incorrect project reference probably from a merge from the Naxos branch to this feature. --- .../Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj b/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj index cf4fe9fa3..03390c22e 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj @@ -72,7 +72,7 @@ - +