voom-presenters 0.1.13 → 2.0.3
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/.circleci/config.yml +1 -1
- data/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.github/ISSUE_TEMPLATE/questions-support.md +10 -0
- data/.github/workflows/semantic-release.yml +42 -0
- data/.gitignore +3 -2
- data/.releaserc +15 -0
- data/.ruby-version +2 -1
- data/CHANGELOG.md +143 -0
- data/CONTRIBUTING.md +60 -0
- data/Gemfile +14 -4
- data/Gemfile.lock +111 -65
- data/HISTORY.md +61 -0
- data/Procfile +1 -0
- data/README.md +55 -24
- data/app/demo/components/avatars.pom +40 -0
- data/app/demo/components/cards.pom +11 -4
- data/app/demo/components/chips.pom +65 -52
- data/app/demo/components/content.pom +111 -0
- data/app/demo/components/date_fields.pom +1 -1
- data/app/demo/components/datetime_fields.pom +6 -0
- data/app/demo/components/dialogs.pom +175 -6
- data/app/demo/components/drawers.pom +1 -1
- data/app/demo/components/file_inputs.pom +52 -0
- data/app/demo/components/footers.pom +1 -1
- data/app/demo/components/google_maps.pom +22 -0
- data/app/demo/components/headers.pom +80 -20
- data/app/demo/components/icons.pom +86 -55
- data/app/demo/components/image_lists.pom +100 -0
- data/app/demo/components/images.pom +45 -0
- data/app/demo/components/layouts.pom +15 -5
- data/app/demo/components/lists.pom +48 -3
- data/app/demo/components/menus.pom +14 -4
- data/app/demo/components/nav/menu.pom +40 -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/number_fields.pom +53 -0
- data/app/demo/components/padding.pom +96 -0
- data/app/demo/components/progress.pom +71 -0
- data/app/demo/components/selects.pom +44 -5
- data/app/demo/components/sliders.pom +54 -0
- data/app/demo/components/snackbar.pom +10 -0
- data/app/demo/components/steppers.pom +178 -0
- data/app/demo/components/tab_bars.pom +66 -0
- data/app/demo/components/tables.pom +96 -13
- data/app/demo/components/text_areas.pom +23 -3
- data/app/demo/components/text_fields.pom +75 -17
- data/app/demo/components/toggles.pom +83 -16
- data/app/demo/components/tooltips.pom +10 -10
- data/app/demo/components/unordered_list.pom +81 -0
- data/app/demo/custom_css.pom +37 -0
- data/app/demo/events/actions/autocomplete.pom +3 -3
- data/app/demo/events/actions/clear.pom +25 -0
- data/app/demo/events/actions/dialogs/discard.pom +9 -0
- data/app/demo/events/actions/dialogs/show_dialog.pom +4 -2
- data/app/demo/events/actions/last_response.pom +40 -0
- data/app/demo/events/actions/loads.pom +16 -6
- data/app/demo/events/actions/posts.pom +1 -1
- data/app/demo/events/actions/prompt_if_dirty.pom +54 -0
- data/app/demo/events/actions/toggle_visiblity.pom +4 -3
- data/app/demo/events/content_as_form.pom +313 -0
- data/app/demo/events/nav/drawer.pom +7 -3
- data/app/demo/events/parallel.pom +44 -0
- data/app/demo/events/tagged_input.pom +37 -0
- data/app/demo/hello_world.pom +3 -0
- data/app/demo/index.pom +5 -5
- data/app/demo/markdown.pom +1 -0
- data/app/demo/namespaces.pom +89 -0
- data/app/demo/nav/top_nav.pom +22 -4
- data/app/demo/patterns.pom +19 -0
- data/app/demo/patterns/drag_drop.pom +89 -0
- data/app/demo/patterns/floating_card.pom +29 -0
- data/app/demo/patterns/search_select.pom +106 -0
- data/app/demo/plugins/chart.pom +254 -0
- data/app/demo/plugins/image_crop.pom +44 -0
- data/app/demo/plugins/index.pom +29 -0
- data/app/demo/plugins/nav/drawer.pom +19 -0
- data/app/demo/shared/context_list.pom +2 -2
- data/app/demo/styles.pom +24 -12
- data/bin/console +4 -4
- data/component-status.yml +26 -26
- data/config.ru +21 -10
- data/docs/settings.md +81 -0
- data/exe/presenters +3 -0
- data/lib/hash_ext/traverse.rb +14 -0
- data/lib/voom.rb +25 -0
- data/lib/voom/container_methods.rb +2 -2
- data/lib/voom/engine.rb +5 -0
- data/lib/voom/presenters/api/app.rb +46 -13
- data/lib/voom/presenters/api/router.rb +3 -87
- data/lib/voom/presenters/app.rb +3 -3
- data/lib/voom/presenters/cli.rb +28 -0
- data/lib/voom/presenters/demo/dragon_drop.rb +48 -0
- data/lib/voom/presenters/demo/echo.rb +7 -0
- data/lib/voom/presenters/demo/slow.rb +18 -0
- data/lib/voom/presenters/dsl/components/actions/autocomplete.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/base.rb +65 -0
- data/lib/voom/presenters/dsl/components/actions/clear.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/close_dialog.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/deletes.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/dialog.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/loads.rb +31 -0
- data/lib/voom/presenters/dsl/components/actions/navigates.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/post_message.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/posts.rb +20 -0
- data/lib/voom/presenters/dsl/components/actions/prompt_if_dirty.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/remove.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/replaces.rb +25 -0
- data/lib/voom/presenters/dsl/components/actions/snackbar.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/stepper.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/toggle_disabled.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/toggle_visibility.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/updates.rb +20 -0
- data/lib/voom/presenters/dsl/components/avatar.rb +5 -10
- data/lib/voom/presenters/dsl/components/badge.rb +0 -2
- data/lib/voom/presenters/dsl/components/base.rb +37 -21
- data/lib/voom/presenters/dsl/components/button.rb +23 -17
- data/lib/voom/presenters/dsl/components/card.rb +54 -42
- data/lib/voom/presenters/dsl/components/checkbox.rb +2 -2
- data/lib/voom/presenters/dsl/components/chip.rb +10 -13
- data/lib/voom/presenters/dsl/components/chipset.rb +33 -0
- data/lib/voom/presenters/dsl/components/content.rb +33 -13
- data/lib/voom/presenters/dsl/components/date_field.rb +1 -1
- data/lib/voom/presenters/dsl/components/datetime_base.rb +0 -3
- data/lib/voom/presenters/dsl/components/datetime_field.rb +0 -2
- data/lib/voom/presenters/dsl/components/dialog.rb +41 -13
- data/lib/voom/presenters/dsl/components/drawer.rb +13 -8
- data/lib/voom/presenters/dsl/components/event.rb +117 -60
- data/lib/voom/presenters/dsl/components/event_base.rb +1 -3
- data/lib/voom/presenters/dsl/components/expansion_panel.rb +3 -6
- data/lib/voom/presenters/dsl/components/file_input.rb +34 -0
- data/lib/voom/presenters/dsl/components/footer.rb +2 -2
- data/lib/voom/presenters/dsl/components/form.rb +3 -16
- data/lib/voom/presenters/dsl/components/grid.rb +64 -22
- data/lib/voom/presenters/dsl/components/header.rb +19 -6
- data/lib/voom/presenters/dsl/components/hidden_field.rb +1 -3
- data/lib/voom/presenters/dsl/components/icon.rb +3 -6
- data/lib/voom/presenters/dsl/components/icon_base.rb +6 -8
- data/lib/voom/presenters/dsl/components/icon_toggle.rb +3 -5
- data/lib/voom/presenters/dsl/components/image.rb +61 -13
- data/lib/voom/presenters/dsl/components/image_list.rb +43 -0
- data/lib/voom/presenters/dsl/components/input.rb +14 -5
- data/lib/voom/presenters/dsl/components/link.rb +33 -0
- data/lib/voom/presenters/dsl/components/list.rb +11 -16
- data/lib/voom/presenters/dsl/components/lists/action.rb +11 -14
- data/lib/voom/presenters/dsl/components/lists/actions.rb +7 -10
- data/lib/voom/presenters/dsl/components/lists/header.rb +2 -2
- data/lib/voom/presenters/dsl/components/lists/line.rb +34 -25
- data/lib/voom/presenters/dsl/components/lists/separator.rb +2 -2
- data/lib/voom/presenters/dsl/components/menu.rb +56 -16
- data/lib/voom/presenters/dsl/components/mixins/append.rb +2 -2
- data/lib/voom/presenters/dsl/components/mixins/attaches.rb +7 -3
- data/lib/voom/presenters/dsl/components/mixins/avatar.rb +1 -4
- data/lib/voom/presenters/dsl/components/mixins/buttons.rb +1 -1
- data/lib/voom/presenters/dsl/components/mixins/chips.rb +0 -3
- data/lib/voom/presenters/dsl/components/mixins/chipset.rb +19 -0
- data/lib/voom/presenters/dsl/components/mixins/common.rb +21 -16
- 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 +0 -3
- data/lib/voom/presenters/dsl/components/mixins/event.rb +2 -4
- 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/image_lists.rb +15 -0
- data/lib/voom/presenters/dsl/components/mixins/last_response.rb +48 -0
- data/lib/voom/presenters/dsl/components/mixins/menus.rb +1 -1
- data/lib/voom/presenters/dsl/components/mixins/padding.rb +42 -0
- data/lib/voom/presenters/dsl/components/mixins/progress.rb +16 -0
- 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 +17 -0
- data/lib/voom/presenters/dsl/components/mixins/tables.rb +15 -0
- data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +10 -3
- data/lib/voom/presenters/dsl/components/mixins/toggles.rb +0 -5
- data/lib/voom/presenters/dsl/components/mixins/tooltips.rb +0 -1
- data/lib/voom/presenters/dsl/components/mixins/typography.rb +91 -14
- data/lib/voom/presenters/dsl/components/mixins/yield_to.rb +2 -2
- data/lib/voom/presenters/dsl/components/number_field.rb +20 -0
- data/lib/voom/presenters/dsl/components/page.rb +0 -1
- data/lib/voom/presenters/dsl/components/page_title.rb +31 -0
- data/lib/voom/presenters/dsl/components/progress.rb +27 -0
- data/lib/voom/presenters/dsl/components/radio_button.rb +0 -1
- data/lib/voom/presenters/dsl/components/rich_text_area.rb +20 -0
- data/lib/voom/presenters/dsl/components/select.rb +23 -12
- data/lib/voom/presenters/dsl/components/separator.rb +21 -0
- data/lib/voom/presenters/dsl/components/slider.rb +38 -0
- data/lib/voom/presenters/dsl/components/snackbar.rb +2 -2
- data/lib/voom/presenters/dsl/components/stepper.rb +96 -0
- data/lib/voom/presenters/dsl/components/switch.rb +0 -2
- data/lib/voom/presenters/dsl/components/tab_bar.rb +50 -0
- data/lib/voom/presenters/dsl/components/table.rb +126 -35
- data/lib/voom/presenters/dsl/components/text_area.rb +4 -5
- data/lib/voom/presenters/dsl/components/text_field.rb +55 -16
- data/lib/voom/presenters/dsl/components/time_field.rb +0 -2
- data/lib/voom/presenters/dsl/components/toggle_base.rb +8 -6
- data/lib/voom/presenters/dsl/components/tooltip.rb +1 -2
- data/lib/voom/presenters/dsl/components/typography.rb +6 -7
- data/lib/voom/presenters/dsl/components/unordered_list.rb +50 -0
- data/lib/voom/presenters/dsl/definer.rb +0 -4
- data/lib/voom/presenters/dsl/definition.rb +9 -6
- data/lib/voom/presenters/dsl/protect_from_forgery.rb +43 -0
- data/lib/voom/presenters/dsl/user_interface.rb +43 -32
- data/lib/voom/presenters/errors.rb +1 -0
- data/lib/voom/presenters/errors/invalid_dsl.rb +8 -0
- data/lib/voom/presenters/errors/parameter_validation.rb +1 -3
- data/lib/voom/presenters/generators/inflectors.rb +59 -0
- data/lib/voom/presenters/generators/plugin.rb +115 -0
- data/lib/voom/presenters/generators/templates/plugin/.gitignore +12 -0
- data/lib/voom/presenters/generators/templates/plugin/Gemfile +6 -0
- data/lib/voom/presenters/generators/templates/plugin/LICENSE.txt.tt +21 -0
- data/lib/voom/presenters/generators/templates/plugin/README.md +253 -0
- data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/actions/action.rb.tt +16 -0
- data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/actions/dsl.rb.tt +22 -0
- data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/component.rb.tt +18 -0
- data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/dsl.rb.tt +19 -0
- data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/helpers/helper.rb.tt +15 -0
- data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/plugin.rb.tt +9 -0
- data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/web_client/components/actions/data.rb.tt +17 -0
- data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/web_client/components/render.rb.tt +23 -0
- data/lib/voom/presenters/generators/templates/plugin/presenter_plugin.gemspec.tt +21 -0
- data/lib/voom/presenters/generators/templates/plugin/views/assets/css/components/component.css.tt +21 -0
- data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/actions/action.js.tt +15 -0
- data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/component.js.tt +39 -0
- data/lib/voom/presenters/generators/templates/plugin/views/components/component.erb.tt +14 -0
- data/lib/voom/presenters/generators/templates/plugin/views/components/component_header.erb.tt +20 -0
- data/lib/voom/presenters/helpers.rb +2 -8
- data/lib/voom/presenters/helpers/date.rb +3 -3
- data/lib/voom/presenters/helpers/inflector.rb +1 -1
- data/lib/voom/presenters/helpers/rails.rb +18 -6
- data/lib/voom/presenters/helpers/rails/model_table.rb +14 -6
- data/lib/voom/presenters/helpers/redact.rb +13 -0
- data/lib/voom/presenters/helpers/route.rb +15 -2
- data/lib/voom/presenters/helpers/time.rb +1 -1
- data/lib/voom/presenters/namespace.rb +12 -0
- data/lib/voom/presenters/pluggable.rb +37 -0
- data/lib/voom/presenters/plugins.rb +7 -0
- data/lib/voom/presenters/plugins/google_maps.rb +24 -0
- data/lib/voom/presenters/plugins/google_maps/google_map.erb +10 -0
- data/lib/voom/presenters/plugins/google_maps/google_map.rb +41 -0
- data/lib/voom/presenters/{dsl.rb → registry.rb} +14 -10
- data/lib/voom/presenters/router.rb +59 -0
- data/lib/voom/presenters/settings.rb +70 -39
- data/lib/voom/presenters/version.rb +3 -1
- data/lib/voom/presenters/web_client/app.rb +121 -34
- data/lib/voom/presenters/web_client/component_decorator_factory.rb +27 -0
- data/lib/voom/presenters/web_client/component_html_decorator.rb +50 -0
- data/lib/voom/presenters/web_client/component_renderer.rb +49 -0
- data/lib/voom/presenters/web_client/custom_css.rb +65 -0
- data/lib/voom/presenters/web_client/custom_render.rb +31 -0
- data/lib/voom/presenters/web_client/helpers/expand_hash.rb +19 -0
- data/lib/voom/presenters/web_client/helpers/form_helpers.rb +14 -0
- data/lib/voom/presenters/web_client/helpers/padding_helpers.rb +21 -0
- data/lib/voom/presenters/web_client/plugin_headers.rb +37 -0
- data/lib/voom/presenters/web_client/router.rb +3 -89
- data/lib/voom/railtie.rb +37 -0
- data/lib/voom/serializer.rb +2 -2
- data/lib/voom/symbol/to_str.rb +3 -3
- data/lib/voom/trace.rb +0 -2
- data/presenters.gemspec +12 -7
- data/public/bundle.css +18221 -0
- data/public/bundle.js +59949 -0
- data/public/img/demo/avatar.jpg +0 -0
- data/public/presenters/custom_css.css +26 -0
- data/public/style-bundle.js +2 -2
- data/public/wc.js +52704 -0
- data/scripts/build.sh +10 -0
- data/views/mdc/.babelrc +8 -0
- data/views/mdc/.eslintrc.yml +24 -0
- data/views/mdc/.nvmrc +1 -0
- data/views/mdc/assets/js/app.js +30 -6
- data/views/mdc/assets/js/components/base-component.js +160 -2
- data/views/mdc/assets/js/components/base-container.js +87 -0
- data/views/mdc/assets/js/components/base-toggle.js +56 -0
- data/views/mdc/assets/js/components/button.js +71 -9
- data/views/mdc/assets/js/components/cards.js +13 -2
- data/views/mdc/assets/js/components/checkboxes.js +11 -11
- data/views/mdc/assets/js/components/chips.js +104 -7
- data/views/mdc/assets/js/components/content.js +14 -0
- data/views/mdc/assets/js/components/data-tables.js +15 -0
- data/views/mdc/assets/js/components/datetime.js +83 -20
- data/views/mdc/assets/js/components/dialogs.js +130 -27
- data/views/mdc/assets/js/components/drag_n_drop.js +182 -0
- data/views/mdc/assets/js/components/drawer.js +43 -0
- data/views/mdc/assets/js/components/events.js +195 -68
- data/views/mdc/assets/js/components/events/action_parameter.js +62 -0
- data/views/mdc/assets/js/components/events/action_parameter.test.js +62 -0
- data/views/mdc/assets/js/components/events/autocomplete.js +15 -17
- data/views/mdc/assets/js/components/events/base.js +142 -16
- data/views/mdc/assets/js/components/events/clears.js +15 -12
- data/views/mdc/assets/js/components/events/close_dialog.js +50 -0
- data/views/mdc/assets/js/components/events/dialog.js +32 -14
- data/views/mdc/assets/js/components/events/encode.js +8 -0
- data/views/mdc/assets/js/components/events/errors.js +175 -92
- data/views/mdc/assets/js/components/events/loads.js +50 -11
- data/views/mdc/assets/js/components/events/navigates.js +17 -15
- data/views/mdc/assets/js/components/events/plugin.js +18 -0
- data/views/mdc/assets/js/components/events/post_message.js +21 -0
- data/views/mdc/assets/js/components/events/posts.js +169 -47
- data/views/mdc/assets/js/components/events/prompt_if_dirty.js +67 -0
- data/views/mdc/assets/js/components/events/removes.js +21 -0
- data/views/mdc/assets/js/components/events/replaces.js +110 -57
- data/views/mdc/assets/js/components/events/snackbar.js +10 -10
- data/views/mdc/assets/js/components/events/stepper.js +21 -0
- data/views/mdc/assets/js/components/events/toggle_disabled.js +41 -0
- data/views/mdc/assets/js/components/events/toggle_visibility.js +62 -16
- data/views/mdc/assets/js/components/file-inputs.js +76 -0
- data/views/mdc/assets/js/components/form-fields.js +16 -0
- data/views/mdc/assets/js/components/forms.js +9 -60
- data/views/mdc/assets/js/components/get_event_target.js +15 -0
- data/views/mdc/assets/js/components/grid.js +21 -0
- data/views/mdc/assets/js/components/header.js +20 -0
- data/views/mdc/assets/js/components/hidden-fields.js +44 -0
- data/views/mdc/assets/js/components/icon-toggles.js +10 -17
- data/views/mdc/assets/js/components/images.js +19 -0
- data/views/mdc/assets/js/components/initialize.js +62 -18
- data/views/mdc/assets/js/components/lists.js +10 -5
- data/views/mdc/assets/js/components/menus.js +66 -20
- data/views/mdc/assets/js/components/mixins/dirtyable.js +22 -0
- data/views/mdc/assets/js/components/mixins/event-handler.js +7 -7
- data/views/mdc/assets/js/components/mixins/visibility-observer.js +35 -0
- data/views/mdc/assets/js/components/plugins.js +86 -0
- data/views/mdc/assets/js/components/progress.js +31 -0
- data/views/mdc/assets/js/components/radios.js +14 -0
- data/views/mdc/assets/js/components/rich-text-area.js +227 -0
- data/views/mdc/assets/js/components/rich-text-area/horizontal-rule-blot.js +23 -0
- data/views/mdc/assets/js/components/root_document.js +5 -0
- data/views/mdc/assets/js/components/selects.js +41 -30
- data/views/mdc/assets/js/components/sliders.js +67 -0
- data/views/mdc/assets/js/components/snackbar.js +17 -23
- data/views/mdc/assets/js/components/steppers.js +48 -0
- data/views/mdc/assets/js/components/switches.js +10 -32
- data/views/mdc/assets/js/components/tab-bars.js +28 -0
- data/views/mdc/assets/js/components/text-fields.js +117 -43
- data/views/mdc/assets/js/components/tooltip.js +17 -0
- data/views/mdc/assets/js/components/typography.js +28 -0
- data/views/mdc/assets/js/components/uninitialize.js +7 -0
- 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/js/wc.js +111 -0
- data/views/mdc/assets/scss/app.scss +20 -5
- data/views/mdc/assets/scss/components/avatar.scss +51 -7
- data/views/mdc/assets/scss/components/button.scss +20 -7
- data/views/mdc/assets/scss/components/card.scss +13 -7
- data/views/mdc/assets/scss/components/checkbox.scss +0 -4
- data/views/mdc/assets/scss/components/chip.scss +4 -0
- data/views/mdc/assets/scss/components/content.scss +36 -0
- data/views/mdc/assets/scss/components/data-table.scss +91 -0
- data/views/mdc/assets/scss/components/datetime.scss +7 -2
- data/views/mdc/assets/scss/components/dialog.scss +7 -2
- data/views/mdc/assets/scss/components/drag_n_drop.scss +17 -0
- data/views/mdc/assets/scss/components/drawer.scss +82 -0
- data/views/mdc/assets/scss/components/expansion-panel.scss +2 -2
- data/views/mdc/assets/scss/components/fab.scss +23 -4
- data/views/mdc/assets/scss/components/file-input.scss +18 -0
- data/views/mdc/assets/scss/components/grid.scss +74 -3
- data/views/mdc/assets/scss/components/header.scss +21 -0
- data/views/mdc/assets/scss/components/icon-button-toggles.scss +2 -0
- data/views/mdc/assets/scss/components/icon.scss +23 -0
- data/views/mdc/assets/scss/components/image-list.scss +18 -0
- data/views/mdc/assets/scss/components/image.scss +14 -16
- data/views/mdc/assets/scss/components/list.scss +19 -0
- data/views/mdc/assets/scss/components/menu.scss +14 -3
- data/views/mdc/assets/scss/components/progress.scss +1 -0
- data/views/mdc/assets/scss/components/radio.scss +4 -0
- data/views/mdc/assets/scss/components/rich-text-area.scss +73 -0
- data/views/mdc/assets/scss/components/select.scss +6 -3
- data/views/mdc/assets/scss/components/separator.scss +3 -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 +13 -4
- data/views/mdc/assets/scss/components/tab-bars.scss +4 -0
- data/views/mdc/assets/scss/components/textfield.scss +14 -3
- data/views/mdc/assets/scss/components/tooltip.scss +3 -0
- data/views/mdc/assets/scss/components/typography.scss +10 -0
- data/views/mdc/assets/scss/components/unordered-lists.scss +17 -0
- data/views/mdc/assets/scss/components/vendor/quill.snow.css +945 -0
- data/views/mdc/assets/scss/material.blue_grey-orange.min.css +1 -1
- data/views/mdc/assets/scss/media.scss +39 -0
- data/views/mdc/assets/scss/palette.scss +16 -0
- data/views/mdc/assets/scss/styles.scss +40 -1
- data/views/mdc/assets/scss/theme.scss +25 -2
- data/views/mdc/body/dismissable-drawer.erb +34 -0
- data/views/mdc/body/drawer/divider.erb +1 -0
- data/views/mdc/body/drawer/item.erb +13 -0
- data/views/mdc/body/drawer/label.erb +1 -0
- data/views/mdc/body/drawers/menu.erb +1 -1
- data/views/mdc/body/footers/menu_item.erb +2 -2
- data/views/mdc/body/header.erb +38 -30
- data/views/mdc/body/modal-drawer.erb +35 -0
- data/views/mdc/body/snackbar.erb +12 -6
- data/views/mdc/components/actions/autocomplete.rb +8 -0
- data/views/mdc/components/actions/clear.rb +11 -0
- data/views/mdc/components/actions/close_dialog.rb +10 -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 +17 -0
- data/views/mdc/components/actions/navigates.rb +11 -0
- data/views/mdc/components/actions/post.rb +14 -0
- data/views/mdc/components/actions/post_message.rb +10 -0
- data/views/mdc/components/actions/prompt_if_dirty.rb +17 -0
- data/views/mdc/components/actions/remove.rb +10 -0
- data/views/mdc/components/actions/replaces.rb +16 -0
- data/views/mdc/components/actions/resolver.rb +39 -0
- data/views/mdc/components/actions/snackbar.rb +12 -0
- data/views/mdc/components/actions/stepper.rb +10 -0
- data/views/mdc/components/actions/toggle_disabled.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/avatar.erb +12 -7
- data/views/mdc/components/badge.erb +1 -1
- data/views/mdc/components/button.erb +10 -8
- data/views/mdc/components/buttons/button.erb +19 -14
- data/views/mdc/components/buttons/fab.erb +9 -2
- data/views/mdc/components/buttons/icon.erb +12 -5
- data/views/mdc/components/buttons/image.erb +11 -5
- data/views/mdc/components/{display.erb → caption.erb} +0 -0
- data/views/mdc/components/card.erb +67 -41
- data/views/mdc/components/checkbox.erb +32 -23
- data/views/mdc/components/chip.erb +39 -22
- data/views/mdc/components/chipset.erb +18 -0
- data/views/mdc/components/content.erb +37 -11
- data/views/mdc/components/datetime.erb +12 -17
- data/views/mdc/components/dialog.erb +45 -22
- data/views/mdc/components/drag_and_drop/drag_and_drop.rb +16 -0
- data/views/mdc/components/event.erb +3 -9
- data/views/mdc/components/expansion_panel.erb +8 -6
- data/views/mdc/components/file_input.erb +17 -0
- data/views/mdc/components/form.erb +7 -8
- data/views/mdc/components/grid.erb +27 -10
- data/views/mdc/components/headline.erb +2 -0
- data/views/mdc/components/hidden_field.erb +5 -1
- data/views/mdc/components/icon.erb +7 -5
- data/views/mdc/components/icon_toggle.erb +9 -8
- data/views/mdc/components/image.erb +23 -5
- data/views/mdc/components/image_list.erb +38 -0
- data/views/mdc/components/link.erb +3 -13
- data/views/mdc/components/list.erb +9 -4
- data/views/mdc/components/list/actions/switch.erb +1 -1
- data/views/mdc/components/list/avatar.erb +2 -1
- data/views/mdc/components/list/header.erb +5 -3
- data/views/mdc/components/list/hidden_field.erb +3 -0
- data/views/mdc/components/list/icon.erb +2 -1
- data/views/mdc/components/list/line.erb +24 -13
- data/views/mdc/components/list/menu.erb +7 -2
- data/views/mdc/components/list/separator.erb +1 -1
- data/views/mdc/components/menu.erb +20 -16
- data/views/mdc/components/number_field.erb +38 -0
- data/views/mdc/components/{subheading.erb → overline.erb} +0 -0
- data/views/mdc/components/page_title.erb +2 -2
- data/views/mdc/components/progress.erb +11 -0
- data/views/mdc/components/radio_button.erb +19 -10
- data/views/mdc/components/render.erb +2 -3
- data/views/mdc/components/rich_text_area.erb +22 -0
- data/views/mdc/components/select.erb +28 -8
- data/views/mdc/components/separator.erb +3 -0
- data/views/mdc/components/shared/hint_error_display.erb +9 -0
- data/views/mdc/components/shared/input_label.erb +7 -0
- data/views/mdc/components/slider.erb +43 -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 +28 -12
- data/views/mdc/components/tab_bar.erb +35 -0
- data/views/mdc/components/table.erb +28 -13
- data/views/mdc/components/table/checkbox.erb +20 -0
- data/views/mdc/components/table/column.erb +18 -0
- data/views/mdc/components/table/footer.erb +8 -0
- data/views/mdc/components/table/header.erb +14 -4
- data/views/mdc/components/table/pagination.erb +11 -24
- data/views/mdc/components/table/row.erb +7 -5
- data/views/mdc/components/text_area.erb +15 -7
- data/views/mdc/components/text_field.erb +38 -28
- data/views/mdc/components/tooltip.erb +2 -2
- data/views/mdc/components/typography.erb +7 -5
- data/views/mdc/components/unordered_list.erb +10 -0
- data/views/mdc/components/unordered_list/icon.erb +3 -0
- data/views/mdc/components/unordered_list/list_item.erb +7 -0
- data/views/mdc/layout.erb +45 -31
- data/views/mdc/package-lock.json +11801 -6869
- data/views/mdc/package.json +66 -29
- data/views/mdc/web.erb +4 -0
- data/views/mdc/webpack.config.js +14 -1
- metadata +327 -37
- data/app/demo/component_status.pom +0 -76
- data/app/demo/components/forms.pom +0 -31
- data/lib/voom-presenters.rb +0 -9
- data/lib/voom/presenters-engine.rb +0 -41
- data/lib/voom/presenters.rb +0 -13
- data/lib/voom/presenters/dsl/components/action.rb +0 -35
- data/lib/voom/presenters/web_client/markdown_render.rb +0 -16
- data/public/.gitignore +0 -2
- data/scripts/bump.sh +0 -4
- data/scripts/deploy-demo.sh +0 -2
- data/scripts/release.sh +0 -5
- data/views/mdc/assets/js/dialog-polyfill.js +0 -738
- data/views/mdc/assets/js/material.js +0 -3996
- data/views/mdc/assets/scss/components/icon-toggles.scss +0 -9
- data/views/mdc/assets/scss/components/table-pagination.scss +0 -65
- data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +0 -13
- data/views/mdc/body/drawer.erb +0 -18
- data/views/mdc/components/modal.erb +0 -15
- data/views/mdc/components/static.erb +0 -7
@@ -1,15 +1,19 @@
|
|
1
1
|
Voom::Presenters.define(:events_drawer) do
|
2
2
|
helpers Voom::Presenters::Helpers::Inflector
|
3
|
+
|
4
|
+
events = %i[field_level_events form_level_events tagged_input parallel_events].sort
|
5
|
+
actions = %i[dialog replaces loads toggle_visibility snackbar updates deletes posts clear last_response prompt_if_dirty].sort
|
6
|
+
|
3
7
|
drawer 'Events' do
|
4
8
|
menu do
|
5
|
-
|
9
|
+
events.each do |comp|
|
6
10
|
item titleize(comp) do
|
7
11
|
event :click do
|
8
12
|
loads comp
|
9
13
|
end
|
10
14
|
end
|
11
15
|
end
|
12
|
-
|
16
|
+
actions.each do |comp|
|
13
17
|
item titleize(comp) do
|
14
18
|
event :click do
|
15
19
|
loads "#{comp}_action"
|
@@ -18,4 +22,4 @@ Voom::Presenters.define(:events_drawer) do
|
|
18
22
|
end
|
19
23
|
end
|
20
24
|
end
|
21
|
-
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
Voom::Presenters.define(:parallel_content) do
|
2
|
+
content id: context['id'] do
|
3
|
+
heading6 Time.now
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
Voom::Presenters.define(:parallel_events) do
|
8
|
+
helpers Demo::Helpers::IndentedGrid
|
9
|
+
attach :top_nav
|
10
|
+
attach :events_drawer
|
11
|
+
|
12
|
+
indented_grid do
|
13
|
+
display 'Parallel Events'
|
14
|
+
body 'This demonstrates multiple event handlers for the same event, running in parallel.
|
15
|
+
It also shows the onload event running in parallel.'
|
16
|
+
|
17
|
+
event :onload do
|
18
|
+
replaces :first, :parallel_content, id: :first
|
19
|
+
end
|
20
|
+
event :onload do
|
21
|
+
replaces :second, :parallel_content, id: :second
|
22
|
+
end
|
23
|
+
|
24
|
+
button :load_in_parallel do
|
25
|
+
event :click do
|
26
|
+
replaces :third, :parallel_content, id: :third
|
27
|
+
end
|
28
|
+
event :click do
|
29
|
+
replaces :forth, :parallel_content, id: :forth
|
30
|
+
end
|
31
|
+
|
32
|
+
event :click do
|
33
|
+
replaces :fifth, :parallel_content, id: :fifth
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
content id: :first
|
38
|
+
content id: :second
|
39
|
+
content id: :third
|
40
|
+
content id: :forth
|
41
|
+
content id: :fifth
|
42
|
+
end
|
43
|
+
attach :code, file: __FILE__
|
44
|
+
end
|
@@ -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/index.pom
CHANGED
@@ -5,16 +5,16 @@ Voom::Presenters.define(:index) do
|
|
5
5
|
attach :top_nav
|
6
6
|
|
7
7
|
indented_grid do
|
8
|
-
headline '
|
9
|
-
subheading '
|
8
|
+
headline 'COmmon PResenter Language (COPRL) Ruby Demo', id: :headline
|
9
|
+
subheading 'COPRL is to HTML what C is to assembly'
|
10
10
|
|
11
|
-
body ['A presenter describes a user interface using
|
12
|
-
'The presenter is evaluated and a presenter object model (POM) is generated.',
|
11
|
+
body ['A presenter describes a user interface using DSL.',
|
12
|
+
'The presenter is evaluated and a presenter object model (POM) is generated. The POM can be serialized as JSON.',
|
13
13
|
'A client that renders POM can display the given user interface.']
|
14
14
|
|
15
15
|
body 'To get started checkout the components and events.'
|
16
16
|
|
17
|
-
subheading 'For example this is the presenter
|
17
|
+
subheading 'For example this is the complete presenter DSL for this page:', level: 2
|
18
18
|
|
19
19
|
source = File.read(__FILE__)
|
20
20
|
body <<~HEREDOC
|
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
@@ -1,9 +1,10 @@
|
|
1
1
|
Voom::Presenters.define('top_nav') do
|
2
|
+
TITLE = 'COmmon PResenters Language (COPRL) Ruby Demo'
|
2
3
|
page do
|
3
|
-
title
|
4
|
+
title TITLE
|
4
5
|
end
|
5
6
|
|
6
|
-
header
|
7
|
+
header TITLE do
|
7
8
|
nav do
|
8
9
|
item 'About' do
|
9
10
|
event :click do
|
@@ -29,12 +30,29 @@ Voom::Presenters.define('top_nav') do
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
|
-
item '
|
33
|
+
item 'Patterns' do
|
33
34
|
event :click do
|
34
|
-
loads :
|
35
|
+
loads :patterns
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
39
|
+
item 'Namespaces' do
|
40
|
+
event :click do
|
41
|
+
loads :namespaces
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
item 'Custom CSS' do
|
46
|
+
event :click do
|
47
|
+
loads :custom_css
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
item 'Plugins' do
|
52
|
+
event :click do
|
53
|
+
loads :plugins
|
54
|
+
end
|
55
|
+
end
|
38
56
|
end
|
39
57
|
end
|
40
58
|
end
|
@@ -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,89 @@
|
|
1
|
+
require_relative '../helpers/indented_grid'
|
2
|
+
require 'net/http'
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
Voom::Presenters.define(:drag_drop) do
|
7
|
+
helpers Demo::Helpers::IndentedGrid
|
8
|
+
|
9
|
+
attach :top_nav
|
10
|
+
attach :pattern_drawer
|
11
|
+
page_title 'Drag and Drop Example'
|
12
|
+
|
13
|
+
helpers do
|
14
|
+
def dragons
|
15
|
+
session = context[:session]
|
16
|
+
return [] if session.nil?
|
17
|
+
session[:dragons] ||=
|
18
|
+
[{id: 1, sort: 4, name: 'Jabberwocky', body: 'Alice in Wonderland, Alice Through the Looking Glass'},
|
19
|
+
{id: 2, sort: 3, name: 'Hydra', body: 'Hercules, Jason and the Argonauts'},
|
20
|
+
{id: 3, sort: 2, name: 'Drogon, Viserion, Rhaegal', body: 'Game of Thrones'},
|
21
|
+
{id: 4, sort: 1, name: 'Spike', body: 'My Little Pony: The Movie'}].to_json
|
22
|
+
JSON.parse(session[:dragons], object_class: OpenStruct)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
indented_grid do
|
27
|
+
grid do
|
28
|
+
column 7 do
|
29
|
+
headline 'Select a Dragon'
|
30
|
+
subtitle 'Drag and Drop to reorder the dragons, or drop on card to right to learn more about your Dragon'
|
31
|
+
list do
|
32
|
+
dragons.sort_by(&:sort).each do |dragon|
|
33
|
+
line draggable: {zone: :drag_zone_1, source_id: dragon.id, dragon_name: dragon.name, dragon_info: dragon.body},
|
34
|
+
drop_zone: {zone: :drag_zone_1} do
|
35
|
+
text dragon.name
|
36
|
+
|
37
|
+
event :drag do
|
38
|
+
snackbar "#{dragon.name} is a real drag!"
|
39
|
+
end
|
40
|
+
|
41
|
+
event :dragend do
|
42
|
+
snackbar "Done dragging #{dragon.name} around!"
|
43
|
+
end
|
44
|
+
|
45
|
+
event :drop do
|
46
|
+
posts '_dragon_drop_change_order_', target_id: dragon.id
|
47
|
+
loads :drag_drop
|
48
|
+
end
|
49
|
+
|
50
|
+
event :dropped do
|
51
|
+
snackbar "Dropped the #{dragon.name}. Whoops!"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
column 5 do
|
58
|
+
attach :drop_zone
|
59
|
+
content drop_zone: {zone: :drag_zone_2}, padding: :top do
|
60
|
+
card do
|
61
|
+
blank
|
62
|
+
text "Try to drop something here"
|
63
|
+
blank
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
attach :code, file: __FILE__
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
Voom::Presenters.define(:drop_zone) do
|
74
|
+
|
75
|
+
content id: :drop_zone, drop_zone: {zone: 'drag_zone_1'} do
|
76
|
+
card do
|
77
|
+
blank
|
78
|
+
text "Drop a dragon here..."
|
79
|
+
text "Last dropped dragon: **#{context.fetch(:dragon_name)}**" if context.key?(:dragon_name)
|
80
|
+
text "Appeard In: **#{context.fetch(:dragon_info)}**" if context.key?(:dragon_info)
|
81
|
+
blank
|
82
|
+
end
|
83
|
+
|
84
|
+
event :drop do
|
85
|
+
# posts '_echo_'
|
86
|
+
replaces :drop_zone, :drop_zone #, dragon_name: last_response.dragon_name
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../helpers/indented_grid'
|
2
|
+
|
3
|
+
Voom::Presenters.define(:floating_card) do
|
4
|
+
helpers Demo::Helpers::IndentedGrid
|
5
|
+
attach :top_nav
|
6
|
+
attach :pattern_drawer
|
7
|
+
|
8
|
+
page_title 'Floating Card'
|
9
|
+
indented_grid do
|
10
|
+
button icon: :open_in_new do
|
11
|
+
event :click do
|
12
|
+
toggle_visibility :card
|
13
|
+
end
|
14
|
+
end
|
15
|
+
content id: :card, hidden: true, float: true do
|
16
|
+
card do
|
17
|
+
media do
|
18
|
+
title "Hi I'm floating"
|
19
|
+
button icon: :close do
|
20
|
+
event :click do
|
21
|
+
hide :card
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
attach :code, file: __FILE__
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,106 @@
|
|
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
|
+
chipset do
|
92
|
+
searches.each do |search|
|
93
|
+
chip color: :primary, name: 'searches[]', value: search, id: search do
|
94
|
+
text search
|
95
|
+
icon :delete, position: :right do
|
96
|
+
event :click do
|
97
|
+
remove search
|
98
|
+
replaces :ticket_list, :ticket_list, input_tag: :input_data_container
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|