snabberb 0.2.1 → 0.2.2

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
  SHA256:
3
- metadata.gz: 98ff77b3a36c5ca9051b8daed1c6498da9ce011240cd5fe869969a1dbee957ec
4
- data.tar.gz: 4dc1ed366b54af762a35bc206b3dbf55f2b8110a6fab8341dea9ec59862b808f
3
+ metadata.gz: a6a868a7ec1133bc5e3617bde205e2f0a84041aa2ce6f97269e2fddafeb8497f
4
+ data.tar.gz: 92cf990366dea913a45f51154152e81d250574470664015547d71cb7f1f953f8
5
5
  SHA512:
6
- metadata.gz: f67e569452ffeb5df152569141de8711fda3819ea7c67d4757f71b27864f6bfa743b9feb5bd0103f873743fab6b85899043c73c885b3fd5db3c1def1cdad5f00
7
- data.tar.gz: 32e7c025a1bb9fcb4d9ef3e7b9adeadab45db078e6d2f3930e5e4bd30a4efa0067f20ceebc6ca4835860be9249c321f4f0987d9b36e0f04a9d84daa58e441cfb
6
+ metadata.gz: fee9ee7329921aa01e1f98f3db5c4d00e17450234753cb97dca55ffc932eb5223f7cc64fe4f856104741e0bea6524f3fec2de080521fd0c72123c346493558d9
7
+ data.tar.gz: 10356451c19e97f22922256fd24f9e6fdbd5ec6247056cfdc4e5eed3bd07fb5d0a9ebd36063ff827ac1a203df15183948734b0847997786eb6d067032e24f2ba
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /examples/roda/public
10
+ /examples/roda/build
10
11
 
11
12
  .DS_STORE
12
13
  *.swp
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- snabberb (0.2.0)
4
+ snabberb (0.2.1)
5
5
  opal (~> 1.0)
6
6
 
7
7
  GEM
@@ -11,12 +11,12 @@ GEM
11
11
  c_lexer (2.6.4.1.1)
12
12
  ast (~> 2.4.0)
13
13
  parser (= 2.6.4.1)
14
- opal (1.0.1)
14
+ opal (1.0.2)
15
15
  ast (>= 2.3.0)
16
16
  parser (~> 2.6)
17
17
  parser (2.6.4.1)
18
18
  ast (~> 2.4.0)
19
- rack (2.0.8)
19
+ rack (2.1.0)
20
20
 
21
21
  PLATFORMS
22
22
  ruby
@@ -28,4 +28,4 @@ DEPENDENCIES
28
28
  snabberb!
29
29
 
30
30
  BUNDLED WITH
31
- 2.0.2
31
+ 2.1.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- snabberb (0.2.0)
4
+ snabberb (0.2.1)
5
5
  opal (~> 1.0)
6
6
 
7
7
  GEM
@@ -14,9 +14,9 @@ GEM
14
14
  concurrent-ruby (1.1.5)
15
15
  execjs (2.7.0)
16
16
  libv8 (7.3.492.27.1)
17
- mini_racer (0.2.8)
17
+ mini_racer (0.2.9)
18
18
  libv8 (>= 6.9.411)
19
- opal (1.0.1)
19
+ opal (1.0.2)
20
20
  ast (>= 2.3.0)
21
21
  parser (~> 2.6)
22
22
  opal-sprockets (0.4.8.1.0.3.7)
@@ -25,8 +25,8 @@ GEM
25
25
  tilt (>= 1.4)
26
26
  parser (2.6.4.1)
27
27
  ast (~> 2.4.0)
28
- rack (2.0.8)
29
- roda (3.26.0)
28
+ rack (2.1.0)
29
+ roda (3.27.0)
30
30
  rack
31
31
  sprockets (3.7.2)
32
32
  concurrent-ruby (~> 1.0)
@@ -46,4 +46,4 @@ DEPENDENCIES
46
46
  snabberb!
47
47
 
48
48
  BUNDLED WITH
49
- 2.0.2
49
+ 2.1.2
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'compiled-opal'
4
+ require 'polyfill'
5
+ require 'snabberb'
3
6
  require 'set'
4
7
 
5
8
  class Tile < Snabberb::Component
@@ -18,6 +21,7 @@ class Hex < Snabberb::Component
18
21
 
19
22
  needs :x
20
23
  needs :y
24
+ needs :id
21
25
  needs :selected, default: Set.new, store: true
22
26
 
23
27
  def translation
@@ -50,6 +54,7 @@ class Hex < Snabberb::Component
50
54
  transform: transform,
51
55
  fill: selected ? 'yellow' : 'white',
52
56
  stroke: 'black',
57
+ id: @id,
53
58
  },
54
59
  style: { cursor: 'pointer' },
55
60
  on: { click: onclick }
@@ -66,9 +71,14 @@ class Map < Snabberb::Component
66
71
  def render
67
72
  hexes = @size_x.times.flat_map do |x|
68
73
  @size_y.times.map do |y|
69
- h(Hex, x: y.even? ? x + 1 : x, y: x.even? ? y + 1 : y)
74
+ row = y
75
+ column = x
76
+
77
+ next nil if (row.even? && column.even?) || (row.odd? && column.odd?)
78
+
79
+ h(Hex, id: "#{row},#{column}", x: x, y: y)
70
80
  end
71
- end
81
+ end.compact
72
82
 
73
83
  container_style = {
74
84
  width: '100%',
@@ -76,9 +86,10 @@ class Map < Snabberb::Component
76
86
  overflow: 'auto',
77
87
  }
78
88
 
89
+ # adding 44 and 21 helps with lower size_x and size_y values
79
90
  svg_style = {
80
- width: "#{@size_x * 50}px",
81
- height: "#{@size_y * 80}px",
91
+ width: "#{44 + (@size_x * 50)}px",
92
+ height: "#{21 + (@size_y * 80)}px",
82
93
  }
83
94
 
84
95
  h(:div, { props: { id: 'map_id' }, style: container_style }, [
@@ -1,2 +1 @@
1
1
  if (typeof setTimeout === 'undefined') { function setTimeout(func) { func() } }
2
- if (typeof OpalLoaded === 'undefined') { OpalLoaded = [] }
File without changes
@@ -2,37 +2,40 @@
2
2
 
3
3
  require 'execjs'
4
4
  require 'opal'
5
- require 'opal/sprockets'
6
5
  require 'roda'
7
- require 'sprockets'
8
6
  require 'snabberb'
7
+ require 'tilt/opal'
9
8
 
10
- LIB_NAME = 'lib.js'
11
- LIB_PATH = "./public/#{LIB_NAME}"
12
- Opal.append_path('app')
13
- File.write(LIB_PATH, Opal::Builder.build('requires')) unless File.file?(LIB_PATH)
9
+ class OpalTemplate < Opal::TiltTemplate
10
+ def evaluate(_scope, _locals)
11
+ builder = Opal::Builder.new(stubs: 'opal')
12
+ builder.append_paths('assets/js')
13
+ builder.append_paths('build')
14
14
 
15
- class App < Roda
16
- plugin :public
15
+ opal_path = 'build/compiled-opal.js'
16
+ File.write(opal_path, Opal::Builder.build('opal')) unless File.exist?(opal_path)
17
17
 
18
- context = ExecJS.compile(File.read(LIB_PATH) + Opal::Builder.build('application').to_s)
18
+ content = builder.build(file).to_s
19
+ map_json = builder.source_map.to_json
20
+ "#{content}\n#{to_data_uri_comment(map_json)}"
21
+ end
22
+
23
+ def to_data_uri_comment(map_json)
24
+ "//# sourceMappingURL=data:application/json;base64,#{Base64.encode64(map_json).delete("\n")}"
25
+ end
26
+ end
19
27
 
20
- environment = Sprockets::Environment.new
21
- Opal.paths.each { |p| environment.append_path(p) }
28
+ Tilt.register 'rb', OpalTemplate
22
29
 
23
- javascript_include_tags = "<script src=#{LIB_NAME}></script>" + Opal::Sprockets.javascript_include_tag(
24
- 'application',
25
- sprockets: environment,
26
- prefix: '/assets',
27
- debug: true,
28
- )
30
+ class App < Roda
31
+ plugin :public
32
+ plugin :assets, js: 'application.rb'
33
+ compile_assets
34
+ context = ExecJS.compile(File.read("#{assets_opts[:compiled_js_path]}.#{assets_opts[:compiled]['js']}.js"))
29
35
 
30
36
  route do |r|
31
37
  r.public
32
-
33
- r.on 'assets' do
34
- r.run environment
35
- end
38
+ r.assets
36
39
 
37
40
  r.root do
38
41
  context.eval(
@@ -40,7 +43,7 @@ class App < Roda
40
43
  'Index',
41
44
  'Map',
42
45
  'map_id',
43
- javascript_include_tags: javascript_include_tags,
46
+ javascript_include_tags: assets(:js),
44
47
  size_x: 30,
45
48
  size_y: 30,
46
49
  )
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Snabberb
4
- VERSION = '0.2.1'
4
+ VERSION = '0.2.2'
5
5
  end
@@ -107,9 +107,9 @@ module Snabberb
107
107
  @root.node = node
108
108
  end
109
109
 
110
- # Store a value and trigger and update.
110
+ # Store a value and trigger and update unless skip is true.
111
111
  # If called with no arguments, return the store object.
112
- def store(key = nil, value = nil)
112
+ def store(key = nil, value = nil, skip: false)
113
113
  return @store if key.nil?
114
114
  raise "Cannot store key '#{key}' since it is not a stored need of #{self.class}." unless stores?(key)
115
115
 
@@ -119,7 +119,7 @@ module Snabberb
119
119
  instance_variable_set(ivar, value)
120
120
  @root.instance_variable_set(ivar, value) if !root? && @root.stores?(key)
121
121
 
122
- update
122
+ update unless skip
123
123
  end
124
124
 
125
125
  def class_needs
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: 0.2.1
4
+ version: 0.2.2
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-01-06 00:00:00.000000000 Z
11
+ date: 2020-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -136,9 +136,9 @@ files:
136
136
  - examples/roda/Gemfile
137
137
  - examples/roda/Gemfile.lock
138
138
  - examples/roda/README.md
139
- - examples/roda/app/application.rb
140
- - examples/roda/app/polyfill.js
141
- - examples/roda/app/requires.rb
139
+ - examples/roda/assets/js/application.rb
140
+ - examples/roda/assets/js/polyfill.js
141
+ - examples/roda/build/.keep
142
142
  - examples/roda/config.ru
143
143
  - examples/roda/roda_example.png
144
144
  - lib/snabberb.rb
@@ -174,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
174
  - !ruby/object:Gem::Version
175
175
  version: '0'
176
176
  requirements: []
177
- rubygems_version: 3.0.3
177
+ rubygems_version: 3.1.2
178
178
  signing_key:
179
179
  specification_version: 4
180
180
  summary: A simple Opal view framework based on Snabbdom.
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'opal'
4
- require 'polyfill'
5
- require 'snabberb'