diff --git a/common/lib/xmodule/xmodule/js/spec/problem/edit_spec.coffee b/common/lib/xmodule/xmodule/js/spec/problem/edit_spec.coffee new file mode 100644 index 0000000000..2e1cfc9531 --- /dev/null +++ b/common/lib/xmodule/xmodule/js/spec/problem/edit_spec.coffee @@ -0,0 +1,5 @@ +describe 'MarkdownEditingDescriptor', -> + describe 'markdownToXml', -> + it 'converts raw text to paragraph', -> + data = MarkdownEditingDescriptor.markdownToXml('foo') + expect(data).toEqual('

foo

') \ No newline at end of file diff --git a/common/lib/xmodule/xmodule/js/src/problem/edit.coffee b/common/lib/xmodule/xmodule/js/src/problem/edit.coffee index adc3cc05b7..a5c2f26aa6 100644 --- a/common/lib/xmodule/xmodule/js/src/problem/edit.coffee +++ b/common/lib/xmodule/xmodule/js/src/problem/edit.coffee @@ -17,7 +17,7 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor }) @setCurrentEditor(@markdown_editor) - onMarkdownEditorUpdate: -> + onMarkdownEditorUpdate: -> console.log('update') @updateXML() @@ -32,7 +32,7 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor # onMarkdownEditorUpdate(); else @setCurrentEditor(@xml_editor) - # xmlEditor.refresh(); + # xmlEditor.refresh(); setCurrentEditor: (editor) -> $(@current_editor.getWrapperElement()).hide() @@ -43,3 +43,108 @@ class @MarkdownEditingDescriptor extends XModule.Descriptor save: -> $body.off('click', '.editor-tabs .tab', @changeEditor) data: @xml_editor.getValue() + + @markdownToXml: (markdown)-> + toXml = `function(markdown) { + var xml = markdown; + + // replace headers + xml = xml.replace(/(^.*?$)(?=\n\=\=+$)/gm, '

$1

'); + xml = xml.replace(/\n^\=\=+$/gm, ''); + + // group multiple choice answers + xml = xml.replace(/(^\s*\(.?\).*?$\n*)+/gm, function(match, p) { + var groupString = '\n'; + groupString += ' \n'; + var options = match.split('\n'); + for(var i = 0; i < options.length; i++) { + if(options[i].length > 0) { + var value = options[i].split(/^\s*\(.?\)\s*/)[1]; + var correct = /^\s*\(x\)/i.test(options[i]); + groupString += ' ' + value + '\n'; + } + } + groupString += ' \n'; + groupString += '\n\n'; + return groupString; + }); + + // group check answers + xml = xml.replace(/(^\s*\[.?\].*?$\n*)+/gm, function(match, p) { + var groupString = '\n'; + groupString += ' \n'; + var options = match.split('\n'); + for(var i = 0; i < options.length; i++) { + if(options[i].length > 0) { + var value = options[i].split(/^\s*\[.?\]\s*/)[1]; + var correct = /^\s*\[x\]/i.test(options[i]); + groupString += ' ' + value + '\n'; + } + } + groupString += ' \n'; + groupString += '\n\n'; + return groupString; + }); + + // replace videos + xml = xml.replace(/\{\{video\s(.*?)\}\}/g, '