snabberb 1.2.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +6 -4
- data/build.js +9 -9
- data/examples/rack/Gemfile +1 -1
- data/examples/rack/Gemfile.lock +10 -12
- data/examples/roda/Gemfile +1 -1
- data/examples/roda/Gemfile.lock +19 -21
- data/lib/snabberb.rb +3 -3
- data/lib/snabberb/version.rb +1 -1
- data/opal/snabberb/component.rb +13 -10
- data/opal/vendor/snabbdom.js +127 -122
- data/snabberb.gemspec +2 -3
- metadata +8 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70e69fb1b2b395905815542166eec657ba3783688bfb09920c8eabf98333cfc6
|
4
|
+
data.tar.gz: dfd15e8472d743388a8506764b5a880369b1cdef9e871e1aa81aa90d24ffd4aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ada4f4fd203e6b08231cd8a13246b768e661fd0c122873fbf2780b21acb19fc5cab634448182cc4baadddb92038297b8dc58d23d180b5480b9f6b1e6ce1f65f1
|
7
|
+
data.tar.gz: a471da0912377d12da6ada8231214c408d26574297b0a15d1301095eadb70943984adec34d16867f6da4fcc6d1c486afb43bb6127cda49aabb946467d31900c1
|
data/.gitignore
CHANGED
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
|
-
|
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/
|
3
|
-
import { h } from './node_modules/snabbdom/build/
|
4
|
-
import { toVNode } from './node_modules/snabbdom/build/
|
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/
|
7
|
-
import { classModule } from './node_modules/snabbdom/build/
|
8
|
-
import { datasetModule } from './node_modules/snabbdom/build/
|
9
|
-
import { eventListenersModule } from './node_modules/snabbdom/build/
|
10
|
-
import { propsModule } from './node_modules/snabbdom/build/
|
11
|
-
import { styleModule } from './node_modules/snabbdom/build/
|
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
|
data/examples/rack/Gemfile
CHANGED
data/examples/rack/Gemfile.lock
CHANGED
@@ -1,31 +1,29 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../..
|
3
3
|
specs:
|
4
|
-
snabberb (1.
|
5
|
-
opal (~> 1.
|
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.
|
11
|
-
|
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 (~>
|
17
|
-
parser (
|
18
|
-
ast (~> 2.4.
|
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.
|
29
|
+
2.2.3
|
data/examples/roda/Gemfile
CHANGED
data/examples/roda/Gemfile.lock
CHANGED
@@ -1,49 +1,47 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../..
|
3
3
|
specs:
|
4
|
-
snabberb (1.
|
5
|
-
opal (~> 1.
|
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.
|
11
|
-
|
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 (
|
17
|
-
mini_racer (0.
|
18
|
-
libv8 (~>
|
19
|
-
opal (1.
|
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 (~>
|
22
|
-
opal-sprockets (
|
23
|
-
opal (
|
24
|
-
sprockets (~>
|
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 (
|
27
|
-
ast (~> 2.4.
|
23
|
+
parser (3.0.1.0)
|
24
|
+
ast (~> 2.4.1)
|
28
25
|
rack (2.2.3)
|
29
|
-
roda (3.
|
26
|
+
roda (3.43.1)
|
30
27
|
rack
|
31
|
-
sprockets (
|
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.
|
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
|
58
|
+
attach_func = wrap_s("Opal.#{application}.$attach(\"#{application_id}\", #{needs})")
|
59
59
|
|
60
60
|
<<~JS
|
61
|
-
Opal
|
62
|
-
application: Opal
|
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
|
}))
|
data/lib/snabberb/version.rb
CHANGED
data/opal/snabberb/component.rb
CHANGED
@@ -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
|
-
|
192
|
+
`PATCHER(#{root.node}, #{node})`
|
190
193
|
@root.node = node
|
191
194
|
end
|
192
195
|
|
data/opal/vendor/snabbdom.js
CHANGED
@@ -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/
|
4
|
+
var _init = require("./node_modules/snabbdom/build/init");
|
5
5
|
|
6
|
-
var _h = require("./node_modules/snabbdom/build/
|
6
|
+
var _h = require("./node_modules/snabbdom/build/h");
|
7
7
|
|
8
|
-
var _tovnode = require("./node_modules/snabbdom/build/
|
8
|
+
var _tovnode = require("./node_modules/snabbdom/build/tovnode");
|
9
9
|
|
10
|
-
var _attributes = require("./node_modules/snabbdom/build/
|
10
|
+
var _attributes = require("./node_modules/snabbdom/build/modules/attributes");
|
11
11
|
|
12
|
-
var _class = require("./node_modules/snabbdom/build/
|
12
|
+
var _class = require("./node_modules/snabbdom/build/modules/class");
|
13
13
|
|
14
|
-
var _dataset = require("./node_modules/snabbdom/build/
|
14
|
+
var _dataset = require("./node_modules/snabbdom/build/modules/dataset");
|
15
15
|
|
16
|
-
var _eventlisteners = require("./node_modules/snabbdom/build/
|
16
|
+
var _eventlisteners = require("./node_modules/snabbdom/build/modules/eventlisteners");
|
17
17
|
|
18
|
-
var _props = require("./node_modules/snabbdom/build/
|
18
|
+
var _props = require("./node_modules/snabbdom/build/modules/props");
|
19
19
|
|
20
|
-
var _style = require("./node_modules/snabbdom/build/
|
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/
|
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
|
41
|
+
var _vnode = require("./vnode");
|
42
42
|
|
43
|
-
var is = _interopRequireWildcard(require("./is
|
43
|
+
var is = _interopRequireWildcard(require("./is"));
|
44
44
|
|
45
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var
|
45
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
46
46
|
|
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; }
|
47
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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 =
|
50
|
+
data.ns = "http://www.w3.org/2000/svg";
|
51
51
|
|
52
|
-
if (sel !==
|
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
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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] ===
|
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,15 +198,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
200
198
|
});
|
201
199
|
exports.init = init;
|
202
200
|
|
203
|
-
var _vnode = require("./vnode
|
201
|
+
var _vnode = require("./vnode");
|
204
202
|
|
205
|
-
var is = _interopRequireWildcard(require("./is
|
203
|
+
var is = _interopRequireWildcard(require("./is"));
|
206
204
|
|
207
|
-
var _htmldomapi = require("./htmldomapi
|
205
|
+
var _htmldomapi = require("./htmldomapi");
|
208
206
|
|
209
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var
|
207
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
210
208
|
|
211
|
-
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; }
|
209
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
|
212
210
|
|
213
211
|
function isUndef(s) {
|
214
212
|
return s === undefined;
|
@@ -218,10 +216,15 @@ function isDef(s) {
|
|
218
216
|
return s !== undefined;
|
219
217
|
}
|
220
218
|
|
221
|
-
const emptyNode = (0, _vnode.vnode)(
|
219
|
+
const emptyNode = (0, _vnode.vnode)("", {}, [], undefined, undefined);
|
222
220
|
|
223
221
|
function sameVnode(vnode1, vnode2) {
|
224
|
-
|
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 = [
|
250
|
+
const hooks = ["create", "update", "remove", "destroy", "pre", "post"];
|
248
251
|
|
249
252
|
function init(modules, domApi) {
|
250
253
|
let i;
|
@@ -272,8 +275,11 @@ function init(modules, domApi) {
|
|
272
275
|
}
|
273
276
|
|
274
277
|
function emptyNodeAt(elm) {
|
275
|
-
const id = elm.id ?
|
276
|
-
|
278
|
+
const id = elm.id ? "#" + elm.id : ""; // elm.className doesn't return a string when elm is an SVG element inside a shadowRoot.
|
279
|
+
// https://stackoverflow.com/questions/29454340/detecting-classname-of-svganimatedstring
|
280
|
+
|
281
|
+
const classes = elm.getAttribute("class");
|
282
|
+
const c = classes ? "." + classes.split(" ").join(".") : "";
|
277
283
|
return (0, _vnode.vnode)(api.tagName(elm).toLowerCase() + id + c, {}, [], undefined, elm);
|
278
284
|
}
|
279
285
|
|
@@ -304,22 +310,22 @@ function init(modules, domApi) {
|
|
304
310
|
const children = vnode.children;
|
305
311
|
const sel = vnode.sel;
|
306
312
|
|
307
|
-
if (sel ===
|
313
|
+
if (sel === "!") {
|
308
314
|
if (isUndef(vnode.text)) {
|
309
|
-
vnode.text =
|
315
|
+
vnode.text = "";
|
310
316
|
}
|
311
317
|
|
312
318
|
vnode.elm = api.createComment(vnode.text);
|
313
319
|
} else if (sel !== undefined) {
|
314
320
|
// Parse selector
|
315
|
-
const hashIdx = sel.indexOf(
|
316
|
-
const dotIdx = sel.indexOf(
|
321
|
+
const hashIdx = sel.indexOf("#");
|
322
|
+
const dotIdx = sel.indexOf(".", hashIdx);
|
317
323
|
const hash = hashIdx > 0 ? hashIdx : sel.length;
|
318
324
|
const dot = dotIdx > 0 ? dotIdx : sel.length;
|
319
325
|
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(
|
322
|
-
if (dotIdx > 0) elm.setAttribute(
|
326
|
+
const elm = vnode.elm = isDef(data) && isDef(i = data.ns) ? api.createElementNS(i, tag, data) : api.createElement(tag, data);
|
327
|
+
if (hash < dot) elm.setAttribute("id", sel.slice(hash + 1, dot));
|
328
|
+
if (dotIdx > 0) elm.setAttribute("class", sel.slice(dot + 1).replace(/\./g, " "));
|
323
329
|
|
324
330
|
for (i = 0; i < cbs.create.length; ++i) cbs.create[i](emptyNode, vnode);
|
325
331
|
|
@@ -375,7 +381,7 @@ function init(modules, domApi) {
|
|
375
381
|
for (let j = 0; j < vnode.children.length; ++j) {
|
376
382
|
const child = vnode.children[j];
|
377
383
|
|
378
|
-
if (child != null && typeof child !==
|
384
|
+
if (child != null && typeof child !== "string") {
|
379
385
|
invokeDestroyHook(child);
|
380
386
|
}
|
381
387
|
}
|
@@ -513,12 +519,12 @@ function init(modules, domApi) {
|
|
513
519
|
if (isDef(oldCh) && isDef(ch)) {
|
514
520
|
if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue);
|
515
521
|
} else if (isDef(ch)) {
|
516
|
-
if (isDef(oldVnode.text)) api.setTextContent(elm,
|
522
|
+
if (isDef(oldVnode.text)) api.setTextContent(elm, "");
|
517
523
|
addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
|
518
524
|
} else if (isDef(oldCh)) {
|
519
525
|
removeVnodes(elm, oldCh, 0, oldCh.length - 1);
|
520
526
|
} else if (isDef(oldVnode.text)) {
|
521
|
-
api.setTextContent(elm,
|
527
|
+
api.setTextContent(elm, "");
|
522
528
|
}
|
523
529
|
} else if (oldVnode.text !== vnode.text) {
|
524
530
|
if (isDef(oldCh)) {
|
@@ -564,7 +570,7 @@ function init(modules, domApi) {
|
|
564
570
|
};
|
565
571
|
}
|
566
572
|
|
567
|
-
},{"./htmldomapi
|
573
|
+
},{"./htmldomapi":3,"./is":5,"./vnode":13}],5:[function(require,module,exports){
|
568
574
|
"use strict";
|
569
575
|
|
570
576
|
Object.defineProperty(exports, "__esModule", {
|
@@ -576,7 +582,7 @@ const array = Array.isArray;
|
|
576
582
|
exports.array = array;
|
577
583
|
|
578
584
|
function primitive(s) {
|
579
|
-
return typeof s ===
|
585
|
+
return typeof s === "string" || typeof s === "number";
|
580
586
|
}
|
581
587
|
|
582
588
|
},{}],6:[function(require,module,exports){
|
@@ -586,16 +592,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
586
592
|
value: true
|
587
593
|
});
|
588
594
|
exports.attributesModule = void 0;
|
589
|
-
const xlinkNS =
|
590
|
-
const xmlNS =
|
595
|
+
const xlinkNS = "http://www.w3.org/1999/xlink";
|
596
|
+
const xmlNS = "http://www.w3.org/XML/1998/namespace";
|
591
597
|
const colonChar = 58;
|
592
598
|
const xChar = 120;
|
593
599
|
|
594
600
|
function updateAttrs(oldVnode, vnode) {
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
601
|
+
let key;
|
602
|
+
const elm = vnode.elm;
|
603
|
+
let oldAttrs = oldVnode.data.attrs;
|
604
|
+
let attrs = vnode.data.attrs;
|
599
605
|
if (!oldAttrs && !attrs) return;
|
600
606
|
if (oldAttrs === attrs) return;
|
601
607
|
oldAttrs = oldAttrs || {};
|
@@ -607,7 +613,7 @@ function updateAttrs(oldVnode, vnode) {
|
|
607
613
|
|
608
614
|
if (old !== cur) {
|
609
615
|
if (cur === true) {
|
610
|
-
elm.setAttribute(key,
|
616
|
+
elm.setAttribute(key, "");
|
611
617
|
} else if (cur === false) {
|
612
618
|
elm.removeAttribute(key);
|
613
619
|
} else {
|
@@ -651,11 +657,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
651
657
|
exports.classModule = void 0;
|
652
658
|
|
653
659
|
function updateClass(oldVnode, vnode) {
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
660
|
+
let cur;
|
661
|
+
let name;
|
662
|
+
const elm = vnode.elm;
|
663
|
+
let oldClass = oldVnode.data.class;
|
664
|
+
let klass = vnode.data.class;
|
659
665
|
if (!oldClass && !klass) return;
|
660
666
|
if (oldClass === klass) return;
|
661
667
|
oldClass = oldClass || {};
|
@@ -672,7 +678,7 @@ function updateClass(oldVnode, vnode) {
|
|
672
678
|
cur = klass[name];
|
673
679
|
|
674
680
|
if (cur !== oldClass[name]) {
|
675
|
-
elm.classList[cur ?
|
681
|
+
elm.classList[cur ? "add" : "remove"](name);
|
676
682
|
}
|
677
683
|
}
|
678
684
|
}
|
@@ -710,7 +716,7 @@ function updateDataset(oldVnode, vnode) {
|
|
710
716
|
delete d[key];
|
711
717
|
}
|
712
718
|
} else {
|
713
|
-
elm.removeAttribute(
|
719
|
+
elm.removeAttribute("data-" + key.replace(CAPS_REGEX, "-$&").toLowerCase());
|
714
720
|
}
|
715
721
|
}
|
716
722
|
}
|
@@ -720,7 +726,7 @@ function updateDataset(oldVnode, vnode) {
|
|
720
726
|
if (d) {
|
721
727
|
d[key] = dataset[key];
|
722
728
|
} else {
|
723
|
-
elm.setAttribute(
|
729
|
+
elm.setAttribute("data-" + key.replace(CAPS_REGEX, "-$&").toLowerCase(), dataset[key]);
|
724
730
|
}
|
725
731
|
}
|
726
732
|
}
|
@@ -741,20 +747,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
741
747
|
exports.eventListenersModule = void 0;
|
742
748
|
|
743
749
|
function invokeHandler(handler, vnode, event) {
|
744
|
-
if (typeof handler ===
|
750
|
+
if (typeof handler === "function") {
|
745
751
|
// call function handler
|
746
752
|
handler.call(vnode, event, vnode);
|
747
|
-
} else if (typeof handler ===
|
753
|
+
} else if (typeof handler === "object") {
|
748
754
|
// call multiple handlers
|
749
|
-
for (
|
755
|
+
for (let i = 0; i < handler.length; i++) {
|
750
756
|
invokeHandler(handler[i], vnode, event);
|
751
757
|
}
|
752
758
|
}
|
753
759
|
}
|
754
760
|
|
755
761
|
function handleEvent(event, vnode) {
|
756
|
-
|
757
|
-
|
762
|
+
const name = event.type;
|
763
|
+
const on = vnode.data.on; // call event handler(s) if exists
|
758
764
|
|
759
765
|
if (on && on[name]) {
|
760
766
|
invokeHandler(on[name], vnode, event);
|
@@ -768,12 +774,12 @@ function createListener() {
|
|
768
774
|
}
|
769
775
|
|
770
776
|
function updateEventListeners(oldVnode, vnode) {
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
+
const oldOn = oldVnode.data.on;
|
778
|
+
const oldListener = oldVnode.listener;
|
779
|
+
const oldElm = oldVnode.elm;
|
780
|
+
const on = vnode && vnode.data.on;
|
781
|
+
const elm = vnode && vnode.elm;
|
782
|
+
let name; // optimization for reused immutable handlers
|
777
783
|
|
778
784
|
if (oldOn === on) {
|
779
785
|
return;
|
@@ -800,7 +806,7 @@ function updateEventListeners(oldVnode, vnode) {
|
|
800
806
|
|
801
807
|
if (on) {
|
802
808
|
// reuse existing listener or create new
|
803
|
-
|
809
|
+
const listener = vnode.listener = oldVnode.listener || createListener(); // update vnode for listener
|
804
810
|
|
805
811
|
listener.vnode = vnode; // if element changed or added we add all needed listeners unconditionally
|
806
812
|
|
@@ -836,12 +842,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
836
842
|
exports.propsModule = void 0;
|
837
843
|
|
838
844
|
function updateProps(oldVnode, vnode) {
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
+
let key;
|
846
|
+
let cur;
|
847
|
+
let old;
|
848
|
+
const elm = vnode.elm;
|
849
|
+
let oldProps = oldVnode.data.props;
|
850
|
+
let props = vnode.data.props;
|
845
851
|
if (!oldProps && !props) return;
|
846
852
|
if (oldProps === props) return;
|
847
853
|
oldProps = oldProps || {};
|
@@ -851,7 +857,7 @@ function updateProps(oldVnode, vnode) {
|
|
851
857
|
cur = props[key];
|
852
858
|
old = oldProps[key];
|
853
859
|
|
854
|
-
if (old !== cur && (key !==
|
860
|
+
if (old !== cur && (key !== "value" || elm[key] !== cur)) {
|
855
861
|
elm[key] = cur;
|
856
862
|
}
|
857
863
|
}
|
@@ -871,15 +877,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
871
877
|
});
|
872
878
|
exports.styleModule = void 0;
|
873
879
|
// Bindig `requestAnimationFrame` like this fixes a bug in IE/Edge. See #360 and #409.
|
874
|
-
|
880
|
+
const raf = typeof window !== "undefined" && window.requestAnimationFrame.bind(window) || setTimeout;
|
875
881
|
|
876
|
-
|
882
|
+
const nextFrame = function (fn) {
|
877
883
|
raf(function () {
|
878
884
|
raf(fn);
|
879
885
|
});
|
880
886
|
};
|
881
887
|
|
882
|
-
|
888
|
+
let reflowForced = false;
|
883
889
|
|
884
890
|
function setNextFrame(obj, prop, val) {
|
885
891
|
nextFrame(function () {
|
@@ -888,23 +894,23 @@ function setNextFrame(obj, prop, val) {
|
|
888
894
|
}
|
889
895
|
|
890
896
|
function updateStyle(oldVnode, vnode) {
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
897
|
+
let cur;
|
898
|
+
let name;
|
899
|
+
const elm = vnode.elm;
|
900
|
+
let oldStyle = oldVnode.data.style;
|
901
|
+
let style = vnode.data.style;
|
896
902
|
if (!oldStyle && !style) return;
|
897
903
|
if (oldStyle === style) return;
|
898
904
|
oldStyle = oldStyle || {};
|
899
905
|
style = style || {};
|
900
|
-
|
906
|
+
const oldHasDel = ("delayed" in oldStyle);
|
901
907
|
|
902
908
|
for (name in oldStyle) {
|
903
909
|
if (!style[name]) {
|
904
|
-
if (name[0] ===
|
910
|
+
if (name[0] === "-" && name[1] === "-") {
|
905
911
|
elm.style.removeProperty(name);
|
906
912
|
} else {
|
907
|
-
elm.style[name] =
|
913
|
+
elm.style[name] = "";
|
908
914
|
}
|
909
915
|
}
|
910
916
|
}
|
@@ -912,7 +918,7 @@ function updateStyle(oldVnode, vnode) {
|
|
912
918
|
for (name in style) {
|
913
919
|
cur = style[name];
|
914
920
|
|
915
|
-
if (name ===
|
921
|
+
if (name === "delayed" && style.delayed) {
|
916
922
|
for (const name2 in style.delayed) {
|
917
923
|
cur = style.delayed[name2];
|
918
924
|
|
@@ -920,8 +926,8 @@ function updateStyle(oldVnode, vnode) {
|
|
920
926
|
setNextFrame(elm.style, name2, cur);
|
921
927
|
}
|
922
928
|
}
|
923
|
-
} else if (name !==
|
924
|
-
if (name[0] ===
|
929
|
+
} else if (name !== "remove" && cur !== oldStyle[name]) {
|
930
|
+
if (name[0] === "-" && name[1] === "-") {
|
925
931
|
elm.style.setProperty(name, cur);
|
926
932
|
} else {
|
927
933
|
elm.style[name] = cur;
|
@@ -931,10 +937,10 @@ function updateStyle(oldVnode, vnode) {
|
|
931
937
|
}
|
932
938
|
|
933
939
|
function applyDestroyStyle(vnode) {
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
940
|
+
let style;
|
941
|
+
let name;
|
942
|
+
const elm = vnode.elm;
|
943
|
+
const s = vnode.data.style;
|
938
944
|
if (!s || !(style = s.destroy)) return;
|
939
945
|
|
940
946
|
for (name in style) {
|
@@ -943,7 +949,7 @@ function applyDestroyStyle(vnode) {
|
|
943
949
|
}
|
944
950
|
|
945
951
|
function applyRemoveStyle(vnode, rm) {
|
946
|
-
|
952
|
+
const s = vnode.data.style;
|
947
953
|
|
948
954
|
if (!s || !s.remove) {
|
949
955
|
rm();
|
@@ -956,27 +962,26 @@ function applyRemoveStyle(vnode, rm) {
|
|
956
962
|
reflowForced = true;
|
957
963
|
}
|
958
964
|
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
var applied = [];
|
965
|
+
let name;
|
966
|
+
const elm = vnode.elm;
|
967
|
+
let i = 0;
|
968
|
+
const style = s.remove;
|
969
|
+
let amount = 0;
|
970
|
+
const applied = [];
|
966
971
|
|
967
972
|
for (name in style) {
|
968
973
|
applied.push(name);
|
969
974
|
elm.style[name] = style[name];
|
970
975
|
}
|
971
976
|
|
972
|
-
compStyle = getComputedStyle(elm);
|
973
|
-
|
977
|
+
const compStyle = getComputedStyle(elm);
|
978
|
+
const props = compStyle["transition-property"].split(", ");
|
974
979
|
|
975
980
|
for (; i < props.length; ++i) {
|
976
981
|
if (applied.indexOf(props[i]) !== -1) amount++;
|
977
982
|
}
|
978
983
|
|
979
|
-
elm.addEventListener(
|
984
|
+
elm.addEventListener("transitionend", function (ev) {
|
980
985
|
if (ev.target === elm) --amount;
|
981
986
|
if (amount === 0) rm();
|
982
987
|
});
|
@@ -1003,18 +1008,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
1003
1008
|
});
|
1004
1009
|
exports.toVNode = toVNode;
|
1005
1010
|
|
1006
|
-
var _vnode = require("./vnode
|
1011
|
+
var _vnode = require("./vnode");
|
1007
1012
|
|
1008
|
-
var _htmldomapi = require("./htmldomapi
|
1013
|
+
var _htmldomapi = require("./htmldomapi");
|
1009
1014
|
|
1010
1015
|
function toVNode(node, domApi) {
|
1011
1016
|
const api = domApi !== undefined ? domApi : _htmldomapi.htmlDomApi;
|
1012
1017
|
let text;
|
1013
1018
|
|
1014
1019
|
if (api.isElement(node)) {
|
1015
|
-
const id = node.id ?
|
1016
|
-
const cn = node.getAttribute(
|
1017
|
-
const c = cn ?
|
1020
|
+
const id = node.id ? "#" + node.id : "";
|
1021
|
+
const cn = node.getAttribute("class");
|
1022
|
+
const c = cn ? "." + cn.split(" ").join(".") : "";
|
1018
1023
|
const sel = api.tagName(node).toLowerCase() + id + c;
|
1019
1024
|
const attrs = {};
|
1020
1025
|
const children = [];
|
@@ -1026,7 +1031,7 @@ function toVNode(node, domApi) {
|
|
1026
1031
|
for (i = 0, n = elmAttrs.length; i < n; i++) {
|
1027
1032
|
name = elmAttrs[i].nodeName;
|
1028
1033
|
|
1029
|
-
if (name !==
|
1034
|
+
if (name !== "id" && name !== "class") {
|
1030
1035
|
attrs[name] = elmAttrs[i].nodeValue;
|
1031
1036
|
}
|
1032
1037
|
}
|
@@ -1043,13 +1048,13 @@ function toVNode(node, domApi) {
|
|
1043
1048
|
return (0, _vnode.vnode)(undefined, undefined, undefined, text, node);
|
1044
1049
|
} else if (api.isComment(node)) {
|
1045
1050
|
text = api.getTextContent(node);
|
1046
|
-
return (0, _vnode.vnode)(
|
1051
|
+
return (0, _vnode.vnode)("!", {}, [], text, node);
|
1047
1052
|
} else {
|
1048
|
-
return (0, _vnode.vnode)(
|
1053
|
+
return (0, _vnode.vnode)("", {}, [], undefined, node);
|
1049
1054
|
}
|
1050
1055
|
}
|
1051
1056
|
|
1052
|
-
},{"./htmldomapi
|
1057
|
+
},{"./htmldomapi":3,"./vnode":13}],13:[function(require,module,exports){
|
1053
1058
|
"use strict";
|
1054
1059
|
|
1055
1060
|
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.
|
28
|
+
spec.required_ruby_version = '>= 2.5'
|
29
29
|
|
30
|
-
spec.add_dependency 'opal', '
|
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,45 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snabberb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.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:
|
11
|
+
date: 2021-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
type: :
|
19
|
+
version: '1.1'
|
20
|
+
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
24
|
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
26
|
+
version: '1.1'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
28
|
+
name: bundler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - ">="
|
@@ -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.
|
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.
|
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.
|