voom-presenters 0.1.13 → 0.2.0
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.
- 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
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Voom::Presenters.define(:tagged_input) do
|
|
2
|
+
helpers Demo::Helpers::IndentedGrid
|
|
3
|
+
|
|
4
|
+
attach :top_nav
|
|
5
|
+
attach :events_drawer
|
|
6
|
+
|
|
7
|
+
indented_grid do
|
|
8
|
+
display 'Tagged Input'
|
|
9
|
+
body %(This demonstrates the ability to tag containers or components and then to post those values in an event action.
|
|
10
|
+
Sometimes you need to pull values from different nesting levels on a page to post.
|
|
11
|
+
Tags let you collect all tagged inputs from anywhere on the page and post them to some server side action.
|
|
12
|
+
An example of this can be found in the [search select](/search_select) pattern demo.)
|
|
13
|
+
|
|
14
|
+
blank
|
|
15
|
+
body 'Tags can be applied to containers and/or components.
|
|
16
|
+
Containers include content blocks, grids, forms, steppers, dialogs and cards.
|
|
17
|
+
All input components accept tags.'
|
|
18
|
+
|
|
19
|
+
title 'Example'
|
|
20
|
+
|
|
21
|
+
content tag: :somefields do
|
|
22
|
+
radio_button text: :on, name: :check_me, value: :on, checked: true
|
|
23
|
+
radio_button text: :off, name: :check_me, value: :off
|
|
24
|
+
end
|
|
25
|
+
text_field name: :myfield2, tag: :somefields do
|
|
26
|
+
label 'More Data to post'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
button 'Press me' do
|
|
30
|
+
event :click do
|
|
31
|
+
replaces :context_list, :context_list, input_tag: :somefields
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
attach :context_list
|
|
35
|
+
attach :code, file: __FILE__
|
|
36
|
+
end
|
|
37
|
+
end
|
data/app/demo/markdown.pom
CHANGED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require_relative 'helpers/indented_grid'
|
|
2
|
+
|
|
3
|
+
Voom::Presenters.define(:namespaces) do
|
|
4
|
+
helpers Demo::Helpers::IndentedGrid
|
|
5
|
+
attach :top_nav
|
|
6
|
+
page_title 'Namespaces' do
|
|
7
|
+
icon 'far fa-object-group'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
indented_grid do
|
|
11
|
+
body 'Presenters support namespaces. The namespace is an optional parameter to the define method:'
|
|
12
|
+
blank
|
|
13
|
+
body "`Voom::Presenters.define(:mypresenter, namespace: :namespace1)` or"
|
|
14
|
+
attach 'namespace2:alternate_namespacing'
|
|
15
|
+
|
|
16
|
+
body %(When defined in a namespace all other presenters in the same namespace are accessable without scoping the namespace.
|
|
17
|
+
When accessing a presenter outside your current namespace, simple provide the namespace(s) with `:` as the separator.
|
|
18
|
+
attach, loads and replaces all accept namespaced presenters:)
|
|
19
|
+
blank
|
|
20
|
+
attach 'namespace1:attach_with_namespace'
|
|
21
|
+
blank
|
|
22
|
+
body 'Both loads and replaces are namespace aware. To call a presenter in the ame namespace, no scoping is needed.
|
|
23
|
+
To call a presenter in another namespace, you need to fully qualify it.'
|
|
24
|
+
button 'Load' do
|
|
25
|
+
event :click do
|
|
26
|
+
loads 'namespace1:attach_with_namespace', replaced: 'I was loaded'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
button 'Replace' do
|
|
30
|
+
event :click do
|
|
31
|
+
replaces :attach_with_namespace_id, 'namespace1:attach_with_namespace', replaced: 'I was replaced'
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
blank
|
|
35
|
+
attach 'namespace1:namespace2:nested_namespaces'
|
|
36
|
+
button 'Load' do
|
|
37
|
+
event :click do
|
|
38
|
+
loads 'namespace1:namespace2:nested_namespaces', replaced: 'I was loaded'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
button 'Replace' do
|
|
42
|
+
event :click do
|
|
43
|
+
replaces :nested_namespaces_id, 'namespace1:namespace2:nested_namespaces', replaced: 'I was replaced'
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
blank
|
|
47
|
+
body %(Routes add the namespace(s) as a prefix: /namespace1/mypresenter)
|
|
48
|
+
blank
|
|
49
|
+
overline 'Notes:'
|
|
50
|
+
attach 'namespace1:namespace2:notes'
|
|
51
|
+
end
|
|
52
|
+
attach :code, file: __FILE__
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
Voom::Presenters.define(:attach_with_namespace, namespace: :namespace1) do
|
|
56
|
+
content id: :attach_with_namespace_id do
|
|
57
|
+
body "For example: `attach 'namespace1:mypresenter'` to insert/attach a presenter in a different namespace."
|
|
58
|
+
attach :replaced # Demonstrates calling top level presenters from a namespaced presenter
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
Voom::Presenters.define(:nested_namespaces, namespace: [:namespace1, :namespace2]) do
|
|
63
|
+
content id: :nested_namespaces_id do
|
|
64
|
+
body %(Namespaces can be nested two levels deep by passing an array of namespaces:
|
|
65
|
+
`Voom::Presenters.define(:mypresenter, namespace: [:foo,:bar])`)
|
|
66
|
+
attach :replaced # Demonstrates calling top level presenters from a namespaced presenter
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
Voom::Presenters.define(:replaced) do
|
|
71
|
+
body "#{context[:replaced]}"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
Voom::Presenters.define('namespace2:alternate_namespacing') do
|
|
75
|
+
body "`Voom::Presenters.define('namespace1:mypresenter')`"
|
|
76
|
+
attach :blank_line # demonstrates attaching a presenter in the same namespace mixing alternate naming
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
Voom::Presenters.define(:blank_line, namespace: :namespace2) do
|
|
80
|
+
blank
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
Voom::Presenters.define('namespace2:notes', namespace: :namespace1) do
|
|
84
|
+
body <<~HEREDOC
|
|
85
|
+
* You can mix the two syntax's. `Voom::Presenters.define('namespace2:mypresenter', namespace: 'namespace1')`
|
|
86
|
+
* With this syntax attach/loads and replaces will operate in namespace1, unless fully qualified
|
|
87
|
+
* Unlike ruby modules you are either inside a namespace and can call presenters without qualification, or you are not and you must fully qualify them.
|
|
88
|
+
HEREDOC
|
|
89
|
+
end
|
data/app/demo/nav/top_nav.pom
CHANGED
|
@@ -29,6 +29,18 @@ Voom::Presenters.define('top_nav') do
|
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
item 'Patterns' do
|
|
33
|
+
event :click do
|
|
34
|
+
loads :patterns
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
item 'Namespaces' do
|
|
39
|
+
event :click do
|
|
40
|
+
loads :namespaces
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
32
44
|
item 'Status' do
|
|
33
45
|
event :click do
|
|
34
46
|
loads :component_status
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require_relative 'helpers/indented_grid'
|
|
2
|
+
|
|
3
|
+
Voom::Presenters.define('patterns') do
|
|
4
|
+
helpers Demo::Helpers::IndentedGrid
|
|
5
|
+
attach 'top_nav'
|
|
6
|
+
attach 'pattern_drawer'
|
|
7
|
+
page_title 'Patterns'
|
|
8
|
+
|
|
9
|
+
indented_grid do
|
|
10
|
+
grid do
|
|
11
|
+
column 12 do
|
|
12
|
+
icon 'fa-hand-point-left', position: :left
|
|
13
|
+
subheading 'Select a pattern'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
attach :code, file: __FILE__
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
require_relative '../helpers/indented_grid'
|
|
2
|
+
|
|
3
|
+
module Demo
|
|
4
|
+
module Helpers
|
|
5
|
+
module SearchSelectDemo
|
|
6
|
+
def searches
|
|
7
|
+
search = context.fetch(:search) {nil}
|
|
8
|
+
searches = context.fetch(:searches) {[]}
|
|
9
|
+
searches << search unless search.nil? || search == ''
|
|
10
|
+
searches.select{|s| s != ''}
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Voom::Presenters.define(:search_select) do
|
|
18
|
+
helpers Demo::Helpers::IndentedGrid
|
|
19
|
+
attach :top_nav
|
|
20
|
+
attach :pattern_drawer
|
|
21
|
+
|
|
22
|
+
page_title 'Search and Select Pattern'
|
|
23
|
+
indented_grid do
|
|
24
|
+
grid tag: :input_data_container do
|
|
25
|
+
column 6 do
|
|
26
|
+
grid do
|
|
27
|
+
column 4 do
|
|
28
|
+
content do
|
|
29
|
+
text_field id: :search_field, name: :search, full_width: false do
|
|
30
|
+
label 'Search Tickets'
|
|
31
|
+
event :input do
|
|
32
|
+
replaces :ticket_list, :ticket_list, input_tag: :input_data_container
|
|
33
|
+
end
|
|
34
|
+
event :change do
|
|
35
|
+
replaces :ticket_list, :ticket_list, input_tag: :input_data_container
|
|
36
|
+
replaces :completed_searches, :completed_searches, input_tag: :input_data_container
|
|
37
|
+
clears :search_field
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
column 8 do
|
|
43
|
+
attach :completed_searches
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
attach :ticket_list, title: 'Search Results'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
attach :code, file: __FILE__
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Voom::Presenters.define(:ticket_list) do
|
|
54
|
+
helpers Demo::Helpers::SearchSelectDemo
|
|
55
|
+
helpers do
|
|
56
|
+
def ticket_data
|
|
57
|
+
[OpenStruct.new(id: 1, event_name: 'Pearl Jam', type: 'General Admission', amount: 10.00),
|
|
58
|
+
OpenStruct.new(id: 2, event_name: 'Pearl Jam', type: 'Reserved Seating', amount: 25.00),
|
|
59
|
+
OpenStruct.new(id: 3, event_name: 'Temple of the Dog', type: 'General Admission', amount: 5.00),
|
|
60
|
+
OpenStruct.new(id: 4, event_name: 'Temple of the Dog', type: 'Reserved Seating', amount: 10.00),
|
|
61
|
+
OpenStruct.new(id: 5, event_name: 'Japandroids', type: 'General Admission', amount: 7.50),
|
|
62
|
+
OpenStruct.new(id: 6, event_name: 'Japandroids', type: 'Reserved Seating', amount: 15.00)]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def tickets
|
|
66
|
+
re = Regexp.union(searches)
|
|
67
|
+
ticket_data.select {|ticket| re.match(ticket.event_name)}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def ticket_ids
|
|
71
|
+
context.fetch(:ticket_id) {[]}
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
content id: :ticket_list do
|
|
76
|
+
list selectable: true do
|
|
77
|
+
tickets.each do |ticket|
|
|
78
|
+
line name: :ticket_id, value: ticket.id, checked: ticket_ids.include?(ticket.id.to_s) do
|
|
79
|
+
text ticket.event_name
|
|
80
|
+
subtitle ticket.type
|
|
81
|
+
info "$#{ticket.amount}"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
Voom::Presenters.define(:completed_searches) do
|
|
89
|
+
helpers Demo::Helpers::SearchSelectDemo
|
|
90
|
+
content id: :completed_searches do
|
|
91
|
+
searches.each do |search|
|
|
92
|
+
chip color: :primary, name: 'searches[]', value: search, id: search do
|
|
93
|
+
text search
|
|
94
|
+
icon :delete, position: :right do
|
|
95
|
+
event :click do
|
|
96
|
+
remove search
|
|
97
|
+
replaces :ticket_list, :ticket_list, input_tag: :input_data_container
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
data/app/demo/styles.pom
CHANGED
|
@@ -8,23 +8,33 @@ Voom::Presenters.define(:styles) do
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
indented_grid do
|
|
11
|
-
|
|
11
|
+
headline'Typography', level: 1
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
headline 'Headline'
|
|
20
|
-
title
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
headline 'Headline 1', level: 1
|
|
14
|
+
headline 'Headline 2', level: 2
|
|
15
|
+
headline 'Headline 3', level: 3
|
|
16
|
+
headline 'Headline 4', level: 4
|
|
17
|
+
headline 'Headline 5', level: 5
|
|
18
|
+
headline 'Default Headline Size'
|
|
19
|
+
headline 'Headline 6', level: 6
|
|
20
|
+
title 'Title'
|
|
21
|
+
subtitle 'subtitle 1', level: 1
|
|
22
|
+
subtitle 'subtitle 2', level: 2
|
|
23
23
|
body ['Body 1 paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut',
|
|
24
24
|
'labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut',
|
|
25
25
|
'aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat',
|
|
26
26
|
'nulla pariatur.'], level: 1
|
|
27
27
|
body 'Body 2 text, calling something out.', level: 2
|
|
28
|
+
caption 'Caption'
|
|
29
|
+
overline 'Overline'
|
|
28
30
|
body 'You can use [markdown](/markdown) in your typography'
|
|
31
|
+
body '`blank` will insert a blank line'
|
|
32
|
+
blank
|
|
33
|
+
body 'Line above me, intentionally left blank'
|
|
34
|
+
separator
|
|
35
|
+
body 'Line above me is a separator'
|
|
36
|
+
link 'You can have a link', 'https://www.google.com/search?q=link&source=lnms&tbm=isch&sa=X&ved=0ahUKEwipr4zY_JXdAhVNXK0KHWFNCdYQ_AUICigB&biw=1651&bih=932'
|
|
37
|
+
|
|
29
38
|
end
|
|
39
|
+
attach :code, file: __FILE__
|
|
30
40
|
end
|
data/component-status.yml
CHANGED
|
@@ -129,12 +129,12 @@
|
|
|
129
129
|
Notes:
|
|
130
130
|
-
|
|
131
131
|
Components: Selection controls/switches
|
|
132
|
-
Implementation:
|
|
132
|
+
Implementation: MDC
|
|
133
133
|
MDL:
|
|
134
134
|
MDC: Y
|
|
135
135
|
Priority:
|
|
136
|
-
Completeness:
|
|
137
|
-
Notes:
|
|
136
|
+
Completeness: 2
|
|
137
|
+
Notes:
|
|
138
138
|
-
|
|
139
139
|
Components: Select fields
|
|
140
140
|
Implementation: MDC
|
|
@@ -145,11 +145,11 @@
|
|
|
145
145
|
Notes:
|
|
146
146
|
-
|
|
147
147
|
Components: Sliders
|
|
148
|
-
Implementation:
|
|
148
|
+
Implementation: MDC
|
|
149
149
|
MDL:
|
|
150
150
|
MDC: Y
|
|
151
151
|
Priority: medium
|
|
152
|
-
Completeness:
|
|
152
|
+
Completeness: 2
|
|
153
153
|
Notes:
|
|
154
154
|
-
|
|
155
155
|
Components: Snackbars & toasts
|
|
@@ -161,11 +161,11 @@
|
|
|
161
161
|
Notes:
|
|
162
162
|
-
|
|
163
163
|
Components: Steppers
|
|
164
|
-
Implementation:
|
|
165
|
-
MDL:
|
|
164
|
+
Implementation: MDL
|
|
165
|
+
MDL: Y
|
|
166
166
|
MDC: N
|
|
167
167
|
Priority: medium
|
|
168
|
-
Completeness:
|
|
168
|
+
Completeness: 1
|
|
169
169
|
Notes: https://ahlechandre.github.io/mdl-stepper/
|
|
170
170
|
-
|
|
171
171
|
Components: Subheaders
|
|
@@ -177,11 +177,11 @@
|
|
|
177
177
|
Notes: This should be doable using typography
|
|
178
178
|
-
|
|
179
179
|
Components: Tabs
|
|
180
|
-
Implementation:
|
|
180
|
+
Implementation: Y
|
|
181
181
|
MDL:
|
|
182
182
|
MDC: Y
|
|
183
|
-
Priority:
|
|
184
|
-
Completeness:
|
|
183
|
+
Priority:
|
|
184
|
+
Completeness: 2
|
|
185
185
|
Notes:
|
|
186
186
|
-
|
|
187
187
|
Components: Text fields
|
data/config.ru
CHANGED
|
@@ -9,6 +9,7 @@ if ENV['VOOM_ENV']=='integration_testing'
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
ENV['VOOM_ROOT'] = File.expand_path(__dir__)
|
|
12
|
+
ENV['GOOGLE_API_KEY'] = 'AIzaSyDhSgj9XSBLY5E9Rx5pP2ILQ7IXnD4uX2Q'
|
|
12
13
|
libdir = File.join(ENV['VOOM_ROOT'], 'lib')
|
|
13
14
|
$:.unshift(libdir) unless $:.include?(libdir)
|
|
14
15
|
require 'voom/presenters/api/app'
|
|
@@ -16,7 +17,6 @@ require 'voom/presenters/web_client/app'
|
|
|
16
17
|
require 'voom/presenters/demo/search'
|
|
17
18
|
require 'voom/presenters/demo/echo'
|
|
18
19
|
|
|
19
|
-
|
|
20
20
|
use Voom::Presenters::Demo::Search
|
|
21
21
|
use Voom::Presenters::Demo::Echo
|
|
22
22
|
|
|
@@ -28,3 +28,4 @@ Voom::Presenters::Settings.configure do |config|
|
|
|
28
28
|
end
|
|
29
29
|
Voom::Presenters::App.boot!
|
|
30
30
|
|
|
31
|
+
|
|
@@ -1,41 +1,44 @@
|
|
|
1
1
|
if Rails.version =~ /^4/
|
|
2
|
-
require_dependency 'voom/presenters'
|
|
2
|
+
ActiveSupport::Dependencies.require_dependency 'voom/presenters'
|
|
3
3
|
else
|
|
4
4
|
require 'voom/presenters'
|
|
5
5
|
end
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
module
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
unless defined?(Voom::Presenter::Railtie)
|
|
8
|
+
module Voom
|
|
9
|
+
module Presenter
|
|
10
|
+
class Engine < ::Rails::Engine
|
|
11
|
+
config.eager_load_paths += Dir["#{config.root}/lib"]
|
|
12
|
+
end
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
|
-
end
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
module Voom
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
module Voom
|
|
18
|
+
module Presenter
|
|
19
|
+
class Railtie < ::Rails::Railtie
|
|
20
|
+
BOOT = -> {
|
|
21
|
+
Voom::Presenters::Settings.configure do |config|
|
|
22
|
+
config.presenters.root = Rails.root.join('app')
|
|
23
|
+
config.presenters.deep_freeze = false
|
|
24
|
+
end
|
|
25
|
+
Voom::Presenters::App.boot!
|
|
26
|
+
}
|
|
27
|
+
RELOADER = ActiveSupport::FileUpdateChecker.new([], {"app" => ["pom"]}) do
|
|
28
|
+
Voom::Presenters::App.reset!
|
|
29
|
+
BOOT.call
|
|
23
30
|
end
|
|
24
|
-
Voom::Presenters::App.boot!
|
|
25
|
-
}
|
|
26
|
-
RELOADER = ActiveSupport::FileUpdateChecker.new([], {"app" => ["pom"]}) do
|
|
27
|
-
Voom::Presenters::App.reset!
|
|
28
|
-
BOOT.call
|
|
29
|
-
end
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
initializer 'voom-presenters' do |app|
|
|
33
|
+
app.reloaders << RELOADER
|
|
34
|
+
end
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
config.to_prepare do
|
|
37
|
+
reloaded = RELOADER.execute_if_updated
|
|
38
|
+
BOOT.call unless reloaded
|
|
39
|
+
require_dependency Voom::Presenter::Engine.root.join('lib', 'voom-presenters').to_s
|
|
40
|
+
end
|
|
38
41
|
end
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
|
-
end
|
|
44
|
+
end
|