riotjs-rails 2.0.2 → 2.0.3

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: 25dbc5d0c8f66337b2c05e27e1fbc0a106efd067
4
- data.tar.gz: 98de632f5c9140fe0c4affa20c32defad9353ce0
3
+ metadata.gz: e3afcc6d3f0fb93859997d05e835ee6db0249aa9
4
+ data.tar.gz: 3b5176c3b3a83cb53defd47744450328db97d304
5
5
  SHA512:
6
- metadata.gz: c380b2699ff01e0c7b526c2e167ac1adf6516696f595e09ec6af8ac82d07034e6ad7a3531cc58c38684ead5f35ec857e01c4c409970d531cc0229d5fb9502c4b
7
- data.tar.gz: d46e50e7fa8800fcfa31a1628f3fbc9239315e90d5c8d29da19f80d83102a4a832dcd4308284191948c2e8ffffbfab4e52e1b9b3cd2b74d85c64f84b1422a62b
6
+ metadata.gz: f38b2c14492883d2099e7aa8e6411ea77a9088393e1fb24bafc099d5044072468e052640081994501f31d77bc6bc72a4cff6a0d80e25c64565152017664eb4a6
7
+ data.tar.gz: a22e0f819fcb8620d5be77ce7a0e6f71c8859fa4dd9e8592d9a52b7ac869f60f137d2e9d76781234c5aceca47d0c6e81e36044f1c53cba6561ef141d5887cf87
@@ -0,0 +1,3 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Adam Butler
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,19 @@
1
+ # riotjs-rails <a href="http://badge.fury.io/rb/riotjs-rails"><img src="https://badge.fury.io/rb/riotjs-rails@2x.png" alt="Gem Version" height="18"></a>
2
+
3
+ ### About
4
+
5
+ Rails 3.1+ asset-pipeline gem to provide riot.js
6
+
7
+ ### Setup
8
+
9
+ Have in your Gemfile:
10
+
11
+ gem 'riotjs-rails'
12
+
13
+ And, have in your application.js manifest:
14
+
15
+ //= require riot
16
+
17
+ ## Contributing
18
+
19
+ Contributions are welcome, please follow [GitHub Flow](https://guides.github.com/introduction/flow/index.html)
@@ -0,0 +1,10 @@
1
+ require "riotjs-rails/version"
2
+
3
+ module Riot
4
+ module Rails
5
+ if defined?(::Rails) and Gem::Requirement.new('>= 3.1').satisfied_by?(Gem::Version.new ::Rails.version)
6
+ class Rails::Engine < ::Rails::Engine
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ module Riot
2
+ module Rails
3
+ VERSION = "2.0.3"
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "riotjs-rails/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "riotjs-rails"
7
+ s.version = Riot::Rails::VERSION
8
+ s.authors = ["Adam Butler"]
9
+ s.email = ["adam@lab.io"]
10
+ s.homepage = "https://github.com/adambutler/riotjs-rails"
11
+ s.summary = %q{riot.js asset pipeline provider/wrapper}
12
+ s.description = "A simple asset-pipeline wrapper for riot.js by moot"
13
+ s.license = "MIT"
14
+
15
+ s.rubyforge_project = "riotjs-rails"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ end
@@ -0,0 +1,689 @@
1
+ /* Riot 2.0.2, @license MIT, (c) 2015 Muut Inc. + contributors */
2
+
3
+ ;(function() {
4
+
5
+ var riot = { version: 'v2.0.2' }
6
+
7
+ 'use strict'
8
+
9
+ riot.observable = function(el) {
10
+ var callbacks = {}
11
+
12
+ el.on = function(events, fn) {
13
+ if (typeof fn == 'function') {
14
+ events.replace(/\S+/g, function(name, pos) {
15
+ (callbacks[name] = callbacks[name] || []).push(fn)
16
+ fn.typed = pos > 0
17
+ })
18
+ }
19
+ return el
20
+ }
21
+
22
+ el.off = function(events, fn) {
23
+ if (events == '*') callbacks = {}
24
+ else if (fn) {
25
+ var arr = callbacks[events]
26
+ for (var i = 0, cb; (cb = arr && arr[i]); ++i) {
27
+ if (cb == fn) { arr.splice(i, 1); i-- }
28
+ }
29
+ } else {
30
+ events.replace(/\S+/g, function(name) {
31
+ callbacks[name] = []
32
+ })
33
+ }
34
+ return el
35
+ }
36
+
37
+ // only single event supported
38
+ el.one = function(name, fn) {
39
+ if (fn) fn.one = 1
40
+ return el.on(name, fn)
41
+ }
42
+
43
+ el.trigger = function(name) {
44
+ var args = [].slice.call(arguments, 1),
45
+ fns = callbacks[name] || []
46
+
47
+ for (var i = 0, fn; (fn = fns[i]); ++i) {
48
+ if (!fn.busy) {
49
+ fn.busy = 1
50
+ fn.apply(el, fn.typed ? [name].concat(args) : args)
51
+ if (fn.one) { fns.splice(i, 1); i-- }
52
+ fn.busy = 0
53
+ }
54
+ }
55
+
56
+ return el
57
+ }
58
+
59
+ return el
60
+
61
+ }
62
+ ;(function(riot, evt) {
63
+
64
+ // browsers only
65
+ if (!this.top) return
66
+
67
+ var loc = location,
68
+ fns = riot.observable({}),
69
+ current = hash(),
70
+ win = window
71
+
72
+ function hash() {
73
+ return loc.hash.slice(1)
74
+ }
75
+
76
+ function emit(path) {
77
+ if (path.type) path = hash()
78
+
79
+ if (path != current) {
80
+ fns.trigger.apply(null, ['H'].concat(path.split('/')))
81
+ current = path
82
+ }
83
+ }
84
+
85
+ var r = riot.route = function(arg) {
86
+ // string
87
+ if (arg[0]) {
88
+ loc.hash = arg
89
+ emit(arg)
90
+
91
+ // function
92
+ } else {
93
+ fns.on('H', arg)
94
+ }
95
+ }
96
+
97
+ r.exec = function(fn) {
98
+ fn.apply(null, hash().split('/'))
99
+ }
100
+
101
+ win.addEventListener ? win.addEventListener(evt, emit, false) : win.attachEvent('on' + evt, emit)
102
+
103
+ })(riot, 'hashchange')
104
+ /*
105
+
106
+ //// How it works?
107
+
108
+
109
+ Three ways:
110
+
111
+ 1. Expressions: tmpl('{ value }', data).
112
+ Returns the result of evaluated expression as a raw object.
113
+
114
+ 2. Templates: tmpl('Hi { name } { surname }', data).
115
+ Returns a string with evaluated expressions.
116
+
117
+ 3. Filters: tmpl('{ show: !done, highlight: active }', data).
118
+ Returns a space separated list of trueish keys (mainly
119
+ used for setting html classes), e.g. "show highlight".
120
+
121
+
122
+ // Template examples
123
+
124
+ tmpl('{ title || "Untitled" }', data)
125
+ tmpl('Results are { results ? "ready" : "loading" }', data)
126
+ tmpl('Today is { new Date() }', data)
127
+ tmpl('{ message.length > 140 && "Message is too long" }', data)
128
+ tmpl('This item got { Math.round(rating) } stars', data)
129
+ tmpl('<h1>{ title }</h1>{ body }', data)
130
+
131
+
132
+ // Falsy expressions in templates
133
+
134
+ In templates (as opposed to single expressions) all falsy values
135
+ except zero (undefined/null/false) will default to empty string:
136
+
137
+ tmpl('{ undefined } - { false } - { null } - { 0 }', {})
138
+ // will return: " - - - 0"
139
+
140
+ */
141
+
142
+ riot._tmpl = (function() {
143
+
144
+ var cache = {},
145
+
146
+ // find variable names
147
+ re_vars = /("|').+?[^\\]\1|\.\w*|\w*:|\b(?:this|true|false|null|undefined|new|typeof|Number|String|Object|Array|Math|Date|JSON)\b|([a-z_]\w*)/gi
148
+ // [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ]
149
+ // 1. skip quoted strings: "a b", 'a b', 'a \'b\''
150
+ // 2. skip object properties: .name
151
+ // 3. skip object literals: name:
152
+ // 4. skip reserved words
153
+ // 5. match var name
154
+
155
+ // build a template (or get it from cache), render with data
156
+
157
+ return function(str, data) {
158
+ return str && (cache[str] = cache[str] || tmpl(str))(data)
159
+ }
160
+
161
+
162
+ // create a template instance
163
+
164
+ function tmpl(s, p) {
165
+ p = (s || '{}')
166
+
167
+ // temporarily convert \{ and \} to a non-character
168
+ .replace(/\\{/g, '\uFFF0')
169
+ .replace(/\\}/g, '\uFFF1')
170
+
171
+ // split string to expression and non-expresion parts
172
+ .split(/({[\s\S]*?})/)
173
+
174
+ return new Function('d', 'return ' + (
175
+
176
+ // is it a single expression or a template? i.e. {x} or <b>{x}</b>
177
+ !p[0] && !p[2]
178
+
179
+ // if expression, evaluate it
180
+ ? expr(p[1])
181
+
182
+ // if template, evaluate all expressions in it
183
+ : '[' + p.map(function(s, i) {
184
+
185
+ // is it an expression or a string (every second part is an expression)
186
+ return i % 2
187
+
188
+ // evaluate the expressions
189
+ ? expr(s, 1)
190
+
191
+ // process string parts of the template:
192
+ : '"' + s
193
+
194
+ // preserve new lines
195
+ .replace(/\n/g, '\\n')
196
+
197
+ // escape quotes
198
+ .replace(/"/g, '\\"')
199
+
200
+ + '"'
201
+
202
+ }).join(',') + '].join("")'
203
+ )
204
+
205
+ // bring escaped { and } back
206
+ .replace(/\uFFF0/g, '{')
207
+ .replace(/\uFFF1/g, '}')
208
+
209
+ )
210
+
211
+ }
212
+
213
+
214
+ // parse { ... } expression
215
+
216
+ function expr(s, n) {
217
+ s = s
218
+
219
+ // convert new lines to spaces
220
+ .replace(/\n/g, ' ')
221
+
222
+ // trim whitespace, curly brackets, strip comments
223
+ .replace(/^[{ ]+|[ }]+$|\/\*.+?\*\//g, '')
224
+
225
+ // is it an object literal? i.e. { key : value }
226
+ return /^\s*[\w-"']+ *:/.test(s)
227
+
228
+ // if object literal, return trueish keys
229
+ // e.g.: { show: isOpen(), done: item.done } -> "show done"
230
+ ? '[' + s.replace(/\W*([\w-]+)\W*:([^,]+)/g, function(_, k, v) {
231
+
232
+ // safely execute vars to prevent undefined value errors
233
+ return v.replace(/\w[^,|& ]*/g, function(v) { return wrap(v, n) }) + '?"' + k + '":"",'
234
+
235
+ }) + '].join(" ")'
236
+
237
+ // if js expression, evaluate as javascript
238
+ : wrap(s, n)
239
+
240
+ }
241
+
242
+
243
+ // execute js w/o breaking on errors or undefined vars
244
+
245
+ function wrap(s, nonull) {
246
+ return '(function(v){try{v='
247
+
248
+ // prefix vars (name => data.name)
249
+ + (s.replace(re_vars, function(s, _, v) { return v ? 'd.' + v : s })
250
+
251
+ // break the expression if its empty (resulting in undefined value)
252
+ || 'x')
253
+
254
+ + '}finally{return '
255
+
256
+ // default to empty string for falsy values except zero
257
+ + (nonull ? '!v&&v!==0?"":v' : 'v')
258
+
259
+ + '}}).call(d)'
260
+ }
261
+
262
+ })()
263
+ ;(function(riot, doc) {
264
+
265
+ var tmpl = riot._tmpl,
266
+ all_tags = [],
267
+ tag_impl = {}
268
+
269
+ function each(nodes, fn) {
270
+ for (var i = 0; i < (nodes || []).length; i++) {
271
+ if (fn(nodes[i], i) === false) i--
272
+ }
273
+ }
274
+
275
+ function extend(obj, from) {
276
+ from && Object.keys(from).map(function(key) {
277
+ obj[key] = from[key]
278
+ })
279
+ return obj
280
+ }
281
+
282
+ function diff(arr1, arr2) {
283
+ return arr1.filter(function(el) {
284
+ return arr2.indexOf(el) < 0
285
+ })
286
+ }
287
+
288
+ function walk(dom, fn) {
289
+ dom = fn(dom) === false ? dom.nextSibling : dom.firstChild
290
+
291
+ while (dom) {
292
+ walk(dom, fn)
293
+ dom = dom.nextSibling
294
+ }
295
+ }
296
+
297
+
298
+ function mkdom(tmpl) {
299
+ var el = doc.createElement('div')
300
+ el.innerHTML = tmpl
301
+ return el
302
+ }
303
+
304
+
305
+ function update(expressions, instance) {
306
+
307
+ // allow recalculation of context data
308
+ instance.trigger('update')
309
+
310
+ each(expressions, function(expr) {
311
+ var tag = expr.tag,
312
+ dom = expr.dom
313
+
314
+ function remAttr(name) {
315
+ dom.removeAttribute(name)
316
+ }
317
+
318
+ // loops first: TODO remove from expressions arr
319
+ if (expr.loop) {
320
+ remAttr('each')
321
+ return loop(expr, instance)
322
+ }
323
+
324
+ // custom tag
325
+ if (tag) return tag.update ? tag.update() :
326
+ expr.tag = createTag({ tmpl: tag[0], fn: tag[1], root: dom, parent: instance })
327
+
328
+
329
+ var attr_name = expr.attr,
330
+ value = tmpl(expr.expr, instance)
331
+
332
+ if (value == null) value = ''
333
+
334
+ // no change
335
+ if (expr.value === value) return
336
+ expr.value = value
337
+
338
+
339
+ // text node
340
+ if (!attr_name) return dom.nodeValue = value
341
+
342
+ // attribute
343
+ if (!value && expr.bool || /obj|func/.test(typeof value)) remAttr(attr_name)
344
+
345
+ // event handler
346
+ if (typeof value == 'function') {
347
+ dom[attr_name] = function(e) {
348
+
349
+ // cross browser event fix
350
+ e = e || window.event
351
+ e.which = e.which || e.charCode || e.keyCode
352
+ e.target = e.target || e.srcElement
353
+ e.currentTarget = dom
354
+
355
+ // currently looped item
356
+ e.item = instance.__item || instance
357
+
358
+ // prevent default behaviour (by default)
359
+ if (value.call(instance, e) !== true) {
360
+ e.preventDefault && e.preventDefault()
361
+ e.returnValue = false
362
+ }
363
+
364
+ instance.update()
365
+ }
366
+
367
+ // show / hide / if
368
+ } else if (/^(show|hide|if)$/.test(attr_name)) {
369
+ remAttr(attr_name)
370
+ if (attr_name == 'hide') value = !value
371
+ dom.style.display = value ? '' : 'none'
372
+
373
+ // normal attribute
374
+ } else {
375
+ if (expr.bool) {
376
+ if (!value) return
377
+ value = attr_name
378
+ }
379
+
380
+ dom.setAttribute(attr_name, value)
381
+ }
382
+
383
+ })
384
+
385
+ instance.trigger('updated')
386
+
387
+ }
388
+
389
+ function parse(root) {
390
+
391
+ var named_elements = {},
392
+ expressions = []
393
+
394
+ walk(root, function(dom) {
395
+
396
+ var type = dom.nodeType,
397
+ value = dom.nodeValue
398
+
399
+ function addExpr(value, data) {
400
+ if (value ? value.indexOf('{') >= 0 : data) {
401
+ var expr = { dom: dom, expr: value }
402
+ expressions.push(extend(expr, data || {}))
403
+ }
404
+ }
405
+
406
+ // text node
407
+ if (type == 3 && dom.parentNode.tagName != 'STYLE') {
408
+ addExpr(value)
409
+
410
+ // element
411
+ } else if (type == 1) {
412
+
413
+ // loop?
414
+ value = dom.getAttribute('each')
415
+
416
+ if (value) {
417
+ addExpr(value, { loop: 1 })
418
+ return false
419
+ }
420
+
421
+ // custom tag?
422
+ var tag = tag_impl[dom.tagName.toLowerCase()]
423
+
424
+ // attributes
425
+ each(dom.attributes, function(attr) {
426
+ var name = attr.name,
427
+ value = attr.value
428
+
429
+ // named elements
430
+ if (/^(name|id)$/.test(name)) named_elements[value] = dom
431
+
432
+ // expressions
433
+ if (!tag) {
434
+ var bool = name.split('__')[1]
435
+ addExpr(value, { attr: bool || name, bool: bool })
436
+ if (bool) {
437
+ dom.removeAttribute(name)
438
+ return false
439
+ }
440
+ }
441
+
442
+ })
443
+
444
+ if (tag) addExpr(0, { tag: tag })
445
+
446
+ }
447
+
448
+ })
449
+
450
+ return { expr: expressions, elem: named_elements }
451
+
452
+ }
453
+
454
+
455
+
456
+ // create new custom tag (component)
457
+ function createTag(conf) {
458
+
459
+ var opts = conf.opts || {},
460
+ dom = mkdom(conf.tmpl),
461
+ mountNode = conf.root,
462
+ parent = conf.parent,
463
+ ast = parse(dom),
464
+ tag = { root: mountNode, opts: opts, parent: parent, __item: conf.item },
465
+ attributes = {}
466
+
467
+ // named elements
468
+ extend(tag, ast.elem)
469
+
470
+ // attributes
471
+ each(mountNode.attributes, function(attr) {
472
+ attributes[attr.name] = attr.value
473
+ })
474
+
475
+ function updateOpts() {
476
+ Object.keys(attributes).map(function(name) {
477
+ var val = opts[name] = tmpl(attributes[name], parent || tag)
478
+ if (typeof val == 'object') mountNode.removeAttribute(name)
479
+ })
480
+ }
481
+
482
+ updateOpts()
483
+
484
+ if (!tag.on) {
485
+ riot.observable(tag)
486
+ delete tag.off // off method not needed
487
+ }
488
+
489
+ if (conf.fn) conf.fn.call(tag, opts)
490
+
491
+
492
+ tag.update = function(data, _system) {
493
+
494
+ /*
495
+ If loop is defined on the root of the HTML template
496
+ the original parent is a temporary <div/> by mkdom()
497
+ */
498
+ if (parent && dom && !dom.firstChild) {
499
+ mountNode = parent.root
500
+ dom = null
501
+ }
502
+
503
+ if (_system || doc.body.contains(mountNode)) {
504
+ extend(tag, data)
505
+ extend(tag, tag.__item)
506
+ updateOpts()
507
+ update(ast.expr, tag)
508
+
509
+ // update parent
510
+ !_system && tag.__item && parent.update()
511
+ return true
512
+
513
+ } else {
514
+ tag.trigger('unmount')
515
+ }
516
+
517
+ }
518
+
519
+ tag.update(0, true)
520
+
521
+ // append to root
522
+ while (dom.firstChild) {
523
+ if (conf.before) mountNode.insertBefore(dom.firstChild, conf.before)
524
+ else mountNode.appendChild(dom.firstChild)
525
+ }
526
+
527
+
528
+ tag.trigger('mount')
529
+
530
+ all_tags.push(tag)
531
+
532
+ return tag
533
+ }
534
+
535
+
536
+ function loop(expr, instance) {
537
+
538
+ // initialize once
539
+ if (expr.done) return
540
+ expr.done = true
541
+
542
+ var dom = expr.dom,
543
+ prev = dom.previousSibling,
544
+ root = dom.parentNode,
545
+ template = dom.outerHTML,
546
+ val = expr.expr,
547
+ els = val.split(/\s+in\s+/),
548
+ rendered = [],
549
+ checksum,
550
+ keys
551
+
552
+
553
+ if (els[1]) {
554
+ val = '{ ' + els[1]
555
+ keys = els[0].slice(1).trim().split(/,\s*/)
556
+ }
557
+
558
+ // clean template code
559
+ instance.one('mount', function() {
560
+ var p = dom.parentNode
561
+ if (p) {
562
+ root = p
563
+ root.removeChild(dom)
564
+ }
565
+ })
566
+
567
+ function startPos() {
568
+ return Array.prototype.indexOf.call(root.childNodes, prev) + 1
569
+ }
570
+
571
+ instance.on('updated', function() {
572
+
573
+ var items = tmpl(val, instance)
574
+ is_array = Array.isArray(items)
575
+
576
+ if (is_array) items = items.slice(0)
577
+
578
+ else {
579
+
580
+ if (!items) return // some IE8 issue
581
+
582
+ // detect Object changes
583
+ var testsum = JSON.stringify(items)
584
+ if (testsum == checksum) return
585
+ checksum = testsum
586
+
587
+ items = Object.keys(items).map(function(key, i) {
588
+ var item = {}
589
+ item[keys[0]] = key
590
+ item[keys[1]] = items[key]
591
+ return item
592
+ })
593
+
594
+ }
595
+
596
+ // remove redundant
597
+ diff(rendered, items).map(function(item) {
598
+ var pos = rendered.indexOf(item)
599
+ root.removeChild(root.childNodes[startPos() + pos])
600
+ rendered.splice(pos, 1)
601
+ })
602
+
603
+ // add new
604
+ diff(items, rendered).map(function(item, i) {
605
+ var pos = items.indexOf(item)
606
+
607
+ // string array
608
+ if (keys && !checksum) {
609
+ var obj = {}
610
+ obj[keys[0]] = item
611
+ obj[keys[1]] = i
612
+ item = obj
613
+ }
614
+
615
+ var tag = createTag({
616
+ before: root.childNodes[startPos() + pos],
617
+ parent: instance,
618
+ tmpl: template,
619
+ item: item,
620
+ root: root
621
+ })
622
+
623
+ instance.on('update', function() {
624
+ tag.update(0, true)
625
+ })
626
+
627
+ })
628
+
629
+ // assign rendered
630
+ rendered = items
631
+
632
+ })
633
+
634
+ }
635
+
636
+ riot.tag = function(name, tmpl, fn) {
637
+ fn = fn || noop,
638
+ tag_impl[name] = [tmpl, fn]
639
+ }
640
+
641
+ riot.mountTo = function(node, tagName, opts) {
642
+ var tag = tag_impl[tagName]
643
+ return tag && createTag({ tmpl: tag[0], fn: tag[1], root: node, opts: opts })
644
+ }
645
+
646
+ riot.mount = function(selector, opts) {
647
+ if (selector == '*') selector = Object.keys(tag_impl).join(', ')
648
+
649
+ var instances = []
650
+
651
+ each(doc.querySelectorAll(selector), function(node) {
652
+ if (node.riot) return
653
+
654
+ var tagName = node.tagName.toLowerCase(),
655
+ instance = riot.mountTo(node, tagName, opts)
656
+
657
+ if (instance) {
658
+ instances.push(instance)
659
+ node.riot = 1
660
+ }
661
+ })
662
+
663
+ return instances
664
+ }
665
+
666
+ // update everything
667
+ riot.update = function() {
668
+ return all_tags = all_tags.filter(function(tag) {
669
+ return !!tag.update()
670
+ })
671
+ }
672
+
673
+ })(riot, document)
674
+
675
+
676
+ // support CommonJS
677
+ if (typeof exports === 'object')
678
+ module.exports = riot
679
+
680
+ // support AMD
681
+ else if (typeof define === 'function' && define.amd)
682
+ define(function() { return riot })
683
+
684
+ // support browser
685
+ else
686
+ this.riot = riot
687
+
688
+ })();
689
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riotjs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Butler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-30 00:00:00.000000000 Z
11
+ date: 2016-03-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple asset-pipeline wrapper for riot.js by moot
14
14
  email:
@@ -16,7 +16,16 @@ email:
16
16
  executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
- files: []
19
+ files:
20
+ - ".gitignore"
21
+ - Gemfile
22
+ - LICENSE.md
23
+ - Rakefile
24
+ - Readme.md
25
+ - lib/riotjs-rails.rb
26
+ - lib/riotjs-rails/version.rb
27
+ - riotjs-rails.gemspec
28
+ - vendor/assets/javascripts/riot.js
20
29
  homepage: https://github.com/adambutler/riotjs-rails
21
30
  licenses:
22
31
  - MIT
@@ -42,3 +51,4 @@ signing_key:
42
51
  specification_version: 4
43
52
  summary: riot.js asset pipeline provider/wrapper
44
53
  test_files: []
54
+ has_rdoc: