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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +283 -56
- data/VERSION +1 -1
- data/glimmer-dsl-web.gemspec +3 -2
- data/lib/glimmer/data_binding/element_binding.rb +10 -4
- data/lib/glimmer/dsl/web/class_name_inclusion_data_binding.rb +21 -0
- data/lib/glimmer/dsl/web/dsl.rb +2 -0
- data/lib/glimmer/web/component.rb +8 -2
- data/lib/glimmer/web/element_proxy.rb +29 -2
- data/lib/glimmer-dsl-web/samples/hello/hello_style.rb +24 -25
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc/views/edit_todo_input.rb +19 -10
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc/views/new_todo_form.rb +8 -8
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc/views/new_todo_input.rb +8 -5
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc/views/todo_filters.rb +64 -51
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc/views/todo_input.rb +14 -14
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc/views/todo_list.rb +33 -37
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc/views/todo_list_item.rb +62 -59
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc/views/todo_mvc_footer.rb +9 -9
- data/lib/glimmer-dsl-web/samples/regular/todo_mvc.rb +20 -20
- metadata +2 -1
@@ -15,19 +15,30 @@ class TodoListItem
|
|
15
15
|
|
16
16
|
markup {
|
17
17
|
li {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
65
|
+
r('.todo-list li.completed label') {
|
63
66
|
color '#949494'
|
64
67
|
text_decoration 'line-through'
|
65
68
|
}
|
66
69
|
|
67
|
-
|
70
|
+
r('.todo-list li') {
|
68
71
|
border_bottom '1px solid #ededed'
|
69
|
-
font_size
|
70
|
-
position
|
72
|
+
font_size 24
|
73
|
+
position :relative
|
71
74
|
}
|
72
75
|
|
73
|
-
|
74
|
-
_webkit_appearance
|
75
|
-
appearance
|
76
|
-
border
|
77
|
-
bottom
|
78
|
-
height
|
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
|
81
|
-
position
|
82
|
-
text_align
|
83
|
-
top
|
84
|
-
width
|
83
|
+
opacity 0
|
84
|
+
position :absolute
|
85
|
+
text_align :center
|
86
|
+
top 0
|
87
|
+
width 40
|
85
88
|
}
|
86
89
|
|
87
|
-
|
90
|
+
r('.todo-list li label') {
|
88
91
|
color '#484848'
|
89
|
-
display
|
92
|
+
display :block
|
90
93
|
font_weight '400'
|
91
94
|
line_height '1.2'
|
92
|
-
min_height
|
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
|
-
|
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
|
103
|
+
background_position 0
|
101
104
|
background_repeat 'no-repeat'
|
102
105
|
}
|
103
106
|
|
104
|
-
|
107
|
+
r('.todo-list li.completed label') {
|
105
108
|
color '#949494'
|
106
109
|
text_decoration 'line-through'
|
107
110
|
}
|
108
111
|
|
109
|
-
|
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
|
-
|
114
|
-
border_bottom
|
115
|
-
padding
|
116
|
+
r('.todo-list li.editing') {
|
117
|
+
border_bottom :none
|
118
|
+
padding 0
|
116
119
|
}
|
117
120
|
|
118
|
-
|
119
|
-
opacity
|
121
|
+
r('.todo-list li.editing input[type=checkbox], .todo-list li.editing label') {
|
122
|
+
opacity 0
|
120
123
|
}
|
121
124
|
|
122
|
-
|
123
|
-
bottom
|
125
|
+
r('.todo-list li .destroy') {
|
126
|
+
bottom 0
|
124
127
|
color '#949494'
|
125
|
-
display
|
126
|
-
font_size
|
127
|
-
height
|
128
|
+
display :none
|
129
|
+
font_size 30
|
130
|
+
height 40
|
128
131
|
margin 'auto 0'
|
129
|
-
position
|
130
|
-
right
|
131
|
-
top
|
132
|
+
position :absolute
|
133
|
+
right 10
|
134
|
+
top 0
|
132
135
|
transition 'color .2s ease-out'
|
133
|
-
width
|
136
|
+
width 40
|
134
137
|
}
|
135
138
|
|
136
|
-
|
137
|
-
display
|
139
|
+
r('.todo-list li:focus .destroy, .todo-list li:hover .destroy') {
|
140
|
+
display :block
|
138
141
|
}
|
139
142
|
|
140
|
-
|
143
|
+
r('.todo-list li .destroy:focus, .todo-list li .destroy:hover') {
|
141
144
|
color '#c18585'
|
142
145
|
}
|
143
146
|
|
144
|
-
|
147
|
+
r('.todo-list li .destroy:after') {
|
145
148
|
content '"×"'
|
146
|
-
display
|
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
|
-
|
153
|
-
background
|
155
|
+
r('.todo-list li .toggle, .toggle-all') {
|
156
|
+
background :none
|
154
157
|
}
|
155
158
|
|
156
|
-
|
157
|
-
height
|
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
|
-
|
19
|
+
r('footer.info') {
|
20
20
|
margin '65px auto 0'
|
21
21
|
color '#4d4d4d'
|
22
|
-
font_size
|
22
|
+
font_size 11
|
23
23
|
text_shadow '0 1px 0 rgba(255, 255, 255, 0.5)'
|
24
|
-
text_align
|
24
|
+
text_align :center
|
25
25
|
}
|
26
26
|
|
27
|
-
|
27
|
+
r('footer.info p') {
|
28
28
|
line_height '1'
|
29
29
|
}
|
30
30
|
|
31
|
-
|
32
|
-
color
|
33
|
-
text_decoration
|
31
|
+
r('footer.info a') {
|
32
|
+
color :inherit
|
33
|
+
text_decoration :none
|
34
34
|
font_weight '400'
|
35
35
|
}
|
36
36
|
|
37
|
-
|
38
|
-
text_decoration
|
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
|
-
|
41
|
-
margin
|
42
|
-
padding
|
40
|
+
r('body, button, html') {
|
41
|
+
margin 0
|
42
|
+
padding 0
|
43
43
|
}
|
44
44
|
|
45
|
-
|
46
|
-
_webkit_font_smoothing
|
47
|
-
_webkit_appearance
|
48
|
-
appearance
|
49
|
-
background
|
50
|
-
border
|
51
|
-
color
|
52
|
-
font_family
|
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
|
55
|
-
vertical_align
|
54
|
+
font_weight :inherit
|
55
|
+
vertical_align :baseline
|
56
56
|
}
|
57
57
|
|
58
|
-
|
58
|
+
r('.todoapp') {
|
59
59
|
background '#fff'
|
60
60
|
margin '130px 0 40px 0'
|
61
|
-
position
|
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
|
-
|
66
|
+
r('body') {
|
67
67
|
font "14px 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
68
|
-
line_height
|
68
|
+
line_height 1.4.em
|
69
69
|
background '#f5f5f5'
|
70
70
|
color '#111111'
|
71
|
-
min_width
|
72
|
-
max_width
|
71
|
+
min_width 230
|
72
|
+
max_width 550
|
73
73
|
margin '0 auto'
|
74
|
-
_webkit_font_smoothing
|
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.
|
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
|