Commit 4580ef89 by Prem Sichanugrist

Queue up MathML conversion to be after render

From https://www.pivotaltracker.com/story/show/31700967
Fixes #137
parent 7475e415
...@@ -52,8 +52,11 @@ describe 'Problem', -> ...@@ -52,8 +52,11 @@ describe 'Problem', ->
it 'bind the math input', -> it 'bind the math input', ->
expect($('input.math')).toHandleWith 'keyup', @problem.refreshMath expect($('input.math')).toHandleWith 'keyup', @problem.refreshMath
it 'display the math input', -> it 'replace math content on the page', ->
expect(@stubbedJax.root.toMathML).toHaveBeenCalled() expect(MathJax.Hub.Queue.mostRecentCall.args).toEqual [
['Text', @stubbedJax, ''],
[@problem.updateMathML, @stubbedJax, $('#input_example_1').get(0)]
]
describe 'render', -> describe 'render', ->
beforeEach -> beforeEach ->
...@@ -238,23 +241,29 @@ describe 'Problem', -> ...@@ -238,23 +241,29 @@ describe 'Problem', ->
describe 'refreshMath', -> describe 'refreshMath', ->
beforeEach -> beforeEach ->
@problem = new Problem 1, '/problem/url/' @problem = new Problem 1, '/problem/url/'
@stubbedJax.root.toMathML.andReturn '<MathML>'
$('#input_example_1').val 'E=mc^2' $('#input_example_1').val 'E=mc^2'
@problem.refreshMath target: $('#input_example_1').get(0)
it 'should queue the conversion and MathML element update', ->
expect(MathJax.Hub.Queue).toHaveBeenCalledWith ['Text', @stubbedJax, 'E=mc^2'],
[@problem.updateMathML, @stubbedJax, $('#input_example_1').get(0)]
describe 'updateMathML', ->
beforeEach ->
@problem = new Problem 1, '/problem/url/'
@stubbedJax.root.toMathML.andReturn '<MathML>'
describe 'when there is no exception', -> describe 'when there is no exception', ->
beforeEach -> beforeEach ->
@problem.refreshMath target: $('#input_example_1').get(0) @problem.updateMathML @stubbedJax, $('#input_example_1').get(0)
it 'should convert and display the MathML object', ->
expect(MathJax.Hub.Queue).toHaveBeenCalledWith ['Text', @stubbedJax, 'E=mc^2']
it 'should display debug output in hidden div', -> it 'convert jax to MathML', ->
expect($('#input_example_1_dynamath')).toHaveValue '<MathML>' expect($('#input_example_1_dynamath')).toHaveValue '<MathML>'
describe 'when there is an exception', -> describe 'when there is an exception', ->
beforeEach -> beforeEach ->
@stubbedJax.root.toMathML.andThrow {restart: true} @stubbedJax.root.toMathML.andThrow {restart: true}
@problem.refreshMath target: $('#input_example_1').get(0) @problem.updateMathML @stubbedJax, $('#input_example_1').get(0)
it 'should queue up the exception', -> it 'should queue up the exception', ->
expect(MathJax.Callback.After).toHaveBeenCalledWith [@problem.refreshMath, @stubbedJax], true expect(MathJax.Callback.After).toHaveBeenCalledWith [@problem.refreshMath, @stubbedJax], true
......
...@@ -79,14 +79,15 @@ class @Problem ...@@ -79,14 +79,15 @@ class @Problem
target = "display_#{element.id.replace(/^input_/, '')}" target = "display_#{element.id.replace(/^input_/, '')}"
if jax = MathJax.Hub.getAllJax(target)[0] if jax = MathJax.Hub.getAllJax(target)[0]
MathJax.Hub.Queue ['Text', jax, $(element).val()] MathJax.Hub.Queue ['Text', jax, $(element).val()],
[@updateMathML, jax, element]
try updateMathML: (jax, element) =>
output = jax.root.toMathML '' try
$("##{element.id}_dynamath").val(output) $("##{element.id}_dynamath").val(jax.root.toMathML '')
catch exception catch exception
throw exception unless exception.restart throw exception unless exception.restart
MathJax.Callback.After [@refreshMath, jax], exception.restart MathJax.Callback.After [@refreshMath, jax], exception.restart
refreshAnswers: => refreshAnswers: =>
@$('input.schematic').each (index, element) -> @$('input.schematic').each (index, element) ->
......
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