Commit ff536248 by Mike Chen

style changes and comments

parent 8919fbd9
class @CapawikiDescriptor
class @CapaWikiDescriptor
constructor: (@element) ->
@loadParser("/static/peg/capawiki.jspeg")
@capa_box = $(".capa-box", @element)
@wiki_box = $(".wiki-box", @element)
@capaBox = $(".capa-box", @element)
@wikiBox = $(".wiki-box", @element)
save: ->
{'capa': @capa_box.val(), 'wiki': @wiki_box.val()}
{'capa': @capaBox.val(), 'wiki': @wikiBox.val()}
debug: (msg) ->
# console.log msg
......@@ -23,16 +23,18 @@ class @CapawikiDescriptor
"Line " + e.line + ", column " + e.column + ": " + e.message
else e.message
dom2capa: (node) ->
serializeDomToCapaXML: (node) ->
# serializes a Capa XML document and make changes if needed
# e.g. replace <text> into <startouttext />
serializer = new XMLSerializer()
capa = serializer.serializeToString(node)
buildXML: (parsed) ->
dom_parser = new DOMParser()
doc = dom_parser.parseFromString("<problem />", "text/xml");
domParser = new DOMParser()
doc = domParser.parseFromString("<problem />", "text/xml");
problem = $(doc).find('problem')
create_text_element = (content) ->
createTextElement = (content) ->
el = $(doc.createElement('text'))
for line in content.split('\n')
el.append doc.createTextNode(line)
......@@ -40,13 +42,13 @@ class @CapawikiDescriptor
el.children().last().remove()
return el
variable_name_wrapper = (expression) ->
replaceVariableNameWrapper = (expression) ->
match = /^\{(.+)\}$/.exec(expression)
return if match then "$" + match[1] else expression
for section in parsed
if section.type == 'text'
newel = create_text_element(section.text)
newel = createTextElement(section.text)
problem.append(newel)
else if section.type == 'image'
......@@ -55,7 +57,7 @@ class @CapawikiDescriptor
img.attr 'src', section.url
center.append img
if section.title
title = create_text_element(section.title)
title = createTextElement(section.title)
center.append doc.createElement('br')
center.append title
problem.append center
......@@ -78,14 +80,14 @@ class @CapawikiDescriptor
for choice_def in section.choices
choice = $(doc.createElement('choice'))
choice.attr 'correct', choice_def.correct
choice.append create_text_element(choice_def.text)
choice.append createTextElement(choice_def.text)
group.append(choice)
problem.append(newel)
else if section.type == 'numerical'
newel = $(doc.createElement('numericalresponse'))
newel.attr 'answer', variable_name_wrapper(section.answer)
newel.attr 'answer', replaceVariableNameWrapper(section.answer)
tolerance = $(doc.createElement('responseparam'))
tolerance.attr 'type', 'tolerance'
......@@ -100,7 +102,7 @@ class @CapawikiDescriptor
else if section.type == 'string'
newel = $(doc.createElement('stringresponse'))
newel.attr 'answer', variable_name_wrapper(section.answer)
newel.attr 'answer', replaceVariableNameWrapper(section.answer)
newel.append doc.createElement('textline')
problem.append(newel)
......@@ -108,7 +110,7 @@ class @CapawikiDescriptor
else if section.type == 'formula'
formularesponse = $(doc.createElement("formularesponse"))
formularesponse.attr 'samples', section.samples
formularesponse.attr 'answer', variable_name_wrapper(section.answer)
formularesponse.attr 'answer', replaceVariableNameWrapper(section.answer)
formularesponse.attr 'type', 'cs'
tolerance = $(doc.createElement('responseparam'))
......@@ -126,7 +128,7 @@ class @CapawikiDescriptor
else
throw new SyntaxError("unexpected section type " + section.type)
capa = @dom2capa(doc)
capa = @serializeDomToCapaXML(doc)
return capa
parse: (source) ->
......@@ -144,5 +146,4 @@ class @CapawikiDescriptor
catch e
message = @buildParserErrorMessage e
return {'message': message, 'status': 'error'}
return done(xml)
\ No newline at end of file
class CMS.Views.CapawikiEdit extends Backbone.View
class CMS.Views.CapaWikiEdit extends Backbone.View
tagName: 'section'
className: 'edit-pane'
......@@ -87,8 +87,8 @@ class CMS.Views.CapawikiEdit extends Backbone.View
event.preventDefault()
previewType = $(event.target).data('preview-type')
moduleType = $(event.target).data('type')
if moduleType == "CapawikiDescriptor"
CMS.pushView new CMS.Views.CapawikiEdit
if moduleType == "CapaWikiDescriptor"
CMS.pushView new CMS.Views.CapaWikiEdit
model: new CMS.Models.Module
id: $(event.target).data('id')
type: if moduleType == 'None' then null else moduleType
......
......@@ -37,8 +37,8 @@ class CMS.Views.ModuleEdit extends Backbone.View
event.preventDefault()
previewType = $(event.target).data('preview-type')
moduleType = $(event.target).data('type')
if moduleType == "CapawikiDescriptor"
CMS.pushView new CMS.Views.CapawikiEdit
if moduleType == "CapaWikiDescriptor"
CMS.pushView new CMS.Views.CapaWikiEdit
model: new CMS.Models.Module
id: $(event.target).data('id')
type: if moduleType == 'None' then null else moduleType
......
......@@ -8,7 +8,7 @@ start
GeneralResponse /
NumericalOrStringResponse /
NumericalResponse /
MultipleChoice /
MultipleChoiceResponse /
Paragraph
)+
......@@ -116,7 +116,7 @@ NumericalOrStringResponse
}
/ StringResponse
/* MultipleChoice */
/* MultipleChoiceResponse */
ChoiceTextLine
= !ChoiceIdentifier line:Line
......@@ -130,7 +130,7 @@ Choice
return {'type': 'choice', 'correct' : correct, 'text': lines.join("").replace(/[\n\r]$/,"")};
}
MultipleChoice
MultipleChoiceResponse
= choices:Choice+
{
return {'type': 'multiple_choice', 'choices': choices};
......@@ -196,9 +196,35 @@ AlphanumericalText
return chars.join("");
}
/* JSON */
/* NumericalResponse */
NumericalToleranceValueType
= decimal / percentage / integer
NumericalTolerance
= '+-' ' '* value:NumericalToleranceValueType ' '*
{
return value;
}
NumericalResponse
= CorrectAnswerIdentifier ' '* '(' ' '* value:NumericalValue ' '* tolerance:NumericalTolerance? ')' ' '* Linebreak
{
if (tolerance == "")
tolerance = "5%"
return {'type': 'numerical', 'answer': value, 'tolerance': tolerance};
}
NumericalValue
= additive
/ VariableName
/* JSON parser based on the grammar described at http://json.org/. */
/* https://github.com/Contra/pegjs/blob/c9af3e4fb50a5e93bfb542a4298bb64735e9978e/examples/json.pegjs */
/* TODO: add prefixes to JSON and arithmetrics rules */
JSONDictionary
= _ o:object { return o; }
......@@ -306,31 +332,10 @@ whitespace
= [ \t\n\r]
/* NumericalResponse */
NumericalToleranceValueType
= decimal / percentage / integer
NumericalTolerance
= '+-' ' '* value:NumericalToleranceValueType ' '*
{
return value;
}
NumericalResponse
= CorrectAnswerIdentifier ' '* '(' ' '* value:NumericalValue ' '* tolerance:NumericalTolerance? ')' ' '* Linebreak
{
if (tolerance == "")
tolerance = "5%"
return {'type': 'numerical', 'answer': value, 'tolerance': tolerance};
}
NumericalValue
= additive
/ VariableName
/* Mathematical rules */
/* Based on JSPEG's arithmetrics example at
https://raw.github.com/dmajda/pegjs/master/examples/arithmetics.pegjs
*/
additive
= left:multiplicative "+" right:additive { return left + right; }
/ left:multiplicative "-" right:additive { return left - right; }
......
......@@ -27,7 +27,7 @@ setup(
"image = xmodule.backcompat_module:TranslateCustomTagDescriptor",
"error = xmodule.error_module:ErrorDescriptor",
"problem = xmodule.capa_module:CapaDescriptor",
"capawiki = xmodule.capawiki_module:CapawikiDescriptor",
"capawiki = xmodule.capawiki_module:CapaWikiDescriptor",
"problemset = xmodule.vertical_module:VerticalDescriptor",
"section = xmodule.backcompat_module:SemanticSectionDescriptor",
"sequential = xmodule.seq_module:SequenceDescriptor",
......
......@@ -11,7 +11,7 @@ from xmodule.capa_module import CapaModule, CapaDescriptor
log = logging.getLogger(__name__)
class CapawikiModule(CapaModule):
class CapaWikiModule(CapaModule):
js = {'coffee': [resource_string(__name__, 'js/src/capa/display.coffee')],
'js': [resource_string(__name__, 'js/src/capa/imageinput.js'),
resource_string(__name__, 'js/src/capa/schematic.js'),
......@@ -22,11 +22,11 @@ class CapawikiModule(CapaModule):
self._definition = definition
assert isinstance(definition['data'], dict) and 'capa' in definition['data']
self.capa_definition = {'data': definition['data']['capa']}
super(CapawikiModule, self).__init__(system, location, self.capa_definition, instance_state,
super(CapaWikiModule, self).__init__(system, location, self.capa_definition, instance_state,
shared_state, **kwargs)
class CapawikiDescriptor(CapaDescriptor):
js_module_name = "CapawikiDescriptor"
module_class = CapawikiModule
class CapaWikiDescriptor(CapaDescriptor):
js_module_name = "CapaWikiDescriptor"
module_class = CapaWikiModule
mako_template = "widgets/capawiki-edit.html"
......@@ -7,10 +7,13 @@ from .exceptions import DuplicateItemError
log = logging.getLogger(__name__)
# TODO: added a command to invoke import_from_xml_capawiki
def import_from_xml_capawiki(store, data_dir, course_dirs=None, eager=True,
default_class='xmodule.raw_module.RawDescriptor'):
"""
import_from_xml_CapaWiki imports xml files from data_dir, converts
each problem into a CapaWiki problem.
Import the specified xml data_dir into the "store" modulestore,
using org and course as the location org and course.
......
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