glimmer-dsl-web 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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