voom-presenters 0.2.0 → 2.0.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/.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 +39 -0
- data/.gitignore +3 -2
- data/.releaserc +8 -0
- data/.ruby-version +2 -1
- data/CHANGELOG.md +64 -114
- data/CONTRIBUTING.md +60 -0
- data/Gemfile +12 -3
- data/Gemfile.lock +83 -45
- data/Procfile +1 -0
- data/README.md +41 -39
- data/app/demo/component_status.pom +1 -1
- data/app/demo/components/avatars.pom +40 -0
- data/app/demo/components/cards.pom +11 -4
- data/app/demo/components/chips.pom +61 -54
- data/app/demo/components/content.pom +96 -16
- data/app/demo/components/dialogs.pom +175 -6
- data/app/demo/components/file_inputs.pom +38 -2
- data/app/demo/components/google_maps.pom +6 -1
- 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 +3 -25
- data/app/demo/components/lists.pom +24 -4
- data/app/demo/components/menus.pom +14 -4
- data/app/demo/components/nav/menu.pom +38 -7
- data/app/demo/components/nav/pattern_menu.pom +2 -2
- 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 +5 -0
- data/app/demo/components/tab_bars.pom +15 -0
- data/app/demo/components/tables.pom +51 -40
- data/app/demo/components/text_areas.pom +23 -16
- data/app/demo/components/text_fields.pom +61 -15
- data/app/demo/components/toggles.pom +35 -4
- data/app/demo/components/tooltips.pom +8 -4
- data/app/demo/components/unordered_list.pom +81 -0
- data/app/demo/custom_css.pom +37 -0
- data/app/demo/events/actions/autocomplete.pom +32 -0
- data/app/demo/events/actions/clear.pom +5 -3
- 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/prompt_if_dirty.pom +54 -0
- 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/nav/top_nav.pom +12 -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 +9 -7
- 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 +1 -1
- data/app/demo/styles.pom +3 -1
- data/bin/console +4 -4
- data/bin/presenters +3 -0
- data/component-status.yml +15 -15
- data/config.ru +20 -10
- data/docs/settings.md +81 -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 +31 -11
- data/lib/voom/presenters/api/router.rb +3 -49
- 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 +2 -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 +36 -8
- data/lib/voom/presenters/dsl/components/actions/clear.rb +0 -2
- data/lib/voom/presenters/dsl/components/actions/close_dialog.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/deletes.rb +0 -2
- data/lib/voom/presenters/dsl/components/actions/dialog.rb +0 -2
- data/lib/voom/presenters/dsl/components/actions/loads.rb +5 -6
- data/lib/voom/presenters/dsl/components/actions/navigates.rb +0 -2
- data/lib/voom/presenters/dsl/components/actions/post_message.rb +17 -0
- data/lib/voom/presenters/dsl/components/actions/posts.rb +5 -2
- data/lib/voom/presenters/dsl/components/actions/prompt_if_dirty.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/remove.rb +0 -2
- data/lib/voom/presenters/dsl/components/actions/replaces.rb +4 -4
- data/lib/voom/presenters/dsl/components/actions/snackbar.rb +0 -2
- data/lib/voom/presenters/dsl/components/actions/stepper.rb +0 -2
- data/lib/voom/presenters/dsl/components/actions/toggle_disabled.rb +15 -0
- data/lib/voom/presenters/dsl/components/actions/toggle_visibility.rb +0 -2
- data/lib/voom/presenters/dsl/components/actions/updates.rb +5 -2
- data/lib/voom/presenters/dsl/components/avatar.rb +4 -8
- data/lib/voom/presenters/dsl/components/badge.rb +0 -2
- data/lib/voom/presenters/dsl/components/base.rb +25 -18
- data/lib/voom/presenters/dsl/components/button.rb +15 -11
- data/lib/voom/presenters/dsl/components/card.rb +49 -36
- data/lib/voom/presenters/dsl/components/checkbox.rb +0 -2
- data/lib/voom/presenters/dsl/components/chip.rb +5 -7
- data/lib/voom/presenters/dsl/components/chipset.rb +33 -0
- data/lib/voom/presenters/dsl/components/content.rb +28 -18
- data/lib/voom/presenters/dsl/components/datetime_base.rb +0 -2
- data/lib/voom/presenters/dsl/components/datetime_field.rb +0 -2
- data/lib/voom/presenters/dsl/components/dialog.rb +36 -12
- data/lib/voom/presenters/dsl/components/drawer.rb +9 -6
- data/lib/voom/presenters/dsl/components/event.rb +106 -65
- data/lib/voom/presenters/dsl/components/event_base.rb +1 -3
- data/lib/voom/presenters/dsl/components/expansion_panel.rb +0 -3
- data/lib/voom/presenters/dsl/components/file_input.rb +18 -6
- data/lib/voom/presenters/dsl/components/footer.rb +2 -2
- data/lib/voom/presenters/dsl/components/form.rb +2 -17
- data/lib/voom/presenters/dsl/components/grid.rb +52 -50
- data/lib/voom/presenters/dsl/components/header.rb +17 -1
- data/lib/voom/presenters/dsl/components/hidden_field.rb +0 -2
- data/lib/voom/presenters/dsl/components/icon.rb +2 -4
- data/lib/voom/presenters/dsl/components/icon_base.rb +5 -7
- data/lib/voom/presenters/dsl/components/icon_toggle.rb +2 -4
- 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 +6 -13
- data/lib/voom/presenters/dsl/components/lists/action.rb +9 -11
- data/lib/voom/presenters/dsl/components/lists/actions.rb +0 -3
- data/lib/voom/presenters/dsl/components/lists/line.rb +27 -15
- data/lib/voom/presenters/dsl/components/menu.rb +51 -9
- data/lib/voom/presenters/dsl/components/mixins/append.rb +2 -2
- data/lib/voom/presenters/dsl/components/mixins/attaches.rb +0 -2
- data/lib/voom/presenters/dsl/components/mixins/avatar.rb +1 -3
- data/lib/voom/presenters/dsl/components/mixins/chips.rb +0 -2
- data/lib/voom/presenters/dsl/components/mixins/chipset.rb +19 -0
- data/lib/voom/presenters/dsl/components/mixins/common.rb +13 -14
- data/lib/voom/presenters/dsl/components/mixins/dialogs.rb +0 -2
- data/lib/voom/presenters/dsl/components/mixins/event.rb +0 -2
- 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/padding.rb +42 -0
- data/lib/voom/presenters/dsl/components/mixins/progress.rb +16 -0
- data/lib/voom/presenters/dsl/components/mixins/tab_bars.rb +2 -0
- data/lib/voom/presenters/dsl/components/mixins/tables.rb +15 -0
- data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +5 -0
- data/lib/voom/presenters/dsl/components/mixins/toggles.rb +0 -2
- data/lib/voom/presenters/dsl/components/mixins/typography.rb +55 -8
- 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_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 +5 -11
- data/lib/voom/presenters/dsl/components/select.rb +21 -9
- data/lib/voom/presenters/dsl/components/separator.rb +21 -0
- data/lib/voom/presenters/dsl/components/slider.rb +6 -7
- data/lib/voom/presenters/dsl/components/stepper.rb +0 -10
- data/lib/voom/presenters/dsl/components/switch.rb +0 -2
- data/lib/voom/presenters/dsl/components/tab_bar.rb +0 -3
- data/lib/voom/presenters/dsl/components/table.rb +39 -20
- data/lib/voom/presenters/dsl/components/text_area.rb +1 -3
- data/lib/voom/presenters/dsl/components/text_field.rb +54 -11
- 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/typography.rb +4 -4
- 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 +6 -5
- data/lib/voom/presenters/dsl/protect_from_forgery.rb +43 -0
- data/lib/voom/presenters/dsl/user_interface.rb +37 -22
- 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/inflector.rb +1 -1
- data/lib/voom/presenters/helpers/rails.rb +15 -8
- data/lib/voom/presenters/helpers/redact.rb +13 -0
- data/lib/voom/presenters/helpers/route.rb +12 -5
- 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/{dsl/components → plugins/google_maps}/google_map.rb +4 -3
- data/lib/voom/presenters/{dsl.rb → registry.rb} +13 -15
- data/lib/voom/presenters/router.rb +59 -0
- data/lib/voom/presenters/settings.rb +18 -8
- data/lib/voom/presenters/version.rb +1 -1
- data/lib/voom/presenters/web_client/app.rb +86 -29
- 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/{markdown_render.rb → custom_render.rb} +5 -3
- 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 -54
- data/lib/voom/railtie.rb +37 -0
- data/lib/voom/symbol/to_str.rb +3 -3
- data/lib/voom/trace.rb +0 -2
- data/presenters.gemspec +8 -4
- 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/wc.js +52704 -0
- data/scripts/build.sh +10 -0
- data/views/mdc/.eslintrc.yml +1 -0
- data/views/mdc/.nvmrc +1 -0
- data/views/mdc/assets/js/app.js +13 -2
- data/views/mdc/assets/js/components/base-component.js +147 -12
- data/views/mdc/assets/js/components/base-container.js +54 -14
- data/views/mdc/assets/js/components/base-toggle.js +56 -0
- data/views/mdc/assets/js/components/button.js +74 -5
- data/views/mdc/assets/js/components/cards.js +3 -3
- data/views/mdc/assets/js/components/checkboxes.js +7 -30
- data/views/mdc/assets/js/components/chips.js +76 -12
- data/views/mdc/assets/js/components/content.js +5 -4
- data/views/mdc/assets/js/components/data-tables.js +11 -34
- data/views/mdc/assets/js/components/datetime.js +29 -6
- data/views/mdc/assets/js/components/dialogs.js +128 -31
- 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 +190 -73
- 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 +94 -0
- data/views/mdc/assets/js/components/events/base.js +139 -23
- 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 +147 -65
- data/views/mdc/assets/js/components/events/prompt_if_dirty.js +67 -0
- data/views/mdc/assets/js/components/events/removes.js +7 -6
- data/views/mdc/assets/js/components/events/replaces.js +87 -33
- data/views/mdc/assets/js/components/events/snackbar.js +10 -10
- data/views/mdc/assets/js/components/events/stepper.js +8 -10
- data/views/mdc/assets/js/components/events/toggle_disabled.js +41 -0
- data/views/mdc/assets/js/components/events/toggle_visibility.js +57 -15
- data/views/mdc/assets/js/components/file-inputs.js +68 -21
- data/views/mdc/assets/js/components/form-fields.js +16 -0
- data/views/mdc/assets/js/components/forms.js +3 -3
- data/views/mdc/assets/js/components/get_event_target.js +15 -0
- data/views/mdc/assets/js/components/grid.js +7 -6
- data/views/mdc/assets/js/components/header.js +20 -0
- data/views/mdc/assets/js/components/hidden-fields.js +19 -8
- data/views/mdc/assets/js/components/icon-toggles.js +7 -7
- data/views/mdc/assets/js/components/images.js +19 -0
- data/views/mdc/assets/js/components/initialize.js +52 -27
- data/views/mdc/assets/js/components/lists.js +9 -4
- data/views/mdc/assets/js/components/menus.js +60 -13
- 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 +22 -21
- 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 +6 -31
- data/views/mdc/assets/js/components/rich-text-area.js +217 -33
- 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 +18 -8
- data/views/mdc/assets/js/components/sliders.js +23 -12
- data/views/mdc/assets/js/components/snackbar.js +11 -8
- data/views/mdc/assets/js/components/steppers.js +3 -3
- data/views/mdc/assets/js/components/switches.js +6 -29
- data/views/mdc/assets/js/components/tab-bars.js +18 -4
- data/views/mdc/assets/js/components/text-fields.js +94 -22
- 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/wc.js +111 -0
- data/views/mdc/assets/scss/app.scss +12 -5
- data/views/mdc/assets/scss/components/avatar.scss +51 -7
- data/views/mdc/assets/scss/components/button.scss +7 -9
- data/views/mdc/assets/scss/components/card.scss +6 -5
- data/views/mdc/assets/scss/components/chip.scss +4 -0
- data/views/mdc/assets/scss/components/content.scss +25 -0
- data/views/mdc/assets/scss/components/data-table.scss +12 -1
- data/views/mdc/assets/scss/components/datetime.scss +1 -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 -5
- data/views/mdc/assets/scss/components/file-input.scss +10 -14
- data/views/mdc/assets/scss/components/grid.scss +32 -17
- 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 +13 -21
- data/views/mdc/assets/scss/components/list.scss +9 -3
- data/views/mdc/assets/scss/components/menu.scss +13 -3
- data/views/mdc/assets/scss/components/progress.scss +1 -0
- data/views/mdc/assets/scss/components/rich-text-area.scss +38 -2
- 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/switch.scss +10 -0
- data/views/mdc/assets/scss/components/textfield.scss +8 -4
- data/views/mdc/assets/scss/components/tooltip.scss +3 -0
- data/views/mdc/assets/scss/components/typography.scss +6 -0
- data/views/mdc/assets/scss/components/unordered-lists.scss +17 -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 +39 -1
- data/views/mdc/assets/scss/theme.scss +19 -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 -31
- data/views/mdc/body/modal-drawer.erb +35 -0
- data/views/mdc/body/snackbar.erb +11 -5
- data/views/mdc/components/actions/autocomplete.rb +8 -0
- data/views/mdc/components/actions/close_dialog.rb +10 -0
- data/views/mdc/components/actions/loads.rb +7 -1
- data/views/mdc/components/actions/navigates.rb +1 -1
- data/views/mdc/components/actions/post.rb +4 -7
- 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/replaces.rb +5 -1
- data/views/mdc/components/actions/resolver.rb +39 -0
- data/views/mdc/components/actions/snackbar.rb +3 -1
- data/views/mdc/components/actions/toggle_disabled.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 +2 -3
- data/views/mdc/components/buttons/button.erb +12 -12
- data/views/mdc/components/buttons/fab.erb +3 -2
- data/views/mdc/components/buttons/icon.erb +5 -5
- data/views/mdc/components/buttons/image.erb +4 -3
- data/views/mdc/components/card.erb +67 -44
- data/views/mdc/components/checkbox.erb +32 -35
- data/views/mdc/components/chip.erb +38 -30
- data/views/mdc/components/chipset.erb +18 -0
- data/views/mdc/components/content.erb +35 -14
- data/views/mdc/components/datetime.erb +6 -19
- data/views/mdc/components/dialog.erb +45 -25
- data/views/mdc/components/drag_and_drop/drag_and_drop.rb +16 -0
- data/views/mdc/components/event.erb +3 -5
- data/views/mdc/components/expansion_panel.erb +8 -6
- data/views/mdc/components/file_input.erb +14 -10
- data/views/mdc/components/form.erb +4 -19
- data/views/mdc/components/grid.erb +20 -17
- data/views/mdc/components/hidden_field.erb +3 -4
- 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 +4 -2
- 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 +19 -9
- data/views/mdc/components/list/menu.erb +7 -2
- data/views/mdc/components/list/separator.erb +1 -1
- data/views/mdc/components/menu.erb +14 -6
- data/views/mdc/components/number_field.erb +38 -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 +5 -6
- data/views/mdc/components/render.erb +2 -3
- data/views/mdc/components/rich_text_area.erb +13 -10
- data/views/mdc/components/select.erb +28 -12
- 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 +3 -1
- data/views/mdc/components/stepper.erb +1 -1
- data/views/mdc/components/stepper/step.erb +1 -1
- data/views/mdc/components/switch.erb +8 -7
- data/views/mdc/components/tab_bar.erb +7 -1
- data/views/mdc/components/table.erb +26 -13
- data/views/mdc/components/table/checkbox.erb +6 -3
- 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 +5 -4
- data/views/mdc/components/table/pagination.erb +2 -6
- data/views/mdc/components/table/row.erb +5 -5
- data/views/mdc/components/text_area.erb +9 -11
- data/views/mdc/components/text_field.erb +29 -37
- 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 +41 -29
- data/views/mdc/package-lock.json +2222 -1327
- data/views/mdc/package.json +47 -29
- data/views/mdc/web.erb +4 -0
- data/views/mdc/webpack.config.js +13 -1
- metadata +218 -26
- data/lib/voom-presenters.rb +0 -9
- data/lib/voom/presenters-engine.rb +0 -44
- data/lib/voom/presenters.rb +0 -19
- data/public/.gitignore +0 -2
- data/scripts/bump.sh +0 -5
- data/scripts/changelog.sh +0 -5
- data/scripts/deploy-demo.sh +0 -3
- data/scripts/release.sh +0 -5
- data/scripts/tag.sh +0 -5
- data/views/mdc/assets/js/dialog-polyfill.js +0 -738
- data/views/mdc/assets/scss/components/icon-toggles.scss +0 -9
- data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +0 -13
- data/views/mdc/body/drawer.erb +0 -18
- data/views/mdc/components/google_map.erb +0 -9
@@ -0,0 +1,21 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = "<%= name %>_presenter_plugin"
|
6
|
+
spec.version = '0.0.1'
|
7
|
+
spec.authors = ["<%= `git config user.name`.strip %>"]
|
8
|
+
spec.email = ["<%= `git config user.email`.strip %>"]
|
9
|
+
|
10
|
+
spec.summary = %q{<%= name %> presenter plugin.}
|
11
|
+
spec.homepage = 'http://github.com/<%= `git config user.name`.strip %>/<%= name %>_presenters_plugin'
|
12
|
+
spec.license = "MIT"
|
13
|
+
|
14
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
15
|
+
f.match(%r{^(test|spec|features)/})
|
16
|
+
end
|
17
|
+
spec.require_paths = ["lib"]
|
18
|
+
|
19
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
20
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
21
|
+
end
|
data/lib/voom/presenters/generators/templates/plugin/views/assets/css/components/component.css.tt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
/* Custom CSS for this component - defines a fade in animation*/
|
2
|
+
#random_fact {
|
3
|
+
opacity: 0;
|
4
|
+
}
|
5
|
+
|
6
|
+
#random_fact.load {
|
7
|
+
opacity: 1;
|
8
|
+
animation-name: fadeInOpacity;
|
9
|
+
animation-iteration-count: 1;
|
10
|
+
animation-timing-function: ease-in;
|
11
|
+
animation-duration: 2s;
|
12
|
+
}
|
13
|
+
|
14
|
+
@keyframes fadeInOpacity {
|
15
|
+
0% {
|
16
|
+
opacity: 0;
|
17
|
+
}
|
18
|
+
100% {
|
19
|
+
opacity: 1;
|
20
|
+
}
|
21
|
+
}
|
data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/actions/action.js.tt
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
// This event callback pushes its results into the results array and returns a promise.
|
2
|
+
function <%=underscore(name)%>_action(_options, params, _event, results) {
|
3
|
+
var promiseObj = new Promise(function(resolve) {
|
4
|
+
console.log('<%= classify(name) %> called');
|
5
|
+
// Reload iFrame: https://stackoverflow.com/questions/86428/what-s-the-best-way-to-reload-refresh-an-iframe
|
6
|
+
document.getElementById('random_fact').src += '';
|
7
|
+
results.push({
|
8
|
+
action: 'action',
|
9
|
+
content: JSON.stringify({data: params.text}),
|
10
|
+
statusCode: 200,
|
11
|
+
});
|
12
|
+
resolve(results);
|
13
|
+
});
|
14
|
+
return promiseObj;
|
15
|
+
}
|
data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/component.js.tt
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
// Optional Javascript callback class. You typically need to define this when you have data to submit, or special
|
2
|
+
// event handling to bind to.
|
3
|
+
// To hook this up you need to provide the `v-plugin` class and
|
4
|
+
// data-plugin-callback='RandomFacts' on the element.
|
5
|
+
class RandomFacts {
|
6
|
+
// passed the DOM element that has the .v-plugin class on it.
|
7
|
+
constructor(element) {
|
8
|
+
// This is where you might pull data elements into your
|
9
|
+
// component from the markup. Like so:
|
10
|
+
// this.data = element.dataset.someDataICareAbout;
|
11
|
+
}
|
12
|
+
|
13
|
+
// Optional
|
14
|
+
// Called before the component is submitted via post/put. Allows the component to add its key/value pairs to the
|
15
|
+
// submitted data.
|
16
|
+
// If you provide this you need to add the v-input class to your DOM element to get called.
|
17
|
+
// Containers iterate their elements that have the v-input class defined on them and invoke the prepareSubmit
|
18
|
+
// function for each.
|
19
|
+
prepareSubmit(params) {
|
20
|
+
// params is a key,value pair. Add name/value like so:
|
21
|
+
// params.push(['some_name', 'some_value']);
|
22
|
+
}
|
23
|
+
|
24
|
+
// Optional
|
25
|
+
// Called whenever a container is about to be submitted, before prepareSubmit.
|
26
|
+
// returns true on success
|
27
|
+
// returns on failure return an error object that can be processed by VErrors:
|
28
|
+
// { email: ["email must be filled", "email must be from your domain"] }
|
29
|
+
// { page: ["must be filled"] }
|
30
|
+
// Returning an error stops the submission.
|
31
|
+
validate(formData) {
|
32
|
+
return true;
|
33
|
+
}
|
34
|
+
|
35
|
+
// Optional
|
36
|
+
// Clear's the control
|
37
|
+
clear() {
|
38
|
+
}
|
39
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!--Custom markup.
|
2
|
+
If the plugin defines a component then it should set v-plugin and data-plugin-callback to the class of the component
|
3
|
+
|
4
|
+
If the plugin posts data then it should define the v-input class.
|
5
|
+
That will cause its validate and prepareSubmit methods in the component to be called
|
6
|
+
|
7
|
+
If the plugin has events it publishes then the erb :"components/event" needs to be invoked to
|
8
|
+
hookup the event handling markup
|
9
|
+
|
10
|
+
Any additional data you want to pass to your component javascript should be setup here as data attributes.
|
11
|
+
-->
|
12
|
+
<iframe id="random_fact" class='v-plugin v-input' data-plugin-callback='RandomFacts'
|
13
|
+
src="<%%= comp.random_fact %>" height=512
|
14
|
+
<%%= erb :"components/event", :locals => {comp: comp, events: comp.events, parent_id: comp.id} %>></iframe>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<style>
|
2
|
+
<%%= File.read(File.expand_path('../assets/css/components/<%= underscore(name) %>.css', __dir__) ) %>
|
3
|
+
</style>
|
4
|
+
|
5
|
+
<script>
|
6
|
+
// This file is defining the callback method that will be invoked when the custom plugin actionJs `actionJs` is encountered
|
7
|
+
<%%= File.read(File.expand_path('../assets/js/components/actions/<%= underscore(name) %>.js', __dir__) ) %>
|
8
|
+
// This file is defining the plugin component that will be delegated to by the WebClient.
|
9
|
+
<%%= File.read(File.expand_path('../assets/js/components/<%= underscore(name) %>.js', __dir__) ) %>
|
10
|
+
|
11
|
+
// Custom javascript specific to this sample plugin - sets the class name that causes the initial load to
|
12
|
+
// animate a transition (defined in the component.css.tt file)
|
13
|
+
function load() {
|
14
|
+
document.getElementById('random_fact').className = ' load';
|
15
|
+
}
|
16
|
+
|
17
|
+
window.onload = load;
|
18
|
+
</script>
|
19
|
+
|
20
|
+
|
@@ -1,16 +1,10 @@
|
|
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
|
-
|
6
1
|
module Voom
|
7
2
|
module Presenters
|
8
3
|
module Helpers
|
9
4
|
include Helpers::Time
|
10
5
|
include Helpers::Date
|
11
|
-
include Helpers::
|
12
|
-
if defined?(Rails)
|
13
|
-
require 'voom/presenters/helpers/rails'
|
6
|
+
include Helpers::Redact
|
7
|
+
if defined?(::Rails)
|
14
8
|
include Voom::Presenters::Helpers::Rails
|
15
9
|
end
|
16
10
|
end
|
@@ -1,8 +1,4 @@
|
|
1
1
|
if defined?(Rails)
|
2
|
-
require 'voom/presenters/helpers/rails/currency'
|
3
|
-
require 'voom/presenters/helpers/rails/model_table'
|
4
|
-
require 'voom/presenters/namespace'
|
5
|
-
|
6
2
|
module Voom
|
7
3
|
module Presenters
|
8
4
|
module Helpers
|
@@ -11,15 +7,18 @@ if defined?(Rails)
|
|
11
7
|
include Voom::Presenters::Helpers::Rails::Currency
|
12
8
|
include Voom::Presenters::Helpers::Rails::ModelTable
|
13
9
|
include Namespace
|
10
|
+
|
14
11
|
def default_url_options
|
15
12
|
{}
|
16
13
|
end
|
17
14
|
|
18
|
-
def presenters_path(presenter, **params)
|
15
|
+
def presenters_path(presenter, host: false, **params)
|
19
16
|
presenter = _expand_namespace_(presenter, namespace)
|
20
|
-
presenter = presenter.gsub(':','/')
|
17
|
+
presenter = presenter.gsub(':', '/')
|
18
|
+
|
19
|
+
path = host ? voom_presenters_web_client_app_url(params, host: router.base_url) :
|
20
|
+
voom_presenters_web_client_app_path(params)
|
21
21
|
|
22
|
-
path = voom_presenters_web_client_app_path(params)
|
23
22
|
if path.include?('?')
|
24
23
|
path = path.sub('?', "#{presenter}?")
|
25
24
|
else
|
@@ -29,8 +28,16 @@ if defined?(Rails)
|
|
29
28
|
end
|
30
29
|
path
|
31
30
|
end
|
31
|
+
|
32
|
+
alias presenter_path presenters_path
|
33
|
+
|
34
|
+
def presenters_url(presenter, host: true, **params)
|
35
|
+
presenters_path(presenter, host: host, **params)
|
36
|
+
end
|
37
|
+
|
38
|
+
alias presenter_url presenters_url
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
35
42
|
end
|
36
|
-
end
|
43
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Voom
|
2
|
+
module Presenters
|
3
|
+
module Helpers
|
4
|
+
module Redact
|
5
|
+
# https://material.io/guidelines/patterns/data-formats.html#data-formats-data-redaction-truncation
|
6
|
+
def redact(string, last_chars = 4)
|
7
|
+
return "" unless string
|
8
|
+
"• • • #{string.split(//).last(last_chars).join}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,16 +1,23 @@
|
|
1
|
-
require 'voom/presenters/namespace'
|
2
|
-
|
3
1
|
module Voom
|
4
2
|
module Presenters
|
5
3
|
module Helpers
|
6
4
|
module Route
|
7
5
|
include Namespace
|
8
6
|
|
9
|
-
def presenters_path(presenter, **params)
|
7
|
+
def presenters_path(presenter, host: false, **params)
|
10
8
|
presenter = _expand_namespace_(presenter, namespace)
|
11
|
-
presenter = presenter.gsub(':','/')
|
12
|
-
router.url(render: presenter, context: params)
|
9
|
+
presenter = presenter.gsub(':', '/')
|
10
|
+
router.url(render: presenter, host: host, context: params)
|
13
11
|
end
|
12
|
+
|
13
|
+
alias presenter_path presenters_path
|
14
|
+
|
15
|
+
# Full qualified URL
|
16
|
+
def presenters_url(presenter, **params)
|
17
|
+
presenters_path(presenter, host: true, **params)
|
18
|
+
end
|
19
|
+
|
20
|
+
alias presenter_url presenters_url
|
14
21
|
end
|
15
22
|
end
|
16
23
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
include Voom::Trace
|
2
|
+
|
3
|
+
module Voom
|
4
|
+
module Presenters
|
5
|
+
module Pluggable
|
6
|
+
def include_plugins(*layers, plugins: [],
|
7
|
+
plugin_method: method(:include))
|
8
|
+
plugins = Array(plugins) + Array(Voom::Presenters::Settings.config.presenters.plugins)
|
9
|
+
plugins.uniq.each do |plugin|
|
10
|
+
plugin(plugin, *layers, plugin_method: plugin_method)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
# Returns the module for the specified plugin. If the module is not
|
16
|
+
# defined, the corresponding plugin required.
|
17
|
+
def plugin_module(plugin)
|
18
|
+
module_name = plugin.to_s.gsub(/(^|_)(.)/) {|x| x[-1..-1].upcase}
|
19
|
+
unless Voom::Presenters::Plugins.const_defined?(module_name, false)
|
20
|
+
trace {"Method plugin loading plugin: #{plugin}"}
|
21
|
+
load "voom/presenters/plugins/#{plugin}.rb"
|
22
|
+
end
|
23
|
+
Voom::Presenters::Plugins.const_get(module_name)
|
24
|
+
end
|
25
|
+
|
26
|
+
def plugin(plugin, *layers, plugin_method: method(:include))
|
27
|
+
m = plugin.is_a?(Module) ? plugin : plugin_module(plugin)
|
28
|
+
layers.each do |layer|
|
29
|
+
if m.const_defined?(layer, false) && !self.const_defined?(layer, false)
|
30
|
+
trace {"Injecting plugin(#{m.const_get(layer).inspect}) into #{self.inspect}!"}
|
31
|
+
plugin_method.call(m.const_get(layer))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Voom
|
2
|
+
module Presenters
|
3
|
+
module Plugins
|
4
|
+
module GoogleMaps
|
5
|
+
module DSLComponents
|
6
|
+
def google_map(**attributes, &block)
|
7
|
+
self << GoogleMap.new(parent: self, **attributes, &block)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
module WebClientComponents
|
11
|
+
def render_google_map(comp,
|
12
|
+
render:,
|
13
|
+
components:,
|
14
|
+
index:)
|
15
|
+
view_dir = File.join(__dir__, 'google_maps')
|
16
|
+
render.call :erb, :google_map, views: view_dir,
|
17
|
+
locals: {comp: comp,
|
18
|
+
components: components, index: index}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% if comp %>
|
2
|
+
<img id="<%= comp.id %>"
|
3
|
+
class="v-image v-google-map-image <%= comp.events ? 'v-actionable' : nil%>"
|
4
|
+
src="<%= comp.url %>"
|
5
|
+
border="0"
|
6
|
+
height="<%= comp.height %>"
|
7
|
+
width="<%= comp.width %>"
|
8
|
+
alt=""
|
9
|
+
<%= erb :"components/event", :locals => {comp: comp, events: comp.events, parent_id: comp.id} %>>
|
10
|
+
<% end %>
|
@@ -2,9 +2,9 @@ require 'uri'
|
|
2
2
|
|
3
3
|
module Voom
|
4
4
|
module Presenters
|
5
|
-
module
|
6
|
-
module
|
7
|
-
class GoogleMap <
|
5
|
+
module Plugins
|
6
|
+
module GoogleMaps
|
7
|
+
class GoogleMap < DSL::Components::EventBase
|
8
8
|
|
9
9
|
attr_reader :url, :google_api_key, :height, :width
|
10
10
|
|
@@ -19,6 +19,7 @@ module Voom
|
|
19
19
|
@scale = attribs.delete(:scale) { 1 }
|
20
20
|
@google_api_key = attribs.delete(:google_api_key) { ENV['GOOGLE_API_KEY'] }
|
21
21
|
@url = build_static_map_image_url
|
22
|
+
expand!
|
22
23
|
end
|
23
24
|
|
24
25
|
private
|
@@ -1,16 +1,6 @@
|
|
1
|
-
require 'voom/trace'
|
2
|
-
|
3
1
|
module Voom
|
4
2
|
module Presenters
|
5
|
-
|
6
|
-
unless namespace
|
7
|
-
namespace = name.to_s.split(':')
|
8
|
-
name = namespace.pop
|
9
|
-
end
|
10
|
-
DSL.define(name, namespace, &block)
|
11
|
-
end
|
12
|
-
|
13
|
-
module DSL
|
3
|
+
class Registry
|
14
4
|
class << self
|
15
5
|
include Voom::Trace
|
16
6
|
end
|
@@ -21,10 +11,10 @@ module Voom
|
|
21
11
|
@registry
|
22
12
|
end
|
23
13
|
|
24
|
-
def self.define(name, namespace, &block)
|
14
|
+
def self.define(name, namespace, options, &block)
|
25
15
|
namespace = Array(namespace).map(&:to_s)
|
26
|
-
fq_name = namespace.any? ? namespace.join(':') + ':'+name.to_s : name.to_s
|
27
|
-
registry[fq_name] = Voom::Presenters::DSL::Definition.new(namespace, &block)
|
16
|
+
fq_name = namespace.any? ? namespace.join(':') + ':' + name.to_s : name.to_s
|
17
|
+
registry[fq_name] = Voom::Presenters::DSL::Definition.new(name, namespace, options, &block)
|
28
18
|
end
|
29
19
|
|
30
20
|
def self.load(directory)
|
@@ -55,12 +45,20 @@ module Voom
|
|
55
45
|
|
56
46
|
def self.register(name, definition)
|
57
47
|
return Voom::Presenters::App.register(name: name, presenter: definition) unless Voom::Presenters::App.registered?(name)
|
58
|
-
logger.warn {"Warning attempted to redefine the presenter: #{name}!"}
|
59
48
|
end
|
60
49
|
|
61
50
|
def self.build(definition)
|
62
51
|
definition.build
|
63
52
|
end
|
64
53
|
end
|
54
|
+
|
55
|
+
def self.define(name, namespace: nil, options: {}, &block)
|
56
|
+
unless namespace
|
57
|
+
namespace = name.to_s.split(':')
|
58
|
+
name = namespace.pop
|
59
|
+
end
|
60
|
+
Registry.define(name, namespace, options, &block)
|
61
|
+
end
|
62
|
+
|
65
63
|
end
|
66
64
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'rack'
|
2
|
+
|
3
|
+
module Voom
|
4
|
+
module Presenters
|
5
|
+
class Router
|
6
|
+
|
7
|
+
attr_reader :base_url
|
8
|
+
|
9
|
+
def initialize(base_url: nil)
|
10
|
+
@base_url = base_url
|
11
|
+
end
|
12
|
+
|
13
|
+
def url(command: nil, render: nil, host: false, context:)
|
14
|
+
_params_ = context.dup
|
15
|
+
return build_render_url(render, _params_, host: host) unless command
|
16
|
+
_params_[:redirect]=build_render_url(render, _params_) if render
|
17
|
+
build_command_url(command, _params_)
|
18
|
+
end
|
19
|
+
|
20
|
+
def scrub_params(_params_)
|
21
|
+
_params_.delete('captures')
|
22
|
+
_params_.delete('presenter')
|
23
|
+
_params_.delete('action')
|
24
|
+
_params_.delete('errors')
|
25
|
+
_params_
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def build_command_url(command, params)
|
31
|
+
return '' unless command
|
32
|
+
add_query_params(command, params)
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_render_url(render_, params, host:)
|
36
|
+
return '#' unless render_
|
37
|
+
render = render_.to_s
|
38
|
+
return render if render.start_with?('http')
|
39
|
+
render = render.gsub(':', '/')
|
40
|
+
seperator = render.start_with?('/') ? '' : '/'
|
41
|
+
url = "#{host ? base_url : nil}#{seperator}#{render}"
|
42
|
+
add_query_params(url, params)
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_query_params(url, params)
|
46
|
+
query_params = build_params(params)
|
47
|
+
if (!query_params.nil? && !query_params.empty?)
|
48
|
+
query_seperator = url.include?('?') ? '&' : '?'
|
49
|
+
url = "#{url}#{query_seperator}#{query_params}"
|
50
|
+
end
|
51
|
+
url
|
52
|
+
end
|
53
|
+
|
54
|
+
def build_params(params)
|
55
|
+
Rack::Utils.build_nested_query(scrub_params(params))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|