From a3357cfba1b9b2c9e9ea84b8900ba848fd3c6bb2 Mon Sep 17 00:00:00 2001 From: "E. Kolpakov" Date: Tue, 11 Nov 2014 17:03:20 +0700 Subject: [PATCH 01/10] Renamed PagedContainer to LibraryContainer ass it's going to specialize for Library views even more --- .../{paging_container_spec.js => library_container_spec.js} | 6 +++--- .../js/views/{paged_container.js => library_container.js} | 4 ++-- cms/static/js/views/pages/container.js | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) rename cms/static/js/spec/views/{paging_container_spec.js => library_container_spec.js} (99%) rename cms/static/js/views/{paged_container.js => library_container.js} (98%) diff --git a/cms/static/js/spec/views/paging_container_spec.js b/cms/static/js/spec/views/library_container_spec.js similarity index 99% rename from cms/static/js/spec/views/paging_container_spec.js rename to cms/static/js/spec/views/library_container_spec.js index 098a02aed8b5..7daf6fac8f04 100644 --- a/cms/static/js/spec/views/paging_container_spec.js +++ b/cms/static/js/spec/views/library_container_spec.js @@ -1,6 +1,6 @@ define([ "jquery", "underscore", "js/common_helpers/ajax_helpers", "URI", "js/models/xblock_info", - "js/views/paged_container", "js/views/paging_header", "js/views/paging_footer"], - function ($, _, AjaxHelpers, URI, XBlockInfo, PagedContainer, PagingContainer, PagingFooter) { + "js/views/library_container", "js/views/paging_header", "js/views/paging_footer"], + function ($, _, AjaxHelpers, URI, XBlockInfo, LibraryContainer, PagingHeader, PagingFooter) { var htmlResponseTpl = _.template('' + '
' @@ -53,7 +53,7 @@ define([ "jquery", "underscore", "js/common_helpers/ajax_helpers", "URI", "js/mo AjaxHelpers.respondWithJson(requests, response, requestIndex); }; - var MockPagingView = PagedContainer.extend({ + var MockPagingView = LibraryContainer.extend({ view: 'container_preview', el: $("
"), model: new XBlockInfo({}, {parse: true}) diff --git a/cms/static/js/views/paged_container.js b/cms/static/js/views/library_container.js similarity index 98% rename from cms/static/js/views/paged_container.js rename to cms/static/js/views/library_container.js index b80ef62b2774..b655833289c9 100644 --- a/cms/static/js/views/paged_container.js +++ b/cms/static/js/views/library_container.js @@ -1,7 +1,7 @@ define(["jquery", "underscore", "js/views/xblock", "js/utils/module", "gettext", "js/views/feedback_notification", "js/views/paging_header", "js/views/paging_footer"], function ($, _, XBlockView, ModuleUtils, gettext, NotificationView, PagingHeader, PagingFooter) { - var PagedContainerView = XBlockView.extend({ + var LibraryContainerView = XBlockView.extend({ // Store the request token of the first xblock on the page (which we know was rendered by Studio when // the page was generated). Use that request token to filter out user-defined HTML in any // child xblocks within the page. @@ -160,5 +160,5 @@ define(["jquery", "underscore", "js/views/xblock", "js/utils/module", "gettext", } }); - return PagedContainerView; + return LibraryContainerView; }); // end define(); diff --git a/cms/static/js/views/pages/container.js b/cms/static/js/views/pages/container.js index b41c1af22b10..8c2e1855b60e 100644 --- a/cms/static/js/views/pages/container.js +++ b/cms/static/js/views/pages/container.js @@ -3,10 +3,10 @@ * This page allows the user to understand and manipulate the xblock and its children. */ define(["jquery", "underscore", "gettext", "js/views/pages/base_page", "js/views/utils/view_utils", - "js/views/container", "js/views/paged_container", "js/views/xblock", "js/views/components/add_xblock", "js/views/modals/edit_xblock", + "js/views/container", "js/views/library_container", "js/views/xblock", "js/views/components/add_xblock", "js/views/modals/edit_xblock", "js/models/xblock_info", "js/views/xblock_string_field_editor", "js/views/pages/container_subviews", "js/views/unit_outline", "js/views/utils/xblock_utils"], - function ($, _, gettext, BasePage, ViewUtils, ContainerView, PagedContainerView, XBlockView, AddXBlockComponent, + function ($, _, gettext, BasePage, ViewUtils, ContainerView, LibraryContainerView, XBlockView, AddXBlockComponent, EditXBlockModal, XBlockInfo, XBlockStringFieldEditor, ContainerSubviews, UnitOutlineView, XBlockUtils) { 'use strict'; @@ -91,7 +91,7 @@ define(["jquery", "underscore", "gettext", "js/views/pages/base_page", "js/views self.addButtonActions($element); } }); - return new PagedContainerView(parameters); + return new LibraryContainerView(parameters); } else { return new ContainerView(parameters); From 3f9eeb901c12650e353d465f5df9b27f354e339a Mon Sep 17 00:00:00 2001 From: "E. Kolpakov" Date: Thu, 13 Nov 2014 17:29:08 +0700 Subject: [PATCH 02/10] Library setting for show/hide children previews + client-side code to toggle it. --- cms/djangoapps/contentstore/views/library.py | 1 + cms/static/coffee/spec/main.coffee | 2 +- cms/static/js/views/library_container.js | 22 ++++++++++++---- cms/static/js/views/pages/container.js | 27 ++++++++++++++++++++ cms/templates/library.html | 10 +++++++- common/lib/xmodule/xmodule/library_module.py | 25 +++++++++++++++--- 6 files changed, 77 insertions(+), 10 deletions(-) diff --git a/cms/djangoapps/contentstore/views/library.py b/cms/djangoapps/contentstore/views/library.py index 7ea3ebf21932..392e871d4f51 100644 --- a/cms/djangoapps/contentstore/views/library.py +++ b/cms/djangoapps/contentstore/views/library.py @@ -159,4 +159,5 @@ def library_blocks_view(library, response_format): 'unit': None, 'component_templates': json.dumps(component_templates), 'xblock_info': xblock_info, + 'show_children_previews': library.show_children_previews }) diff --git a/cms/static/coffee/spec/main.coffee b/cms/static/coffee/spec/main.coffee index 0cd0cd2b6f52..0525788a7ba0 100644 --- a/cms/static/coffee/spec/main.coffee +++ b/cms/static/coffee/spec/main.coffee @@ -223,7 +223,7 @@ define([ "js/spec/views/assets_spec", "js/spec/views/baseview_spec", "js/spec/views/container_spec", - "js/spec/views/paging_container_spec", + "js/spec/views/library_container_spec", "js/spec/views/group_configuration_spec", "js/spec/views/paging_spec", "js/spec/views/unit_outline_spec", diff --git a/cms/static/js/views/library_container.js b/cms/static/js/views/library_container.js index b655833289c9..25992095c49a 100644 --- a/cms/static/js/views/library_container.js +++ b/cms/static/js/views/library_container.js @@ -40,12 +40,9 @@ define(["jquery", "underscore", "js/views/xblock", "js/utils/module", "gettext", }, renderPage: function(options){ - var self = this, - view = this.view, - xblockInfo = this.model, - xblockUrl = xblockInfo.url(); + var self = this; return $.ajax({ - url: decodeURIComponent(xblockUrl) + "/" + view, + url: decodeURIComponent(this.model.url()) + "/" + this.view, type: 'GET', cache: false, data: this.getRenderParameters(options.page_number), @@ -157,6 +154,21 @@ define(["jquery", "underscore", "js/views/xblock", "js/utils/module", "gettext", sortDisplayName: function() { return "Date added"; // TODO add support for sorting + }, + + update_settings: function(settings){ + var runtime = this.xblock && this.xblock.runtime; + if (runtime) { + return $.ajax({ + url: runtime.handlerUrl(this.xblock.element, 'trigger_previews'), + type: 'POST', + data: JSON.stringify(settings), + dataType: 'json' + }).promise(); + } + else{ + return $.Deferred().resolve().promise(); + } } }); diff --git a/cms/static/js/views/pages/container.js b/cms/static/js/views/pages/container.js index 8c2e1855b60e..b62ec9653a20 100644 --- a/cms/static/js/views/pages/container.js +++ b/cms/static/js/views/pages/container.js @@ -28,6 +28,8 @@ define(["jquery", "underscore", "gettext", "js/views/pages/base_page", "js/views initialize: function(options) { BasePage.prototype.initialize.call(this, options); this.enable_paging = options.enable_paging || false; + this.toggle_previews = options.toggle_previews || false; + this.show_children_previews = options.show_children_previews || true; if (this.enable_paging) { this.page_size = options.page_size || 10; } @@ -105,6 +107,10 @@ define(["jquery", "underscore", "gettext", "js/views/pages/base_page", "js/views unitLocationTree = this.$('.unit-location'), hiddenCss='is-hidden'; + if (this.toggle_previews){ + this.updatePreviewButton(); + } + loadingElement.removeClass(hiddenCss); // Hide both blocks until we know which one to show @@ -159,6 +165,15 @@ define(["jquery", "underscore", "gettext", "js/views/pages/base_page", "js/views component.render(); }); }, + + updatePreviewButton: function(){ + var text = (this.show_children_previews) ? gettext('Hide Previews') : gettext('Show Previews'), + icon_class = (this.show_children_previews) ? 'icon-arrow-up' : 'icon-arrow-down', + button = $('.nav-actions .button-toggle-preview'); + + this.$(".preview-arrow", button).removeClass("icon-arrow-down icon-arrow-up").addClass(icon_class); + this.$(".preview-text", button).text(text); + }, editXBlock: function(event) { var xblockElement = this.findXBlockElement(event.target), @@ -242,6 +257,18 @@ define(["jquery", "underscore", "gettext", "js/views/pages/base_page", "js/views }); }, + toggleChildrenPreviews: function(xblockElement) { + var self = this, + xblockView = this.xblockView; + if (xblockView.update_settings) { + xblockView.update_settings({ show_children_previews: !self.show_children_previews}).done(function(data){ + self.show_children_previews = data.show_children_previews; + self.updatePreviewButton(); + self.refreshXBlock(xblockElement, false); + }) + } + }, + onDelete: function(xblockElement) { // get the parent so we can remove this component from its parent. var xblockView = this.xblockView, diff --git a/cms/templates/library.html b/cms/templates/library.html index f3d2f5473948..b607e38c26de 100644 --- a/cms/templates/library.html +++ b/cms/templates/library.html @@ -33,7 +33,9 @@ { isUnitPage: false, enable_paging: true, - page_size: 10 + page_size: 10, + toggle_previews: true, + show_children_previews: ${'true' if show_children_previews else 'false'} } ); }); @@ -54,6 +56,12 @@

${_("Page Actions")}