glimmer-dsl-web 0.1.0 → 0.2.0

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: 5c9bd6a7f085751de551a8eada611f25b6462c32f31019ebc31e296a98a7dbe7
4
- data.tar.gz: cde631c346fddf15d48c52b85643f4f436761b059ccca0a8909cca56fdc7676e
3
+ metadata.gz: 429afe58eb54b98a9aa229faeecbe09ceefb82ebae7e240ef3dd68ce63110164
4
+ data.tar.gz: '03469f3f04757d5b95aab910b1469047e467481aeaf6169ed69a33a8ab900b6f'
5
5
  SHA512:
6
- metadata.gz: 036cbe077a6378e6fb18cf10060074b4a071b20f4293960ded842458069c4dfb5bc041eb909f0b7b3cfbb809f73a41605f2b97f101b338f1ee616e52f00445c3
7
- data.tar.gz: 4441339edfaf2724324e4aa30c19b2afc7e0e9d673add6130882e1c3220e278a1be1d21be126bf9b8aaa7568c62a0c59ecbce9ca2d1103183263ae17deb2d15e
6
+ metadata.gz: 93b2b65475f2609476997bb7139e2078f8851b88e881d123af4298df2f293a8a2537eecf3f697d734d09e0a8d5ad87771b32899873b9161b74f3e5387e86df00
7
+ data.tar.gz: 7a37b8b255486545016a982522a52ee3cf00c8238557d396a874e38da8d5689fda9e8a8b021cb698f380f641e68d341b9b9e2ea10e035692192e534693cfac21
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.2.0
4
+
5
+ - Support `style` element content as Glimmer DSL for CSS syntax (Ruby Programmable CSS) as an alternative to a CSS `String`
6
+
7
+ ## 0.1.1
8
+
9
+ - Upgrade to opal-jquery 0.5.1 (adds `# backtick_javascript: true` where needed to satisfy new Opal requirement)
10
+ - Upgrade to opal-async 1.4.1 (adds `# backtick_javascript: true` where needed to satisfy new Opal requirement)
11
+ - Update setup instructions to NOT disable Hotwire files, to allow running Hotwire/Turbo side by side with Glimmer DSL for Web (but not in the same pages)
12
+
3
13
  ## 0.1.0
4
14
 
5
15
  - Update rendering system to render HTML elements immediately instead of waiting for complete components to be rendered all at once.
data/README.md CHANGED
@@ -1,4 +1,4 @@
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.1.0 (Beta)
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.2.0 (Beta)
2
2
  ## Ruby in the Browser Web GUI Frontend 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)
@@ -131,6 +131,7 @@ Document.ready? do
131
131
 
132
132
  # CSS Styles
133
133
  style {
134
+ # CSS can be included as a String as done below, or as Glimmer DSL for CSS syntax (Ruby code) as done in other samples
134
135
  <<~CSS
135
136
  input {
136
137
  margin: 5px;
@@ -392,15 +393,15 @@ Document.ready? do
392
393
  }
393
394
  }
394
395
 
396
+ # Programmable CSS using Glimmer DSL for CSS
395
397
  style {
396
- <<~CSS
397
- #{address_div.selector} * {
398
- margin: 5px;
399
- }
400
- #{address_div.selector} input, #{address_div.selector} select {
401
- grid-column: 2;
402
- }
403
- CSS
398
+ # `r` is an alias for `rule`, generating a CSS rule
399
+ r("#{address_div.selector} *") {
400
+ margin '5px'
401
+ }
402
+ r("#{address_div.selector} input, #{address_div.selector} select") {
403
+ grid_column '2'
404
+ }
404
405
  }
405
406
  }
406
407
 
@@ -528,20 +529,18 @@ Document.ready? do
528
529
  }
529
530
 
530
531
  style {
531
- <<~CSS
532
- #{address_div.selector} {
533
- margin: 10px 0;
534
- }
535
- #{address_div.selector} * {
536
- margin: 5px;
537
- }
538
- #{address_div.selector} label {
539
- grid-column: 1;
540
- }
541
- #{address_div.selector} input, #{address_div.selector} select {
542
- grid-column: 2;
543
- }
544
- CSS
532
+ r(address_div.selector) {
533
+ margin '10px 0'
534
+ }
535
+ r("#{address_div.selector} *") {
536
+ margin '5px'
537
+ }
538
+ r("#{address_div.selector} label") {
539
+ grid_column '1'
540
+ }
541
+ r("#{address_div.selector} input, #{address_div.selector} select") {
542
+ grid_column '2'
543
+ }
545
544
  }
546
545
  }
547
546
  }
@@ -708,14 +707,12 @@ class AddressForm
708
707
  }
709
708
 
710
709
  style {
711
- <<~CSS
712
- #{address_div.selector} * {
713
- margin: 5px;
714
- }
715
- #{address_div.selector} input, #{address_div.selector} select {
716
- grid-column: 2;
717
- }
718
- CSS
710
+ r("#{address_div.selector} *") {
711
+ margin '5px'
712
+ }
713
+ r("#{address_div.selector} input, #{address_div.selector} select") {
714
+ grid_column '2'
715
+ }
719
716
  }
720
717
  }
721
718
 
@@ -957,14 +954,12 @@ class AddressForm
957
954
  }
958
955
 
959
956
  style {
960
- <<~CSS
961
- #{address_div.selector} * {
962
- margin: 5px;
963
- }
964
- #{address_div.selector} input, #{address_div.selector} select {
965
- grid-column: 2;
966
- }
967
- CSS
957
+ r("#{address_div.selector} *") {
958
+ margin '5px'
959
+ }
960
+ r("#{address_div.selector} input, #{address_div.selector} select") {
961
+ grid_column '2'
962
+ }
968
963
  }
969
964
  }
970
965
 
@@ -1146,7 +1141,7 @@ rails new glimmer_app_server
1146
1141
  Add the following to `Gemfile`:
1147
1142
 
1148
1143
  ```
1149
- gem 'glimmer-dsl-web', '~> 0.1.0'
1144
+ gem 'glimmer-dsl-web', '~> 0.2.0'
1150
1145
  ```
1151
1146
 
1152
1147
  Run:
@@ -1191,26 +1186,28 @@ rails db:migrate
1191
1186
  Add the following to `config/routes.rb` inside the `Rails.application.routes.draw` block:
1192
1187
 
1193
1188
  ```ruby
1194
- mount Glimmer::Engine => "/glimmer" # add on top
1195
1189
  root to: 'welcomes#index'
1196
1190
  ```
1197
1191
 
1198
1192
  Clear the file `app/views/welcomes/index.html.erb` completely from all content.
1199
1193
 
1200
- Delete `app/javascript` directory
1194
+ Rename `app/assets/javascript/application.js.rb` file to `app/assets/javascript/opal_application.rb`.
1201
1195
 
1202
1196
  Rename `app/assets/javascript` directory to `app/assets/opal`.
1203
1197
 
1204
- Add the following lines to `app/assets/config/manifest.js` (and delete their `javascript` equivalents):
1198
+ Edit `app/assets/config/manifest.js` and update `//= link_directory ../javascript .js` to `//= link_directory ../opal .js`:
1205
1199
 
1206
1200
  ```js
1207
- //= link_tree ../../opal .js
1208
1201
  //= link_directory ../opal .js
1209
1202
  ```
1210
1203
 
1211
- Rename `app/assets/opal/application.js.rb` to `app/assets/opal/application.rb`.
1204
+ Edit `app/views/layouts/application.html.erb` and update `<%= javascript_include_tag "application", "data-turbolinks-track": "reload" %>` to `<%= javascript_include_tag "opal_application", "data-turbolinks-track": "reload" %>`:
1205
+
1206
+ ```erb
1207
+ <%= javascript_include_tag "opal_application", "data-turbolinks-track": "reload" %>
1208
+ ```
1212
1209
 
1213
- Edit and replace `app/assets/opal/application.rb` content with code below (optionally including a require statement for one of the [samples](#samples) below):
1210
+ Edit and replace `app/assets/opal/opal_application.rb` content with code below (optionally including a require statement for one of the [samples](#samples) below):
1214
1211
 
1215
1212
  ```ruby
1216
1213
  require 'glimmer-dsl-web' # brings opal and other dependencies automatically
@@ -1317,6 +1314,7 @@ That produces:
1317
1314
  </div>
1318
1315
  ...
1319
1316
  ```
1317
+
1320
1318
  You may insert a Glimmer component anywhere into a Rails View using `glimmer_component(component_path, *args)` Rails helper. Add `include GlimmerHelper` to `ApplicationHelper` or another Rails helper, and use `<%= glimmer_component("path/to/component", *args) %>` in Views.
1321
1319
 
1322
1320
  To use `glimmer_component`, edit `app/helpers/application_helper.rb` in your Rails application, add `require 'glimmer/helpers/glimmer_helper'` on top and `include GlimmerHelper` inside `module`.
@@ -1333,6 +1331,8 @@ module ApplicationHelper
1333
1331
  end
1334
1332
  ```
1335
1333
 
1334
+ Note that Turbo is disabled on Glimmer elements/components. You can still use Turbo/Hotwire side by side with Glimmer DSL for Web by using one of the two technologies in every page. But, mixing them in the same pages is not recommended at the moment, so any pages loaded with Glimmer DSL for Web must be loaded without Turbo (e.g. by putting "data-turbo"="false" on anchor "a" tag links to Glimmer pages).
1335
+
1336
1336
  If you run into any issues in setup, refer to the [Sample Glimmer DSL for Web Rails 7 App](https://github.com/AndyObtiva/sample-glimmer-dsl-web-rails7-app) project (in case I forgot to include some setup steps by mistake).
1337
1337
 
1338
1338
  Otherwise, if you still cannot setup successfully (even with the help of the sample project, or if the sample project stops working), please do not hesitate to report an [Issue request](https://github.com/AndyObtiva/glimmer-dsl-web/issues) or fix and submit a [Pull Request](https://github.com/AndyObtiva/glimmer-dsl-web/pulls).
@@ -1362,7 +1362,7 @@ Disable the `webpacker` gem line in `Gemfile`:
1362
1362
  Add the following to `Gemfile`:
1363
1363
 
1364
1364
  ```ruby
1365
- gem 'glimmer-dsl-web', '~> 0.1.0'
1365
+ gem 'glimmer-dsl-web', '~> 0.2.0'
1366
1366
  ```
1367
1367
 
1368
1368
  Run:
@@ -1407,10 +1407,8 @@ rails db:migrate
1407
1407
  Add the following to `config/routes.rb` inside the `Rails.application.routes.draw` block:
1408
1408
 
1409
1409
  ```ruby
1410
- mount Glimmer::Engine => "/glimmer" # add on top
1411
1410
  root to: 'welcomes#index'
1412
1411
  ```
1413
- ```
1414
1412
 
1415
1413
  Also, delete the following line:
1416
1414
 
@@ -1420,18 +1418,23 @@ Also, delete the following line:
1420
1418
 
1421
1419
  Clear the file `app/views/welcomes/index.html.erb` completely from all content.
1422
1420
 
1421
+ Rename `app/assets/javascript/application.js.rb` file to `app/assets/javascript/opal_application.rb`.
1422
+
1423
1423
  Rename `app/assets/javascript` directory to `app/assets/opal`.
1424
1424
 
1425
- Add the following lines to `app/assets/config/manifest.js` (and delete their `javascript` equivalents):
1425
+ Edit `app/assets/config/manifest.js` and update `//= link_directory ../javascript .js` to `//= link_directory ../opal .js`:
1426
1426
 
1427
1427
  ```js
1428
- //= link_tree ../../opal .js
1429
1428
  //= link_directory ../opal .js
1430
1429
  ```
1431
1430
 
1432
- Rename `app/assets/opal/application.js.rb` to `app/assets/opal/application.rb`.
1431
+ Edit `app/views/layouts/application.html.erb` and update `<%= javascript_include_tag "application", "data-turbolinks-track": "reload" %>` to `<%= javascript_include_tag "opal_application", "data-turbolinks-track": "reload" %>`:
1433
1432
 
1434
- Edit and replace `app/assets/opal/application.rb` content with code below (optionally including a require statement for one of the [samples](#samples) below inside a `Document.ready? do; end` block):
1433
+ ```erb
1434
+ <%= javascript_include_tag "opal_application", "data-turbolinks-track": "reload" %>
1435
+ ```
1436
+
1437
+ Edit and replace `app/assets/opal/opal_application.rb` content with code below (optionally including a require statement for one of the [samples](#samples) below):
1435
1438
 
1436
1439
  ```ruby
1437
1440
  require 'glimmer-dsl-web' # brings opal and other dependencies automatically
@@ -1508,6 +1511,8 @@ module ApplicationHelper
1508
1511
  end
1509
1512
  ```
1510
1513
 
1514
+ Note that Turbo is disabled on Glimmer elements/components. You can still use Turbo/Hotwire side by side with Glimmer DSL for Web by using one of the two technologies in every page. But, mixing them in the same pages is not recommended at the moment, so any pages loaded with Glimmer DSL for Web must be loaded without Turbo (e.g. by putting "data-turbo"="false" on anchor "a" tag links to Glimmer pages).
1515
+
1511
1516
  **NOT RELEASED OR SUPPORTED YET**
1512
1517
 
1513
1518
  If you run into any issues in setup, refer to the [Sample Glimmer DSL for Web Rails 6 App](https://github.com/AndyObtiva/sample-glimmer-dsl-web-rails6-app) project (in case I forgot to include some setup steps by mistake).
@@ -1754,6 +1759,7 @@ Document.ready? do
1754
1759
 
1755
1760
  # CSS Styles
1756
1761
  style {
1762
+ # CSS can be included as a String as done below, or as Glimmer DSL for CSS syntax (Ruby code) as done in other samples
1757
1763
  <<~CSS
1758
1764
  input {
1759
1765
  margin: 5px;
@@ -2072,14 +2078,12 @@ Document.ready? do
2072
2078
  }
2073
2079
 
2074
2080
  style {
2075
- <<~CSS
2076
- #{address_div.selector} * {
2077
- margin: 5px;
2078
- }
2079
- #{address_div.selector} input, #{address_div.selector} select {
2080
- grid-column: 2;
2081
- }
2082
- CSS
2081
+ r("#{address_div.selector} *") {
2082
+ margin '5px'
2083
+ }
2084
+ r("#{address_div.selector} input, #{address_div.selector} select") {
2085
+ grid_column '2'
2086
+ }
2083
2087
  }
2084
2088
  }
2085
2089
 
@@ -2207,20 +2211,18 @@ Document.ready? do
2207
2211
  }
2208
2212
 
2209
2213
  style {
2210
- <<~CSS
2211
- #{address_div.selector} {
2212
- margin: 10px 0;
2213
- }
2214
- #{address_div.selector} * {
2215
- margin: 5px;
2216
- }
2217
- #{address_div.selector} label {
2218
- grid-column: 1;
2219
- }
2220
- #{address_div.selector} input, #{address_div.selector} select {
2221
- grid-column: 2;
2222
- }
2223
- CSS
2214
+ r(address_div.selector) {
2215
+ margin '10px 0'
2216
+ }
2217
+ r("#{address_div.selector} *") {
2218
+ margin '5px'
2219
+ }
2220
+ r("#{address_div.selector} label") {
2221
+ grid_column '1'
2222
+ }
2223
+ r("#{address_div.selector} input, #{address_div.selector} select") {
2224
+ grid_column '2'
2225
+ }
2224
2226
  }
2225
2227
  }
2226
2228
  }
@@ -2387,14 +2389,12 @@ class AddressForm
2387
2389
  }
2388
2390
 
2389
2391
  style {
2390
- <<~CSS
2391
- #{address_div.selector} * {
2392
- margin: 5px;
2393
- }
2394
- #{address_div.selector} input, #{address_div.selector} select {
2395
- grid-column: 2;
2396
- }
2397
- CSS
2392
+ r("#{address_div.selector} *") {
2393
+ margin '5px'
2394
+ }
2395
+ r("#{address_div.selector} input, #{address_div.selector} select") {
2396
+ grid_column '2'
2397
+ }
2398
2398
  }
2399
2399
  }
2400
2400
 
@@ -2636,14 +2636,12 @@ class AddressForm
2636
2636
  }
2637
2637
 
2638
2638
  style {
2639
- <<~CSS
2640
- #{address_div.selector} * {
2641
- margin: 5px;
2642
- }
2643
- #{address_div.selector} input, #{address_div.selector} select {
2644
- grid-column: 2;
2645
- }
2646
- CSS
2639
+ r("#{address_div.selector} *") {
2640
+ margin '5px'
2641
+ }
2642
+ r("#{address_div.selector} input, #{address_div.selector} select") {
2643
+ grid_column '2'
2644
+ }
2647
2645
  }
2648
2646
  }
2649
2647
 
@@ -2840,17 +2838,15 @@ Document.ready? do
2840
2838
  }
2841
2839
 
2842
2840
  style {
2843
- <<~CSS
2844
- #{container_div.selector} * {
2845
- margin: 5px;
2846
- }
2847
- #{container_div.selector} label {
2848
- grid-column: 1;
2849
- }
2850
- #{container_div.selector} input {
2851
- grid-column: 2;
2852
- }
2853
- CSS
2841
+ r("#{container_div.selector} *") {
2842
+ margin '5px'
2843
+ }
2844
+ r("#{container_div.selector} label") {
2845
+ grid_column '1'
2846
+ }
2847
+ r("#{container_div.selector} input") {
2848
+ grid_column '2'
2849
+ }
2854
2850
  }
2855
2851
  }
2856
2852
  }
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -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.1.0 ruby lib
5
+ # stub: glimmer-dsl-web 0.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "glimmer-dsl-web".freeze
9
- s.version = "0.1.0".freeze
9
+ s.version = "0.2.0".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]
@@ -58,6 +58,7 @@ Gem::Specification.new do |s|
58
58
  "lib/glimmer/dsl/web/property_expression.rb",
59
59
  "lib/glimmer/dsl/web/select_expression.rb",
60
60
  "lib/glimmer/dsl/web/shine_data_binding_expression.rb",
61
+ "lib/glimmer/dsl/web/style_expression.rb",
61
62
  "lib/glimmer/helpers/glimmer_helper.rb",
62
63
  "lib/glimmer/util/proc_tracker.rb",
63
64
  "lib/glimmer/web.rb",
@@ -76,11 +77,11 @@ Gem::Specification.new do |s|
76
77
 
77
78
  s.add_runtime_dependency(%q<glimmer>.freeze, ["~> 2.7.6".freeze])
78
79
  s.add_runtime_dependency(%q<glimmer-dsl-xml>.freeze, ["~> 1.3.2".freeze])
79
- s.add_runtime_dependency(%q<glimmer-dsl-css>.freeze, ["~> 1.2.2".freeze])
80
+ s.add_runtime_dependency(%q<glimmer-dsl-css>.freeze, ["~> 1.2.3".freeze])
80
81
  s.add_runtime_dependency(%q<opal>.freeze, ["= 1.8.2".freeze])
81
82
  s.add_runtime_dependency(%q<opal-rails>.freeze, ["= 2.0.3".freeze])
82
- s.add_runtime_dependency(%q<opal-async>.freeze, ["~> 1.4.0".freeze])
83
- s.add_runtime_dependency(%q<opal-jquery>.freeze, ["~> 0.5.0".freeze])
83
+ s.add_runtime_dependency(%q<opal-async>.freeze, ["~> 1.4.1".freeze])
84
+ s.add_runtime_dependency(%q<opal-jquery>.freeze, ["~> 0.5.1".freeze])
84
85
  s.add_runtime_dependency(%q<to_collection>.freeze, [">= 2.0.1".freeze, "< 3.0.0".freeze])
85
86
  s.add_development_dependency(%q<puts_debuggerer>.freeze, [">= 0".freeze])
86
87
  s.add_development_dependency(%q<rake>.freeze, [">= 10.1.0".freeze, "< 14.0.0".freeze])
@@ -26,6 +26,7 @@ require 'glimmer/dsl/web/listener_expression'
26
26
  require 'glimmer/dsl/web/property_expression'
27
27
  require 'glimmer/dsl/web/p_expression'
28
28
  require 'glimmer/dsl/web/select_expression'
29
+ require 'glimmer/dsl/web/style_expression'
29
30
  require 'glimmer/dsl/web/bind_expression'
30
31
  require 'glimmer/dsl/web/data_binding_expression'
31
32
  require 'glimmer/dsl/web/content_data_binding_expression'
@@ -0,0 +1,27 @@
1
+ require 'glimmer/dsl/static_expression'
2
+ require 'glimmer/dsl/web/general_element_expression'
3
+
4
+ module Glimmer
5
+ module DSL
6
+ module Web
7
+ class StyleExpression < StaticExpression
8
+ include GeneralElementExpression
9
+ include Glimmer
10
+
11
+ def add_content(parent, keyword, *args, &block)
12
+ if parent.rendered? || parent.skip_content_on_render_blocks?
13
+ return_value = css(&block).to_s
14
+ return_value = super(parent, keyword, *args, &block) if return_value.to_s.empty?
15
+ if return_value.is_a?(String) && parent.dom_element.text.to_s.empty?
16
+ parent.add_text_content(return_value)
17
+ end
18
+ parent.post_add_content
19
+ return_value
20
+ else
21
+ parent.add_content_on_render(&block)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -7,24 +7,27 @@ module GlimmerHelper
7
7
  end
8
8
 
9
9
  def glimmer_component(component_asset_path, *component_args)
10
- component_file = component_asset_path.split('/').last
11
- component_class_name = component_file.classify
10
+ component_file = component_asset_path.split('/').last # TODO support namespaced components
11
+ component_class_name = component_file.classify # TODO support namespaced components
12
12
  next_id_number = GlimmerHelper.next_id_number
13
13
  component_id = "glimmer_component_#{next_id_number}"
14
14
  component_script_container_id = "glimmer_component_script_container_#{next_id_number}"
15
15
  component_args_json = JSON.dump(component_args)
16
- opal_script = <<~Opal
16
+ opal_script = <<~OPAL
17
17
  require 'glimmer-dsl-web'
18
18
  component_args_json = '#{component_args_json}'
19
19
  component_args = JSON.parse(component_args_json)
20
20
  component_args << {} if !component_args.last.is_a?(Hash)
21
21
  component_args.last[:parent] = "##{component_id}"
22
22
  #{component_class_name}.render(*component_args)
23
- Opal
24
- content_tag(:div, id: component_script_container_id, class: ['glimmer_component_script_container', "#{component_file}_script_container"]) do
23
+ OPAL
24
+ js_script = <<~JAVASCRIPT
25
+ Opal.eval(`#{opal_script}`)
26
+ JAVASCRIPT
27
+ content_tag(:div, id: component_script_container_id, class: ['glimmer_component_script_container', "#{component_file}_script_container"], 'data-turbo': 'false') do
25
28
  content_tag(:div, '', id: component_id, class: ['glimmer_component', component_file]) +
26
29
  javascript_include_tag(component_asset_path, "data-turbolinks-track": "reload") +
27
- content_tag(:script, raw(opal_script), type: 'text/ruby')
30
+ content_tag(:script, raw(js_script), type: 'application/javascript', "data-turbo-eval": "false")
28
31
  end
29
32
  end
30
33
  end
@@ -253,7 +253,6 @@ module Glimmer
253
253
  brand_new = @dom.nil? || old_element.empty? || !options[:parent].to_s.empty? || brand_new
254
254
  build_dom(layout: !custom_parent_dom_element) # TODO handle custom parent layout by passing parent instead of parent dom element
255
255
  if brand_new
256
- # TODO make a method attach to allow subclasses to override if needed
257
256
  attach(the_parent_dom_element)
258
257
  else
259
258
  reattach(old_element)
@@ -336,6 +335,7 @@ module Glimmer
336
335
  end
337
336
  html_options[:class] ||= ''
338
337
  html_options[:class] = "#{html_options[:class]} #{body_class}".strip
338
+ html_options['data-turbo'] = 'false' if parent.nil?
339
339
  html_options
340
340
  end
341
341
 
@@ -158,14 +158,12 @@ class AddressForm
158
158
  }
159
159
 
160
160
  style {
161
- <<~CSS
162
- #{address_div.selector} * {
163
- margin: 5px;
164
- }
165
- #{address_div.selector} input, #{address_div.selector} select {
166
- grid-column: 2;
167
- }
168
- CSS
161
+ r("#{address_div.selector} *") {
162
+ margin '5px'
163
+ }
164
+ r("#{address_div.selector} input, #{address_div.selector} select") {
165
+ grid_column '2'
166
+ }
169
167
  }
170
168
  }
171
169
 
@@ -117,20 +117,18 @@ Document.ready? do
117
117
  }
118
118
 
119
119
  style {
120
- <<~CSS
121
- #{address_div.selector} {
122
- margin: 10px 0;
123
- }
124
- #{address_div.selector} * {
125
- margin: 5px;
126
- }
127
- #{address_div.selector} label {
128
- grid-column: 1;
129
- }
130
- #{address_div.selector} input, #{address_div.selector} select {
131
- grid-column: 2;
132
- }
133
- CSS
120
+ r(address_div.selector) {
121
+ margin '10px 0'
122
+ }
123
+ r("#{address_div.selector} *") {
124
+ margin '5px'
125
+ }
126
+ r("#{address_div.selector} label") {
127
+ grid_column '1'
128
+ }
129
+ r("#{address_div.selector} input, #{address_div.selector} select") {
130
+ grid_column '2'
131
+ }
134
132
  }
135
133
  }
136
134
  }
@@ -156,15 +156,15 @@ Document.ready? do
156
156
  }
157
157
  }
158
158
 
159
+ # Programmable CSS using Glimmer DSL for CSS
159
160
  style {
160
- <<~CSS
161
- #{address_div.selector} * {
162
- margin: 5px;
163
- }
164
- #{address_div.selector} input, #{address_div.selector} select {
165
- grid-column: 2;
166
- }
167
- CSS
161
+ # `r` is an alias for `rule`, generating a CSS rule
162
+ r("#{address_div.selector} *") {
163
+ margin '5px'
164
+ }
165
+ r("#{address_div.selector} input, #{address_div.selector} select") {
166
+ grid_column '2'
167
+ }
168
168
  }
169
169
  }
170
170
 
@@ -79,6 +79,7 @@ Document.ready? do
79
79
 
80
80
  # CSS Styles
81
81
  style {
82
+ # CSS can be included as a String as done below, or as Glimmer DSL for CSS syntax (Ruby code) as done in other samples
82
83
  <<~CSS
83
84
  input {
84
85
  margin: 5px;
@@ -135,14 +135,12 @@ class AddressForm
135
135
  }
136
136
 
137
137
  style {
138
- <<~CSS
139
- #{address_div.selector} * {
140
- margin: 5px;
141
- }
142
- #{address_div.selector} input, #{address_div.selector} select {
143
- grid-column: 2;
144
- }
145
- CSS
138
+ r("#{address_div.selector} *") {
139
+ margin '5px'
140
+ }
141
+ r("#{address_div.selector} input, #{address_div.selector} select") {
142
+ grid_column '2'
143
+ }
146
144
  }
147
145
  }
148
146
 
@@ -100,17 +100,15 @@ Document.ready? do
100
100
  }
101
101
 
102
102
  style {
103
- <<~CSS
104
- #{container_div.selector} * {
105
- margin: 5px;
106
- }
107
- #{container_div.selector} label {
108
- grid-column: 1;
109
- }
110
- #{container_div.selector} input {
111
- grid-column: 2;
112
- }
113
- CSS
103
+ r("#{container_div.selector} *") {
104
+ margin '5px'
105
+ }
106
+ r("#{container_div.selector} label") {
107
+ grid_column '1'
108
+ }
109
+ r("#{container_div.selector} input") {
110
+ grid_column '2'
111
+ }
114
112
  }
115
113
  }
116
114
  }
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.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.2.2
47
+ version: 1.2.3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.2.2
54
+ version: 1.2.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: opal
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.4.0
89
+ version: 1.4.1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.4.0
96
+ version: 1.4.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: opal-jquery
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.5.0
103
+ version: 0.5.1
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.5.0
110
+ version: 0.5.1
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: to_collection
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -287,6 +287,7 @@ files:
287
287
  - lib/glimmer/dsl/web/property_expression.rb
288
288
  - lib/glimmer/dsl/web/select_expression.rb
289
289
  - lib/glimmer/dsl/web/shine_data_binding_expression.rb
290
+ - lib/glimmer/dsl/web/style_expression.rb
290
291
  - lib/glimmer/helpers/glimmer_helper.rb
291
292
  - lib/glimmer/util/proc_tracker.rb
292
293
  - lib/glimmer/web.rb