Skip to content

Commit

Permalink
Expose parent data object via @parent_
Browse files Browse the repository at this point in the history
  • Loading branch information
Jarno Keskikangas committed Sep 14, 2011
1 parent c4ad2f8 commit 45e8419
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 35 deletions.
10 changes: 5 additions & 5 deletions jquery.transparency.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@ renderDirectives = (buffer, object, directives) ->

renderChildren = (buffer, object, directives) ->
for key, value of object when typeof value == 'object' and key != 'parent_'
value.parent_ = object
buffer.render value, directives[key] if buffer.hasClass key
buffer.find(".#{key}").render value, directives[key]
buffer.render value, directives[key], object if buffer.hasClass key
buffer.find(".#{key}").render value, directives[key], object

renderNode = (node, value, attribute) ->
if attribute
Expand All @@ -30,7 +29,7 @@ renderNode = (node, value, attribute) ->
node.text value
node.append children

jQuery.fn.render = (data, directives) ->
jQuery.fn.render = (data, directives, parent) ->
directives ||= {}
result = this
contexts = if jQuery.isArray(data) then @children() else [this]
Expand All @@ -41,7 +40,8 @@ jQuery.fn.render = (data, directives) ->
data = [data] unless jQuery.isArray(data)

for object in data
buffer = template.clone()
object.parent_ = parent
buffer = template.clone()

renderValues buffer, object
renderDirectives buffer, object, directives
Expand Down
77 changes: 47 additions & 30 deletions spec/nested_models.spec.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -135,17 +135,19 @@ describe "Transparency", ->
<table class="test_reports">
<thead>
<tr class="profiles">
<th class="name"></th>
<th>
<a class="name" href="#"></a>
</th>
</tr>
</thead>
<tbody>
<tr class="profiles">
<td class="testsets">
<div class="testset">
<a href="#" class="name"></a>
<a class="name" href="#"></a>
<ul class="products">
<li>
<a href="#" class="name"></a>
<a class="name" href="#"></a>
</li>
</ul>
</div>
Expand All @@ -154,98 +156,113 @@ describe "Transparency", ->
</div>')

data =
release: "1.2"
profiles: [
name: 'Core'
testsets: [
name: "Core Sanity"
name: "Sanity"
products: [
name: "Core Sanity N900"
name: "N900"
,
name: "Core Sanity Lenovo"
name: "Lenovo"
]
,
name: "Core Acceptance"
name: "Acceptance"
products: [
name: "Core Acceptance Netbook"
name: "Netbook"
,
name: "Core Acceptance Pinetrail"
name: "Pinetrail"
]
]
,
name: 'Handset'
testsets: [
name: "Handset Sanity"
name: "Feature"
products: [
name: "Handset Sanity N900"
name: "N900"
,
name: "Handset Sanity Lenovo"
name: "Lenovo"
]
,
name: 'Handset Acceptance'
name: 'NFT'
products: [
name: "Handset Acceptance Netbook"
name: "Netbook"
,
name: "Handset Acceptance Pinetrail"
name: "iCDK"
]
]
]

directives =
profiles:
'name@href': (elem) -> "/#{data.release}/#{@name}"
testsets:
'name@href': (elem) ->
"/#{data.release}/#{@parent_.name}/#{@name}"
products:
'name@href': (elem) ->
"/#{data.release}/#{@parent_.parent_.name}/#{@parent_.name}/#{@name}"

expected = jQuery(
'<div>
<table class="test_reports">
<thead>
<tr class="profiles">
<th class="name">Core</th>
<th class="name">Handset</th>
<th>
<a class="name" href="/1.2/Core">Core</a>
</th>
<th>
<a class="name" href="/1.2/Handset">Handset</a>
</th>
</tr>
</thead>
<tbody>
<tr class="profiles">
<td class="testsets">
<div class="testset">
<a href="#" class="name">Core Sanity</a>
<a class="name" href="/1.2/Core/Sanity">Sanity</a>
<ul class="products">
<li>
<a href="#" class="name">Core Sanity N900</a>
<a class="name" href="/1.2/Core/Sanity/N900">N900</a>
</li>
<li>
<a href="#" class="name">Core Sanity Lenovo</a>
<a class="name" href="/1.2/Core/Sanity/Lenovo">Lenovo</a>
</li>
</ul>
</div>
<div class="testset">
<a href="#" class="name">Core Acceptance</a>
<a class="name" href="/1.2/Core/Acceptance">Acceptance</a>
<ul class="products">
<li>
<a href="#" class="name">Core Acceptance Netbook</a>
<a class="name" href="/1.2/Core/Acceptance/Netbook">Netbook</a>
</li>
<li>
<a href="#" class="name">Core Acceptance Pinetrail</a>
<a class="name" href="/1.2/Core/Acceptance/Pinetrail">Pinetrail</a>
</li>
</ul>
</div>
</td>
<td class="testsets">
<div class="testset"
<a href="#" class="name">Handset Sanity</a>
<a class="name" href="/1.2/Handset/Feature">Feature</a>
<ul class="products">
<li>
<a href="#" class="name">Handset Sanity N900</a>
<a class="name" href="/1.2/Handset/Feature/N900">N900</a>
</li>
<li>
<a href="#" class="name">Handset Sanity Lenovo</a>
<a class="name" href="/1.2/Handset/Feature/Lenovo">Lenovo</a>
</li>
</ul>
</div>
<div class="testset"
<a href="#" class="name">Handset Acceptance</a>
<a class="name" href="/1.2/Handset/NFT">NFT</a>
<ul class="products">
<li>
<a href="#" class="name">Handset Acceptance Netbook</a>
<a class="name" href="/1.2/Handset/NFT/Netbook">Netbook</a>
</li>
<li>
<a href="#" class="name">Handset Acceptance Pinetrail</a>
<a class="name" href="/1.2/Handset/NFT/iCDK">iCDK</a>
</li>
</ul>
</div>
Expand All @@ -255,5 +272,5 @@ describe "Transparency", ->
</table>
</div>')

doc.find('.test_reports').render(data)
doc.find('.test_reports').render(data, directives)
expect(doc.html()).htmlToBeEqual(expected.html())

0 comments on commit 45e8419

Please sign in to comment.