voom-presenters 0.1.13 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.md +186 -0
- data/Gemfile.lock +37 -38
- data/HISTORY.md +61 -0
- data/README.md +23 -1
- data/app/demo/components/chips.pom +6 -0
- data/app/demo/components/{forms.pom → content.pom} +3 -3
- data/app/demo/components/date_fields.pom +1 -1
- data/app/demo/components/datetime_fields.pom +6 -0
- data/app/demo/components/drawers.pom +1 -1
- data/app/demo/components/file_inputs.pom +16 -0
- data/app/demo/components/footers.pom +1 -1
- data/app/demo/components/google_maps.pom +17 -0
- data/app/demo/components/headers.pom +1 -1
- data/app/demo/components/layouts.pom +36 -4
- data/app/demo/components/lists.pom +25 -0
- data/app/demo/components/nav/menu.pom +9 -2
- data/app/demo/components/nav/pattern_drawer.pom +5 -0
- data/app/demo/components/nav/pattern_menu.pom +12 -0
- data/app/demo/components/sliders.pom +49 -0
- data/app/demo/components/snackbar.pom +10 -0
- data/app/demo/components/steppers.pom +178 -0
- data/app/demo/components/tab_bars.pom +51 -0
- data/app/demo/components/tables.pom +85 -13
- data/app/demo/components/text_areas.pom +13 -0
- data/app/demo/components/text_fields.pom +20 -8
- data/app/demo/components/toggles.pom +50 -14
- data/app/demo/components/tooltips.pom +2 -6
- data/app/demo/events/actions/clear.pom +23 -0
- data/app/demo/events/actions/loads.pom +16 -6
- data/app/demo/events/actions/posts.pom +1 -1
- data/app/demo/events/actions/toggle_visiblity.pom +4 -3
- data/app/demo/events/nav/drawer.pom +2 -2
- data/app/demo/events/tagged_input.pom +37 -0
- data/app/demo/hello_world.pom +3 -0
- data/app/demo/markdown.pom +1 -0
- data/app/demo/namespaces.pom +89 -0
- data/app/demo/nav/top_nav.pom +12 -0
- data/app/demo/patterns.pom +19 -0
- data/app/demo/patterns/search_select.pom +104 -0
- data/app/demo/shared/context_list.pom +1 -1
- data/app/demo/styles.pom +21 -11
- data/component-status.yml +11 -11
- data/config.ru +2 -1
- data/lib/voom/container_methods.rb +1 -1
- data/lib/voom/presenters-engine.rb +29 -26
- data/lib/voom/presenters.rb +15 -9
- data/lib/voom/presenters/api/app.rb +18 -5
- data/lib/voom/presenters/api/router.rb +11 -49
- data/lib/voom/presenters/demo/echo.rb +5 -0
- data/lib/voom/presenters/dsl.rb +10 -4
- data/lib/voom/presenters/dsl/components/actions/base.rb +37 -0
- data/lib/voom/presenters/dsl/components/actions/clear.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/deletes.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/dialog.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/loads.rb +32 -0
- data/lib/voom/presenters/dsl/components/actions/navigates.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/posts.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/remove.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/replaces.rb +25 -0
- data/lib/voom/presenters/dsl/components/actions/snackbar.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/stepper.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/toggle_visibility.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/updates.rb +17 -0
- data/lib/voom/presenters/dsl/components/avatar.rb +4 -5
- data/lib/voom/presenters/dsl/components/badge.rb +1 -1
- data/lib/voom/presenters/dsl/components/base.rb +20 -11
- data/lib/voom/presenters/dsl/components/button.rb +12 -10
- data/lib/voom/presenters/dsl/components/card.rb +18 -19
- data/lib/voom/presenters/dsl/components/checkbox.rb +3 -1
- data/lib/voom/presenters/dsl/components/chip.rb +9 -10
- data/lib/voom/presenters/dsl/components/content.rb +21 -11
- data/lib/voom/presenters/dsl/components/date_field.rb +1 -1
- data/lib/voom/presenters/dsl/components/datetime_base.rb +1 -2
- data/lib/voom/presenters/dsl/components/datetime_field.rb +1 -1
- data/lib/voom/presenters/dsl/components/dialog.rb +10 -6
- data/lib/voom/presenters/dsl/components/drawer.rb +6 -4
- data/lib/voom/presenters/dsl/components/event.rb +55 -39
- data/lib/voom/presenters/dsl/components/event_base.rb +2 -2
- data/lib/voom/presenters/dsl/components/expansion_panel.rb +5 -5
- data/lib/voom/presenters/dsl/components/file_input.rb +22 -0
- data/lib/voom/presenters/dsl/components/footer.rb +1 -1
- data/lib/voom/presenters/dsl/components/form.rb +17 -15
- data/lib/voom/presenters/dsl/components/google_map.rb +40 -0
- data/lib/voom/presenters/dsl/components/grid.rb +58 -18
- data/lib/voom/presenters/dsl/components/header.rb +2 -5
- data/lib/voom/presenters/dsl/components/hidden_field.rb +2 -2
- data/lib/voom/presenters/dsl/components/icon.rb +4 -5
- data/lib/voom/presenters/dsl/components/icon_base.rb +3 -3
- data/lib/voom/presenters/dsl/components/icon_toggle.rb +2 -2
- data/lib/voom/presenters/dsl/components/image.rb +3 -3
- data/lib/voom/presenters/dsl/components/input.rb +2 -2
- data/lib/voom/presenters/dsl/components/list.rb +12 -10
- data/lib/voom/presenters/dsl/components/lists/action.rb +8 -9
- data/lib/voom/presenters/dsl/components/lists/actions.rb +8 -8
- data/lib/voom/presenters/dsl/components/lists/header.rb +2 -2
- data/lib/voom/presenters/dsl/components/lists/line.rb +14 -17
- data/lib/voom/presenters/dsl/components/lists/separator.rb +2 -2
- data/lib/voom/presenters/dsl/components/menu.rb +10 -12
- data/lib/voom/presenters/dsl/components/mixins/attaches.rb +9 -3
- data/lib/voom/presenters/dsl/components/mixins/avatar.rb +0 -1
- data/lib/voom/presenters/dsl/components/mixins/buttons.rb +1 -1
- data/lib/voom/presenters/dsl/components/mixins/chips.rb +1 -2
- data/lib/voom/presenters/dsl/components/mixins/common.rb +20 -14
- data/lib/voom/presenters/dsl/components/mixins/content.rb +1 -1
- data/lib/voom/presenters/dsl/components/mixins/date_time_fields.rb +0 -3
- data/lib/voom/presenters/dsl/components/mixins/dialogs.rb +1 -2
- data/lib/voom/presenters/dsl/components/mixins/event.rb +3 -3
- data/lib/voom/presenters/dsl/components/mixins/expansion_panels.rb +1 -1
- data/lib/voom/presenters/dsl/components/mixins/file_inputs.rb +16 -0
- data/lib/voom/presenters/dsl/components/mixins/google_maps.rb +15 -0
- data/lib/voom/presenters/dsl/components/mixins/grids.rb +1 -1
- data/lib/voom/presenters/dsl/components/mixins/icons.rb +0 -1
- data/lib/voom/presenters/dsl/components/mixins/menus.rb +1 -1
- data/lib/voom/presenters/dsl/components/mixins/selects.rb +0 -1
- data/lib/voom/presenters/dsl/components/mixins/sliders.rb +15 -0
- data/lib/voom/presenters/dsl/components/mixins/snackbars.rb +0 -1
- data/lib/voom/presenters/dsl/components/mixins/steppers.rb +15 -0
- data/lib/voom/presenters/dsl/components/mixins/tab_bars.rb +15 -0
- data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +5 -3
- data/lib/voom/presenters/dsl/components/mixins/toggles.rb +1 -4
- data/lib/voom/presenters/dsl/components/mixins/tooltips.rb +0 -1
- data/lib/voom/presenters/dsl/components/mixins/typography.rb +43 -13
- data/lib/voom/presenters/dsl/components/page.rb +0 -1
- data/lib/voom/presenters/dsl/components/radio_button.rb +1 -1
- data/lib/voom/presenters/dsl/components/rich_text_area.rb +26 -0
- data/lib/voom/presenters/dsl/components/select.rb +4 -5
- data/lib/voom/presenters/dsl/components/slider.rb +39 -0
- data/lib/voom/presenters/dsl/components/snackbar.rb +2 -2
- data/lib/voom/presenters/dsl/components/stepper.rb +106 -0
- data/lib/voom/presenters/dsl/components/switch.rb +1 -1
- data/lib/voom/presenters/dsl/components/tab_bar.rb +53 -0
- data/lib/voom/presenters/dsl/components/table.rb +99 -27
- data/lib/voom/presenters/dsl/components/text_area.rb +4 -3
- data/lib/voom/presenters/dsl/components/text_field.rb +8 -12
- data/lib/voom/presenters/dsl/components/time_field.rb +1 -1
- data/lib/voom/presenters/dsl/components/toggle_base.rb +2 -2
- data/lib/voom/presenters/dsl/components/tooltip.rb +1 -2
- data/lib/voom/presenters/dsl/components/typography.rb +4 -5
- data/lib/voom/presenters/dsl/definer.rb +2 -2
- data/lib/voom/presenters/dsl/definition.rb +6 -4
- data/lib/voom/presenters/dsl/user_interface.rb +17 -21
- data/lib/voom/presenters/errors/parameter_validation.rb +1 -1
- data/lib/voom/presenters/helpers.rb +5 -5
- data/lib/voom/presenters/helpers/date.rb +3 -3
- data/lib/voom/presenters/helpers/rails.rb +7 -2
- data/lib/voom/presenters/helpers/rails/model_table.rb +14 -6
- data/lib/voom/presenters/helpers/route.rb +6 -0
- data/lib/voom/presenters/helpers/time.rb +1 -1
- data/lib/voom/presenters/namespace.rb +12 -0
- data/lib/voom/presenters/settings.rb +58 -37
- data/lib/voom/presenters/version.rb +1 -1
- data/lib/voom/presenters/web_client/app.rb +50 -20
- data/lib/voom/presenters/web_client/markdown_render.rb +24 -11
- data/lib/voom/presenters/web_client/router.rb +17 -52
- data/lib/voom/serializer.rb +2 -2
- data/lib/voom/trace.rb +1 -1
- data/presenters.gemspec +2 -1
- data/public/style-bundle.js +2 -2
- data/scripts/bump.sh +1 -0
- data/scripts/changelog.sh +5 -0
- data/scripts/deploy-demo.sh +1 -0
- data/scripts/release.sh +1 -1
- data/scripts/tag.sh +5 -0
- data/views/mdc/.babelrc +8 -0
- data/views/mdc/.eslintrc.yml +23 -0
- data/views/mdc/assets/js/app.js +19 -6
- data/views/mdc/assets/js/components/base-component.js +25 -2
- data/views/mdc/assets/js/components/base-container.js +47 -0
- data/views/mdc/assets/js/components/button.js +3 -10
- data/views/mdc/assets/js/components/cards.js +11 -0
- data/views/mdc/assets/js/components/checkboxes.js +30 -7
- data/views/mdc/assets/js/components/chips.js +38 -5
- data/views/mdc/assets/js/components/content.js +13 -0
- data/views/mdc/assets/js/components/data-tables.js +38 -0
- data/views/mdc/assets/js/components/datetime.js +61 -21
- data/views/mdc/assets/js/components/dialogs.js +25 -19
- data/views/mdc/assets/js/components/events.js +13 -3
- data/views/mdc/assets/js/components/events/base.js +13 -3
- data/views/mdc/assets/js/components/events/errors.js +1 -1
- data/views/mdc/assets/js/components/events/posts.js +53 -13
- data/views/mdc/assets/js/components/events/removes.js +20 -0
- data/views/mdc/assets/js/components/events/replaces.js +35 -36
- data/views/mdc/assets/js/components/events/stepper.js +23 -0
- data/views/mdc/assets/js/components/events/toggle_visibility.js +15 -11
- data/views/mdc/assets/js/components/file-inputs.js +29 -0
- data/views/mdc/assets/js/components/forms.js +8 -59
- data/views/mdc/assets/js/components/grid.js +20 -0
- data/views/mdc/assets/js/components/hidden-fields.js +33 -0
- data/views/mdc/assets/js/components/icon-toggles.js +7 -14
- data/views/mdc/assets/js/components/initialize.js +20 -1
- data/views/mdc/assets/js/components/lists.js +1 -1
- data/views/mdc/assets/js/components/menus.js +12 -13
- data/views/mdc/assets/js/components/mixins/visibility-observer.js +34 -0
- data/views/mdc/assets/js/components/radios.js +39 -0
- data/views/mdc/assets/js/components/rich-text-area.js +43 -0
- data/views/mdc/assets/js/components/selects.js +24 -23
- data/views/mdc/assets/js/components/sliders.js +56 -0
- data/views/mdc/assets/js/components/snackbar.js +14 -23
- data/views/mdc/assets/js/components/steppers.js +48 -0
- data/views/mdc/assets/js/components/switches.js +24 -23
- data/views/mdc/assets/js/components/tab-bars.js +14 -0
- data/views/mdc/assets/js/components/text-fields.js +37 -35
- data/views/mdc/assets/js/config.js +27 -0
- data/views/mdc/assets/js/mdl-stepper.js +1108 -0
- data/views/mdc/assets/js/utils/compatibility.js +9 -0
- data/views/mdc/assets/js/utils/config.js +73 -0
- data/views/mdc/assets/js/utils/config.test.js +59 -0
- data/views/mdc/assets/js/utils/urls.js +5 -2
- data/views/mdc/assets/scss/app.scss +11 -3
- data/views/mdc/assets/scss/components/button.scss +17 -2
- data/views/mdc/assets/scss/components/card.scss +8 -3
- data/views/mdc/assets/scss/components/checkbox.scss +0 -4
- data/views/mdc/assets/scss/components/content.scss +11 -0
- data/views/mdc/assets/scss/components/data-table.scss +80 -0
- data/views/mdc/assets/scss/components/datetime.scss +6 -0
- data/views/mdc/assets/scss/components/fab.scss +2 -1
- data/views/mdc/assets/scss/components/file-input.scss +22 -0
- data/views/mdc/assets/scss/components/grid.scss +59 -3
- data/views/mdc/assets/scss/components/image.scss +6 -0
- data/views/mdc/assets/scss/components/list.scss +13 -0
- data/views/mdc/assets/scss/components/menu.scss +1 -0
- data/views/mdc/assets/scss/components/radio.scss +4 -0
- data/views/mdc/assets/scss/components/rich-text-area.scss +37 -0
- data/views/mdc/assets/scss/components/slider.scss +1 -0
- data/views/mdc/assets/scss/components/snackbar.scss +1 -5
- data/views/mdc/assets/scss/components/stepper.scss +235 -0
- data/views/mdc/assets/scss/components/switch.scss +4 -5
- data/views/mdc/assets/scss/components/tab-bars.scss +4 -0
- data/views/mdc/assets/scss/components/textfield.scss +8 -1
- data/views/mdc/assets/scss/components/typography.scss +4 -0
- data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +2 -2
- data/views/mdc/assets/scss/components/vendor/quill.snow.css +945 -0
- data/views/mdc/assets/scss/styles.scss +3 -2
- data/views/mdc/assets/scss/theme.scss +6 -0
- data/views/mdc/body/header.erb +1 -0
- data/views/mdc/body/snackbar.erb +1 -1
- data/views/mdc/components/actions/clear.rb +11 -0
- data/views/mdc/components/actions/delete.rb +11 -0
- data/views/mdc/components/actions/dialog.rb +11 -0
- data/views/mdc/components/actions/loads.rb +11 -0
- data/views/mdc/components/actions/navigates.rb +11 -0
- data/views/mdc/components/actions/post.rb +17 -0
- data/views/mdc/components/actions/remove.rb +10 -0
- data/views/mdc/components/actions/replaces.rb +12 -0
- data/views/mdc/components/actions/snackbar.rb +10 -0
- data/views/mdc/components/actions/stepper.rb +10 -0
- data/views/mdc/components/actions/toggle_visibility.rb +10 -0
- data/views/mdc/components/actions/update.rb +10 -0
- data/views/mdc/components/button.erb +9 -6
- data/views/mdc/components/buttons/button.erb +10 -5
- data/views/mdc/components/buttons/fab.erb +8 -2
- data/views/mdc/components/buttons/icon.erb +9 -2
- data/views/mdc/components/buttons/image.erb +9 -4
- data/views/mdc/components/{display.erb → caption.erb} +0 -0
- data/views/mdc/components/card.erb +6 -3
- data/views/mdc/components/checkbox.erb +21 -9
- data/views/mdc/components/chip.erb +12 -3
- data/views/mdc/components/content.erb +6 -1
- data/views/mdc/components/datetime.erb +21 -13
- data/views/mdc/components/dialog.erb +4 -1
- data/views/mdc/components/event.erb +5 -9
- data/views/mdc/components/file_input.erb +13 -0
- data/views/mdc/components/form.erb +19 -5
- data/views/mdc/components/google_map.erb +9 -0
- data/views/mdc/components/grid.erb +18 -4
- data/views/mdc/components/headline.erb +2 -0
- data/views/mdc/components/hidden_field.erb +6 -1
- data/views/mdc/components/icon_toggle.erb +1 -1
- data/views/mdc/components/list.erb +5 -2
- data/views/mdc/components/list/actions/switch.erb +1 -1
- data/views/mdc/components/list/line.erb +7 -6
- data/views/mdc/components/menu.erb +8 -12
- data/views/mdc/components/{subheading.erb → overline.erb} +0 -0
- data/views/mdc/components/radio_button.erb +20 -10
- data/views/mdc/components/rich_text_area.erb +19 -0
- data/views/mdc/components/select.erb +7 -3
- data/views/mdc/components/slider.erb +41 -0
- data/views/mdc/components/snackbar.erb +2 -6
- data/views/mdc/components/stepper.erb +47 -0
- data/views/mdc/components/stepper/step.erb +33 -0
- data/views/mdc/components/{title.erb → subtitle.erb} +0 -0
- data/views/mdc/components/switch.erb +27 -12
- data/views/mdc/components/tab_bar.erb +29 -0
- data/views/mdc/components/table.erb +4 -2
- data/views/mdc/components/table/checkbox.erb +17 -0
- data/views/mdc/components/table/header.erb +13 -4
- data/views/mdc/components/table/pagination.erb +14 -23
- data/views/mdc/components/table/row.erb +3 -1
- data/views/mdc/components/text_area.erb +17 -7
- data/views/mdc/components/text_field.erb +31 -13
- data/views/mdc/components/typography.erb +2 -2
- data/views/mdc/layout.erb +33 -31
- data/views/mdc/package-lock.json +11019 -6996
- data/views/mdc/package.json +46 -27
- data/views/mdc/webpack.config.js +1 -0
- metadata +112 -13
- data/app/demo/events/actions/autocomplete.pom +0 -32
- data/lib/voom/presenters/dsl/components/action.rb +0 -35
- data/views/mdc/assets/js/components/events/autocomplete.js +0 -96
- data/views/mdc/assets/js/material.js +0 -3996
- data/views/mdc/assets/scss/components/table-pagination.scss +0 -65
- data/views/mdc/components/modal.erb +0 -15
- data/views/mdc/components/static.erb +0 -7
@@ -1,15 +1,16 @@
|
|
1
|
-
|
1
|
+
require 'voom/presenters/dsl/components/text_field'
|
2
2
|
|
3
3
|
module Voom
|
4
4
|
module Presenters
|
5
5
|
module DSL
|
6
6
|
module Components
|
7
7
|
class TextArea < TextField
|
8
|
-
attr_reader :rows
|
8
|
+
attr_reader :rows, :cols
|
9
9
|
|
10
10
|
def initialize(**attribs_, &block)
|
11
11
|
super(type: :text_area, **attribs_, &block)
|
12
|
-
@rows = attribs.delete(:rows) ||
|
12
|
+
@rows = attribs.delete(:rows) || default(:rows)
|
13
|
+
@cols = attribs.delete(:cols) || default(:cols) unless full_width
|
13
14
|
expand!
|
14
15
|
end
|
15
16
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require 'voom/presenters/dsl/components/input'
|
2
2
|
|
3
3
|
module Voom
|
4
4
|
module Presenters
|
@@ -6,13 +6,15 @@ module Voom
|
|
6
6
|
module Components
|
7
7
|
class TextField < Input
|
8
8
|
|
9
|
-
attr_reader :required, :full_width, :password
|
9
|
+
attr_reader :required, :full_width, :password, :disabled, :auto_complete
|
10
10
|
|
11
11
|
def initialize(**attribs_, &block)
|
12
12
|
super(type: :text_field, **attribs_, &block)
|
13
|
-
@required = attribs.delete(:required)
|
13
|
+
@required = attribs.delete(:required){ false }
|
14
14
|
@full_width = attribs.delete(:full_width){ true }
|
15
|
-
@password = attribs.delete(:password)
|
15
|
+
@password = attribs.delete(:password){ false }
|
16
|
+
@disabled = attribs.delete(:disabled){ false }
|
17
|
+
@auto_complete = attribs.delete(:auto_complete){ true }
|
16
18
|
expand!
|
17
19
|
end
|
18
20
|
|
@@ -23,8 +25,7 @@ module Voom
|
|
23
25
|
|
24
26
|
def icon(icon=nil, **attribs, &block)
|
25
27
|
return @icon if locked?
|
26
|
-
@icon = Components::Icon.new(parent: self, icon: icon,
|
27
|
-
context: context,
|
28
|
+
@icon = Components::Icon.new(parent: self, icon: icon, position: attribs.delete(:position){:right},
|
28
29
|
**attribs, &block)
|
29
30
|
end
|
30
31
|
|
@@ -47,12 +48,7 @@ module Voom
|
|
47
48
|
return @error if locked?
|
48
49
|
@error = error
|
49
50
|
end
|
50
|
-
|
51
|
-
def readonly(readonly=nil)
|
52
|
-
return @readonly if locked?
|
53
|
-
@readonly = readonly
|
54
|
-
end
|
55
|
-
|
51
|
+
|
56
52
|
private
|
57
53
|
def json_regexp(regexp)
|
58
54
|
str = regexp.inspect.
|
@@ -7,7 +7,6 @@ module Voom
|
|
7
7
|
|
8
8
|
def initialize(**attribs_, &block)
|
9
9
|
super(type: :tooltip,
|
10
|
-
context: context,
|
11
10
|
**attribs_, &block)
|
12
11
|
@position = attribs.delete(:position){ :left }
|
13
12
|
self.text(attribs.delete(:text)) if attribs.key?(:text)
|
@@ -16,7 +15,7 @@ module Voom
|
|
16
15
|
|
17
16
|
def text(*text, **attribs, &block)
|
18
17
|
return @text if locked?
|
19
|
-
@text = Components::Typography.new(parent: self, type: :text, text: text,
|
18
|
+
@text = Components::Typography.new(parent: self, type: :text, text: text, **attribs, &block)
|
20
19
|
end
|
21
20
|
end
|
22
21
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'voom/presenters/dsl/components/mixins/event'
|
2
|
+
require 'voom/presenters/dsl/components/mixins/tooltips'
|
3
3
|
|
4
4
|
module Voom
|
5
5
|
module Presenters
|
@@ -10,10 +10,10 @@ module Voom
|
|
10
10
|
|
11
11
|
attr_accessor :text, :level, :color, :position
|
12
12
|
|
13
|
-
def initialize(parent:, **attribs_, &block)
|
13
|
+
def initialize(parent:, level: nil, **attribs_, &block)
|
14
14
|
super(type: :text, parent: parent, **attribs_, &block)
|
15
15
|
@text = Array(attribs.delete(:text)||'').flatten.join("\n\n").split("\n\n")
|
16
|
-
@level =
|
16
|
+
@level = level
|
17
17
|
@color = attribs.delete(:color)
|
18
18
|
@position = Array(attribs.delete(:position)).compact
|
19
19
|
expand!
|
@@ -22,7 +22,6 @@ module Voom
|
|
22
22
|
def icon(icon=nil, **attribs, &block)
|
23
23
|
return @icon if locked?
|
24
24
|
@icon = Components::Icon.new(parent: self, icon: icon,
|
25
|
-
context: context,
|
26
25
|
**attribs, &block)
|
27
26
|
end
|
28
27
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require 'voom/presenters/dsl/user_interface'
|
2
2
|
|
3
3
|
module Voom
|
4
4
|
module Presenters
|
@@ -7,8 +7,9 @@ module Voom
|
|
7
7
|
# This class is held in the container. When a request to render a UI comes in
|
8
8
|
# It creates a new UserInterface instance, binding it to the router and context of the request
|
9
9
|
class Definition
|
10
|
-
def initialize(&block)
|
10
|
+
def initialize(namespace, &block)
|
11
11
|
@block = block
|
12
|
+
@namespace = namespace
|
12
13
|
end
|
13
14
|
|
14
15
|
def build
|
@@ -16,13 +17,14 @@ module Voom
|
|
16
17
|
end
|
17
18
|
|
18
19
|
def expand(router: , context:{}, &block)
|
19
|
-
presenter = UserInterface.new(router: router, context: context, &@block)
|
20
|
+
presenter = UserInterface.new(router: router, context: context, namespace: @namespace, &@block)
|
20
21
|
yield(presenter) if block
|
21
22
|
presenter.expand_instance
|
22
23
|
end
|
23
24
|
|
25
|
+
# Used by attach
|
24
26
|
def expand_child(parent:, context: {})
|
25
|
-
presenter = UserInterface.new(parent: parent, context: context, &@block)
|
27
|
+
presenter = UserInterface.new(parent: parent, context: context, namespace: @namespace, &@block)
|
26
28
|
presenter.expand_instance(freeze: false)
|
27
29
|
end
|
28
30
|
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
require 'ice_nine'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
require 'voom/presenters/dsl/definer'
|
3
|
+
require 'voom/presenters/dsl/components/mixins/common'
|
4
|
+
require 'voom/presenters/dsl/components/mixins/helpers'
|
5
|
+
require 'voom/presenters/dsl/components/mixins/dialogs'
|
6
|
+
require 'voom/presenters/dsl/components/mixins/snackbars'
|
7
|
+
require 'voom/presenters/dsl/components/mixins/text_fields'
|
8
|
+
require 'voom/presenters/dsl/components/mixins/date_time_fields'
|
9
|
+
require 'voom/presenters/dsl/components/mixins/attaches'
|
10
|
+
require 'voom/presenters/dsl/invalid_presenter'
|
10
11
|
|
11
12
|
require 'voom/serializer'
|
12
13
|
require 'voom/trace'
|
@@ -24,16 +25,16 @@ module Voom
|
|
24
25
|
include Components::Mixins::Icons
|
25
26
|
include Components::Mixins::TextFields
|
26
27
|
include Components::Mixins::DateTimeFields
|
27
|
-
|
28
|
+
include Components::Mixins::Attaches
|
28
29
|
|
29
30
|
include Voom::Serializer
|
30
31
|
include Voom::Trace
|
31
32
|
|
32
|
-
attr_reader :router, :context, :components
|
33
|
-
private :context, :router
|
33
|
+
attr_reader :router, :context, :components, :namespace
|
34
|
+
private :context, :router, :namespace
|
34
35
|
alias params context
|
35
36
|
|
36
|
-
def initialize(parent: nil, router: nil,
|
37
|
+
def initialize(context:, parent: nil, router: nil, namespace: [], &block)
|
37
38
|
@parent = parent
|
38
39
|
@router = router || @parent&.send(:router)
|
39
40
|
@context = context
|
@@ -42,26 +43,24 @@ module Voom
|
|
42
43
|
@drawer = nil
|
43
44
|
@components = []
|
44
45
|
@footer = nil
|
46
|
+
@namespace = namespace
|
45
47
|
add_global_helpers
|
46
48
|
end
|
47
49
|
|
48
50
|
def page(title=nil, **attribs, &block)
|
49
51
|
return @page if locked?
|
50
|
-
@page = Components::Page.new(parent: self,
|
51
|
-
**attribs, &block)
|
52
|
+
@page = Components::Page.new(parent: self, **attribs, &block)
|
52
53
|
end
|
53
54
|
|
54
55
|
def header(title=nil, **attribs, &block)
|
55
56
|
return @header if locked?
|
56
57
|
@header = Components::Header.new(parent: self, title: title,
|
57
|
-
context: context,
|
58
58
|
**attribs, &block)
|
59
59
|
end
|
60
60
|
|
61
61
|
def drawer(name=nil, **attribs, &block)
|
62
62
|
return @drawer if locked?
|
63
63
|
@drawer = Components::Drawer.new(parent: self, title: name,
|
64
|
-
context: context,
|
65
64
|
**attribs, &block)
|
66
65
|
end
|
67
66
|
|
@@ -70,17 +69,14 @@ module Voom
|
|
70
69
|
def footer(**attribs, &block)
|
71
70
|
return @footer if locked?
|
72
71
|
@footer = Components::Footer.new(parent: self,
|
73
|
-
context: context,
|
74
72
|
**attribs, &block)
|
75
73
|
end
|
76
74
|
|
77
|
-
def attach(presenter, **
|
78
|
-
|
79
|
-
pom = Voom::Presenters::App[presenter].call.expand_child(parent: self, context: context.merge(context_))
|
75
|
+
def attach(presenter, **params, &yield_block)
|
76
|
+
pom = super
|
80
77
|
@header ||= pom.header
|
81
78
|
@drawer ||= pom.drawer
|
82
79
|
@footer ||= pom.footer
|
83
|
-
@components += pom.components
|
84
80
|
end
|
85
81
|
|
86
82
|
# Called by the definition.expand method to evaluate a user interface with a different context
|
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require 'voom/presenters/helpers/date'
|
2
|
+
require 'voom/presenters/helpers/time'
|
3
|
+
require 'voom/presenters/helpers/inflector'
|
4
|
+
require 'voom/presenters/helpers/errors'
|
5
5
|
|
6
6
|
module Voom
|
7
7
|
module Presenters
|
@@ -10,7 +10,7 @@ module Voom
|
|
10
10
|
include Helpers::Date
|
11
11
|
include Helpers::Errors
|
12
12
|
if defined?(Rails)
|
13
|
-
|
13
|
+
require 'voom/presenters/helpers/rails'
|
14
14
|
include Voom::Presenters::Helpers::Rails
|
15
15
|
end
|
16
16
|
end
|
@@ -2,10 +2,10 @@ module Voom
|
|
2
2
|
module Presenters
|
3
3
|
module Helpers
|
4
4
|
module Date
|
5
|
-
LONG_FORMAT='%
|
6
|
-
SHORT_FORMAT='%
|
5
|
+
LONG_FORMAT='%B %e, %Y'
|
6
|
+
SHORT_FORMAT='%e %b'
|
7
7
|
|
8
|
-
def format_date(date, format:
|
8
|
+
def format_date(date, format: LONG_FORMAT)
|
9
9
|
date ? date.strftime(format) : ''
|
10
10
|
end
|
11
11
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
if defined?(Rails)
|
2
|
-
|
3
|
-
|
2
|
+
require 'voom/presenters/helpers/rails/currency'
|
3
|
+
require 'voom/presenters/helpers/rails/model_table'
|
4
|
+
require 'voom/presenters/namespace'
|
4
5
|
|
5
6
|
module Voom
|
6
7
|
module Presenters
|
@@ -9,11 +10,15 @@ if defined?(Rails)
|
|
9
10
|
include ActionView::Helpers::AssetUrlHelper
|
10
11
|
include Voom::Presenters::Helpers::Rails::Currency
|
11
12
|
include Voom::Presenters::Helpers::Rails::ModelTable
|
13
|
+
include Namespace
|
12
14
|
def default_url_options
|
13
15
|
{}
|
14
16
|
end
|
15
17
|
|
16
18
|
def presenters_path(presenter, **params)
|
19
|
+
presenter = _expand_namespace_(presenter, namespace)
|
20
|
+
presenter = presenter.gsub(':','/')
|
21
|
+
|
17
22
|
path = voom_presenters_web_client_app_path(params)
|
18
23
|
if path.include?('?')
|
19
24
|
path = path.sub('?', "#{presenter}?")
|
@@ -5,8 +5,9 @@ module Voom
|
|
5
5
|
module ModelTable
|
6
6
|
# Build a a table from a Rails model
|
7
7
|
def table_for(query_,
|
8
|
-
empty_icon:
|
8
|
+
empty_icon: 'far fa-folder-open fa-rotate-180',
|
9
9
|
except: [:id, :created_at, :updated_at],
|
10
|
+
timezone: nil, # The timezone to covnert _at and _on values
|
10
11
|
selectable: false, &block)
|
11
12
|
row1 = query_.first
|
12
13
|
if row1
|
@@ -16,27 +17,34 @@ module Voom
|
|
16
17
|
|
17
18
|
query_.each do |item_|
|
18
19
|
row do
|
19
|
-
_table_row_(__columns__, block, except, item_)
|
20
|
+
_table_row_(__columns__, block, except, item_, timezone: timezone)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
23
24
|
else
|
24
|
-
|
25
|
-
|
25
|
+
icon empty_icon, size: '6rem' if empty_icon
|
26
|
+
body "You have no #{query_.arel_table.name.pluralize.humanize}"
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
30
|
|
30
31
|
private
|
31
|
-
def _table_row_(__columns__, block, except, item_)
|
32
|
+
def _table_row_(__columns__, block, except, item_, timezone: nil)
|
32
33
|
__columns__.each do |col|
|
33
34
|
next if except.include?(col.name.to_sym)
|
34
|
-
|
35
|
+
value = format_value(col.name,item_.send(col.name.to_sym), timezone: timezone)
|
36
|
+
column value do
|
35
37
|
self.instance_exec(item_, col.name.to_sym, &block) if block
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
42
|
+
def format_value(col_name, value, timezone:)
|
43
|
+
return format_time_long(value, timezone: timezone) if timezone &&
|
44
|
+
col_name.ends_with?('_at') || col_name.ends_with?('_on')
|
45
|
+
value
|
46
|
+
end
|
47
|
+
|
40
48
|
def _table_header_(__columns__, except)
|
41
49
|
header do
|
42
50
|
__columns__.each do |col|
|
@@ -1,8 +1,14 @@
|
|
1
|
+
require 'voom/presenters/namespace'
|
2
|
+
|
1
3
|
module Voom
|
2
4
|
module Presenters
|
3
5
|
module Helpers
|
4
6
|
module Route
|
7
|
+
include Namespace
|
8
|
+
|
5
9
|
def presenters_path(presenter, **params)
|
10
|
+
presenter = _expand_namespace_(presenter, namespace)
|
11
|
+
presenter = presenter.gsub(':','/')
|
6
12
|
router.url(render: presenter, context: params)
|
7
13
|
end
|
8
14
|
end
|
@@ -7,7 +7,7 @@ module Voom
|
|
7
7
|
LONG_FORMAT='%m/%d/%Y %I:%M:%S %p %Z'
|
8
8
|
SHORT_FORMAT='%d %b %H:%M %Z'
|
9
9
|
|
10
|
-
def format_time(time, format:
|
10
|
+
def format_time(time, format: LONG_FORMAT, timezone: nil)
|
11
11
|
return '' unless time
|
12
12
|
time = time.in_time_zone(timezone) if timezone
|
13
13
|
time.strftime(format)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Voom
|
2
|
+
module Presenters
|
3
|
+
module Namespace
|
4
|
+
def _expand_namespace_(presenter, namespace)
|
5
|
+
presenter = presenter.to_s
|
6
|
+
return presenter if presenter.split(':').size > 1
|
7
|
+
return presenter if presenter.split('/').size > 1
|
8
|
+
namespace.any? ? namespace.join(':')+':'+presenter : presenter
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,49 +1,70 @@
|
|
1
1
|
include Voom::Trace
|
2
2
|
trace {"Loading Presenters Settings"}
|
3
|
-
|
3
|
+
require 'voom/presenters/helpers/route'
|
4
4
|
|
5
|
-
|
6
|
-
module
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
setting :
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
# Voom::Presenters::Settings.configure do |config|
|
15
|
-
# config.presenters.helpers << YourHelperModule # Passing a module
|
16
|
-
# config.presenters.helpers << &->{ def foo; :foo; end } # Passing a block
|
17
|
-
# end
|
18
|
-
setting :helpers, [Voom::Presenters::Helpers::Route]
|
19
|
-
setting :deep_freeze, true
|
20
|
-
setting :id_generator, ->(node) {"id-#{SecureRandom.hex}"}
|
21
|
-
setting :web_client do
|
22
|
-
# Add lambda's to modify the context for the presenters
|
5
|
+
unless defined?(Voom::Presenters::Settings)
|
6
|
+
module Voom
|
7
|
+
module Presenters
|
8
|
+
class Settings
|
9
|
+
extend Dry::Configurable
|
10
|
+
setting :presenters do
|
11
|
+
setting :root, []
|
12
|
+
# You can add helpers that will automatically be included
|
13
|
+
# For example:
|
23
14
|
# For example:
|
24
15
|
# Voom::Presenters::Settings.configure do |config|
|
25
|
-
# config.presenters.
|
26
|
-
#
|
27
|
-
# context.merge(aaa_identity: identity_id)
|
28
|
-
# }
|
16
|
+
# config.presenters.helpers << YourHelperModule # Passing a module
|
17
|
+
# config.presenters.helpers << &->{ def foo; :foo; end } # Passing a block
|
29
18
|
# end
|
30
|
-
setting :
|
31
|
-
|
32
|
-
|
33
|
-
setting :
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
19
|
+
setting :helpers, [Voom::Presenters::Helpers::Route]
|
20
|
+
setting :deep_freeze, true
|
21
|
+
setting :id_generator, ->(node) {"id-#{SecureRandom.hex}"}
|
22
|
+
setting :web_client do
|
23
|
+
# Add lambda's to modify the context for the presenters
|
24
|
+
# For example:
|
25
|
+
# Voom::Presenters::Settings.configure do |config|
|
26
|
+
# config.presenters.web_client.prepare_context << ->(context, session, _env){
|
27
|
+
# identity_id = session[:aaa_identity]
|
28
|
+
# context.merge(aaa_identity: identity_id)
|
29
|
+
# }
|
30
|
+
# end
|
31
|
+
setting :prepare_context, []
|
32
|
+
setting :custom_css, 'public/presenters/*.css'
|
33
|
+
end
|
34
|
+
setting :components do
|
35
|
+
setting :defaults do
|
36
|
+
setting :datetime do
|
37
|
+
setting :format, 'M j, y h:i K'
|
38
|
+
setting :time_24hr, false
|
39
|
+
end
|
40
|
+
setting :date do
|
41
|
+
setting :format, 'F j, Y'
|
42
|
+
end
|
43
|
+
setting :time do
|
44
|
+
setting :format, 'h:i K'
|
45
|
+
setting :time_24hr, false
|
46
|
+
end
|
47
|
+
setting :text_area do
|
48
|
+
setting :rows, 3
|
49
|
+
setting :cols, 80
|
50
|
+
end
|
51
|
+
# Typography
|
52
|
+
setting :headline do
|
53
|
+
setting :level, 5
|
54
|
+
end
|
55
|
+
setting :title do
|
56
|
+
setting :level, 6
|
57
|
+
end
|
58
|
+
setting :rich_text_area do
|
59
|
+
setting :rows, 25
|
60
|
+
end
|
44
61
|
end
|
45
62
|
end
|
46
63
|
end
|
64
|
+
|
65
|
+
def self.default(type, key)
|
66
|
+
config.presenters.components.defaults&.public_send(type)&.public_send(key)
|
67
|
+
end
|
47
68
|
end
|
48
69
|
end
|
49
70
|
end
|