twine-rails 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 968823f51af583427c5e0fd973dac4cffac8afd1
4
- data.tar.gz: 9a278e90d795ddfe6db06003aebb607bcef6311e
3
+ metadata.gz: 55515a506ecc1a1780a71b29f1111fc896034c04
4
+ data.tar.gz: 86c1632f836bcc24228b2301a95732f9846d8235
5
5
  SHA512:
6
- metadata.gz: 897b8238b912834f20aca44818ebed91a912027c5221d2b16f45bbf04f641064b24c69f0026127c689bd5ac33aa671642bbaefe672bbd0ae470fbab657b5c359
7
- data.tar.gz: 68b67bec508c65df6f2dcc96e1cd62b8dc6c7a00e81ea682ffa2e1c34af7057d849388cc6ab8adbd5d61d2265cdad19b8438ca646b17955b02635b6e244da3c4
6
+ metadata.gz: e58ae67469d132145d679934d8c00efd2f1a299f0b53d2af1bc956e2058afa55b4f07d198d397d5e2c491d58147759fe67b4075016700146deacf7c297caf45e
7
+ data.tar.gz: 0236d9b19ccb73a0778f06166bfd82e1211149fc0ac2d9ab4283c1863c4a40fb0e25922a051f01cbc438c24243a853a4137af6339dbc887cfa0d872d153c8bc7
data/README.md CHANGED
@@ -95,6 +95,26 @@ $(document).ajaxComplete ->
95
95
  Twine.refresh()
96
96
  ```
97
97
 
98
+ ## Twine.register
99
+
100
+ Registers a function to be called when the currently binding node and its children have finished binding.
101
+
102
+ Example:
103
+
104
+ ```coffee
105
+ class Foo
106
+ constructor: ->
107
+ Twine.register ->
108
+ console.log("done")
109
+
110
+ # other methods needed in the context
111
+ # ...
112
+ ```
113
+
114
+ ```html
115
+ <div context='bar' define='{bar: new Foo}'></div>
116
+ ```
117
+
98
118
  ## Contributing
99
119
 
100
120
  1. Clone the repo: `git clone git@github.com:Shopify/twine`
@@ -15,6 +15,8 @@ keypathRegex = /^[a-z]\w*(\.[a-z]\w*|\[\d+\])*$/i # Tests if a string is a pure
15
15
  refreshQueued = false
16
16
  rootNode = null
17
17
 
18
+ currentBindingCallbacks = null
19
+
18
20
  # Cleans up all existing bindings and sets the root node and context.
19
21
  Twine.reset = (newContext, node = document.documentElement) ->
20
22
  for key of elements
@@ -32,7 +34,14 @@ Twine.reset = (newContext, node = document.documentElement) ->
32
34
  Twine.bind = (node = rootNode, context = Twine.context(node)) ->
33
35
  bind(context, node, true)
34
36
 
37
+ Twine.register = (callback) ->
38
+ if currentBindingCallbacks
39
+ currentBindingCallbacks.push(callback)
40
+ else
41
+ callback()
42
+
35
43
  bind = (context, node, forceSaveContext) ->
44
+ currentBindingCallbacks = []
36
45
  if node.bindingId
37
46
  Twine.unbind(node)
38
47
 
@@ -52,6 +61,8 @@ bind = (context, node, forceSaveContext) ->
52
61
  (element ?= {}).childContext = context
53
62
  elements[node.bindingId ?= ++nodeCount] = element
54
63
 
64
+ callbacks = currentBindingCallbacks
65
+
55
66
  # IE and Safari don't support node.children for DocumentFragment and SVGElement nodes.
56
67
  # If the element supports children we continue to traverse the children, otherwise
57
68
  # we stop traversing that subtree.
@@ -59,6 +70,11 @@ bind = (context, node, forceSaveContext) ->
59
70
  # As a result, Twine are unsupported within DocumentFragment and SVGElement nodes.
60
71
  bind(context, childNode) for childNode in (node.children || [])
61
72
  Twine.count = nodeCount
73
+
74
+ for callback in callbacks || []
75
+ callback()
76
+ currentBindingCallbacks = null
77
+
62
78
  Twine
63
79
 
64
80
  # Queues a refresh of the DOM, batching up calls for the current synchronous block.
@@ -1,3 +1,3 @@
1
1
  module TwineRails
2
- VERSION = '0.0.10'
2
+ VERSION = '0.0.11'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twine-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Li
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-12-02 00:00:00.000000000 Z
13
+ date: 2015-01-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: coffee-rails