riot_js-rails 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d04e52981c0b23629682d271c8eeff74e501551d
4
- data.tar.gz: d2190c61c536e85c32a24a5c80e378687eaa0eee
3
+ metadata.gz: 8dc280c7260688d2ddb9b3deec40b11123a6690f
4
+ data.tar.gz: 920ceb13004543b2a931b40207ca9bba58d627fa
5
5
  SHA512:
6
- metadata.gz: f1d9ab022d4dc8f462567f80d7b65b8ca1357bf3276cbb0705727ad124f05befd500739b17d4ca75740ce1c8991a619bd77ee53b260f4b0f0db20f27a628e908
7
- data.tar.gz: e0af3d66269f60a0bf42b1e36ee6d90d1b177e02ab46418d3214f5f5f3fa4b745b5730f2809964fa60641c7d1d2ba8377ffa2d39d2896239adb022f22ffd963b
6
+ metadata.gz: 2fc05701c5afdc4b1dc58c4a87642eb6eed11bd0367a0bcc50a35422d4c82c9b541c9ee89a5e23c45c706a0d0213b9c79df062ae64b37db6aadabf4438427573
7
+ data.tar.gz: 007a8b1301a89a1b592ae7166a72e3027162b2cfbe764dbbc5d3073d7f5bd67abbef51b3bf627208f9182879faa3f3028b244417a86cf3393da07abe09df8610
@@ -1,5 +1,5 @@
1
1
  module RiotJs
2
2
  module Rails
3
- VERSION = '0.5.0'
3
+ VERSION = '0.6.0'
4
4
  end
5
5
  end
@@ -1,8 +1,8 @@
1
- /* Riot v2.5.0, @license MIT */
1
+ /* Riot v2.6.1, @license MIT */
2
2
 
3
3
  ;(function(window, undefined) {
4
4
  'use strict';
5
- var riot = { version: 'v2.5.0', settings: {} },
5
+ var riot = { version: 'v2.6.1', settings: {} },
6
6
  // be aware, internal usage
7
7
  // ATTENTION: prefix the global dynamic variables with `__`
8
8
 
@@ -28,6 +28,8 @@ var riot = { version: 'v2.5.0', settings: {} },
28
28
  T_OBJECT = 'object',
29
29
  T_UNDEF = 'undefined',
30
30
  T_FUNCTION = 'function',
31
+ XLINK_NS = 'http://www.w3.org/1999/xlink',
32
+ XLINK_REGEX = /^xlink:(\w+)/,
31
33
  // special native tags that cannot be treated like the others
32
34
  SPECIAL_TAGS_REGEX = /^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?|opt(?:ion|group))$/,
33
35
  RESERVED_WORDS_BLACKLIST = /^(?:_(?:item|id|parent)|update|root|(?:un)?mount|mixin|is(?:Mounted|Loop)|tags|parent|opts|trigger|o(?:n|ff|ne))$/,
@@ -65,11 +67,10 @@ riot.observable = function(el) {
65
67
  * @param {Function} fn - callback
66
68
  */
67
69
  function onEachEvent(e, fn) {
68
- var es = e.split(' '), l = es.length, i = 0, name, indx
70
+ var es = e.split(' '), l = es.length, i = 0
69
71
  for (; i < l; i++) {
70
- name = es[i]
71
- indx = name.indexOf('.')
72
- if (name) fn( ~indx ? name.substring(0, indx) : name, i, ~indx ? name.slice(indx + 1) : null)
72
+ var name = es[i]
73
+ if (name) fn(name, i)
73
74
  }
74
75
  }
75
76
 
@@ -90,10 +91,9 @@ riot.observable = function(el) {
90
91
  value: function(events, fn) {
91
92
  if (typeof fn != 'function') return el
92
93
 
93
- onEachEvent(events, function(name, pos, ns) {
94
+ onEachEvent(events, function(name, pos) {
94
95
  (callbacks[name] = callbacks[name] || []).push(fn)
95
96
  fn.typed = pos > 0
96
- fn.ns = ns
97
97
  })
98
98
 
99
99
  return el
@@ -113,11 +113,11 @@ riot.observable = function(el) {
113
113
  value: function(events, fn) {
114
114
  if (events == '*' && !fn) callbacks = {}
115
115
  else {
116
- onEachEvent(events, function(name, pos, ns) {
117
- if (fn || ns) {
116
+ onEachEvent(events, function(name, pos) {
117
+ if (fn) {
118
118
  var arr = callbacks[name]
119
119
  for (var i = 0, cb; cb = arr && arr[i]; ++i) {
120
- if (cb == fn || ns && cb.ns == ns) arr.splice(i--, 1)
120
+ if (cb == fn) arr.splice(i--, 1)
121
121
  }
122
122
  } else delete callbacks[name]
123
123
  })
@@ -167,14 +167,14 @@ riot.observable = function(el) {
167
167
  args[i] = arguments[i + 1] // skip first argument
168
168
  }
169
169
 
170
- onEachEvent(events, function(name, pos, ns) {
170
+ onEachEvent(events, function(name, pos) {
171
171
 
172
172
  fns = slice.call(callbacks[name] || [], 0)
173
173
 
174
174
  for (var i = 0, fn; fn = fns[i]; ++i) {
175
175
  if (fn.busy) continue
176
176
  fn.busy = 1
177
- if (!ns || fn.ns == ns) fn.apply(el, fn.typed ? [name].concat(args) : args)
177
+ fn.apply(el, fn.typed ? [name].concat(args) : args)
178
178
  if (fns[i] !== fn) { i-- }
179
179
  fn.busy = 0
180
180
  }
@@ -314,7 +314,7 @@ function getPathFromBase(href) {
314
314
 
315
315
  function emit(force) {
316
316
  // the stack is needed for redirections
317
- var isRoot = emitStackLevel == 0
317
+ var isRoot = emitStackLevel == 0, first
318
318
  if (MAX_EMIT_STACK_LEVEL <= emitStackLevel) return
319
319
 
320
320
  emitStackLevel++
@@ -326,10 +326,7 @@ function emit(force) {
326
326
  }
327
327
  })
328
328
  if (isRoot) {
329
- while (emitStack.length) {
330
- emitStack[0]()
331
- emitStack.shift()
332
- }
329
+ while (first = emitStack.shift()) first() // stack increses within this call
333
330
  emitStackLevel = 0
334
331
  }
335
332
  }
@@ -352,13 +349,13 @@ function click(e) {
352
349
  || el.href.indexOf(loc.href.match(RE_ORIGIN)[0]) == -1 // cross origin
353
350
  ) return
354
351
 
355
- if (el.href != loc.href) {
356
- if (
352
+ if (el.href != loc.href
353
+ && (
357
354
  el.href.split('#')[0] == loc.href.split('#')[0] // internal jump
358
- || base != '#' && getPathFromRoot(el.href).indexOf(base) !== 0 // outside of base
355
+ || base[0] != '#' && getPathFromRoot(el.href).indexOf(base) !== 0 // outside of base
356
+ || base[0] == '#' && el.href.split(base)[0] != loc.href.split(base)[0] // outside of #base
359
357
  || !go(getPathFromBase(el.href), el.title || doc.title) // route not found
360
- ) return
361
- }
358
+ )) return
362
359
 
363
360
  e.preventDefault()
364
361
  }
@@ -371,22 +368,20 @@ function click(e) {
371
368
  * @returns {boolean} - route not found flag
372
369
  */
373
370
  function go(path, title, shouldReplace) {
374
- if (hist) { // if a browser
375
- path = base + normalize(path)
376
- title = title || doc.title
377
- // browsers ignores the second parameter `title`
378
- shouldReplace
379
- ? hist.replaceState(null, title, path)
380
- : hist.pushState(null, title, path)
381
- // so we need to set it manually
382
- doc.title = title
383
- routeFound = false
384
- emit()
385
- return routeFound
386
- }
387
-
388
371
  // Server-side usage: directly execute handlers for the path
389
- return central[TRIGGER]('emit', getPathFromBase(path))
372
+ if (!hist) return central[TRIGGER]('emit', getPathFromBase(path))
373
+
374
+ path = base + normalize(path)
375
+ title = title || doc.title
376
+ // browsers ignores the second parameter `title`
377
+ shouldReplace
378
+ ? hist.replaceState(null, title, path)
379
+ : hist.pushState(null, title, path)
380
+ // so we need to set it manually
381
+ doc.title = title
382
+ routeFound = false
383
+ emit()
384
+ return routeFound
390
385
  }
391
386
 
392
387
  /**
@@ -538,7 +533,7 @@ riot.route = route
538
533
 
539
534
  /**
540
535
  * The riot template engine
541
- * @version v2.4.0
536
+ * @version v2.4.1
542
537
  */
543
538
  /**
544
539
  * riot.util.brackets
@@ -562,6 +557,10 @@ var brackets = (function (UNDEF) {
562
557
  /(?:\breturn\s+|(?:[$\w\)\]]|\+\+|--)\s*(\/)(?![*\/]))/.source + '|' +
563
558
  /\/(?=[^*\/])[^[\/\\]*(?:(?:\[(?:\\.|[^\]\\]*)*\]|\\.)[^[\/\\]*)*?(\/)[gim]*/.source,
564
559
 
560
+ UNSUPPORTED = RegExp('[\\' + 'x00-\\x1F<>a-zA-Z0-9\'",;\\\\]'),
561
+
562
+ NEED_ESCAPE = /(?=[[\]()*+?.^$|])/g,
563
+
565
564
  FINDBRACES = {
566
565
  '(': RegExp('([()])|' + S_QBLOCKS, REGLOB),
567
566
  '[': RegExp('([[\\]])|' + S_QBLOCKS, REGLOB),
@@ -602,10 +601,10 @@ var brackets = (function (UNDEF) {
602
601
 
603
602
  var arr = pair.split(' ')
604
603
 
605
- if (arr.length !== 2 || /[\x00-\x1F<>a-zA-Z0-9'",;\\]/.test(pair)) { // eslint-disable-line
604
+ if (arr.length !== 2 || UNSUPPORTED.test(pair)) {
606
605
  throw new Error('Unsupported brackets "' + pair + '"')
607
606
  }
608
- arr = arr.concat(pair.replace(/(?=[[\]()*+?.^$|])/g, '\\').split(' '))
607
+ arr = arr.concat(pair.replace(NEED_ESCAPE, '\\').split(' '))
609
608
 
610
609
  arr[4] = _rewrite(arr[1].length > 1 ? /{[\S\s]*?}/ : _pairs[4], arr)
611
610
  arr[5] = _rewrite(pair.length > 3 ? /\\({|})/g : _pairs[5], arr)
@@ -765,6 +764,9 @@ var tmpl = (function () {
765
764
 
766
765
  _tmpl.loopKeys = brackets.loopKeys
767
766
 
767
+ // istanbul ignore next
768
+ _tmpl.clearCache = function () { _cache = {} }
769
+
768
770
  _tmpl.errorHandler = null
769
771
 
770
772
  function _logErr (err, ctx) {
@@ -784,10 +786,7 @@ var tmpl = (function () {
784
786
 
785
787
  if (expr.slice(0, 11) !== 'try{return ') expr = 'return ' + expr
786
788
 
787
- /* eslint-disable */
788
-
789
- return new Function('E', expr + ';')
790
- /* eslint-enable */
789
+ return new Function('E', expr + ';') // eslint-disable-line no-new-func
791
790
  }
792
791
 
793
792
  var
@@ -907,7 +906,7 @@ var tmpl = (function () {
907
906
  // istanbul ignore next: not both
908
907
  var // eslint-disable-next-line max-len
909
908
  JS_CONTEXT = '"in this?this:' + (typeof window !== 'object' ? 'global' : 'window') + ').',
910
- JS_VARNAME = /[,{][$\w]+:|(^ *|[^$\w\.])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,
909
+ JS_VARNAME = /[,{][$\w]+(?=:)|(^ *|[^$\w\.])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g,
911
910
  JS_NOPROPS = /^(?=(\.[$\w]+))\1(?:[^.[(]|$)/
912
911
 
913
912
  function _wrapExpr (expr, asText, key) {
@@ -947,10 +946,7 @@ var tmpl = (function () {
947
946
  return expr
948
947
  }
949
948
 
950
- // istanbul ignore next: compatibility fix for beta versions
951
- _tmpl.parse = function (s) { return s }
952
-
953
- _tmpl.version = brackets.version = 'v2.4.0'
949
+ _tmpl.version = brackets.version = 'v2.4.1'
954
950
 
955
951
  return _tmpl
956
952
 
@@ -1262,7 +1258,7 @@ function _each(dom, parent, expr) {
1262
1258
  // update the DOM
1263
1259
  if (isVirtual)
1264
1260
  moveVirtual(tag, root, tags[i], dom.childNodes.length)
1265
- else root.insertBefore(tag.root, tags[i].root)
1261
+ else if (tags[i].root.parentNode) root.insertBefore(tag.root, tags[i].root)
1266
1262
  // update the position attribute if it exists
1267
1263
  if (expr.pos)
1268
1264
  tag[expr.pos] = i
@@ -1506,16 +1502,16 @@ function Tag(impl, conf, innerHTML) {
1506
1502
  }
1507
1503
  }
1508
1504
 
1509
- function inheritFromParent () {
1510
- if (!self.parent || !isLoop) return
1511
- each(Object.keys(self.parent), function(k) {
1505
+ function inheritFrom(target) {
1506
+ each(Object.keys(target), function(k) {
1512
1507
  // some properties must be always in sync with the parent tag
1513
1508
  var mustSync = !RESERVED_WORDS_BLACKLIST.test(k) && contains(propsInSyncWithParent, k)
1509
+
1514
1510
  if (typeof self[k] === T_UNDEF || mustSync) {
1515
1511
  // track the property to keep in sync
1516
1512
  // so we can keep it updated
1517
1513
  if (!mustSync) propsInSyncWithParent.push(k)
1518
- self[k] = self.parent[k]
1514
+ self[k] = target[k]
1519
1515
  }
1520
1516
  })
1521
1517
  }
@@ -1531,8 +1527,10 @@ function Tag(impl, conf, innerHTML) {
1531
1527
  // make sure the data passed will not override
1532
1528
  // the component core methods
1533
1529
  data = cleanUpData(data)
1534
- // inherit properties from the parent
1535
- inheritFromParent()
1530
+ // inherit properties from the parent in loop
1531
+ if (isLoop) {
1532
+ inheritFrom(self.parent)
1533
+ }
1536
1534
  // normalize the tag properties in case an item object was initially passed
1537
1535
  if (data && isObject(item)) {
1538
1536
  normalizeData(data)
@@ -1576,11 +1574,21 @@ function Tag(impl, conf, innerHTML) {
1576
1574
  // loop the keys in the function prototype or the all object keys
1577
1575
  each(props, function(key) {
1578
1576
  // bind methods to self
1579
- if (key != 'init' && !self[key])
1577
+ // allow mixins to override other properties/parent mixins
1578
+ if (key != 'init') {
1579
+ // check for getters/setters
1580
+ var descriptor = Object.getOwnPropertyDescriptor(instance, key)
1581
+ var hasGetterSetter = descriptor && (descriptor.get || descriptor.set)
1582
+
1580
1583
  // apply method only if it does not already exist on the instance
1581
- self[key] = isFunction(instance[key]) ?
1582
- instance[key].bind(self) :
1583
- instance[key]
1584
+ if (!self.hasOwnProperty(key) && hasGetterSetter) {
1585
+ Object.defineProperty(self, key, descriptor)
1586
+ } else {
1587
+ self[key] = isFunction(instance[key]) ?
1588
+ instance[key].bind(self) :
1589
+ instance[key]
1590
+ }
1591
+ }
1584
1592
  })
1585
1593
 
1586
1594
  // init method will be called automatically
@@ -1595,11 +1603,17 @@ function Tag(impl, conf, innerHTML) {
1595
1603
 
1596
1604
  // add global mixins
1597
1605
  var globalMixin = riot.mixin(GLOBAL_MIXIN)
1606
+
1598
1607
  if (globalMixin)
1599
1608
  for (var i in globalMixin)
1600
1609
  if (globalMixin.hasOwnProperty(i))
1601
1610
  self.mixin(globalMixin[i])
1602
1611
 
1612
+ // children in loop should inherit from true parent
1613
+ if (self._parent) {
1614
+ inheritFrom(self._parent)
1615
+ }
1616
+
1603
1617
  // initialiation
1604
1618
  if (impl.fn) impl.fn.call(self, opts)
1605
1619
 
@@ -1806,7 +1820,7 @@ function update(expressions, tag) {
1806
1820
  var dom = expr.dom,
1807
1821
  attrName = expr.attr,
1808
1822
  value = tmpl(expr.expr, tag),
1809
- parent = expr.dom.parentNode
1823
+ parent = expr.parent || expr.dom.parentNode
1810
1824
 
1811
1825
  if (expr.bool) {
1812
1826
  value = !!value
@@ -1828,6 +1842,9 @@ function update(expressions, tag) {
1828
1842
  value += ''
1829
1843
  // test for parent avoids error with invalid assignment to nodeValue
1830
1844
  if (parent) {
1845
+ // cache the parent node because somehow it will become null on IE
1846
+ // on the next iteration
1847
+ expr.parent = parent
1831
1848
  if (parent.tagName === 'TEXTAREA') {
1832
1849
  parent.value = value // #1113
1833
1850
  if (!IE_VERSION) dom.nodeValue = value // #1625 IE throws here, nodeValue
@@ -1839,13 +1856,16 @@ function update(expressions, tag) {
1839
1856
 
1840
1857
  // ~~#1612: look for changes in dom.value when updating the value~~
1841
1858
  if (attrName === 'value') {
1842
- dom.value = value
1859
+ if (dom.value !== value) {
1860
+ dom.value = value
1861
+ setAttr(dom, attrName, value)
1862
+ }
1843
1863
  return
1864
+ } else {
1865
+ // remove original attribute
1866
+ remAttr(dom, attrName)
1844
1867
  }
1845
1868
 
1846
- // remove original attribute
1847
- remAttr(dom, attrName)
1848
-
1849
1869
  // event handler
1850
1870
  if (isFunction(value)) {
1851
1871
  setEventHandler(attrName, value, dom, tag)
@@ -2013,13 +2033,17 @@ function getAttr(dom, name) {
2013
2033
  }
2014
2034
 
2015
2035
  /**
2016
- * Set any DOM attribute
2036
+ * Set any DOM/SVG attribute
2017
2037
  * @param { Object } dom - DOM node we want to update
2018
2038
  * @param { String } name - name of the property we want to set
2019
2039
  * @param { String } val - value of the property we want to set
2020
2040
  */
2021
2041
  function setAttr(dom, name, val) {
2022
- dom.setAttribute(name, val)
2042
+ var xlink = XLINK_REGEX.exec(name)
2043
+ if (xlink && xlink[1])
2044
+ dom.setAttributeNS(XLINK_NS, xlink[1], val)
2045
+ else
2046
+ dom.setAttribute(name, val)
2023
2047
  }
2024
2048
 
2025
2049
  /**
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riot_js-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartosz Jaroszewski
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-19 00:00:00.000000000 Z
11
+ date: 2016-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -167,4 +167,3 @@ signing_key:
167
167
  specification_version: 4
168
168
  summary: Muut Riot integration with Rails.
169
169
  test_files: []
170
- has_rdoc: