glimmer-dsl-web 0.4.2 → 0.4.3

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.
@@ -15,19 +15,30 @@ class TodoListItem
15
15
 
16
16
  markup {
17
17
  li {
18
- class_name <= [ todo, :completed,
19
- on_read: -> { li_class_name(todo) }
20
- ]
21
- class_name <= [ todo, :editing,
22
- on_read: -> { li_class_name(todo) }
23
- ]
18
+ # Data-bind inclusion of `li` `class` `completed` unidirectionally to todo completed attribute,
19
+ # meaning inclusion of completed class is determined by todo completed boolean attribute.
20
+ class_name(:completed) <= [todo, :completed]
21
+
22
+ # Data-bind inclusion of `li` `class` `active` unidirectionally to todo completed attribute, negated,
23
+ # meaning inclusion of active class is determined by todo completed boolean attribute, negated.
24
+ class_name(:active) <= [todo, :completed, on_read: :!]
25
+
26
+ # Data-bind inclusion of `li` `class` `editing` unidirectionally to todo editing attribute,
27
+ # meaning inclusion of editing class is determined by todo editing boolean attribute.
28
+ class_name(:editing) <= [todo, :editing]
24
29
 
25
30
  div(class: 'view') {
26
31
  input(class: 'toggle', type: 'checkbox') {
32
+ # Data-bind `input` `checked` property bidirectionally to `todo` `completed` attribute
33
+ # meaning make any changes to the `todo` `completed` attribute value automatically update the `input` `checked` property
34
+ # and any changes to the `input` `checked` property by the user automatically update the `todo` `completed` attribute value.
35
+ # `after_write` hook is invoked after writing a new value to the model attribute (`todo` `completed` attribute)
27
36
  checked <=> [todo, :completed]
28
37
  }
29
38
 
30
39
  label {
40
+ # Data-bind `label` inner HTML unidirectionally to `todo.task` (`String` value),
41
+ # meaning make changes to `todo` `task` attribute automatically update `label` inner HTML.
31
42
  inner_html <= [todo, :task]
32
43
 
33
44
  ondblclick do |event|
@@ -50,111 +61,103 @@ class TodoListItem
50
61
  }
51
62
  }
52
63
 
53
- def li_class_name(todo)
54
- classes = []
55
- classes << 'completed' if todo.completed?
56
- classes << 'active' if !todo.completed?
57
- classes << 'editing' if todo.editing?
58
- classes.join(' ')
59
- end
60
-
61
64
  style {
62
- rule('.todo-list li.completed label') {
65
+ r('.todo-list li.completed label') {
63
66
  color '#949494'
64
67
  text_decoration 'line-through'
65
68
  }
66
69
 
67
- rule('.todo-list li') {
70
+ r('.todo-list li') {
68
71
  border_bottom '1px solid #ededed'
69
- font_size '24px'
70
- position 'relative'
72
+ font_size 24
73
+ position :relative
71
74
  }
72
75
 
73
- rule('.todo-list li .toggle') {
74
- _webkit_appearance 'none'
75
- appearance 'none'
76
- border 'none'
77
- bottom '0'
78
- height 'auto'
76
+ r('.todo-list li .toggle') {
77
+ _webkit_appearance :none
78
+ appearance :none
79
+ border :none
80
+ bottom 0
81
+ height :auto
79
82
  margin 'auto 0'
80
- opacity '0'
81
- position 'absolute'
82
- text_align 'center'
83
- top '0'
84
- width '40px'
83
+ opacity 0
84
+ position :absolute
85
+ text_align :center
86
+ top 0
87
+ width 40
85
88
  }
86
89
 
87
- rule('.todo-list li label') {
90
+ r('.todo-list li label') {
88
91
  color '#484848'
89
- display 'block'
92
+ display :block
90
93
  font_weight '400'
91
94
  line_height '1.2'
92
- min_height '40px'
95
+ min_height 40
93
96
  padding '15px 15px 15px 60px'
94
97
  transition 'color .4s'
95
98
  word_break 'break-all'
96
99
  }
97
100
 
98
- rule('.todo-list li .toggle+label') {
101
+ r('.todo-list li .toggle+label') {
99
102
  background_image 'url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23949494%22%20stroke-width%3D%223%22/%3E%3C/svg%3E)'
100
- background_position '0'
103
+ background_position 0
101
104
  background_repeat 'no-repeat'
102
105
  }
103
106
 
104
- rule('.todo-list li.completed label') {
107
+ r('.todo-list li.completed label') {
105
108
  color '#949494'
106
109
  text_decoration 'line-through'
107
110
  }
108
111
 
109
- rule('.todo-list li .toggle:checked+label') {
112
+ r('.todo-list li .toggle:checked+label') {
110
113
  background_image 'url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%2359A193%22%20stroke-width%3D%223%22%2F%3E%3Cpath%20fill%3D%22%233EA390%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22%2F%3E%3C%2Fsvg%3E)'
111
114
  }
112
115
 
113
- rule('.todo-list li.editing') {
114
- border_bottom 'none'
115
- padding '0'
116
+ r('.todo-list li.editing') {
117
+ border_bottom :none
118
+ padding 0
116
119
  }
117
120
 
118
- rule('.todo-list li.editing input[type=checkbox], .todo-list li.editing label') {
119
- opacity '0'
121
+ r('.todo-list li.editing input[type=checkbox], .todo-list li.editing label') {
122
+ opacity 0
120
123
  }
121
124
 
122
- rule('.todo-list li .destroy') {
123
- bottom '0'
125
+ r('.todo-list li .destroy') {
126
+ bottom 0
124
127
  color '#949494'
125
- display 'none'
126
- font_size '30px'
127
- height '40px'
128
+ display :none
129
+ font_size 30
130
+ height 40
128
131
  margin 'auto 0'
129
- position 'absolute'
130
- right '10px'
131
- top '0'
132
+ position :absolute
133
+ right 10
134
+ top 0
132
135
  transition 'color .2s ease-out'
133
- width '40px'
136
+ width 40
134
137
  }
135
138
 
136
- rule('.todo-list li:focus .destroy, .todo-list li:hover .destroy') {
137
- display 'block'
139
+ r('.todo-list li:focus .destroy, .todo-list li:hover .destroy') {
140
+ display :block
138
141
  }
139
142
 
140
- rule('.todo-list li .destroy:focus, .todo-list li .destroy:hover') {
143
+ r('.todo-list li .destroy:focus, .todo-list li .destroy:hover') {
141
144
  color '#c18585'
142
145
  }
143
146
 
144
- rule('.todo-list li .destroy:after') {
147
+ r('.todo-list li .destroy:after') {
145
148
  content '"×"'
146
- display 'block'
149
+ display :block
147
150
  height '100%'
148
151
  line_height '1.1'
149
152
  }
150
153
 
151
154
  media ('screen and (-webkit-min-device-pixel-ratio: 0)') {
152
- rule('.todo-list li .toggle, .toggle-all') {
153
- background 'none'
155
+ r('.todo-list li .toggle, .toggle-all') {
156
+ background :none
154
157
  }
155
158
 
156
- rule('.todo-list li .toggle') {
157
- height '40px'
159
+ r('.todo-list li .toggle') {
160
+ height 40
158
161
  }
159
162
  }
160
163
  }
@@ -16,26 +16,26 @@ class TodoMvcFooter
16
16
  }
17
17
 
18
18
  style {
19
- rule('footer.info') {
19
+ r('footer.info') {
20
20
  margin '65px auto 0'
21
21
  color '#4d4d4d'
22
- font_size '11px'
22
+ font_size 11
23
23
  text_shadow '0 1px 0 rgba(255, 255, 255, 0.5)'
24
- text_align 'center'
24
+ text_align :center
25
25
  }
26
26
 
27
- rule('footer.info p') {
27
+ r('footer.info p') {
28
28
  line_height '1'
29
29
  }
30
30
 
31
- rule('footer.info a') {
32
- color 'inherit'
33
- text_decoration 'none'
31
+ r('footer.info a') {
32
+ color :inherit
33
+ text_decoration :none
34
34
  font_weight '400'
35
35
  }
36
36
 
37
- rule('footer.info a:hover') {
38
- text_decoration 'underline'
37
+ r('footer.info a:hover') {
38
+ text_decoration :underline
39
39
  }
40
40
  }
41
41
  end
@@ -37,41 +37,41 @@ class TodoMvc
37
37
  }
38
38
 
39
39
  style {
40
- rule('body, button, html') {
41
- margin '0'
42
- padding '0'
40
+ r('body, button, html') {
41
+ margin 0
42
+ padding 0
43
43
  }
44
44
 
45
- rule('button') {
46
- _webkit_font_smoothing 'antialiased'
47
- _webkit_appearance 'none'
48
- appearance 'none'
49
- background 'none'
50
- border '0'
51
- color 'inherit'
52
- font_family 'inherit'
45
+ r('button') {
46
+ _webkit_font_smoothing :antialiased
47
+ _webkit_appearance :none
48
+ appearance :none
49
+ background :none
50
+ border 0
51
+ color :inherit
52
+ font_family :inherit
53
53
  font_size '100%'
54
- font_weight 'inherit'
55
- vertical_align 'baseline'
54
+ font_weight :inherit
55
+ vertical_align :baseline
56
56
  }
57
57
 
58
- rule('.todoapp') {
58
+ r('.todoapp') {
59
59
  background '#fff'
60
60
  margin '130px 0 40px 0'
61
- position 'relative'
61
+ position :relative
62
62
  box_shadow '0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1)'
63
63
  }
64
64
 
65
65
  media('screen and (-webkit-min-device-pixel-ratio:0)') {
66
- rule('body') {
66
+ r('body') {
67
67
  font "14px 'Helvetica Neue', Helvetica, Arial, sans-serif"
68
- line_height '1.4em'
68
+ line_height 1.4.em
69
69
  background '#f5f5f5'
70
70
  color '#111111'
71
- min_width '230px'
72
- max_width '550px'
71
+ min_width 230
72
+ max_width 550
73
73
  margin '0 auto'
74
- _webkit_font_smoothing 'antialiased'
74
+ _webkit_font_smoothing :antialiased
75
75
  font_weight '300'
76
76
  }
77
77
  }
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.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
@@ -299,6 +299,7 @@ files:
299
299
  - lib/glimmer/data_binding/element_binding.rb
300
300
  - lib/glimmer/dsl/web/a_expression.rb
301
301
  - lib/glimmer/dsl/web/bind_expression.rb
302
+ - lib/glimmer/dsl/web/class_name_inclusion_data_binding.rb
302
303
  - lib/glimmer/dsl/web/component_expression.rb
303
304
  - lib/glimmer/dsl/web/content_data_binding_expression.rb
304
305
  - lib/glimmer/dsl/web/data_binding_expression.rb