Commit 5f86fcfb by Calen Pennington

Standardize how Problem and Video modules are loaded in the LMS and CMS preview pane

parent 5a9ba655
...@@ -4,16 +4,20 @@ class CMS.Models.Module extends Backbone.Model ...@@ -4,16 +4,20 @@ class CMS.Models.Module extends Backbone.Model
data: '' data: ''
loadModule: (element) -> loadModule: (element) ->
moduleType = @get('type')
try try
@module = new window[@get('type')](element) @module = if moduleType? then new window[moduleType](element) else null
catch error catch error
console.error "Unable to load #{@get('type')}: #{error.message}" if console console.error "Unable to load #{moduleType}: #{error.message}" if console
loadPreview: (element) -> loadPreview: (element) ->
previewType = @get('previewType')
try try
@previewModule = new window[@get('previewType')](element) @previewModule = if previewType? then new window[previewType](element) else null
catch error catch error
console.error "Unable to load #{@get('previewType')}: #{error.message}" if console console.error "Unable to load #{previewType}: #{error.message}" if console
editUrl: -> editUrl: ->
"/edit_item?#{$.param(id: @get('id'))}" "/edit_item?#{$.param(id: @get('id'))}"
......
...@@ -4,8 +4,10 @@ class CMS.Views.Module extends Backbone.View ...@@ -4,8 +4,10 @@ class CMS.Views.Module extends Backbone.View
edit: (event) => edit: (event) =>
event.preventDefault() event.preventDefault()
previewType = @$el.data('preview-type')
moduleType = @$el.data('type')
CMS.replaceView new CMS.Views.ModuleEdit CMS.replaceView new CMS.Views.ModuleEdit
model: new CMS.Models.Module model: new CMS.Models.Module
id: @$el.data('id') id: @$el.data('id')
type: @$el.data('type') type: if moduleType == 'None' then null else moduleType
previewType: @$el.data('preview-type') previewType: if previewType == 'None' then null else previewType
...@@ -27,4 +27,10 @@ class CMS.Views.ModuleEdit extends Backbone.View ...@@ -27,4 +27,10 @@ class CMS.Views.ModuleEdit extends Backbone.View
editSubmodule: (event) -> editSubmodule: (event) ->
event.preventDefault() event.preventDefault()
CMS.pushView(new CMS.Views.ModuleEdit(model: new CMS.Models.Module(id: $(event.target).data('id'), type: $(event.target).data('type')))) previewType = $(event.target).data('preview-type')
moduleType = $(event.target).data('type')
CMS.pushView new CMS.Views.ModuleEdit
model: new CMS.Models.Module
id: $(event.target).data('id')
type: if moduleType == 'None' then null else moduleType
previewType: if previewType == 'None' then null else previewType
...@@ -14,7 +14,7 @@ urlpatterns = ('', ...@@ -14,7 +14,7 @@ urlpatterns = ('',
url(r'^(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<name>[^/]+)$', url(r'^(?P<org>[^/]+)/(?P<course>[^/]+)/course/(?P<name>[^/]+)$',
'contentstore.views.course_index', name='course_index'), 'contentstore.views.course_index', name='course_index'),
url(r'^github_service_hook$', 'github_sync.views.github_post_receive'), url(r'^github_service_hook$', 'github_sync.views.github_post_receive'),
url(r'^preview/modx/(?P<id>.*?)/(?P<dispatch>[^/]*)$', 'contentstore.views.preview_dispatch', name='preview_dispatch') url(r'^preview/modx/(?P<location>.*?)/(?P<dispatch>[^/]*)$', 'contentstore.views.preview_dispatch', name='preview_dispatch')
) )
# User creation and updating views # User creation and updating views
......
class @Problem class @Problem
constructor: (@id, @element_id, url) -> constructor: (element) ->
@el = $("##{@element_id}") @el = $(element)
@id = @el.data('problem-id')
@element_id = @el.attr('id')
@url = @el.data('url')
@render() @render()
$: (selector) -> $: (selector) ->
...@@ -26,13 +29,13 @@ class @Problem ...@@ -26,13 +29,13 @@ class @Problem
@el.html(content) @el.html(content)
@bind() @bind()
else else
$.postWithPrefix "/modx/#{@id}/problem_get", (response) => $.postWithPrefix "#{@url}/problem_get", (response) =>
@el.html(response.html) @el.html(response.html)
@bind() @bind()
check: => check: =>
Logger.log 'problem_check', @answers Logger.log 'problem_check', @answers
$.postWithPrefix "/modx/#{@id}/problem_check", @answers, (response) => $.postWithPrefix "#{@url}/problem_check", @answers, (response) =>
switch response.success switch response.success
when 'incorrect', 'correct' when 'incorrect', 'correct'
@render(response.contents) @render(response.contents)
...@@ -42,14 +45,14 @@ class @Problem ...@@ -42,14 +45,14 @@ class @Problem
reset: => reset: =>
Logger.log 'problem_reset', @answers Logger.log 'problem_reset', @answers
$.postWithPrefix "/modx/#{@id}/problem_reset", id: @id, (response) => $.postWithPrefix "#{@url}/problem_reset", id: @id, (response) =>
@render(response.html) @render(response.html)
@updateProgress response @updateProgress response
show: => show: =>
if !@el.hasClass 'showed' if !@el.hasClass 'showed'
Logger.log 'problem_show', problem: @id Logger.log 'problem_show', problem: @id
$.postWithPrefix "/modx/#{@id}/problem_show", (response) => $.postWithPrefix "#{@url}/problem_show", (response) =>
answers = response.answers answers = response.answers
$.each answers, (key, value) => $.each answers, (key, value) =>
if $.isArray(value) if $.isArray(value)
...@@ -69,7 +72,7 @@ class @Problem ...@@ -69,7 +72,7 @@ class @Problem
save: => save: =>
Logger.log 'problem_save', @answers Logger.log 'problem_save', @answers
$.postWithPrefix "/modx/#{@id}/problem_save", @answers, (response) => $.postWithPrefix "#{@url}/problem_save", @answers, (response) =>
if response.success if response.success
alert 'Saved' alert 'Saved'
@updateProgress response @updateProgress response
......
class @Video class @Video
constructor: (@id, videos, @caption_url_base) -> constructor: (@element) ->
@id = $(@element).attr('id').replace(/video_/, '')
@caption_url_base = $(@element).data('caption-url-base')
window.player = null window.player = null
@el = $("#video_#{@id}") @el = $("#video_#{@id}")
@parseVideos videos @parseVideos $(@element).data('streams')
@fetchMetadata() @fetchMetadata()
@parseSpeed() @parseSpeed()
$("#video_#{@id}").data('video', this) $("#video_#{@id}").data('video', this)
......
...@@ -16,12 +16,8 @@ class @Courseware ...@@ -16,12 +16,8 @@ class @Courseware
.bind 'contentChanged', @render .bind 'contentChanged', @render
render: -> render: ->
$('.course-content .video').each -> $('.course-content .video').each (idx, element) -> new Video element
id = $(this).attr('id').replace(/video_/, '') $('.course-content .problems-wrapper').each (idx, element) -> new Problem element
new Video id, $(this).data('streams'), $(this).data('caption-url-base')
$('.course-content .problems-wrapper').each ->
id = $(this).data('problem-id')
new Problem id, $(this).attr('id'), $(this).data('url')
$('.course-content .histogram').each -> $('.course-content .histogram').each ->
id = $(this).attr('id').replace(/histogram_/, '') id = $(this).attr('id').replace(/histogram_/, '')
new Histogram id, $(this).data('histogram') new Histogram id, $(this).data('histogram')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment