Add a request-token to identify which xblock html was rendered as part of the current request
[STUD-2903]
This commit is contained in:
committed by
cahrens
parent
5f14959231
commit
50082387eb
@@ -2,9 +2,21 @@ describe "XBlock", ->
|
||||
beforeEach ->
|
||||
setFixtures """
|
||||
<div>
|
||||
<div class='xblock' id='vA' data-runtime-version="A" data-runtime-class="TestRuntime" data-init="initFnA" data-name="a-name"/>
|
||||
<div class='xblock'
|
||||
id='vA'
|
||||
data-runtime-version="A"
|
||||
data-runtime-class="TestRuntime"
|
||||
data-init="initFnA"
|
||||
data-name="a-name"
|
||||
/>
|
||||
<div>
|
||||
<div class='xblock' id='vZ' data-runtime-version="Z" data-runtime-class="TestRuntime" data-init="initFnZ"/>
|
||||
<div class='xblock'
|
||||
id='vZ'
|
||||
data-runtime-version="Z"
|
||||
data-runtime-class="TestRuntime"
|
||||
data-init="initFnZ"
|
||||
data-request-token="req-token-z"
|
||||
/>
|
||||
</div>
|
||||
<div class='xblock' id='missing-version' data-init='initFnA' data-name='no-version'/>
|
||||
<div class='xblock' id='missing-init' data-runtime-version="A" data-name='no-init'/>
|
||||
@@ -25,8 +37,11 @@ describe "XBlock", ->
|
||||
@fakeChildren = ['list', 'of', 'children']
|
||||
spyOn(XBlock, 'initializeBlocks').andReturn(@fakeChildren)
|
||||
|
||||
@vABlock = XBlock.initializeBlock($('#vA')[0])
|
||||
@vZBlock = XBlock.initializeBlock($('#vZ')[0])
|
||||
@vANode = $('#vA')[0]
|
||||
@vZNode = $('#vZ')[0]
|
||||
|
||||
@vABlock = XBlock.initializeBlock(@vANode, 'req-token-a')
|
||||
@vZBlock = XBlock.initializeBlock(@vZNode)
|
||||
@missingVersionBlock = XBlock.initializeBlock($('#missing-version')[0])
|
||||
@missingInitBlock = XBlock.initializeBlock($('#missing-init')[0])
|
||||
|
||||
@@ -35,8 +50,8 @@ describe "XBlock", ->
|
||||
expect(TestRuntime.vZ).toHaveBeenCalledWith()
|
||||
|
||||
it "loads the right init function", ->
|
||||
expect(window.initFnA).toHaveBeenCalledWith(@runtimeA, $('#vA')[0])
|
||||
expect(window.initFnZ).toHaveBeenCalledWith(@runtimeZ, $('#vZ')[0])
|
||||
expect(window.initFnA).toHaveBeenCalledWith(@runtimeA, @vANode)
|
||||
expect(window.initFnZ).toHaveBeenCalledWith(@runtimeZ, @vZNode)
|
||||
|
||||
it "loads when missing versions", ->
|
||||
expect(@missingVersionBlock.element).toBe($('#missing-version'))
|
||||
@@ -53,15 +68,29 @@ describe "XBlock", ->
|
||||
expect(@vZBlock.name).toBeUndefined()
|
||||
|
||||
it "attaches the element to the block", ->
|
||||
expect(@vABlock.element).toBe($('#vA')[0])
|
||||
expect(@vZBlock.element).toBe($('#vZ')[0])
|
||||
expect(@vABlock.element).toBe(@vANode)
|
||||
expect(@vZBlock.element).toBe(@vZNode)
|
||||
expect(@missingVersionBlock.element).toBe($('#missing-version')[0])
|
||||
expect(@missingInitBlock.element).toBe($('#missing-init')[0])
|
||||
|
||||
it "passes through the request token", ->
|
||||
expect(XBlock.initializeBlocks).toHaveBeenCalledWith($(@vANode), 'req-token-a')
|
||||
expect(XBlock.initializeBlocks).toHaveBeenCalledWith($(@vZNode), 'req-token-z')
|
||||
|
||||
|
||||
describe "initializeBlocks", ->
|
||||
it "initializes children", ->
|
||||
beforeEach ->
|
||||
spyOn(XBlock, 'initializeBlock')
|
||||
|
||||
@vANode = $('#vA')[0]
|
||||
@vZNode = $('#vZ')[0]
|
||||
|
||||
it "initializes children", ->
|
||||
XBlock.initializeBlocks($('#jasmine-fixtures'))
|
||||
expect(XBlock.initializeBlock).toHaveBeenCalledWith($('#vA')[0])
|
||||
expect(XBlock.initializeBlock).toHaveBeenCalledWith($('#vZ')[0])
|
||||
expect(XBlock.initializeBlock).toHaveBeenCalledWith(@vANode, undefined)
|
||||
expect(XBlock.initializeBlock).toHaveBeenCalledWith(@vZNode, undefined)
|
||||
|
||||
it "only initializes matching request tokens", ->
|
||||
XBlock.initializeBlocks($('#jasmine-fixtures'), 'req-token-z')
|
||||
expect(XBlock.initializeBlock).not.toHaveBeenCalledWith(@vANode, jasmine.any(Object))
|
||||
expect(XBlock.initializeBlock).toHaveBeenCalledWith(@vZNode, 'req-token-z')
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
@XBlock =
|
||||
Runtime: {}
|
||||
|
||||
initializeBlock: (element) ->
|
||||
###
|
||||
Initialize the javascript for a single xblock element, and for all of it's
|
||||
xblock children that match requestToken. If requestToken is omitted, use the
|
||||
data-request-token attribute from element, or use the request-tokens specified on
|
||||
the children themselves.
|
||||
###
|
||||
initializeBlock: (element, requestToken) ->
|
||||
$element = $(element)
|
||||
children = @initializeBlocks($element)
|
||||
requestToken = requestToken or $element.data('request-token')
|
||||
children = @initializeBlocks($element, requestToken)
|
||||
runtime = $element.data("runtime-class")
|
||||
version = $element.data("runtime-version")
|
||||
initFnName = $element.data("init")
|
||||
@@ -26,7 +33,17 @@
|
||||
$element.addClass("xblock-initialized")
|
||||
block
|
||||
|
||||
initializeBlocks: (element) ->
|
||||
$(element).immediateDescendents(".xblock").map((idx, elem) =>
|
||||
@initializeBlock elem
|
||||
###
|
||||
Initialize all XBlocks inside element that were rendered with requestToken.
|
||||
If requestToken is omitted, and element has a 'data-request-token' attribute, use that.
|
||||
If neither is available, then use the request tokens of the immediateDescendent xblocks.
|
||||
###
|
||||
initializeBlocks: (element, requestToken) ->
|
||||
requestToken = requestToken or $(element).data('request-token')
|
||||
if requestToken
|
||||
selector = ".xblock[data-request-token='#{requestToken}']"
|
||||
else
|
||||
selector = ".xblock"
|
||||
$(element).immediateDescendents(selector).map((idx, elem) =>
|
||||
@initializeBlock(elem, requestToken)
|
||||
).toArray()
|
||||
|
||||
Reference in New Issue
Block a user