diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj b/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj index 8dfb9ba5a..009b36387 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj @@ -145,6 +145,9 @@ Orchard.Core + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/ContentPicker.js b/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/ContentPicker.js index 478048c22..11b3a9f26 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/ContentPicker.js +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Scripts/ContentPicker.js @@ -36,4 +36,71 @@ var w = window.open(url, "_blank", data.windowFeatures || "width=685,height=700,status=no,toolbar=no,location=no,menubar=no,resizable=no,scrollbars=yes"); }); + + // Render content items table and initialize controls. + (function() { + $("fieldset.content-picker-field").each(function() { + var self = this; + var required = $(self).data("required"); + var multiple = $(self).data("multiple"); + var addButton = $(self).find(".button.add"); + var removeText = $(self).data("remove-text"); + var template = ' {edit-link}' + removeText + ''; + var selectedItemsFieldname = $(self).data("selected-items-fieldname"); + var baseUrl = $(self).data("base-url"); + var partName = $(self).data("part-name"); + var fieldName = $(self).data("field-name"); + + var refreshIds = function() { + var id = $("[name='" + selectedItemsFieldname + "']"); + var fieldId = $(self).find("span[data-fieldid]"); + + id.val(""); + fieldId.each(function() { + id.val(id.val() + "," + $(this).attr("data-id")); + }); + + var itemsCount = fieldId.length; + + if(!multiple && itemsCount > 0) { + addButton.hide(); + } + else { + addButton.show(); + } + }; + + refreshIds(); + + 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); + var content = $(tmpl); + $(self).find('table.content-picker tbody').append(content); + + refreshIds(); + $(self).find('.content-picker-message').show(); + }, + baseUrl: baseUrl, + part: partName, + field: fieldName + }); + }); + + $(self).on("click",'table.content-picker .content-picker-remove',function() { + $(this).closest('tr').remove(); + refreshIds(); + $(self).find('.content-picker-message').show(); + }); + + $(self).find("table.content-picker tbody").sortable({ + handle: 'td:first', + stop: function(event, ui) { + refreshIds(); + $(self).find('.content-picker-message').show(); + } + }).disableSelection(); + }); + })(); }); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/ContentPicker.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/ContentPicker.Edit.cshtml new file mode 100644 index 000000000..1a280a2ef --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/ContentPicker.Edit.cshtml @@ -0,0 +1,63 @@ +@using Orchard.ContentManagement +@using Orchard.Environment.Configuration +@{ + Script.Require("ContentPicker").AtFoot(); + Script.Require("jQueryUI_Sortable").AtFoot(); + Style.Include("content-picker-admin.css"); + + var required = ((bool?)Model.Required) ?? false; + var multiple = ((bool?)Model.Multiple) ?? false; + var displayName = (string)Model.DisplayName ?? ""; + var idsFieldId = (string)Model.IdsFieldId ?? ""; + var selectedItemsFieldName = (string)Model.SelectedItemsFieldName ?? ""; + var contentItems = (IEnumerable)Model.ContentItems; + var hint = (string) Model.Hint; + var partName = Model.PartName; + var fieldName = Model.FieldName; + var baseUrl = Url.Content("~/") + WorkContext.Resolve().RequestUrlPrefix; +} + +
+ @if (!String.IsNullOrWhiteSpace(displayName)) { + + } +
@T("You need to save your changes.")
+ + + + + + + + + + + + + + + @foreach (var contentItem in contentItems) { + + + + + + } + +
 ↓@T("Content Item") 
  + @Html.ItemEditLink(contentItem) + + @T("Remove") +
+ + @T("Add") + + @hint +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/EditorTemplates/Fields/ContentPicker.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/EditorTemplates/Fields/ContentPicker.Edit.cshtml index 0b6d27af0..c290bad8d 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/EditorTemplates/Fields/ContentPicker.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Views/EditorTemplates/Fields/ContentPicker.Edit.cshtml @@ -1,6 +1,4 @@ @model Orchard.ContentPicker.ViewModels.ContentPickerFieldViewModel -@using Orchard.Environment.Configuration -@using Orchard.Utility.Extensions; @using Orchard.ContentPicker.Settings; @{ @@ -9,107 +7,15 @@ Style.Include("content-picker-admin.css"); var settings = Model.Field.PartFieldDefinition.Settings.GetModel(); - var baseUrl = Url.Content("~/") + WorkContext.Resolve().RequestUrlPrefix; } - -
- -
@T("You need to save your changes.")
- - - - - - - - - - - - - - - @foreach (var contentItem in Model.ContentItems) { - - - - - - } - -
 ↓@T("Content Item") 
  - @Html.ItemEditLink(contentItem) - - @T("Remove") -
- - @T("Add") - - @Html.HiddenFor(m => m.SelectedIds) - @settings.Hint -
- -@using (Script.Foot()) { - -} \ No newline at end of file +@Display.ContentPicker_Edit( + Required: settings.Required, + Multiple: settings.Multiple, + DisplayName: Model.Field.DisplayName, + IdsFieldId: Html.FieldIdFor(m => m.Field.Ids), + SelectedItemsFieldName: Html.FieldNameFor(m => m.SelectedIds), + ContentItems: Model.ContentItems, + Hint: settings.Hint, + PartName: Model.Part.PartDefinition.Name, + FieldName: Model.Field.PartFieldDefinition.Name +) \ No newline at end of file