glimmer-dsl-web 0.0.1 → 0.0.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: 8f25d5b94aa413809d21b46a16bbbe525b3166ff6dc62789942410465795858c
4
- data.tar.gz: 611add41ae0b8db1e9e964be7dbcecc6b046dafac023e109ab9c6e4f51943c24
3
+ metadata.gz: 0da388a6300e3a65d87f0187665ef8e69b5d206d5e4b2f41a87c3bf02c75730f
4
+ data.tar.gz: 576c7d4fd51df187e76bd3024418011c081e97f603bb773aaa52360c2bc3a65b
5
5
  SHA512:
6
- metadata.gz: 8cde325767663eaf70334758888a1c65708b77b41a626f3ad1d990135ebbf8aa424457cf79026d4893a62968b7737661ec5f89cede81f98632a7f69be53e1e59
7
- data.tar.gz: f9d3a94e629ca6eae4663df1e1eb89f5b4f013c225aa1948e7c8acc8420061f9740559dc8a591388720f214646d0a62ab9e5f77265ed34faeb0437c1ea18fb6c
6
+ metadata.gz: 575f405b644a48498aa5bac901d7760a6a635e8d3a11668bb5beeee98e0023f1c92861f0393eca475d293fe411617881258f4decb5e6124288b5b74d3261b810
7
+ data.tar.gz: 882a868936f8bca1794f5b302ed1b28d8adb6b330606008c2738822a4517d1bf9ba3ffa13b36abcb2a8f37a6349397c63e9619ce3562e9c5f93aa59b322f92d5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.2
4
+
5
+ - Rename element `:root` option to `:parent` option
6
+ - Set `body` as parent by default if `:parent` option is not specified for a root element
7
+ - `glimmer-dsl-web/samples/hello/hello_world.rb`
8
+ - Set `class` instead of `id` on generated HTML elements to identify them (e.g. `element-2`).
9
+
3
10
  ## 0.0.1
4
11
 
5
12
  - Render top-level HTML element + attributes under a root parent element by specifying `root: 'css_selector'` option (e.g. `div(root: 'css_selector')`)
data/README.md CHANGED
@@ -1,21 +1,25 @@
1
- # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for Web 0.0.1
1
+ # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for Web 0.0.2 (Early Alpha)
2
2
  ## Ruby in the Browser Web GUI Library
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-web.svg)](http://badge.fury.io/rb/glimmer-dsl-web)
4
4
  [![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
5
5
 
6
6
  This project is inspired-by [Glimmer DSL for Opal](https://github.com/AndyObtiva/glimmer-dsl-opal) and is similar in enabling frontend GUI development with Ruby, but it mainly differs from Glimmer DSL for Opal by adopting a DSL that follows web-like HTML syntax in Ruby (enabling transfer of HTML/CSS/JS skills) instead of adopting a desktop GUI DSL that is webified. Also, it will begin by supporting [Opal Ruby](https://opalrb.com/), but it might grow to support [Ruby WASM](https://github.com/ruby/ruby.wasm) as an alternative to [Opal Ruby](https://opalrb.com/) that could be switched to with a simple configuration change.
7
7
 
8
+ Note that the library is an Early Alpha and its APIs might change frequently until hitting a minor release at least.
9
+
8
10
  ### You can finally live in pure Rubyland on the web!
9
11
 
10
12
  [Glimmer](https://github.com/AndyObtiva/glimmer) DSL for Web is an upcoming **pre-alpha** [gem](https://rubygems.org/gems/glimmer-dsl-web) that enables building web GUI in pure Ruby via [Opal](https://opalrb.com/) on [Rails](https://rubyonrails.org/) (and potentially [Ruby WASM](https://github.com/ruby/ruby.wasm) in the future).
11
13
 
12
- **Hello, World! Sample**
14
+ **Sample**
13
15
 
14
16
  Initial HTML Markup:
15
17
 
16
18
  ```html
19
+ ...
17
20
  <div id="app-container">
18
21
  </div>
22
+ ...
19
23
  ```
20
24
 
21
25
  Glimmer GUI code:
@@ -25,8 +29,8 @@ require 'glimmer-dsl-web'
25
29
 
26
30
  include Glimmer
27
31
 
28
- # This will hook into element #application and then build HTML inside it using Ruby DSL code
29
- div(root: '#app-container') {
32
+ # This will hook into element #app-container and then build HTML inside it using Ruby DSL code
33
+ div(parent: '#app-container') {
30
34
  label(class: 'greeting') {
31
35
  'Hello, World!'
32
36
  }
@@ -36,13 +40,39 @@ div(root: '#app-container') {
36
40
  That produces:
37
41
 
38
42
  ```html
43
+ ...
39
44
  <div id="app-container">
40
- <div root="#app-container" id="element-1" class="element">
41
- <label class="greeting element" id="element-2">
45
+ <div parent="#app-container" class="element element-1">
46
+ <label class="greeting element element-2">
42
47
  Hello, World!
43
48
  </label>
44
49
  </div>
45
50
  </div>
51
+ ...
52
+ ```
53
+
54
+ **Hello, World! Sample**
55
+
56
+ Glimmer GUI code:
57
+
58
+ ```ruby
59
+ require 'glimmer-dsl-web'
60
+
61
+ include Glimmer
62
+
63
+ Document.ready? do
64
+ div {
65
+ 'Hello, World!'
66
+ }.render
67
+ end
68
+ ```
69
+
70
+ That produces the following under `<body></body>`:
71
+
72
+ ```html
73
+ <div parent="body" class="element element-1">
74
+ Hello, World!
75
+ </div>
46
76
  ```
47
77
 
48
78
  **Hello, Button! Sample**
@@ -74,7 +104,7 @@ class HelloButton
74
104
  end
75
105
 
76
106
  markup {
77
- # This will hook into element #application and then build HTML inside it using Ruby DSL code
107
+ # This will hook into element #app-container and then build HTML inside it using Ruby DSL code
78
108
  div(root_css_selector) {
79
109
  text 'Hello, Button!'
80
110
 
@@ -92,7 +122,7 @@ class HelloButton
92
122
  }
93
123
  end
94
124
 
95
- HelloButton.render('#application')
125
+ HelloButton.render('#app-container')
96
126
  ```
97
127
 
98
128
  That produces:
@@ -191,7 +221,7 @@ gem 'opal', '1.4.1'
191
221
  gem 'opal-rails', '2.0.2'
192
222
  gem 'opal-async', '~> 1.4.0'
193
223
  gem 'opal-jquery', '~> 0.4.6'
194
- gem 'glimmer-dsl-web', '~> 0.0.1'
224
+ gem 'glimmer-dsl-web', '~> 0.0.2'
195
225
  gem 'glimmer-dsl-xml', '~> 1.3.1', require: false
196
226
  gem 'glimmer-dsl-css', '~> 1.2.1', require: false
197
227
  ```
@@ -255,8 +285,10 @@ Example to confirm setup is working:
255
285
  Initial HTML Markup:
256
286
 
257
287
  ```html
288
+ ...
258
289
  <div id="app-container">
259
290
  </div>
291
+ ...
260
292
  ```
261
293
 
262
294
  Glimmer GUI code:
@@ -266,8 +298,8 @@ require 'glimmer-dsl-web'
266
298
 
267
299
  include Glimmer
268
300
 
269
- # This will hook into element #application and then build HTML inside it using Ruby DSL code
270
- div(root: '#app-container') {
301
+ # This will hook into element #app-container and then build HTML inside it using Ruby DSL code
302
+ div(parent: '#app-container') {
271
303
  label(class: 'greeting') {
272
304
  'Hello, World!'
273
305
  }
@@ -277,13 +309,15 @@ div(root: '#app-container') {
277
309
  That produces:
278
310
 
279
311
  ```html
312
+ ...
280
313
  <div id="app-container">
281
- <div root="#app-container" id="element-1" class="element">
282
- <label class="greeting element" id="element-2">
314
+ <div parent="#app-container" class="element element-1">
315
+ <label class="greeting element element-2">
283
316
  Hello, World!
284
317
  </label>
285
318
  </div>
286
319
  </div>
320
+ ...
287
321
  ```
288
322
 
289
323
  Start the Rails server:
@@ -330,7 +364,7 @@ gem 'opal', '1.4.1'
330
364
  gem 'opal-rails', '2.0.2'
331
365
  gem 'opal-async', '~> 1.4.0'
332
366
  gem 'opal-jquery', '~> 0.4.6'
333
- gem 'glimmer-dsl-web', '~> 0.0.1'
367
+ gem 'glimmer-dsl-web', '~> 0.0.2'
334
368
  gem 'glimmer-dsl-xml', '~> 1.3.1', require: false
335
369
  gem 'glimmer-dsl-css', '~> 1.2.1', require: false
336
370
  ```
@@ -398,8 +432,10 @@ Example to confirm setup is working:
398
432
  Initial HTML Markup:
399
433
 
400
434
  ```html
435
+ ...
401
436
  <div id="app-container">
402
437
  </div>
438
+ ...
403
439
  ```
404
440
 
405
441
  Glimmer GUI code:
@@ -409,8 +445,8 @@ require 'glimmer-dsl-web'
409
445
 
410
446
  include Glimmer
411
447
 
412
- # This will hook into element #application and then build HTML inside it using Ruby DSL code
413
- div(root: '#app-container') {
448
+ # This will hook into element #app-container and then build HTML inside it using Ruby DSL code
449
+ div(parent: '#app-container') {
414
450
  label(class: 'greeting') {
415
451
  'Hello, World!'
416
452
  }
@@ -420,13 +456,15 @@ div(root: '#app-container') {
420
456
  That produces:
421
457
 
422
458
  ```html
459
+ ...
423
460
  <div id="app-container">
424
- <div root="#app-container" id="element-1" class="element">
425
- <label class="greeting element" id="element-2">
461
+ <div parent="#app-container" class="element element-1">
462
+ <label class="greeting element element-2">
426
463
  Hello, World!
427
464
  </label>
428
465
  </div>
429
466
  </div>
467
+ ...
430
468
  ```
431
469
 
432
470
  Start the Rails server:
@@ -464,13 +502,6 @@ https://github.com/AndyObtiva/sample-glimmer-dsl-web-rails7-app
464
502
 
465
503
  #### Hello, World!
466
504
 
467
- Initial HTML Markup:
468
-
469
- ```html
470
- <div id="app-container">
471
- </div>
472
- ```
473
-
474
505
  Glimmer GUI code:
475
506
 
476
507
  ```ruby
@@ -478,23 +509,18 @@ require 'glimmer-dsl-web'
478
509
 
479
510
  include Glimmer
480
511
 
481
- # This will hook into element #application and then build HTML inside it using Ruby DSL code
482
- div(root: '#application') {
483
- label(class: 'greeting') {
512
+ Document.ready? do
513
+ div {
484
514
  'Hello, World!'
485
- }
486
- }
515
+ }.render
516
+ end
487
517
  ```
488
518
 
489
- That produces:
519
+ That produces the following under `<body></body>`:
490
520
 
491
521
  ```html
492
- <div id="app-container">
493
- <div root="#app-container" id="element-1" class="element">
494
- <label class="greeting element" id="element-2">
495
- Hello, World!
496
- </label>
497
- </div>
522
+ <div parent="body" class="element element-1">
523
+ Hello, World!
498
524
  </div>
499
525
  ```
500
526
 
@@ -527,7 +553,7 @@ class HelloButton
527
553
  end
528
554
 
529
555
  markup {
530
- # This will hook into element #application and then build HTML inside it using Ruby DSL code
556
+ # This will hook into element #app-container and then build HTML inside it using Ruby DSL code
531
557
  div(root_css_selector) {
532
558
  text 'Hello, Button!'
533
559
 
@@ -545,7 +571,7 @@ class HelloButton
545
571
  }
546
572
  end
547
573
 
548
- HelloButton.render('#application')
574
+ HelloButton.render('#app-container')
549
575
  ```
550
576
 
551
577
  That produces:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: glimmer-dsl-web 0.0.1 ruby lib
5
+ # stub: glimmer-dsl-web 0.0.2 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "glimmer-dsl-web".freeze
9
- s.version = "0.0.1".freeze
9
+ s.version = "0.0.2".freeze
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
@@ -9,10 +9,9 @@ module Glimmer
9
9
  include ParentExpression
10
10
 
11
11
  def can_interpret?(parent, keyword, *args, &block)
12
- # TODO automatically pass root as element if not passed instead of rejecting elements without a paraent nor root
12
+ # TODO automatically pass parent option as element if not passed instead of rejecting elements without a paraent nor root
13
13
  # TODO raise a proper error if root is an element that is not found (maybe do this in model)
14
- options = args.last.is_a?(Hash) ? args.last : {}
15
- (parent or options[:root])
14
+ true
16
15
  end
17
16
 
18
17
  def interpret(parent, keyword, *args, &block)
@@ -71,7 +71,7 @@ module Glimmer
71
71
 
72
72
  Event = Struct.new(:widget, keyword_init: true)
73
73
 
74
- attr_reader :keyword, :parent, :args, :options, :path, :children, :enabled, :foreground, :background, :focus, :removed?, :rendered
74
+ attr_reader :keyword, :parent, :args, :options, :children, :enabled, :foreground, :background, :focus, :removed?, :rendered
75
75
  alias rendered? rendered
76
76
 
77
77
  def initialize(keyword, parent, args, block)
@@ -106,7 +106,7 @@ module Glimmer
106
106
 
107
107
  def remove
108
108
  remove_all_listeners
109
- Document.find(path).remove
109
+ dom_element.remove
110
110
  parent&.post_remove_child(self)
111
111
  # children.each(:remove) # TODO enable this safely
112
112
  @removed = true
@@ -128,10 +128,10 @@ module Glimmer
128
128
  end
129
129
  end
130
130
 
131
- def path
132
- "#{parent_path} #{element}##{id}.#{name}"
131
+ # Subclasses can override with their own selector
132
+ def selector
133
+ ".#{element_id}"
133
134
  end
134
- alias widget_path path # pure path without subchildren modifications
135
135
 
136
136
  # Root element representing widget. Must be overridden by subclasses if different from div
137
137
  def element
@@ -190,15 +190,16 @@ module Glimmer
190
190
  end
191
191
  alias setFocus set_focus
192
192
 
193
- def parent_path
194
- @parent&.path
193
+ def parent_selector
194
+ @parent&.selector
195
195
  end
196
196
 
197
197
  def parent_dom_element
198
- if parent_path
199
- Document.find(parent_path)
200
- elsif options[:root]
201
- Document.find(options[:root])
198
+ if parent_selector
199
+ Document.find(parent_selector)
200
+ else
201
+ options[:parent] ||= 'body'
202
+ Document.find(options[:parent])
202
203
  end
203
204
  end
204
205
 
@@ -267,10 +268,9 @@ module Glimmer
267
268
  end
268
269
 
269
270
  def dom
270
- body_id = id
271
- body_class = ([name] + css_classes.to_a).join(' ')
271
+ body_class = ([name, element_id] + css_classes.to_a).join(' ')
272
+ # TODO auto-convert known glimmer attributes like parent to data attributes like data-parent
272
273
  html_options = options.dup
273
- html_options[:id] ||= body_id
274
274
  html_options[:class] ||= ''
275
275
  html_options[:class] = "#{html_options[:class]} #{body_class}".strip
276
276
  @dom ||= html {
@@ -657,20 +657,11 @@ module Glimmer
657
657
  self.class.name.split('::').last.underscore.sub(/_proxy$/, '').gsub('_', '-')
658
658
  end
659
659
 
660
- def id
661
- return options[:id] if options.include?(:id)
662
- @id ||= "#{name}-#{ElementProxy.next_id_number_for(name)}"
663
- end
664
-
665
- # Sets id explicitly. Useful in cases of wanting to maintain a stable id
666
- def id=(value)
667
- # TODO delete this method if it is not needed and isn't accurate in what it does
668
- @id = value
669
- end
670
-
671
- # Subclasses can override with their own selector
672
- def selector
673
- "#{name}##{id}"
660
+ # element ID is used as a css class to identify the element.
661
+ # It is intentionally not set as the actual HTML element ID to let software engineers
662
+ # specify their own IDs if they wanted
663
+ def element_id
664
+ @element_id ||= "element-#{ElementProxy.next_id_number_for(name)}"
674
665
  end
675
666
 
676
667
  def add_css_class(css_class)
@@ -699,7 +690,7 @@ module Glimmer
699
690
 
700
691
  def dom_element
701
692
  # TODO consider making this pick an element in relation to its parent, allowing unhooked dom elements to be built if needed (unhooked to the visible page dom)
702
- Document.find(path)
693
+ Document.find(selector)
703
694
  end
704
695
 
705
696
  # TODO consider adding a default #dom method implementation for the common case, automatically relying on #element and other methods to build the dom html
@@ -718,12 +709,12 @@ module Glimmer
718
709
  element
719
710
  end
720
711
 
721
- def listener_path
722
- path
712
+ def listener_selector
713
+ selector
723
714
  end
724
715
 
725
716
  def listener_dom_element
726
- Document.find(listener_path)
717
+ Document.find(listener_selector)
727
718
  end
728
719
 
729
720
  def observation_requests
@@ -19,11 +19,12 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
+ require 'glimmer-dsl-web'
23
+
22
24
  include Glimmer
23
25
 
24
- shell {
25
- text 'Glimmer'
26
- label {
27
- text 'Hello, World!'
28
- }
29
- }.open
26
+ Document.ready? do
27
+ div {
28
+ 'Hello, World!'
29
+ }.render
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh