voom-presenters 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +4 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +8 -0
- data/README.md +12 -0
- data/app/demo/components/date_fields.pom +96 -0
- data/app/demo/components/datetime_fields.pom +106 -0
- data/app/demo/components/nav/drawer.pom +1 -1
- data/app/demo/components/nav/menu.pom +1 -1
- data/app/demo/components/time_fields.pom +59 -0
- data/app/demo/components/toggles.pom +28 -1
- data/app/demo/events/actions/autocomplete.pom +32 -0
- data/app/demo/events/actions/deletes.pom +24 -0
- data/app/demo/events/actions/dialog.pom +19 -0
- data/app/demo/{event/actions/dialog → events/actions/dialogs}/show_dialog.pom +0 -0
- data/app/demo/{event/actions/dialog → events/actions/dialogs}/trigger.pom +0 -0
- data/app/demo/events/actions/loads.pom +19 -0
- data/app/demo/events/actions/posts.pom +23 -0
- data/app/demo/{event/new_text.pom → events/actions/replace_text.pom} +0 -0
- data/app/demo/events/actions/replaces.pom +21 -0
- data/app/demo/events/actions/snackbar.pom +19 -0
- data/app/demo/events/actions/toggle_visiblity.pom +21 -0
- data/app/demo/events/actions/updates.pom +24 -0
- data/app/demo/events/field_level.pom +20 -0
- data/app/demo/events/form_level.pom +24 -0
- data/app/demo/events/nav/drawer.pom +21 -0
- data/app/demo/events.pom +8 -77
- data/app/demo/formatting_tokens.pom +125 -0
- data/app/demo/index.pom +12 -5
- data/app/demo/markdown.pom +33 -40
- data/app/demo/shared/context_list.pom +2 -2
- data/app/demo/styles.pom +1 -0
- data/config.ru +9 -0
- data/lib/voom/presenters/dsl/components/base.rb +5 -0
- data/lib/voom/presenters/dsl/components/card.rb +2 -0
- data/lib/voom/presenters/dsl/components/content.rb +2 -0
- data/lib/voom/presenters/dsl/components/date_field.rb +21 -0
- data/lib/voom/presenters/dsl/components/datetime_base.rb +48 -0
- data/lib/voom/presenters/dsl/components/datetime_field.rb +23 -0
- data/lib/voom/presenters/dsl/components/expansion_panel.rb +1 -0
- data/lib/voom/presenters/dsl/components/form.rb +2 -0
- data/lib/voom/presenters/dsl/components/grid.rb +2 -0
- data/lib/voom/presenters/dsl/components/mixins/date_time_fields.rb +29 -0
- data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +0 -6
- data/lib/voom/presenters/dsl/components/table.rb +1 -1
- data/lib/voom/presenters/dsl/components/time_field.rb +21 -0
- data/lib/voom/presenters/dsl/user_interface.rb +3 -0
- data/lib/voom/presenters/helpers/rails/currency.rb +16 -0
- data/lib/voom/presenters/helpers/rails/model_table.rb +52 -0
- data/lib/voom/presenters/helpers/rails.rb +4 -34
- data/lib/voom/presenters/settings.rb +14 -0
- data/lib/voom/presenters/version.rb +1 -1
- data/lib/voom/presenters/web_client/app.rb +8 -0
- data/public/bundle.css +676 -0
- data/public/bundle.js +3314 -1151
- data/views/mdc/assets/js/components/datetime.js +36 -0
- data/views/mdc/assets/js/components/events/base.js +5 -5
- data/views/mdc/assets/js/components/forms.js +2 -2
- data/views/mdc/assets/js/components/initialize.js +2 -2
- data/views/mdc/assets/js/components/switches.js +1 -1
- data/views/mdc/assets/js/components/text-fields.js +2 -4
- data/views/mdc/assets/scss/components/datetime.scss +19 -0
- data/views/mdc/assets/scss/components/textfield.scss +7 -0
- data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +13 -0
- data/views/mdc/components/date.erb +1 -0
- data/views/mdc/components/{date_time.erb → datetime.erb} +13 -8
- data/views/mdc/components/icon.erb +2 -0
- data/views/mdc/components/text_field.erb +3 -2
- data/views/mdc/components/time.erb +1 -0
- data/views/mdc/layout.erb +1 -0
- data/views/mdc/package-lock.json +5 -0
- data/views/mdc/package.json +1 -1
- metadata +33 -18
- data/LICENSE.txt +0 -21
- data/app/demo/event/actions/nav/drawer.pom +0 -5
- data/app/demo/event/actions/nav/menu.pom +0 -19
- data/app/demo/event/actions.rb +0 -86
- data/app/demo/event/autocomplete.pom +0 -27
- data/app/demo/event/field_level.pom +0 -22
- data/app/demo/event/form_level.pom +0 -26
- data/app/demo/event/nav/drawer.pom +0 -5
- data/app/demo/event/nav/menu.pom +0 -14
- data/lib/voom/presenters/dsl/components/date_time.rb +0 -17
- data/lib/voom/presenters/helpers/currency.rb +0 -14
- data/views/mdc/assets/js/components/date-time.js +0 -6
@@ -0,0 +1,21 @@
|
|
1
|
+
Voom::Presenters.define(:events_drawer) do
|
2
|
+
helpers Voom::Presenters::Helpers::Inflector
|
3
|
+
drawer 'Events' do
|
4
|
+
menu do
|
5
|
+
%i(field_level_events form_level_events).sort.each do |comp|
|
6
|
+
item titleize(comp) do
|
7
|
+
event :click do
|
8
|
+
loads comp
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
%i(dialog autocomplete replaces toggle_visibility snackbar updates deletes posts).sort.each do |comp|
|
13
|
+
item titleize(comp) do
|
14
|
+
event :click do
|
15
|
+
loads "#{comp}_action"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/app/demo/events.pom
CHANGED
@@ -1,60 +1,20 @@
|
|
1
|
-
require_relative 'helpers/indented_grid'
|
2
|
-
|
3
1
|
Voom::Presenters.define(:events) do
|
4
2
|
helpers Demo::Helpers::IndentedGrid
|
5
3
|
attach :top_nav
|
6
4
|
attach :events_drawer
|
7
5
|
|
8
|
-
|
9
6
|
indented_grid do
|
10
7
|
heading 'Events'
|
11
8
|
body 'Events are able to be attached to most components. ',
|
12
9
|
'Common examples include `click` and `change` events. ',
|
10
|
+
'Events have actions.',
|
13
11
|
"To see how an individual component handles events, visit the [component page](#{presenters_path(:components)})"
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
attach :show_dialog
|
22
|
-
|
23
|
-
subheading 'Replaces'
|
24
|
-
button 'replaces' do
|
25
|
-
event :click do
|
26
|
-
replaces :replace_me, :replace_text, text: "I was replaced"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
attach :replace_text
|
30
|
-
|
31
|
-
subheading 'Toggle Visibility'
|
32
|
-
button 'toggle visiblity' do
|
33
|
-
event :click do
|
34
|
-
toggle_visiblity :toggle_me
|
35
|
-
end
|
36
|
-
end
|
37
|
-
heading 'Sometimes I appear', id: :toggle_me
|
38
|
-
|
39
|
-
subheading 'Snackbar'
|
40
|
-
button 'snackbar' do
|
41
|
-
event :click do
|
42
|
-
snackbar 'I want a snack!'
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
subheading context['reloaded'] ? "Reloaded" : 'Loads'
|
47
|
-
button 'loads' do
|
48
|
-
event :click do
|
49
|
-
loads :events, reloaded: true
|
50
|
-
end
|
51
|
-
end
|
52
|
-
heading context['reloaded'] ? "Reloaded" : 'Loaded'
|
53
|
-
|
54
|
-
title "A Note on errors:"
|
55
|
-
body 'The following event actions will display an error.',
|
56
|
-
nil,
|
57
|
-
'Errors are automatically displayed in the following locations.',
|
13
|
+
icon 'fa-hand-point-left', position: :left
|
14
|
+
subheading 'Select an event action'
|
15
|
+
body ' '
|
16
|
+
title "Event Action Error Handling"
|
17
|
+
body 'Errors are automatically displayed in the following locations.',
|
58
18
|
'1. Field/input level errors will display on the field/input.',
|
59
19
|
'1. At the top of all forms.',
|
60
20
|
'1. At the top of all dialogs.',
|
@@ -63,36 +23,7 @@ Voom::Presenters.define(:events) do
|
|
63
23
|
'1. At the top of the page', level: 2
|
64
24
|
|
65
25
|
body 'The closest error element will be used.'\
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
subheading 'Update'
|
70
|
-
body 'issues a PUT to the passed path'
|
71
|
-
content shows_errors: true do
|
72
|
-
button 'updates' do
|
73
|
-
event :click do
|
74
|
-
updates 'updatepath', {optional: :params}
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
subheading 'Delete'
|
79
|
-
body 'issues a DELETE to the passed path'
|
80
|
-
content shows_errors: true do
|
81
|
-
button 'deletes' do
|
82
|
-
event :click do
|
83
|
-
deletes 'deletepath', {optional: :params}
|
84
|
-
end
|
85
|
-
end
|
86
|
-
subheading 'Posts'
|
87
|
-
body "issues a POST to the passed path\nAlias: creates"
|
88
|
-
content do
|
89
|
-
button 'posts' do
|
90
|
-
event :click do
|
91
|
-
posts 'postpath', {optional: :params}
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
26
|
+
'If you want to control where errors appear. Use the attribute `show_errors=(true|false)`'
|
97
27
|
end
|
28
|
+
attach :code, file: __FILE__
|
98
29
|
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
Voom::Presenters.define(:formatting_tokens) do
|
2
|
+
helpers Demo::Helpers::IndentedGrid
|
3
|
+
indented_grid do
|
4
|
+
display 'Date Formatting Tokens', id: :date
|
5
|
+
table do
|
6
|
+
header do
|
7
|
+
column 'Character'
|
8
|
+
column 'Description'
|
9
|
+
column 'Example'
|
10
|
+
end
|
11
|
+
row do
|
12
|
+
column 'd'
|
13
|
+
column 'Day of the month, 2 digits with leading zeros'
|
14
|
+
column '01 to 31'
|
15
|
+
end
|
16
|
+
row do
|
17
|
+
column 'D'
|
18
|
+
column 'A textual representation of a day'
|
19
|
+
column 'Mon through Sun'
|
20
|
+
end
|
21
|
+
row do
|
22
|
+
column "l (lowercase 'L')"
|
23
|
+
column 'A full textual representation of the day of the week'
|
24
|
+
column 'Sunday through Saturday'
|
25
|
+
end
|
26
|
+
|
27
|
+
row do
|
28
|
+
column 'j'
|
29
|
+
column 'Day of the month without leading zeros'
|
30
|
+
column '1 to 31'
|
31
|
+
end
|
32
|
+
row do
|
33
|
+
column 'J'
|
34
|
+
column 'Day of the month without leading zeros and ordinal suffix'
|
35
|
+
column '1st, 2nd, to 31st'
|
36
|
+
end
|
37
|
+
row do
|
38
|
+
column 'w'
|
39
|
+
column 'Numeric representation of the day of the week'
|
40
|
+
column '0 (for Sunday) through 6 (for Saturday)'
|
41
|
+
end
|
42
|
+
row do
|
43
|
+
column 'F'
|
44
|
+
column 'A full textual representation of a month'
|
45
|
+
column 'January through December'
|
46
|
+
end
|
47
|
+
row do
|
48
|
+
column 'm'
|
49
|
+
column 'Numeric representation of a month, with leading zero'
|
50
|
+
column '01 through 12'
|
51
|
+
end
|
52
|
+
row do
|
53
|
+
column 'n'
|
54
|
+
column 'Numeric representation of a month, without leading zeros'
|
55
|
+
column '1 through 12'
|
56
|
+
end
|
57
|
+
row do
|
58
|
+
column 'M'
|
59
|
+
column 'A short textual representation of a month'
|
60
|
+
column 'Jan through Dec'
|
61
|
+
end
|
62
|
+
row do
|
63
|
+
column 'U'
|
64
|
+
column 'The number of seconds since the Unix Epoch'
|
65
|
+
column '1413704993', numeric: false
|
66
|
+
end
|
67
|
+
|
68
|
+
row do
|
69
|
+
column 'y'
|
70
|
+
column 'A two digit representation of a year'
|
71
|
+
column '99 or 03'
|
72
|
+
end
|
73
|
+
|
74
|
+
row do
|
75
|
+
column 'Y'
|
76
|
+
column 'A full numeric representation of a year, 4 digits'
|
77
|
+
column '1999 or 2003'
|
78
|
+
end
|
79
|
+
row do
|
80
|
+
column 'Z'
|
81
|
+
column 'ISO Date format'
|
82
|
+
column '2017-03-04T01:23:43.000Z'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
display 'Time Formatting Tokens', id: :time
|
87
|
+
table do
|
88
|
+
header do
|
89
|
+
column 'Character '
|
90
|
+
column 'Description'
|
91
|
+
column 'Example'
|
92
|
+
end
|
93
|
+
row do
|
94
|
+
column 'H'
|
95
|
+
column 'Hours (24 hours)'
|
96
|
+
column '00 to 23'
|
97
|
+
end
|
98
|
+
row do
|
99
|
+
column 'h'
|
100
|
+
column 'Hours'
|
101
|
+
column '1 to 12'
|
102
|
+
end
|
103
|
+
row do
|
104
|
+
column 'i'
|
105
|
+
column 'Minutes'
|
106
|
+
column '00 to 59'
|
107
|
+
end
|
108
|
+
row do
|
109
|
+
column 'S'
|
110
|
+
column 'Seconds, 2 digits'
|
111
|
+
column '00 to 59'
|
112
|
+
end
|
113
|
+
row do
|
114
|
+
column 's'
|
115
|
+
column 'Seconds'
|
116
|
+
column '0, 1 to 59'
|
117
|
+
end
|
118
|
+
row do
|
119
|
+
column 'K'
|
120
|
+
column 'AM/PM'
|
121
|
+
column 'AM or PM'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
data/app/demo/index.pom
CHANGED
@@ -7,13 +7,20 @@ Voom::Presenters.define(:index) do
|
|
7
7
|
indented_grid do
|
8
8
|
headline 'Presenters', id: :headline
|
9
9
|
subheading 'Presenters are to HTML what C is to assembly'
|
10
|
-
body ['A presenter describes a user interface. It is evaluated and a presenter object model (POM) is returned.',
|
11
|
-
'A client that renders POM can display the given user interface.']
|
12
10
|
|
13
|
-
|
11
|
+
body ['A presenter describes a user interface using a ruby DSL.',
|
12
|
+
'The presenter is evaluated and a presenter object model (POM) is generated.',
|
13
|
+
'A client that renders POM can display the given user interface.']
|
14
14
|
|
15
|
-
|
16
|
-
end
|
15
|
+
body 'To get started checkout the components and events.'
|
17
16
|
|
17
|
+
subheading 'For example this is the presenter dsl for this page:', level: 2
|
18
18
|
|
19
|
+
source = File.read(__FILE__)
|
20
|
+
body <<~HEREDOC
|
21
|
+
```
|
22
|
+
#{source}
|
23
|
+
```
|
24
|
+
HEREDOC
|
25
|
+
end
|
19
26
|
end
|
data/app/demo/markdown.pom
CHANGED
@@ -28,46 +28,39 @@ Voom::Presenters.define(:markdown) do
|
|
28
28
|
body '1. Item 1', '2. Item 2'
|
29
29
|
|
30
30
|
title 'Full Sample'
|
31
|
-
body
|
32
|
-
# Markdown Sample
|
33
|
-
|
34
|
-
----
|
35
|
-
## what is Markdown?
|
36
|
-
see [Wikipedia](http://en.wikipedia.org/wiki/Markdown)
|
37
|
-
|
38
|
-
> Markdown is a lightweight markup language, originally created by John Gruber and Aaron Swartz allowing people "to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML)".
|
39
|
-
|
40
|
-
----
|
41
|
-
## markdown quick reference
|
42
|
-
# headers
|
43
|
-
|
44
|
-
*emphasis*
|
45
|
-
|
46
|
-
**strong**
|
47
|
-
|
48
|
-
* list
|
49
|
-
|
50
|
-
>block quote
|
51
|
-
|
52
|
-
`code inline`
|
53
|
-
|
54
|
-
```ruby
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
```
|
59
|
-
[links](http://wikipedia.org)
|
60
|
-
|
61
|
-
----
|
62
|
-
## changelog
|
63
|
-
* 17-Feb-2013 re-design
|
64
|
-
|
65
|
-
----
|
66
|
-
## thanks
|
67
|
-
* [markdown-js](https://github.com/evilstreak/markdown-js)
|
68
|
-
|
31
|
+
body <<~HEREDOC
|
32
|
+
# Markdown Sample
|
33
|
+
|
34
|
+
----
|
35
|
+
## what is Markdown?
|
36
|
+
see [Wikipedia](http://en.wikipedia.org/wiki/Markdown)
|
37
|
+
|
38
|
+
> Markdown is a lightweight markup language, originally created by John Gruber and Aaron Swartz allowing people "to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML)".
|
39
|
+
|
40
|
+
----
|
41
|
+
## markdown quick reference
|
42
|
+
# headers
|
43
|
+
|
44
|
+
*emphasis*
|
45
|
+
|
46
|
+
**strong**
|
47
|
+
|
48
|
+
* list
|
49
|
+
|
50
|
+
>block quote
|
51
|
+
|
52
|
+
`code inline`
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
require 'redcarpet'
|
56
|
+
markdown = Redcarpet.new("Hello World!")
|
57
|
+
puts markdown.to_html
|
58
|
+
```
|
59
|
+
[links](http://wikipedia.org)
|
60
|
+
|
61
|
+
----
|
62
|
+
## changelog
|
63
|
+
* 17-Feb-2013 re-design
|
69
64
|
HEREDOC
|
70
|
-
|
71
|
-
|
72
65
|
end
|
73
66
|
end
|
@@ -5,11 +5,11 @@ Voom::Presenters.define(:context_list) do
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def time
|
8
|
-
Time.now unless context.fetch(
|
8
|
+
Time.now unless context.fetch(:hide_time) {false}
|
9
9
|
end
|
10
10
|
|
11
11
|
def scrubbed_context
|
12
|
-
scrubbed_keys = context.fetch(:exclude) {%w{title file
|
12
|
+
scrubbed_keys = context.fetch(:exclude) {%w{title file hide_time}}
|
13
13
|
context.select {|k, _| !scrubbed_keys.include?(k.to_s)}
|
14
14
|
end
|
15
15
|
end
|
data/app/demo/styles.pom
CHANGED
@@ -22,5 +22,6 @@ Voom::Presenters.define(:styles) do
|
|
22
22
|
'aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat',
|
23
23
|
'nulla pariatur.'], level: 1
|
24
24
|
body 'Body 2 text, calling something out.', level: 2
|
25
|
+
body 'You can use [markdown](/markdown) in your typography'
|
25
26
|
end
|
26
27
|
end
|
data/config.ru
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
if ENV['VOOM_ENV']=='integration_testing'
|
3
|
+
require 'simplecov'
|
4
|
+
if ENV['CIRCLE_ARTIFACTS']
|
5
|
+
dir = File.join(ENV['CIRCLE_ARTIFACTS'], "coverage")
|
6
|
+
SimpleCov.coverage_dir(dir)
|
7
|
+
end
|
8
|
+
SimpleCov.start
|
9
|
+
end
|
10
|
+
|
2
11
|
ENV['VOOM_ROOT'] = File.expand_path(__dir__)
|
3
12
|
libdir = File.join(ENV['VOOM_ROOT'], 'lib')
|
4
13
|
$:.unshift(libdir) unless $:.include?(libdir)
|
@@ -7,6 +7,7 @@ require_relative 'mixins/avatar'
|
|
7
7
|
require_relative 'mixins/text_fields'
|
8
8
|
require_relative 'mixins/icons'
|
9
9
|
require_relative 'mixins/snackbars'
|
10
|
+
require_relative 'mixins/date_time_fields'
|
10
11
|
|
11
12
|
module Voom
|
12
13
|
module Presenters
|
@@ -16,6 +17,7 @@ module Voom
|
|
16
17
|
include Mixins::Common
|
17
18
|
include Mixins::Attaches
|
18
19
|
include Mixins::TextFields
|
20
|
+
include Mixins::DateTimeFields
|
19
21
|
include Mixins::Icons
|
20
22
|
include Mixins::Snackbars
|
21
23
|
|
@@ -5,6 +5,7 @@ require_relative 'mixins/attaches'
|
|
5
5
|
require_relative 'mixins/text_fields'
|
6
6
|
require_relative 'mixins/selects'
|
7
7
|
require_relative 'mixins/snackbars'
|
8
|
+
require_relative 'mixins/date_time_fields'
|
8
9
|
|
9
10
|
module Voom
|
10
11
|
module Presenters
|
@@ -14,6 +15,7 @@ module Voom
|
|
14
15
|
include Mixins::Common
|
15
16
|
include Mixins::Attaches
|
16
17
|
include Mixins::TextFields
|
18
|
+
include Mixins::DateTimeFields
|
17
19
|
include Mixins::Selects
|
18
20
|
include Mixins::Snackbars
|
19
21
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'datetime_base'
|
2
|
+
|
3
|
+
module Voom
|
4
|
+
module Presenters
|
5
|
+
module DSL
|
6
|
+
module Components
|
7
|
+
class DateField < DatetimeBase
|
8
|
+
attr_reader :config
|
9
|
+
|
10
|
+
def initialize(**attribs_, &block)
|
11
|
+
super(type: :date, **attribs_, &block)
|
12
|
+
merge_config(:min_date)
|
13
|
+
merge_config(:max_date)
|
14
|
+
expand!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'text_field'
|
2
|
+
|
3
|
+
module Voom
|
4
|
+
module Presenters
|
5
|
+
module DSL
|
6
|
+
module Components
|
7
|
+
class DatetimeBase < TextField
|
8
|
+
attr_reader :config
|
9
|
+
|
10
|
+
def initialize(**attribs_, &block)
|
11
|
+
super(**attribs_, &block)
|
12
|
+
@config = {}
|
13
|
+
map_config(:format, :alt_format, true)
|
14
|
+
merge_config(:disable)
|
15
|
+
merge_config(:enable)
|
16
|
+
merge_config(:mode)
|
17
|
+
merge_config(:time_24hr, true)
|
18
|
+
|
19
|
+
clear_icon(:clear) do
|
20
|
+
event :click do
|
21
|
+
snackbar 'Clicked'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def clear_icon(icon=nil, **attribs, &block)
|
27
|
+
return @clear_icon if locked?
|
28
|
+
@clear_icon = icon ? Components::Icon.new(parent: self, icon: icon,
|
29
|
+
context: context,
|
30
|
+
**attribs, &block) : nil
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def merge_config(attrib, default=false)
|
35
|
+
attrib_value = attribs.delete(attrib) {default ? default(attrib) : nil}
|
36
|
+
@config.merge!({attrib => attrib_value}) if attrib_value
|
37
|
+
end
|
38
|
+
|
39
|
+
def map_config(attrib, new_attrib, default=false)
|
40
|
+
attrib_value = attribs.delete(attrib) {default ? default(attrib) : nil}
|
41
|
+
@config.merge!({new_attrib => attrib_value}) if attrib_value
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'datetime_base'
|
2
|
+
|
3
|
+
module Voom
|
4
|
+
module Presenters
|
5
|
+
module DSL
|
6
|
+
module Components
|
7
|
+
class DatetimeField < DatetimeBase
|
8
|
+
attr_reader :config
|
9
|
+
|
10
|
+
def initialize(**attribs_, &block)
|
11
|
+
super(type: :datetime, **attribs_, &block)
|
12
|
+
merge_config(:min_date)
|
13
|
+
merge_config(:max_date)
|
14
|
+
merge_config(:min_time)
|
15
|
+
merge_config(:max_time)
|
16
|
+
expand!
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -12,6 +12,7 @@ require_relative 'mixins/attaches'
|
|
12
12
|
require_relative 'mixins/expansion_panels'
|
13
13
|
require_relative 'mixins/content'
|
14
14
|
require_relative 'mixins/typography'
|
15
|
+
require_relative 'mixins/date_time_fields'
|
15
16
|
|
16
17
|
module Voom
|
17
18
|
module Presenters
|
@@ -21,6 +22,7 @@ module Voom
|
|
21
22
|
include Mixins::Append
|
22
23
|
include Mixins::Grids
|
23
24
|
include Mixins::TextFields
|
25
|
+
include Mixins::DateTimeFields
|
24
26
|
include Mixins::Selects
|
25
27
|
include Mixins::Toggles
|
26
28
|
include Mixins::Buttons
|
@@ -8,6 +8,7 @@ require_relative 'mixins/chips'
|
|
8
8
|
require_relative 'mixins/snackbars'
|
9
9
|
require_relative 'mixins/selects'
|
10
10
|
require_relative 'mixins/text_fields'
|
11
|
+
require_relative 'mixins/date_time_fields'
|
11
12
|
|
12
13
|
module Voom
|
13
14
|
module Presenters
|
@@ -42,6 +43,7 @@ module Voom
|
|
42
43
|
include Mixins::Dialogs
|
43
44
|
include Mixins::Chips
|
44
45
|
include Mixins::TextFields
|
46
|
+
include Mixins::DateTimeFields
|
45
47
|
include Mixins::Selects
|
46
48
|
include Mixins::Toggles
|
47
49
|
include Mixins::Snackbars
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Voom
|
2
|
+
module Presenters
|
3
|
+
module DSL
|
4
|
+
module Components
|
5
|
+
module Mixins
|
6
|
+
module DateTimeFields
|
7
|
+
def datetime_field(**attribs, &block)
|
8
|
+
self << Components::DatetimeField.new(parent: self,
|
9
|
+
context: context,
|
10
|
+
**attribs, &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def date_field(**attribs, &block)
|
14
|
+
self << Components::DateField.new(parent: self,
|
15
|
+
context: context,
|
16
|
+
**attribs, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def time_field(**attribs, &block)
|
20
|
+
self << Components::TimeField.new(parent: self,
|
21
|
+
context: context,
|
22
|
+
**attribs, &block)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -66,7 +66,7 @@ module Voom
|
|
66
66
|
def initialize(**attribs_, &block)
|
67
67
|
super(type: :column, **attribs_, &block)
|
68
68
|
value = attribs.delete(:value)
|
69
|
-
@numeric = attribs.delete(:numeric)
|
69
|
+
@numeric = attribs.delete(:numeric){numeric?(value)}
|
70
70
|
self.value(value) if value
|
71
71
|
@color = attribs.delete(:color)
|
72
72
|
@components = []
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'datetime_base'
|
2
|
+
|
3
|
+
module Voom
|
4
|
+
module Presenters
|
5
|
+
module DSL
|
6
|
+
module Components
|
7
|
+
class TimeField < DatetimeBase
|
8
|
+
attr_reader :config
|
9
|
+
|
10
|
+
def initialize(**attribs_, &block)
|
11
|
+
super(type: :time, **attribs_, &block)
|
12
|
+
map_config(:min_time, :min_date)
|
13
|
+
map_config(:max_time, :max_date)
|
14
|
+
expand!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -5,6 +5,7 @@ require_relative 'components/mixins/helpers'
|
|
5
5
|
require_relative 'components/mixins/dialogs'
|
6
6
|
require_relative 'components/mixins/snackbars'
|
7
7
|
require_relative 'components/mixins/text_fields'
|
8
|
+
require_relative 'components/mixins/date_time_fields'
|
8
9
|
require_relative 'invalid_presenter'
|
9
10
|
|
10
11
|
require 'voom/serializer'
|
@@ -23,6 +24,8 @@ module Voom
|
|
23
24
|
include Components::Mixins::Snackbars
|
24
25
|
include Components::Mixins::Icons
|
25
26
|
include Components::Mixins::TextFields
|
27
|
+
include Components::Mixins::DateTimeFields
|
28
|
+
|
26
29
|
|
27
30
|
include Voom::Serializer
|
28
31
|
include Voom::Trace
|