From c8964b800bcb4a85402d5900728035dc62cdd807 Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 15:14:18 -0700 Subject: [PATCH 01/14] Create jsloader.coffee --- common/lib/xmodule/xmodule/html_module.py | 5 ++++- common/lib/xmodule/xmodule/js/src/capa/display.coffee | 1 + common/lib/xmodule/xmodule/js/src/html/display.coffee | 7 ++++--- common/lib/xmodule/xmodule/js/src/jsloader.coffee | 3 +++ 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 common/lib/xmodule/xmodule/js/src/jsloader.coffee diff --git a/common/lib/xmodule/xmodule/html_module.py b/common/lib/xmodule/xmodule/html_module.py index 216b63a12e..c41bbbd413 100644 --- a/common/lib/xmodule/xmodule/html_module.py +++ b/common/lib/xmodule/xmodule/html_module.py @@ -17,7 +17,10 @@ log = logging.getLogger("mitx.courseware") class HtmlModule(XModule): - js = {'coffee': [resource_string(__name__, 'js/src/html/display.coffee')]} + js = {'coffee': [resource_string(__name__, 'js/src/jsloader.coffee'), + resource_string(__name__, 'js/src/html/display.coffee') + ] + } js_module_name = "HTMLModule" def get_html(self): diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index 3b45723ae5..e3ece7447c 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -27,6 +27,7 @@ class @Problem @$('section.action input.save').click @save # Collapsibles + JavascriptLoader.setCollapsibles() @$('.longform').hide(); @$('.shortform').append('See full output'); @$('.collapsible section').hide(); diff --git a/common/lib/xmodule/xmodule/js/src/html/display.coffee b/common/lib/xmodule/xmodule/js/src/html/display.coffee index 05e2ddab28..a3523e8332 100644 --- a/common/lib/xmodule/xmodule/js/src/html/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/html/display.coffee @@ -1,8 +1,9 @@ class @HTMLModule constructor: (@element) -> - @el = $(@element) - @setCollapsibles() + @el = $(@element) + JavascriptLoader.setCollapsibles() + @setCollapsibles() $: (selector) -> $(selector, @el) @@ -23,4 +24,4 @@ class @HTMLModule toggleHint: (event) => event.preventDefault() $(event.target).parent().siblings().slideToggle() - $(event.target).parent().parent().toggleClass('open') \ No newline at end of file + $(event.target).parent().parent().toggleClass('open') diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee new file mode 100644 index 0000000000..3883d4a5a7 --- /dev/null +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -0,0 +1,3 @@ +class @JavascriptLoader + @setCollapsibles: -> + console.log('setCollapsibles!') From cbd602b40d9d6cf80cda03a498247728b2570f11 Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 16:03:17 -0700 Subject: [PATCH 02/14] Moving toggle code. wip --- .../xmodule/js/src/capa/display.coffee | 16 ------------ .../xmodule/xmodule/js/src/jsloader.coffee | 26 +++++++++++++++++-- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index e3ece7447c..1ed031b3b0 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -28,11 +28,6 @@ class @Problem # Collapsibles JavascriptLoader.setCollapsibles() - @$('.longform').hide(); - @$('.shortform').append('See full output'); - @$('.collapsible section').hide(); - @$('.full').click @toggleFull - @$('.collapsible header a').click @toggleHint # Dynamath @$('input.math').keyup(@refreshMath) @@ -341,17 +336,6 @@ class @Problem element.CodeMirror.save() if element.CodeMirror.save @answers = @inputs.serialize() - toggleFull: (event) => - $(event.target).parent().siblings().slideToggle() - $(event.target).parent().parent().toggleClass('open') - text = $(event.target).text() == 'See full output' ? 'Hide output' : 'See full output' - $(this).text(text) - - toggleHint: (event) => - event.preventDefault() - $(event.target).parent().siblings().slideToggle() - $(event.target).parent().parent().toggleClass('open') - inputtypeSetupMethods: 'text-input-dynamath': (element) => diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee index 3883d4a5a7..345bcde75f 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -1,3 +1,25 @@ class @JavascriptLoader - @setCollapsibles: -> - console.log('setCollapsibles!') + ### + Set of library functions that provide common interface for javascript loading + for all module types + ### + @setCollapsibles: () => + console.log($('.collapsible section')) + $('.longform').hide(); + $('.shortform').append('See full output'); + $('.collapsible section').hide(); + $('.full').click @toggleFull + $('.collapsible header a').click @toggleHint + @toggleHint() + + @toggleFull: (event) => + $(event.target).parent().siblings().slideToggle() + $(event.target).parent().parent().toggleClass('open') + text = $(event.target).text() == 'See full output' ? 'Hide output' : 'See full output' + $(this).text(text) + + @toggleHint: (event) => + console.log('toggleHint') + event.preventDefault() + $(event.target).parent().siblings().slideToggle() + $(event.target).parent().parent().toggleClass('open') From 65b3f58338e172a17de1b933c9476664b41acf6a Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 16:57:23 -0700 Subject: [PATCH 03/14] jsloader works at module-level --- .../xmodule/xmodule/js/src/capa/display.coffee | 2 +- .../lib/xmodule/xmodule/js/src/jsloader.coffee | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index 1ed031b3b0..9b6d198359 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -27,7 +27,7 @@ class @Problem @$('section.action input.save').click @save # Collapsibles - JavascriptLoader.setCollapsibles() + JavascriptLoader.setCollapsibles(@el) # Dynamath @$('input.math').keyup(@refreshMath) diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee index 345bcde75f..a83584dfa7 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -3,14 +3,15 @@ class @JavascriptLoader Set of library functions that provide common interface for javascript loading for all module types ### - @setCollapsibles: () => - console.log($('.collapsible section')) - $('.longform').hide(); - $('.shortform').append('See full output'); - $('.collapsible section').hide(); - $('.full').click @toggleFull - $('.collapsible header a').click @toggleHint - @toggleHint() + @setCollapsibles: (el) => + ### + el: jQuery object representing xmodule + ### + el.find('.longform').hide(); + el.find('.shortform').append('See full output'); + el.find('.collapsible section').hide(); + el.find('.full').click @toggleFull + el.find('.collapsible header a').click @toggleHint @toggleFull: (event) => $(event.target).parent().siblings().slideToggle() @@ -19,7 +20,6 @@ class @JavascriptLoader $(this).text(text) @toggleHint: (event) => - console.log('toggleHint') event.preventDefault() $(event.target).parent().siblings().slideToggle() $(event.target).parent().parent().toggleClass('open') From 46598b659c9ceba42362638faf14e485ec2a3312 Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 17:27:06 -0700 Subject: [PATCH 04/14] HTML module also uses jsloader --- .../xmodule/js/src/html/display.coffee | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/html/display.coffee b/common/lib/xmodule/xmodule/js/src/html/display.coffee index a3523e8332..5e2ab94031 100644 --- a/common/lib/xmodule/xmodule/js/src/html/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/html/display.coffee @@ -2,26 +2,7 @@ class @HTMLModule constructor: (@element) -> @el = $(@element) - JavascriptLoader.setCollapsibles() - @setCollapsibles() + JavascriptLoader.setCollapsibles(@el) $: (selector) -> $(selector, @el) - - setCollapsibles: => - $('.longform').hide(); - $('.shortform').append('See full output'); - $('.collapsible section').hide(); - $('.full').click @toggleFull - $('.collapsible header a').click @toggleHint - - toggleFull: (event) => - $(event.target).parent().siblings().slideToggle() - $(event.target).parent().parent().toggleClass('open') - text = $(event.target).text() == 'See full output' ? 'Hide output' : 'See full output' - $(this).text(text) - - toggleHint: (event) => - event.preventDefault() - $(event.target).parent().siblings().slideToggle() - $(event.target).parent().parent().toggleClass('open') From 8956e5bcb193dcd7a0ac57b6db6f3c7d478542be Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 18:03:59 -0700 Subject: [PATCH 05/14] Update comment: jsloader works at module-scope --- common/lib/xmodule/xmodule/js/src/jsloader.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee index a83584dfa7..8872228192 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -1,7 +1,8 @@ class @JavascriptLoader ### Set of library functions that provide common interface for javascript loading - for all module types + for all module types. All functionality provided by JavascriptLoader should take + place at module scope, i.e. don't run jQuery over entire page ### @setCollapsibles: (el) => ### From 77af860445fc69106fea32240869b540f69f9f89 Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 18:31:06 -0700 Subject: [PATCH 06/14] Begin transplant of executeProblemScripts --- .../xmodule/js/src/capa/display.coffee | 8 +++++++ .../xmodule/xmodule/js/src/jsloader.coffee | 22 ++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index 9b6d198359..95820838f5 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -77,6 +77,10 @@ class @Problem render: (content) -> if content @el.html(content) + JavascriptLoader.executeModuleScripts @el, () => + @setupInputTypes() + @bind() + @queueing() @executeProblemScripts () => @setupInputTypes() @bind() @@ -84,6 +88,10 @@ class @Problem else $.postWithPrefix "#{@url}/problem_get", (response) => @el.html(response.html) + JavascriptLoader.executeModuleScripts @el, () => + @setupInputTypes() + @bind() + @queueing() @executeProblemScripts () => @setupInputTypes() @bind() diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee index 8872228192..59c051d323 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -1,9 +1,21 @@ class @JavascriptLoader - ### - Set of library functions that provide common interface for javascript loading - for all module types. All functionality provided by JavascriptLoader should take - place at module scope, i.e. don't run jQuery over entire page - ### + + # Set of library functions that provide common interface for javascript loading + # for all module types. All functionality provided by JavascriptLoader should take + # place at module scope, i.e. don't run jQuery over entire page + + # executeModuleScripts: + # Scan module contents for "script_placeholder"s, then: + # 1) Fetch each script from server + # 2) Explicitly attach the script to the of document + # 3) Explicitly wait for each script to be loaded + # 4) Return to callback function when all scripts loaded + @executeModuleScripts: (el, callback=null) -> + console.log('executeModuleScripts') + + + # setCollapsibles: + # Scan module contents for generic collapsible containers @setCollapsibles: (el) => ### el: jQuery object representing xmodule From faa35f95cc20d1690899bdd4439c82f8d3039234 Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 18:53:24 -0700 Subject: [PATCH 07/14] Move executeProblemScripts into executeModuleScripts --- .../xmodule/js/src/capa/display.coffee | 55 +------------------ .../xmodule/xmodule/js/src/jsloader.coffee | 46 +++++++++++++++- 2 files changed, 47 insertions(+), 54 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index 95820838f5..8c726f02e7 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -63,7 +63,7 @@ class @Problem @new_queued_items = $(response.html).find(".xqueue") if @new_queued_items.length isnt @num_queued_items @el.html(response.html) - @executeProblemScripts () => + JavascriptLoader.executeModuleScripts @el, () => @setupInputTypes() @bind() @@ -81,10 +81,6 @@ class @Problem @setupInputTypes() @bind() @queueing() - @executeProblemScripts () => - @setupInputTypes() - @bind() - @queueing() else $.postWithPrefix "#{@url}/problem_get", (response) => @el.html(response.html) @@ -92,10 +88,7 @@ class @Problem @setupInputTypes() @bind() @queueing() - @executeProblemScripts () => - @setupInputTypes() - @bind() - @queueing() + # TODO add hooks for problem types here by inspecting response.html and doing # stuff if a div w a class is found @@ -110,50 +103,6 @@ class @Problem if setupMethod? @inputtypeDisplays[id] = setupMethod(inputtype) - executeProblemScripts: (callback=null) -> - - placeholders = @el.find(".script_placeholder") - - if placeholders.length == 0 - callback() - return - - completed = (false for i in [1..placeholders.length]) - callbackCalled = false - - # This is required for IE8 support. - completionHandlerGeneratorIE = (index) => - return () -> - if (this.readyState == 'complete' || this.readyState == 'loaded') - #completionHandlerGenerator.call(self, index)() - completionHandlerGenerator(index)() - - completionHandlerGenerator = (index) => - return () => - allComplete = true - completed[index] = true - for flag in completed - if not flag - allComplete = false - break - if allComplete and not callbackCalled - callbackCalled = true - callback() if callback? - - placeholders.each (index, placeholder) -> - s = document.createElement('script') - s.setAttribute('src', $(placeholder).attr("data-src")) - s.setAttribute('type', "text/javascript") - - s.onload = completionHandlerGenerator(index) - - # s.onload does not fire in IE8; this does. - s.onreadystatechange = completionHandlerGeneratorIE(index) - - # Need to use the DOM elements directly or the scripts won't execute - # properly. - $('head')[0].appendChild(s) - $(placeholder).remove() ### # 'check_fd' uses FormData to allow file submissions in the 'problem_check' dispatch, diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee index 59c051d323..254c1b84db 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -11,7 +11,51 @@ class @JavascriptLoader # 3) Explicitly wait for each script to be loaded # 4) Return to callback function when all scripts loaded @executeModuleScripts: (el, callback=null) -> - console.log('executeModuleScripts') + + placeholders = el.find(".script_placeholder") + + if placeholders.length == 0 + callback() + return + + completed = (false for i in [1..placeholders.length]) + callbackCalled = false + + # This is required for IE8 support. + completionHandlerGeneratorIE = (index) => + return () -> + if (this.readyState == 'complete' || this.readyState == 'loaded') + #completionHandlerGenerator.call(self, index)() + completionHandlerGenerator(index)() + + completionHandlerGenerator = (index) => + return () => + allComplete = true + completed[index] = true + for flag in completed + if not flag + allComplete = false + break + if allComplete and not callbackCalled + callbackCalled = true + callback() if callback? + + placeholders.each (index, placeholder) -> + # TODO: Check if the script already exists in DOM. If so, (1) copy it + # into memory; (2) delete the DOM script element; (3) reappend it + s = document.createElement('script') + s.setAttribute('src', $(placeholder).attr("data-src")) + s.setAttribute('type', "text/javascript") + + s.onload = completionHandlerGenerator(index) + + # s.onload does not fire in IE8; this does. + s.onreadystatechange = completionHandlerGeneratorIE(index) + + # Need to use the DOM elements directly or the scripts won't execute + # properly. + $('head')[0].appendChild(s) + $(placeholder).remove() # setCollapsibles: From 4acd8b9fe1c46561f79ad0dba7639e699d141c5d Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 18:54:17 -0700 Subject: [PATCH 08/14] Further explanation to TODO --- common/lib/xmodule/xmodule/js/src/jsloader.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee index 254c1b84db..18455da050 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -42,7 +42,8 @@ class @JavascriptLoader placeholders.each (index, placeholder) -> # TODO: Check if the script already exists in DOM. If so, (1) copy it - # into memory; (2) delete the DOM script element; (3) reappend it + # into memory; (2) delete the DOM script element; (3) reappend it. + # This would prevent memory bloat and save a network request. s = document.createElement('script') s.setAttribute('src', $(placeholder).attr("data-src")) s.setAttribute('type', "text/javascript") From 7b8750ab69bd02d8d60db379f70c63552ce3f5bf Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 19:05:48 -0700 Subject: [PATCH 09/14] HTML modules can also run script_placeholder --- common/lib/xmodule/xmodule/js/src/html/display.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/common/lib/xmodule/xmodule/js/src/html/display.coffee b/common/lib/xmodule/xmodule/js/src/html/display.coffee index 5e2ab94031..a3e55f8f6c 100644 --- a/common/lib/xmodule/xmodule/js/src/html/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/html/display.coffee @@ -2,6 +2,7 @@ class @HTMLModule constructor: (@element) -> @el = $(@element) + JavascriptLoader.executeModuleScripts(@el) JavascriptLoader.setCollapsibles(@el) $: (selector) -> From c3abeff8d4e700ec2d064c214e956efc631335a9 Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 21:28:04 -0700 Subject: [PATCH 10/14] Another TODO comment --- common/lib/xmodule/xmodule/js/src/jsloader.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee index 18455da050..441bf42975 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -18,6 +18,7 @@ class @JavascriptLoader callback() return + # TODO: Verify the execution order of multiple placeholders completed = (false for i in [1..placeholders.length]) callbackCalled = false From 680934045fac7d8ab1a59dd902abf997811d2786 Mon Sep 17 00:00:00 2001 From: kimth Date: Sat, 29 Sep 2012 21:39:48 -0700 Subject: [PATCH 11/14] Adjust comments --- common/lib/xmodule/xmodule/js/src/jsloader.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/jsloader.coffee index 441bf42975..8cc524520a 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/jsloader.coffee @@ -5,7 +5,7 @@ class @JavascriptLoader # place at module scope, i.e. don't run jQuery over entire page # executeModuleScripts: - # Scan module contents for "script_placeholder"s, then: + # Scan the module ('el') for "script_placeholder"s, then: # 1) Fetch each script from server # 2) Explicitly attach the script to the of document # 3) Explicitly wait for each script to be loaded From a8acb7ff30481bdd9c29237c491773cb90100386 Mon Sep 17 00:00:00 2001 From: Arjun Singh Date: Mon, 1 Oct 2012 03:03:33 -0700 Subject: [PATCH 12/14] Renamed jsloader to match up with the content more explicitly; refactored Collapsible out into its own library --- common/lib/xmodule/xmodule/capa_module.py | 5 +++- common/lib/xmodule/xmodule/html_module.py | 2 +- .../xmodule/js/src/capa/display.coffee | 2 +- .../xmodule/js/src/html/display.coffee | 2 +- ...loader.coffee => javascript_loader.coffee} | 24 ----------------- lms/static/coffee/src/collapsible.coffee | 27 +++++++++++++++++++ 6 files changed, 34 insertions(+), 28 deletions(-) rename common/lib/xmodule/xmodule/js/src/{jsloader.coffee => javascript_loader.coffee} (72%) create mode 100644 lms/static/coffee/src/collapsible.coffee diff --git a/common/lib/xmodule/xmodule/capa_module.py b/common/lib/xmodule/xmodule/capa_module.py index 4211434619..fc71d2da02 100644 --- a/common/lib/xmodule/xmodule/capa_module.py +++ b/common/lib/xmodule/xmodule/capa_module.py @@ -75,9 +75,12 @@ class CapaModule(XModule): ''' icon_class = 'problem' - js = {'coffee': [resource_string(__name__, 'js/src/capa/display.coffee')], + js = {'coffee': [resource_string(__name__, 'js/src/capa/display.coffee'), + resource_string(__name__, 'js/src/javascript_loader.coffee'), + ], 'js': [resource_string(__name__, 'js/src/capa/imageinput.js'), resource_string(__name__, 'js/src/capa/schematic.js')]} + js_module_name = "Problem" css = {'scss': [resource_string(__name__, 'css/capa/display.scss')]} diff --git a/common/lib/xmodule/xmodule/html_module.py b/common/lib/xmodule/xmodule/html_module.py index c41bbbd413..d51c8ad4a7 100644 --- a/common/lib/xmodule/xmodule/html_module.py +++ b/common/lib/xmodule/xmodule/html_module.py @@ -17,7 +17,7 @@ log = logging.getLogger("mitx.courseware") class HtmlModule(XModule): - js = {'coffee': [resource_string(__name__, 'js/src/jsloader.coffee'), + js = {'coffee': [resource_string(__name__, 'js/src/javascript_loader.coffee'), resource_string(__name__, 'js/src/html/display.coffee') ] } diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index 8c726f02e7..123f68145a 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -27,7 +27,7 @@ class @Problem @$('section.action input.save').click @save # Collapsibles - JavascriptLoader.setCollapsibles(@el) + Collapsible.setCollapsibles(@el) # Dynamath @$('input.math').keyup(@refreshMath) diff --git a/common/lib/xmodule/xmodule/js/src/html/display.coffee b/common/lib/xmodule/xmodule/js/src/html/display.coffee index a3e55f8f6c..d39bacc8d0 100644 --- a/common/lib/xmodule/xmodule/js/src/html/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/html/display.coffee @@ -3,7 +3,7 @@ class @HTMLModule constructor: (@element) -> @el = $(@element) JavascriptLoader.executeModuleScripts(@el) - JavascriptLoader.setCollapsibles(@el) + Collapsible.setCollapsibles(@el) $: (selector) -> $(selector, @el) diff --git a/common/lib/xmodule/xmodule/js/src/jsloader.coffee b/common/lib/xmodule/xmodule/js/src/javascript_loader.coffee similarity index 72% rename from common/lib/xmodule/xmodule/js/src/jsloader.coffee rename to common/lib/xmodule/xmodule/js/src/javascript_loader.coffee index 8cc524520a..543aec8edc 100644 --- a/common/lib/xmodule/xmodule/js/src/jsloader.coffee +++ b/common/lib/xmodule/xmodule/js/src/javascript_loader.coffee @@ -58,27 +58,3 @@ class @JavascriptLoader # properly. $('head')[0].appendChild(s) $(placeholder).remove() - - - # setCollapsibles: - # Scan module contents for generic collapsible containers - @setCollapsibles: (el) => - ### - el: jQuery object representing xmodule - ### - el.find('.longform').hide(); - el.find('.shortform').append('See full output'); - el.find('.collapsible section').hide(); - el.find('.full').click @toggleFull - el.find('.collapsible header a').click @toggleHint - - @toggleFull: (event) => - $(event.target).parent().siblings().slideToggle() - $(event.target).parent().parent().toggleClass('open') - text = $(event.target).text() == 'See full output' ? 'Hide output' : 'See full output' - $(this).text(text) - - @toggleHint: (event) => - event.preventDefault() - $(event.target).parent().siblings().slideToggle() - $(event.target).parent().parent().toggleClass('open') diff --git a/lms/static/coffee/src/collapsible.coffee b/lms/static/coffee/src/collapsible.coffee new file mode 100644 index 0000000000..6e469d3704 --- /dev/null +++ b/lms/static/coffee/src/collapsible.coffee @@ -0,0 +1,27 @@ +class @Collapsible + + # Set of library functions that provide a simple way to add collapsible + # functionality to elements. + + # setCollapsibles: + # Scan element's content for generic collapsible containers + @setCollapsibles: (el) => + ### + el: container + ### + el.find('.longform').hide() + el.find('.shortform').append('See full output') + el.find('.collapsible section').hide() + el.find('.full').click @toggleFull + el.find('.collapsible header a').click @toggleHint + + @toggleFull: (event) => + $(event.target).parent().siblings().slideToggle() + $(event.target).parent().parent().toggleClass('open') + text = $(event.target).text() == 'See full output' ? 'Hide output' : 'See full output' + $(this).text(text) + + @toggleHint: (event) => + event.preventDefault() + $(event.target).parent().siblings().slideToggle() + $(event.target).parent().parent().toggleClass('open') From ed55e4ae2fc2564a576dd6e42a6840721b33995b Mon Sep 17 00:00:00 2001 From: kimth Date: Tue, 2 Oct 2012 15:41:38 +0000 Subject: [PATCH 13/14] Move collapsible back into xmodule --- common/lib/xmodule/xmodule/capa_module.py | 1 + common/lib/xmodule/xmodule/html_module.py | 1 + .../lib/xmodule/xmodule/js}/src/collapsible.coffee | 0 3 files changed, 2 insertions(+) rename {lms/static/coffee => common/lib/xmodule/xmodule/js}/src/collapsible.coffee (100%) diff --git a/common/lib/xmodule/xmodule/capa_module.py b/common/lib/xmodule/xmodule/capa_module.py index fc71d2da02..15e2af86eb 100644 --- a/common/lib/xmodule/xmodule/capa_module.py +++ b/common/lib/xmodule/xmodule/capa_module.py @@ -76,6 +76,7 @@ class CapaModule(XModule): icon_class = 'problem' js = {'coffee': [resource_string(__name__, 'js/src/capa/display.coffee'), + resource_string(__name__, 'js/src/collapsible.coffee'), resource_string(__name__, 'js/src/javascript_loader.coffee'), ], 'js': [resource_string(__name__, 'js/src/capa/imageinput.js'), diff --git a/common/lib/xmodule/xmodule/html_module.py b/common/lib/xmodule/xmodule/html_module.py index d51c8ad4a7..ffd80d238b 100644 --- a/common/lib/xmodule/xmodule/html_module.py +++ b/common/lib/xmodule/xmodule/html_module.py @@ -18,6 +18,7 @@ log = logging.getLogger("mitx.courseware") class HtmlModule(XModule): js = {'coffee': [resource_string(__name__, 'js/src/javascript_loader.coffee'), + resource_string(__name__, 'js/src/collapsible.coffee') resource_string(__name__, 'js/src/html/display.coffee') ] } diff --git a/lms/static/coffee/src/collapsible.coffee b/common/lib/xmodule/xmodule/js/src/collapsible.coffee similarity index 100% rename from lms/static/coffee/src/collapsible.coffee rename to common/lib/xmodule/xmodule/js/src/collapsible.coffee From 845b921ca12cb8b58b196c45bc2c7bebf87c351a Mon Sep 17 00:00:00 2001 From: kimth Date: Tue, 2 Oct 2012 15:42:22 +0000 Subject: [PATCH 14/14] Missing comma --- common/lib/xmodule/xmodule/html_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/lib/xmodule/xmodule/html_module.py b/common/lib/xmodule/xmodule/html_module.py index ffd80d238b..20fda1e9f5 100644 --- a/common/lib/xmodule/xmodule/html_module.py +++ b/common/lib/xmodule/xmodule/html_module.py @@ -18,7 +18,7 @@ log = logging.getLogger("mitx.courseware") class HtmlModule(XModule): js = {'coffee': [resource_string(__name__, 'js/src/javascript_loader.coffee'), - resource_string(__name__, 'js/src/collapsible.coffee') + resource_string(__name__, 'js/src/collapsible.coffee'), resource_string(__name__, 'js/src/html/display.coffee') ] }