From bd7ea4424bf1413e663387c21c91eaaa91589977 Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Wed, 3 Oct 2012 13:24:24 -0400 Subject: [PATCH] Enable reordering on the unit page --- .../coffee/src/views/module_edit.coffee | 1 + cms/static/coffee/src/views/unit.coffee | 72 +++++++++++++++++++ cms/static/js/base.js | 53 -------------- cms/templates/base.html | 2 + cms/templates/component.html | 2 +- cms/templates/unit.html | 14 +++- 6 files changed, 88 insertions(+), 56 deletions(-) create mode 100644 cms/static/coffee/src/views/unit.coffee diff --git a/cms/static/coffee/src/views/module_edit.coffee b/cms/static/coffee/src/views/module_edit.coffee index fd38ba10a8..b41cf10851 100644 --- a/cms/static/coffee/src/views/module_edit.coffee +++ b/cms/static/coffee/src/views/module_edit.coffee @@ -41,6 +41,7 @@ class CMS.Views.ModuleEdit extends Backbone.View template: template }, (data) => @model.set(id: data.id) + @$el.data('id', data.id) @render() ) diff --git a/cms/static/coffee/src/views/unit.coffee b/cms/static/coffee/src/views/unit.coffee new file mode 100644 index 0000000000..df5e714d3a --- /dev/null +++ b/cms/static/coffee/src/views/unit.coffee @@ -0,0 +1,72 @@ +class CMS.Views.UnitEdit extends Backbone.View + events: + 'click .new-component .new-component-type a': 'showComponentTemplates' + 'click .new-component .cancel-button': 'closeNewComponent' + 'click .new-component-templates .new-component-template a': 'saveNewComponent' + 'click .new-component-templates .cancel-button': 'closeNewComponent' + 'click .new-component-button': 'showNewComponentForm' + 'click .unit-actions .save-button': 'save' + + initialize: => + @$newComponentItem = @$('.new-component-item') + @$newComponentTypePicker = @$('.new-component') + @$newComponentTemplatePickers = @$('.new-component-templates') + @$newComponentButton = @$('.new-component-button') + + @$('.components').sortable( + handle: '.drag-handle' + update: (event, ui) => @saveOrder() + ) + + @$('.component').each((idx, element) -> + new CMS.Views.ModuleEdit( + el: element, + model: new CMS.Models.Module( + id: $(element).data('id'), + ) + ) + ) + + @model.components = @components() + + showNewComponentForm: (event) => + event.preventDefault() + @$newComponentItem.addClass('adding') + $(event.target).slideUp(150) + @$newComponentTypePicker.slideDown(250) + + showComponentTemplates: (event) => + event.preventDefault() + + type = $(event.currentTarget).data('type') + @$newComponentTypePicker.slideUp(250) + @$(".new-component-#{type}").slideDown(250) + + closeNewComponent: (event) => + event.preventDefault() + + @$newComponentTypePicker.slideUp(250) + @$newComponentTemplatePickers.slideUp(250) + @$newComponentButton.slideDown(250) + @$newComponentItem.removeClass('adding') + @$newComponentItem.find('.rendered-component').remove() + + saveNewComponent: (event) => + event.preventDefault() + + editor = new CMS.Views.ModuleEdit( + model: new CMS.Models.Module() + ) + + @$newComponentItem.before(editor.$el) + + editor.cloneTemplate($(event.currentTarget).data('location')) + + @closeNewComponent(event) + + components: => @$('.component').map((idx, el) -> $(el).data('id')).get() + + saveOrder: => + @model.save( + children: @components() + ) diff --git a/cms/static/js/base.js b/cms/static/js/base.js index b2a0f74f81..16a7f87202 100644 --- a/cms/static/js/base.js +++ b/cms/static/js/base.js @@ -14,24 +14,9 @@ $(document).ready(function() { $newComponentTemplatePickers = $('.new-component-templates'); $newComponentButton = $('.new-component-button'); - $('li.component').each(function(idx, element) { - new CMS.Views.ModuleEdit({ - el: element, - model: new CMS.Models.Module({ - id: $(element).data('id'), - }) - }); - }); - $('.expand-collapse-icon').bind('click', toggleSubmodules); $('.visibility-options').bind('change', setVisibility); - $newComponentButton.bind('click', showNewComponentForm); - $newComponentTypePicker.find('.new-component-type a').bind('click', showComponentTemplates); - $newComponentTypePicker.find('.cancel-button').bind('click', closeNewComponent); - $newComponentTemplatePickers.find('.new-component-template a').bind('click', saveNewComponent); - $newComponentTemplatePickers.find('.cancel-button').bind('click', closeNewComponent); - $('.unit-history ol a').bind('click', showHistoryModal); $modal.bind('click', hideHistoryModal); $modalCover.bind('click', hideHistoryModal); @@ -58,44 +43,6 @@ function closeComponentEditor(e) { $(this).closest('.xmodule_edit').removeClass('editing').find('.component-editor').slideUp(150); } -function showNewComponentForm(e) { - e.preventDefault(); - $newComponentItem.addClass('adding'); - $(this).slideUp(150); - $newComponentTypePicker.slideDown(250); -} - -function showComponentTemplates(e) { - e.preventDefault(); - - var type = $(this).data('type'); - $newComponentTypePicker.slideUp(250); - $('.new-component-'+type).slideDown(250); -} - -function closeNewComponent(e) { - e.preventDefault(); - - $newComponentTypePicker.slideUp(250); - $newComponentTemplatePickers.slideUp(250); - $newComponentButton.slideDown(250); - $newComponentItem.removeClass('adding'); - $newComponentItem.find('.rendered-component').remove(); -} - -function saveNewComponent(e) { - e.preventDefault(); - - editor = new CMS.Views.ModuleEdit({ - model: new CMS.Models.Module() - }) - - $newComponentItem.before(editor.$el) - - editor.cloneTemplate($(this).data('location')) - - closeNewComponent(e); -} function showHistoryModal(e) { e.preventDefault(); diff --git a/cms/templates/base.html b/cms/templates/base.html index dba7df95b9..cb827b9876 100644 --- a/cms/templates/base.html +++ b/cms/templates/base.html @@ -38,6 +38,8 @@ <%block name="content"> + <%block name="jsextra"> + diff --git a/cms/templates/component.html b/cms/templates/component.html index 86fe6e2bdb..76a121fec6 100644 --- a/cms/templates/component.html +++ b/cms/templates/component.html @@ -3,7 +3,7 @@ ${preview} Edit Delete - +
${editor} diff --git a/cms/templates/unit.html b/cms/templates/unit.html index f7264d25a9..3a9b5a75cb 100644 --- a/cms/templates/unit.html +++ b/cms/templates/unit.html @@ -2,6 +2,16 @@ <%! from django.core.urlresolvers import reverse %> <%block name="bodyclass">unit <%block name="title">CMS Unit +<%block name="jsextra"> + + <%block name="content">
@@ -49,8 +59,8 @@
-