snabberb 1.0.0 → 1.4.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
  SHA256:
3
- metadata.gz: 5a1c844a2e4053181db278aeee2cd4c97ccd982e783c6ffb2b6df48391fd0a7b
4
- data.tar.gz: 53e6e1712e779c653f7d429048f44e77cb9be525619d5276ee441e00e4ccb92b
3
+ metadata.gz: fac9682f069db40fa6111733624b4d188c8a655c3ff443602f4f225834bae4e1
4
+ data.tar.gz: ff200014a25e5a8e10f8368089157e60364b569d6c68e134a86898878d7760bd
5
5
  SHA512:
6
- metadata.gz: 4a0c84b3558683af920af98de8e341f0bb6c7d1a2320d1354a8cea76d7a73b83f6eaf99aae9115b5150e5f0643579b24c4b89076188756b04342dbae237db4a3
7
- data.tar.gz: 1a3b2bed264e1443d38368dea5b05d93abe6f0a1544c0f88b25357d2c9e042456493418779721b250c0f52db5b9e3bccb33099ecb926ff92e409fbf7423bb8fe
6
+ metadata.gz: 1b5950417e303d98edf30ce07580d9cfb8b0ca1b44bba35c7cdf4c0b8faa973f07a900f75f4e2c3a975e19e36a652664cce151b7172379a99fd7b2b90bbbaa2e
7
+ data.tar.gz: 5e7ba5a3d961ff6c83723a37023d308a62b9b0ce97512602d321447c6bc68e7f1214a29da119625d281682bcd42b8be721936165b6fb29622feda3335e024a7e
data/.gitignore CHANGED
@@ -10,6 +10,7 @@
10
10
  /examples/roda/build
11
11
  /node_modules/
12
12
  package-lock.json
13
+ package.json
13
14
 
14
15
  .DS_STORE
15
16
  *.swp
data/.rubocop.yml CHANGED
@@ -1,6 +1,9 @@
1
1
  Layout/FirstArrayElementIndentation:
2
2
  Enabled: false
3
3
 
4
+ Layout/LineLength:
5
+ Max: 120
6
+
4
7
  Metrics/AbcSize:
5
8
  Enabled: false
6
9
 
@@ -16,9 +19,6 @@ Metrics/CyclomaticComplexity:
16
19
  Metrics/PerceivedComplexity:
17
20
  Enabled: False
18
21
 
19
- Metrics/LineLength:
20
- Max: 120
21
-
22
22
  Metrics/MethodLength:
23
23
  Enabled: false
24
24
 
@@ -44,4 +44,6 @@ Style/TrailingCommaInHashLiteral:
44
44
  Enabled: false
45
45
 
46
46
  AllCops:
47
- TargetRubyVersion: 2.3
47
+ NewCops: enable
48
+ TargetRubyVersion: 2.5
49
+ SuggestExtensions: false
data/build.js CHANGED
@@ -1,14 +1,14 @@
1
1
  // browserify build.js -p esmify -s snabbdom > opal/vendor/snabbdom.js
2
- import { init } from './node_modules/snabbdom/build/package/init'
3
- import { h } from './node_modules/snabbdom/build/package/h'
4
- import { toVNode } from './node_modules/snabbdom/build/package/tovnode'
2
+ import { init } from './node_modules/snabbdom/build/init'
3
+ import { h } from './node_modules/snabbdom/build/h'
4
+ import { toVNode } from './node_modules/snabbdom/build/tovnode'
5
5
 
6
- import { attributesModule } from './node_modules/snabbdom/build/package/modules/attributes'
7
- import { classModule } from './node_modules/snabbdom/build/package/modules/class'
8
- import { datasetModule } from './node_modules/snabbdom/build/package/modules/dataset'
9
- import { eventListenersModule } from './node_modules/snabbdom/build/package/modules/eventlisteners'
10
- import { propsModule } from './node_modules/snabbdom/build/package/modules/props'
11
- import { styleModule } from './node_modules/snabbdom/build/package/modules/style'
6
+ import { attributesModule } from './node_modules/snabbdom/build/modules/attributes'
7
+ import { classModule } from './node_modules/snabbdom/build/modules/class'
8
+ import { datasetModule } from './node_modules/snabbdom/build/modules/dataset'
9
+ import { eventListenersModule } from './node_modules/snabbdom/build/modules/eventlisteners'
10
+ import { propsModule } from './node_modules/snabbdom/build/modules/props'
11
+ import { styleModule } from './node_modules/snabbdom/build/modules/style'
12
12
 
13
13
  module.exports.init = init
14
14
  module.exports.h = h
@@ -2,7 +2,7 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- gem 'c_lexer'
6
5
  gem 'opal'
7
6
  gem 'rack'
8
7
  gem 'snabberb', path: '../..'
8
+ gem 'webrick'
@@ -1,31 +1,29 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- snabberb (0.5.0)
5
- opal (~> 1.0)
4
+ snabberb (1.3.1)
5
+ opal (~> 1.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- ast (2.4.1)
11
- c_lexer (2.6.4.1.1)
12
- ast (~> 2.4.0)
13
- parser (= 2.6.4.1)
14
- opal (1.0.3)
10
+ ast (2.4.2)
11
+ opal (1.1.1)
15
12
  ast (>= 2.3.0)
16
- parser (~> 2.6)
17
- parser (2.6.4.1)
18
- ast (~> 2.4.0)
13
+ parser (~> 3.0)
14
+ parser (3.0.1.0)
15
+ ast (~> 2.4.1)
19
16
  rack (2.2.3)
17
+ webrick (1.7.0)
20
18
 
21
19
  PLATFORMS
22
20
  ruby
23
21
 
24
22
  DEPENDENCIES
25
- c_lexer
26
23
  opal
27
24
  rack
28
25
  snabberb!
26
+ webrick
29
27
 
30
28
  BUNDLED WITH
31
- 2.1.4
29
+ 2.2.3
@@ -2,10 +2,10 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- gem 'c_lexer'
6
5
  gem 'execjs'
7
6
  gem 'mini_racer'
8
7
  gem 'opal'
9
8
  gem 'opal-sprockets'
10
9
  gem 'roda'
11
10
  gem 'snabberb', path: '../..'
11
+ gem 'webrick'
@@ -1,49 +1,47 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- snabberb (0.5.0)
5
- opal (~> 1.0)
4
+ snabberb (1.3.1)
5
+ opal (~> 1.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- ast (2.4.1)
11
- c_lexer (2.6.4.1.1)
12
- ast (~> 2.4.0)
13
- parser (= 2.6.4.1)
14
- concurrent-ruby (1.1.7)
10
+ ast (2.4.2)
11
+ concurrent-ruby (1.1.8)
15
12
  execjs (2.7.0)
16
- libv8 (8.4.255.0)
17
- mini_racer (0.3.1)
18
- libv8 (~> 8.4.255)
19
- opal (1.0.3)
13
+ libv8-node (15.14.0.0)
14
+ mini_racer (0.4.0)
15
+ libv8-node (~> 15.14.0.0)
16
+ opal (1.1.1)
20
17
  ast (>= 2.3.0)
21
- parser (~> 2.6)
22
- opal-sprockets (0.4.9.1.0.3.7)
23
- opal (~> 1.0.0)
24
- sprockets (~> 3.7)
18
+ parser (~> 3.0)
19
+ opal-sprockets (1.0.0)
20
+ opal (>= 1.0, < 1.2)
21
+ sprockets (~> 4.0)
25
22
  tilt (>= 1.4)
26
- parser (2.6.4.1)
27
- ast (~> 2.4.0)
23
+ parser (3.0.1.0)
24
+ ast (~> 2.4.1)
28
25
  rack (2.2.3)
29
- roda (3.36.0)
26
+ roda (3.43.1)
30
27
  rack
31
- sprockets (3.7.2)
28
+ sprockets (4.0.2)
32
29
  concurrent-ruby (~> 1.0)
33
30
  rack (> 1, < 3)
34
31
  tilt (2.0.10)
32
+ webrick (1.7.0)
35
33
 
36
34
  PLATFORMS
37
35
  ruby
38
36
 
39
37
  DEPENDENCIES
40
- c_lexer
41
38
  execjs
42
39
  mini_racer
43
40
  opal
44
41
  opal-sprockets
45
42
  roda
46
43
  snabberb!
44
+ webrick
47
45
 
48
46
  BUNDLED WITH
49
- 2.1.4
47
+ 2.2.3
data/lib/snabberb.rb CHANGED
@@ -55,11 +55,11 @@ module Snabberb
55
55
 
56
56
  def self.prerender_script(layout, application, application_id, javascript_include_tags: '', **needs)
57
57
  needs = wrap(needs)
58
- attach_func = wrap_s("Opal.$$.#{application}.$attach(\"#{application_id}\", #{needs})")
58
+ attach_func = wrap_s("Opal.#{application}.$attach(\"#{application_id}\", #{needs})")
59
59
 
60
60
  <<~JS
61
- Opal.$$.#{layout}.$html(Opal.hash({
62
- application: Opal.$$.#{application}.$new(null, #{needs}).$render(),
61
+ Opal.#{layout}.$html(Opal.hash({
62
+ application: Opal.#{application}.$new(null, #{needs}).$render(),
63
63
  javascript_include_tags: '#{javascript_include_tags.gsub("\n", '')}',
64
64
  attach_func: #{attach_func}
65
65
  }))
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Snabberb
4
- VERSION = '1.0.0'
4
+ VERSION = '1.4.0'
5
5
  end
@@ -87,6 +87,17 @@ module Snabberb
87
87
  ])
88
88
  }
89
89
 
90
+ %x{
91
+ const PATCHER = snabbdom.init([
92
+ snabbdom.attributesModule,
93
+ snabbdom.classModule,
94
+ snabbdom.datasetModule,
95
+ snabbdom.eventListenersModule,
96
+ snabbdom.propsModule,
97
+ snabbdom.styleModule,
98
+ ])
99
+ }
100
+
90
101
  # You can define needs in each component. They are automatically set as instance variables
91
102
  #
92
103
  # For example:
@@ -109,7 +120,7 @@ module Snabberb
109
120
  def self.attach(container, **passed_needs)
110
121
  component = new(nil, passed_needs)
111
122
  component.node = `document.getElementById(#{container})`
112
- component.update
123
+ component.update!
113
124
  end
114
125
 
115
126
  # Render the component as an HTML string using snabbdom-to-html.
@@ -177,16 +188,8 @@ module Snabberb
177
188
  request_ids.shift
178
189
  return unless request_ids.empty?
179
190
 
180
- @@patcher ||= %x{snabbdom.init([
181
- snabbdom.attributesModule,
182
- snabbdom.classModule,
183
- snabbdom.datasetModule,
184
- snabbdom.eventListenersModule,
185
- snabbdom.propsModule,
186
- snabbdom.styleModule,
187
- ])}
188
191
  node = @root.render
189
- @@patcher.call(@root.node, node)
192
+ `PATCHER(#{root.node}, #{node})`
190
193
  @root.node = node
191
194
  end
192
195
 
@@ -242,10 +245,9 @@ module Snabberb
242
245
  let id = ''
243
246
  const classes = {}
244
247
  const parts = sel.split(".")
245
- const last = parts.length - 1
246
248
 
247
249
  parts.forEach((part, index) => {
248
- if (index == last) {
250
+ if (index == 0) {
249
251
  part = part.split('#')
250
252
  if (part.length > 1) id = part[1]
251
253
  part = part[0]
@@ -1,23 +1,23 @@
1
1
  (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.snabbdom = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2
2
  "use strict";
3
3
 
4
- var _init = require("./node_modules/snabbdom/build/package/init");
4
+ var _init = require("./node_modules/snabbdom/build/init");
5
5
 
6
- var _h = require("./node_modules/snabbdom/build/package/h");
6
+ var _h = require("./node_modules/snabbdom/build/h");
7
7
 
8
- var _tovnode = require("./node_modules/snabbdom/build/package/tovnode");
8
+ var _tovnode = require("./node_modules/snabbdom/build/tovnode");
9
9
 
10
- var _attributes = require("./node_modules/snabbdom/build/package/modules/attributes");
10
+ var _attributes = require("./node_modules/snabbdom/build/modules/attributes");
11
11
 
12
- var _class = require("./node_modules/snabbdom/build/package/modules/class");
12
+ var _class = require("./node_modules/snabbdom/build/modules/class");
13
13
 
14
- var _dataset = require("./node_modules/snabbdom/build/package/modules/dataset");
14
+ var _dataset = require("./node_modules/snabbdom/build/modules/dataset");
15
15
 
16
- var _eventlisteners = require("./node_modules/snabbdom/build/package/modules/eventlisteners");
16
+ var _eventlisteners = require("./node_modules/snabbdom/build/modules/eventlisteners");
17
17
 
18
- var _props = require("./node_modules/snabbdom/build/package/modules/props");
18
+ var _props = require("./node_modules/snabbdom/build/modules/props");
19
19
 
20
- var _style = require("./node_modules/snabbdom/build/package/modules/style");
20
+ var _style = require("./node_modules/snabbdom/build/modules/style");
21
21
 
22
22
  // browserify build.js -p esmify -s snabbdom > opal/vendor/snabbdom.js
23
23
  module.exports.init = _init.init;
@@ -30,7 +30,7 @@ module.exports.eventListenersModule = _eventlisteners.eventListenersModule;
30
30
  module.exports.propsModule = _props.propsModule;
31
31
  module.exports.styleModule = _style.styleModule;
32
32
 
33
- },{"./node_modules/snabbdom/build/package/h":2,"./node_modules/snabbdom/build/package/init":4,"./node_modules/snabbdom/build/package/modules/attributes":6,"./node_modules/snabbdom/build/package/modules/class":7,"./node_modules/snabbdom/build/package/modules/dataset":8,"./node_modules/snabbdom/build/package/modules/eventlisteners":9,"./node_modules/snabbdom/build/package/modules/props":10,"./node_modules/snabbdom/build/package/modules/style":11,"./node_modules/snabbdom/build/package/tovnode":12}],2:[function(require,module,exports){
33
+ },{"./node_modules/snabbdom/build/h":2,"./node_modules/snabbdom/build/init":4,"./node_modules/snabbdom/build/modules/attributes":6,"./node_modules/snabbdom/build/modules/class":7,"./node_modules/snabbdom/build/modules/dataset":8,"./node_modules/snabbdom/build/modules/eventlisteners":9,"./node_modules/snabbdom/build/modules/props":10,"./node_modules/snabbdom/build/modules/style":11,"./node_modules/snabbdom/build/tovnode":12}],2:[function(require,module,exports){
34
34
  "use strict";
35
35
 
36
36
  Object.defineProperty(exports, "__esModule", {
@@ -38,18 +38,18 @@ Object.defineProperty(exports, "__esModule", {
38
38
  });
39
39
  exports.h = h;
40
40
 
41
- var _vnode = require("./vnode.js");
41
+ var _vnode = require("./vnode");
42
42
 
43
- var is = _interopRequireWildcard(require("./is.js"));
43
+ var is = _interopRequireWildcard(require("./is"));
44
44
 
45
45
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
46
46
 
47
47
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
48
48
 
49
49
  function addNS(data, children, sel) {
50
- data.ns = 'http://www.w3.org/2000/svg';
50
+ data.ns = "http://www.w3.org/2000/svg";
51
51
 
52
- if (sel !== 'foreignObject' && children !== undefined) {
52
+ if (sel !== "foreignObject" && children !== undefined) {
53
53
  for (let i = 0; i < children.length; ++i) {
54
54
  const childData = children[i].data;
55
55
 
@@ -61,10 +61,10 @@ function addNS(data, children, sel) {
61
61
  }
62
62
 
63
63
  function h(sel, b, c) {
64
- var data = {};
65
- var children;
66
- var text;
67
- var i;
64
+ let data = {};
65
+ let children;
66
+ let text;
67
+ let i;
68
68
 
69
69
  if (c !== undefined) {
70
70
  if (b !== null) {
@@ -96,16 +96,14 @@ function h(sel, b, c) {
96
96
  }
97
97
  }
98
98
 
99
- if (sel[0] === 's' && sel[1] === 'v' && sel[2] === 'g' && (sel.length === 3 || sel[3] === '.' || sel[3] === '#')) {
99
+ if (sel[0] === "s" && sel[1] === "v" && sel[2] === "g" && (sel.length === 3 || sel[3] === "." || sel[3] === "#")) {
100
100
  addNS(data, children, sel);
101
101
  }
102
102
 
103
103
  return (0, _vnode.vnode)(sel, data, children, text, undefined);
104
104
  }
105
105
 
106
- ;
107
-
108
- },{"./is.js":5,"./vnode.js":13}],3:[function(require,module,exports){
106
+ },{"./is":5,"./vnode":13}],3:[function(require,module,exports){
109
107
  "use strict";
110
108
 
111
109
  Object.defineProperty(exports, "__esModule", {
@@ -113,12 +111,12 @@ Object.defineProperty(exports, "__esModule", {
113
111
  });
114
112
  exports.htmlDomApi = void 0;
115
113
 
116
- function createElement(tagName) {
117
- return document.createElement(tagName);
114
+ function createElement(tagName, options) {
115
+ return document.createElement(tagName, options);
118
116
  }
119
117
 
120
- function createElementNS(namespaceURI, qualifiedName) {
121
- return document.createElementNS(namespaceURI, qualifiedName);
118
+ function createElementNS(namespaceURI, qualifiedName, options) {
119
+ return document.createElementNS(namespaceURI, qualifiedName, options);
122
120
  }
123
121
 
124
122
  function createTextNode(text) {
@@ -200,11 +198,11 @@ Object.defineProperty(exports, "__esModule", {
200
198
  });
201
199
  exports.init = init;
202
200
 
203
- var _vnode = require("./vnode.js");
201
+ var _vnode = require("./vnode");
204
202
 
205
- var is = _interopRequireWildcard(require("./is.js"));
203
+ var is = _interopRequireWildcard(require("./is"));
206
204
 
207
- var _htmldomapi = require("./htmldomapi.js");
205
+ var _htmldomapi = require("./htmldomapi");
208
206
 
209
207
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
210
208
 
@@ -218,10 +216,15 @@ function isDef(s) {
218
216
  return s !== undefined;
219
217
  }
220
218
 
221
- const emptyNode = (0, _vnode.vnode)('', {}, [], undefined, undefined);
219
+ const emptyNode = (0, _vnode.vnode)("", {}, [], undefined, undefined);
222
220
 
223
221
  function sameVnode(vnode1, vnode2) {
224
- return vnode1.key === vnode2.key && vnode1.sel === vnode2.sel;
222
+ var _a, _b;
223
+
224
+ const isSameKey = vnode1.key === vnode2.key;
225
+ const isSameIs = ((_a = vnode1.data) === null || _a === void 0 ? void 0 : _a.is) === ((_b = vnode2.data) === null || _b === void 0 ? void 0 : _b.is);
226
+ const isSameSel = vnode1.sel === vnode2.sel;
227
+ return isSameSel && isSameKey && isSameIs;
225
228
  }
226
229
 
227
230
  function isVnode(vnode) {
@@ -244,7 +247,7 @@ function createKeyToOldIdx(children, beginIdx, endIdx) {
244
247
  return map;
245
248
  }
246
249
 
247
- const hooks = ['create', 'update', 'remove', 'destroy', 'pre', 'post'];
250
+ const hooks = ["create", "update", "remove", "destroy", "pre", "post"];
248
251
 
249
252
  function init(modules, domApi) {
250
253
  let i;
@@ -272,8 +275,8 @@ function init(modules, domApi) {
272
275
  }
273
276
 
274
277
  function emptyNodeAt(elm) {
275
- const id = elm.id ? '#' + elm.id : '';
276
- const c = elm.className ? '.' + elm.className.split(' ').join('.') : '';
278
+ const id = elm.id ? "#" + elm.id : "";
279
+ const c = elm.className ? "." + elm.className.split(" ").join(".") : "";
277
280
  return (0, _vnode.vnode)(api.tagName(elm).toLowerCase() + id + c, {}, [], undefined, elm);
278
281
  }
279
282
 
@@ -304,22 +307,22 @@ function init(modules, domApi) {
304
307
  const children = vnode.children;
305
308
  const sel = vnode.sel;
306
309
 
307
- if (sel === '!') {
310
+ if (sel === "!") {
308
311
  if (isUndef(vnode.text)) {
309
- vnode.text = '';
312
+ vnode.text = "";
310
313
  }
311
314
 
312
315
  vnode.elm = api.createComment(vnode.text);
313
316
  } else if (sel !== undefined) {
314
317
  // Parse selector
315
- const hashIdx = sel.indexOf('#');
316
- const dotIdx = sel.indexOf('.', hashIdx);
318
+ const hashIdx = sel.indexOf("#");
319
+ const dotIdx = sel.indexOf(".", hashIdx);
317
320
  const hash = hashIdx > 0 ? hashIdx : sel.length;
318
321
  const dot = dotIdx > 0 ? dotIdx : sel.length;
319
322
  const tag = hashIdx !== -1 || dotIdx !== -1 ? sel.slice(0, Math.min(hash, dot)) : sel;
320
- const elm = vnode.elm = isDef(data) && isDef(i = data.ns) ? api.createElementNS(i, tag) : api.createElement(tag);
321
- if (hash < dot) elm.setAttribute('id', sel.slice(hash + 1, dot));
322
- if (dotIdx > 0) elm.setAttribute('class', sel.slice(dot + 1).replace(/\./g, ' '));
323
+ const elm = vnode.elm = isDef(data) && isDef(i = data.ns) ? api.createElementNS(i, tag, data) : api.createElement(tag, data);
324
+ if (hash < dot) elm.setAttribute("id", sel.slice(hash + 1, dot));
325
+ if (dotIdx > 0) elm.setAttribute("class", sel.slice(dot + 1).replace(/\./g, " "));
323
326
 
324
327
  for (i = 0; i < cbs.create.length; ++i) cbs.create[i](emptyNode, vnode);
325
328
 
@@ -375,7 +378,7 @@ function init(modules, domApi) {
375
378
  for (let j = 0; j < vnode.children.length; ++j) {
376
379
  const child = vnode.children[j];
377
380
 
378
- if (child != null && typeof child !== 'string') {
381
+ if (child != null && typeof child !== "string") {
379
382
  invokeDestroyHook(child);
380
383
  }
381
384
  }
@@ -513,12 +516,12 @@ function init(modules, domApi) {
513
516
  if (isDef(oldCh) && isDef(ch)) {
514
517
  if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue);
515
518
  } else if (isDef(ch)) {
516
- if (isDef(oldVnode.text)) api.setTextContent(elm, '');
519
+ if (isDef(oldVnode.text)) api.setTextContent(elm, "");
517
520
  addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
518
521
  } else if (isDef(oldCh)) {
519
522
  removeVnodes(elm, oldCh, 0, oldCh.length - 1);
520
523
  } else if (isDef(oldVnode.text)) {
521
- api.setTextContent(elm, '');
524
+ api.setTextContent(elm, "");
522
525
  }
523
526
  } else if (oldVnode.text !== vnode.text) {
524
527
  if (isDef(oldCh)) {
@@ -564,7 +567,7 @@ function init(modules, domApi) {
564
567
  };
565
568
  }
566
569
 
567
- },{"./htmldomapi.js":3,"./is.js":5,"./vnode.js":13}],5:[function(require,module,exports){
570
+ },{"./htmldomapi":3,"./is":5,"./vnode":13}],5:[function(require,module,exports){
568
571
  "use strict";
569
572
 
570
573
  Object.defineProperty(exports, "__esModule", {
@@ -576,7 +579,7 @@ const array = Array.isArray;
576
579
  exports.array = array;
577
580
 
578
581
  function primitive(s) {
579
- return typeof s === 'string' || typeof s === 'number';
582
+ return typeof s === "string" || typeof s === "number";
580
583
  }
581
584
 
582
585
  },{}],6:[function(require,module,exports){
@@ -586,16 +589,16 @@ Object.defineProperty(exports, "__esModule", {
586
589
  value: true
587
590
  });
588
591
  exports.attributesModule = void 0;
589
- const xlinkNS = 'http://www.w3.org/1999/xlink';
590
- const xmlNS = 'http://www.w3.org/XML/1998/namespace';
592
+ const xlinkNS = "http://www.w3.org/1999/xlink";
593
+ const xmlNS = "http://www.w3.org/XML/1998/namespace";
591
594
  const colonChar = 58;
592
595
  const xChar = 120;
593
596
 
594
597
  function updateAttrs(oldVnode, vnode) {
595
- var key;
596
- var elm = vnode.elm;
597
- var oldAttrs = oldVnode.data.attrs;
598
- var attrs = vnode.data.attrs;
598
+ let key;
599
+ const elm = vnode.elm;
600
+ let oldAttrs = oldVnode.data.attrs;
601
+ let attrs = vnode.data.attrs;
599
602
  if (!oldAttrs && !attrs) return;
600
603
  if (oldAttrs === attrs) return;
601
604
  oldAttrs = oldAttrs || {};
@@ -607,7 +610,7 @@ function updateAttrs(oldVnode, vnode) {
607
610
 
608
611
  if (old !== cur) {
609
612
  if (cur === true) {
610
- elm.setAttribute(key, '');
613
+ elm.setAttribute(key, "");
611
614
  } else if (cur === false) {
612
615
  elm.removeAttribute(key);
613
616
  } else {
@@ -651,11 +654,11 @@ Object.defineProperty(exports, "__esModule", {
651
654
  exports.classModule = void 0;
652
655
 
653
656
  function updateClass(oldVnode, vnode) {
654
- var cur;
655
- var name;
656
- var elm = vnode.elm;
657
- var oldClass = oldVnode.data.class;
658
- var klass = vnode.data.class;
657
+ let cur;
658
+ let name;
659
+ const elm = vnode.elm;
660
+ let oldClass = oldVnode.data.class;
661
+ let klass = vnode.data.class;
659
662
  if (!oldClass && !klass) return;
660
663
  if (oldClass === klass) return;
661
664
  oldClass = oldClass || {};
@@ -672,7 +675,7 @@ function updateClass(oldVnode, vnode) {
672
675
  cur = klass[name];
673
676
 
674
677
  if (cur !== oldClass[name]) {
675
- elm.classList[cur ? 'add' : 'remove'](name);
678
+ elm.classList[cur ? "add" : "remove"](name);
676
679
  }
677
680
  }
678
681
  }
@@ -710,7 +713,7 @@ function updateDataset(oldVnode, vnode) {
710
713
  delete d[key];
711
714
  }
712
715
  } else {
713
- elm.removeAttribute('data-' + key.replace(CAPS_REGEX, '-$&').toLowerCase());
716
+ elm.removeAttribute("data-" + key.replace(CAPS_REGEX, "-$&").toLowerCase());
714
717
  }
715
718
  }
716
719
  }
@@ -720,7 +723,7 @@ function updateDataset(oldVnode, vnode) {
720
723
  if (d) {
721
724
  d[key] = dataset[key];
722
725
  } else {
723
- elm.setAttribute('data-' + key.replace(CAPS_REGEX, '-$&').toLowerCase(), dataset[key]);
726
+ elm.setAttribute("data-" + key.replace(CAPS_REGEX, "-$&").toLowerCase(), dataset[key]);
724
727
  }
725
728
  }
726
729
  }
@@ -741,20 +744,20 @@ Object.defineProperty(exports, "__esModule", {
741
744
  exports.eventListenersModule = void 0;
742
745
 
743
746
  function invokeHandler(handler, vnode, event) {
744
- if (typeof handler === 'function') {
747
+ if (typeof handler === "function") {
745
748
  // call function handler
746
749
  handler.call(vnode, event, vnode);
747
- } else if (typeof handler === 'object') {
750
+ } else if (typeof handler === "object") {
748
751
  // call multiple handlers
749
- for (var i = 0; i < handler.length; i++) {
752
+ for (let i = 0; i < handler.length; i++) {
750
753
  invokeHandler(handler[i], vnode, event);
751
754
  }
752
755
  }
753
756
  }
754
757
 
755
758
  function handleEvent(event, vnode) {
756
- var name = event.type;
757
- var on = vnode.data.on; // call event handler(s) if exists
759
+ const name = event.type;
760
+ const on = vnode.data.on; // call event handler(s) if exists
758
761
 
759
762
  if (on && on[name]) {
760
763
  invokeHandler(on[name], vnode, event);
@@ -768,12 +771,12 @@ function createListener() {
768
771
  }
769
772
 
770
773
  function updateEventListeners(oldVnode, vnode) {
771
- var oldOn = oldVnode.data.on;
772
- var oldListener = oldVnode.listener;
773
- var oldElm = oldVnode.elm;
774
- var on = vnode && vnode.data.on;
775
- var elm = vnode && vnode.elm;
776
- var name; // optimization for reused immutable handlers
774
+ const oldOn = oldVnode.data.on;
775
+ const oldListener = oldVnode.listener;
776
+ const oldElm = oldVnode.elm;
777
+ const on = vnode && vnode.data.on;
778
+ const elm = vnode && vnode.elm;
779
+ let name; // optimization for reused immutable handlers
777
780
 
778
781
  if (oldOn === on) {
779
782
  return;
@@ -800,7 +803,7 @@ function updateEventListeners(oldVnode, vnode) {
800
803
 
801
804
  if (on) {
802
805
  // reuse existing listener or create new
803
- var listener = vnode.listener = oldVnode.listener || createListener(); // update vnode for listener
806
+ const listener = vnode.listener = oldVnode.listener || createListener(); // update vnode for listener
804
807
 
805
808
  listener.vnode = vnode; // if element changed or added we add all needed listeners unconditionally
806
809
 
@@ -836,12 +839,12 @@ Object.defineProperty(exports, "__esModule", {
836
839
  exports.propsModule = void 0;
837
840
 
838
841
  function updateProps(oldVnode, vnode) {
839
- var key;
840
- var cur;
841
- var old;
842
- var elm = vnode.elm;
843
- var oldProps = oldVnode.data.props;
844
- var props = vnode.data.props;
842
+ let key;
843
+ let cur;
844
+ let old;
845
+ const elm = vnode.elm;
846
+ let oldProps = oldVnode.data.props;
847
+ let props = vnode.data.props;
845
848
  if (!oldProps && !props) return;
846
849
  if (oldProps === props) return;
847
850
  oldProps = oldProps || {};
@@ -851,7 +854,7 @@ function updateProps(oldVnode, vnode) {
851
854
  cur = props[key];
852
855
  old = oldProps[key];
853
856
 
854
- if (old !== cur && (key !== 'value' || elm[key] !== cur)) {
857
+ if (old !== cur && (key !== "value" || elm[key] !== cur)) {
855
858
  elm[key] = cur;
856
859
  }
857
860
  }
@@ -871,15 +874,15 @@ Object.defineProperty(exports, "__esModule", {
871
874
  });
872
875
  exports.styleModule = void 0;
873
876
  // Bindig `requestAnimationFrame` like this fixes a bug in IE/Edge. See #360 and #409.
874
- var raf = typeof window !== 'undefined' && window.requestAnimationFrame.bind(window) || setTimeout;
877
+ const raf = typeof window !== "undefined" && window.requestAnimationFrame.bind(window) || setTimeout;
875
878
 
876
- var nextFrame = function (fn) {
879
+ const nextFrame = function (fn) {
877
880
  raf(function () {
878
881
  raf(fn);
879
882
  });
880
883
  };
881
884
 
882
- var reflowForced = false;
885
+ let reflowForced = false;
883
886
 
884
887
  function setNextFrame(obj, prop, val) {
885
888
  nextFrame(function () {
@@ -888,23 +891,23 @@ function setNextFrame(obj, prop, val) {
888
891
  }
889
892
 
890
893
  function updateStyle(oldVnode, vnode) {
891
- var cur;
892
- var name;
893
- var elm = vnode.elm;
894
- var oldStyle = oldVnode.data.style;
895
- var style = vnode.data.style;
894
+ let cur;
895
+ let name;
896
+ const elm = vnode.elm;
897
+ let oldStyle = oldVnode.data.style;
898
+ let style = vnode.data.style;
896
899
  if (!oldStyle && !style) return;
897
900
  if (oldStyle === style) return;
898
901
  oldStyle = oldStyle || {};
899
902
  style = style || {};
900
- var oldHasDel = ('delayed' in oldStyle);
903
+ const oldHasDel = ("delayed" in oldStyle);
901
904
 
902
905
  for (name in oldStyle) {
903
906
  if (!style[name]) {
904
- if (name[0] === '-' && name[1] === '-') {
907
+ if (name[0] === "-" && name[1] === "-") {
905
908
  elm.style.removeProperty(name);
906
909
  } else {
907
- elm.style[name] = '';
910
+ elm.style[name] = "";
908
911
  }
909
912
  }
910
913
  }
@@ -912,7 +915,7 @@ function updateStyle(oldVnode, vnode) {
912
915
  for (name in style) {
913
916
  cur = style[name];
914
917
 
915
- if (name === 'delayed' && style.delayed) {
918
+ if (name === "delayed" && style.delayed) {
916
919
  for (const name2 in style.delayed) {
917
920
  cur = style.delayed[name2];
918
921
 
@@ -920,8 +923,8 @@ function updateStyle(oldVnode, vnode) {
920
923
  setNextFrame(elm.style, name2, cur);
921
924
  }
922
925
  }
923
- } else if (name !== 'remove' && cur !== oldStyle[name]) {
924
- if (name[0] === '-' && name[1] === '-') {
926
+ } else if (name !== "remove" && cur !== oldStyle[name]) {
927
+ if (name[0] === "-" && name[1] === "-") {
925
928
  elm.style.setProperty(name, cur);
926
929
  } else {
927
930
  elm.style[name] = cur;
@@ -931,10 +934,10 @@ function updateStyle(oldVnode, vnode) {
931
934
  }
932
935
 
933
936
  function applyDestroyStyle(vnode) {
934
- var style;
935
- var name;
936
- var elm = vnode.elm;
937
- var s = vnode.data.style;
937
+ let style;
938
+ let name;
939
+ const elm = vnode.elm;
940
+ const s = vnode.data.style;
938
941
  if (!s || !(style = s.destroy)) return;
939
942
 
940
943
  for (name in style) {
@@ -943,7 +946,7 @@ function applyDestroyStyle(vnode) {
943
946
  }
944
947
 
945
948
  function applyRemoveStyle(vnode, rm) {
946
- var s = vnode.data.style;
949
+ const s = vnode.data.style;
947
950
 
948
951
  if (!s || !s.remove) {
949
952
  rm();
@@ -956,27 +959,26 @@ function applyRemoveStyle(vnode, rm) {
956
959
  reflowForced = true;
957
960
  }
958
961
 
959
- var name;
960
- var elm = vnode.elm;
961
- var i = 0;
962
- var compStyle;
963
- var style = s.remove;
964
- var amount = 0;
965
- var applied = [];
962
+ let name;
963
+ const elm = vnode.elm;
964
+ let i = 0;
965
+ const style = s.remove;
966
+ let amount = 0;
967
+ const applied = [];
966
968
 
967
969
  for (name in style) {
968
970
  applied.push(name);
969
971
  elm.style[name] = style[name];
970
972
  }
971
973
 
972
- compStyle = getComputedStyle(elm);
973
- var props = compStyle['transition-property'].split(', ');
974
+ const compStyle = getComputedStyle(elm);
975
+ const props = compStyle["transition-property"].split(", ");
974
976
 
975
977
  for (; i < props.length; ++i) {
976
978
  if (applied.indexOf(props[i]) !== -1) amount++;
977
979
  }
978
980
 
979
- elm.addEventListener('transitionend', function (ev) {
981
+ elm.addEventListener("transitionend", function (ev) {
980
982
  if (ev.target === elm) --amount;
981
983
  if (amount === 0) rm();
982
984
  });
@@ -1003,18 +1005,18 @@ Object.defineProperty(exports, "__esModule", {
1003
1005
  });
1004
1006
  exports.toVNode = toVNode;
1005
1007
 
1006
- var _vnode = require("./vnode.js");
1008
+ var _vnode = require("./vnode");
1007
1009
 
1008
- var _htmldomapi = require("./htmldomapi.js");
1010
+ var _htmldomapi = require("./htmldomapi");
1009
1011
 
1010
1012
  function toVNode(node, domApi) {
1011
1013
  const api = domApi !== undefined ? domApi : _htmldomapi.htmlDomApi;
1012
1014
  let text;
1013
1015
 
1014
1016
  if (api.isElement(node)) {
1015
- const id = node.id ? '#' + node.id : '';
1016
- const cn = node.getAttribute('class');
1017
- const c = cn ? '.' + cn.split(' ').join('.') : '';
1017
+ const id = node.id ? "#" + node.id : "";
1018
+ const cn = node.getAttribute("class");
1019
+ const c = cn ? "." + cn.split(" ").join(".") : "";
1018
1020
  const sel = api.tagName(node).toLowerCase() + id + c;
1019
1021
  const attrs = {};
1020
1022
  const children = [];
@@ -1026,7 +1028,7 @@ function toVNode(node, domApi) {
1026
1028
  for (i = 0, n = elmAttrs.length; i < n; i++) {
1027
1029
  name = elmAttrs[i].nodeName;
1028
1030
 
1029
- if (name !== 'id' && name !== 'class') {
1031
+ if (name !== "id" && name !== "class") {
1030
1032
  attrs[name] = elmAttrs[i].nodeValue;
1031
1033
  }
1032
1034
  }
@@ -1043,13 +1045,13 @@ function toVNode(node, domApi) {
1043
1045
  return (0, _vnode.vnode)(undefined, undefined, undefined, text, node);
1044
1046
  } else if (api.isComment(node)) {
1045
1047
  text = api.getTextContent(node);
1046
- return (0, _vnode.vnode)('!', {}, [], text, node);
1048
+ return (0, _vnode.vnode)("!", {}, [], text, node);
1047
1049
  } else {
1048
- return (0, _vnode.vnode)('', {}, [], undefined, node);
1050
+ return (0, _vnode.vnode)("", {}, [], undefined, node);
1049
1051
  }
1050
1052
  }
1051
1053
 
1052
- },{"./htmldomapi.js":3,"./vnode.js":13}],13:[function(require,module,exports){
1054
+ },{"./htmldomapi":3,"./vnode":13}],13:[function(require,module,exports){
1053
1055
  "use strict";
1054
1056
 
1055
1057
  Object.defineProperty(exports, "__esModule", {
data/snabberb.gemspec CHANGED
@@ -25,12 +25,11 @@ Gem::Specification.new do |spec|
25
25
  spec.bindir = 'exe'
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = %w[lib opal]
28
- spec.required_ruby_version = '>= 2.3'
28
+ spec.required_ruby_version = '>= 2.5'
29
29
 
30
- spec.add_dependency 'opal', '~> 1.0'
30
+ spec.add_dependency 'opal', '~> 1.1'
31
31
 
32
32
  spec.add_development_dependency 'bundler'
33
- spec.add_development_dependency 'c_lexer'
34
33
  spec.add_development_dependency 'execjs'
35
34
  spec.add_development_dependency 'rake'
36
35
  spec.add_development_dependency 'rspec'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snabberb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Mao
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-14 00:00:00.000000000 Z
11
+ date: 2021-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '1.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: c_lexer
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: execjs
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -161,14 +147,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
161
147
  requirements:
162
148
  - - ">="
163
149
  - !ruby/object:Gem::Version
164
- version: '2.3'
150
+ version: '2.5'
165
151
  required_rubygems_version: !ruby/object:Gem::Requirement
166
152
  requirements:
167
153
  - - ">="
168
154
  - !ruby/object:Gem::Version
169
155
  version: '0'
170
156
  requirements: []
171
- rubygems_version: 3.1.2
157
+ rubygems_version: 3.2.3
172
158
  signing_key:
173
159
  specification_version: 4
174
160
  summary: A simple Opal view framework based on Snabbdom.