nfg_ui 0.9.8.15
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +431 -0
- data/Rakefile +23 -0
- data/app/assets/config/nfg_ui_manifest.js +3 -0
- data/app/assets/images/nfg_ui/app_icon/android-chrome-192x192.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/android-chrome-384x384.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/apple-touch-icon.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/browserconfig.xml.erb +9 -0
- data/app/assets/images/nfg_ui/app_icon/favicon-16x16.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/favicon-32x32.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/favicon.ico +0 -0
- data/app/assets/images/nfg_ui/app_icon/mstile-150x150.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/safari-pinned-tab.svg +38 -0
- data/app/assets/images/nfg_ui/app_icon/site.webmanifest.erb +19 -0
- data/app/assets/images/nfg_ui/email/icons/fa-caret-right.png +0 -0
- data/app/assets/images/nfg_ui/email/icons/fa-facebook.png +0 -0
- data/app/assets/images/nfg_ui/email/icons/fa-linkedin.png +0 -0
- data/app/assets/images/nfg_ui/email/icons/fa-twitter.png +0 -0
- data/app/assets/images/nfg_ui/email/icons/fa-youtube.png +0 -0
- data/app/assets/images/nfg_ui/email/nfg-logo.png +0 -0
- data/app/assets/javascripts/nfg_ui/application.coffee +16 -0
- data/app/assets/javascripts/nfg_ui/collapsible_toggle.coffee +47 -0
- data/app/assets/javascripts/nfg_ui/prevent_clickable_disabled_element.coffee +47 -0
- data/app/assets/javascripts/nfg_ui/vendor/select2.coffee +26 -0
- data/app/assets/javascripts/nfg_ui/vendor/tooltips.coffee +18 -0
- data/app/assets/stylesheets/nfg_ui/bootstrap/application.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/_variables.scss +1123 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/application.scss +23 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_alert.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_backgrounds.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_button-group.scss +8 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_buttons.scss +17 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_card.scss +20 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_custom.scss +20 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_custom_forms.scss +156 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_dropdown.scss +24 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_forms.scss +85 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_media.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_nav.scss +22 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_navbar.scss +132 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_progress.scss +3 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_reboot.scss +31 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_tables.scss +7 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_tooltip.scss +5 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_type.scss +82 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_campaign_card.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_campaign_preview.scss +25 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_content_section_buttons.scss +11 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_custom_questions_questionnaire.scss +84 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_custom_receipt_language.scss +15 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_email_preview.scss +24 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_interaction.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_mobile.scss +4 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_nav_step.scss +95 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_overlay_blocker.scss +49 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_page_header.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_product_icons.scss +45 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_redactor.scss +25 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_share_dropdown.scss +53 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_slat.scss +113 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_social_share.scss +44 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_status_indicator.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_ticket.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_tile.scss +71 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/application.scss +38 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/foundation_emails/_alignment.scss +93 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/foundation_emails/_button.scss +345 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_backgrounds.scss +15 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_layout.scss +33 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_rainbow_bar.scss +47 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_spacers.scss +60 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_typography.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/settings/_settings.scss +148 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/_variables.scss +1124 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/application.scss +23 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/application.scss +19 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_badge.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_buttons.scss +43 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_custom.scss +3 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_custom_forms.scss +50 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_forms.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_functions.scss +29 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_navbar.scss +18 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_reboot.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_type.scss +16 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_utilities.scss +8 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/custom/_everyday_default.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/custom/_nav_step.scss +20 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/plugins/_select2.scss +16 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/_variables.scss +13 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/application.scss +35 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_breadcrumb.scss +4 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_button-group.scss +10 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_card.scss +45 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_carousel.scss +18 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_custom-forms.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_custom.scss +4 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_forms.scss +68 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_grid.scss +4 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_input-group.scss +25 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_list-group.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_media.scss +5 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_mixins.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_modal.scss +28 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_nav.scss +21 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_navbar.scss +54 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_pagination.scss +1 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_progress.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_utilities.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/custom/_everyday_giving.scss +8 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/custom/_nav_step.scss +13 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/custom/_slat.scss +66 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/mixins/_breakpoints.scss +123 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/mixins/_grid-framework.scss +30 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/mixins/_grid.scss +10 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/utilities/_display.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/utilities/_flex.scss +49 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/plugins/_sticky_div.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_alert.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_buttons.scss +17 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_card.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_carousel.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_custom.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_custom_forms.scss +156 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_dropdown.scss +1 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_event.scss +19 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_forms.scss +83 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_list-group.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_progress.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_reboot.scss +31 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_tooltip.scss +5 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_type.scss +81 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_admin_bar.scss +20 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_background_variations.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_everyday_default.scss +43 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_everyday_story.scss +21 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_footer_links.scss +8 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_nav_step.scss +95 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_slat.scss +110 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_social_share.scss +44 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_ticket.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_tile.scss +63 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_user_navbar.scss +33 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/plugins/_datepicker.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/plugins/_select2.scss +216 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/plugins/_sticky_div.scss +11 -0
- data/app/controllers/nfg_ui/application_controller.rb +5 -0
- data/app/helpers/nfg_ui/application_helper.rb +27 -0
- data/app/helpers/nfg_ui/components/email_helpers.rb +8 -0
- data/app/helpers/nfg_ui/components/resource_themes_helper.rb +8 -0
- data/app/helpers/nfg_ui/components/tooltip_helper.rb +24 -0
- data/app/models/nfg_ui/application_record.rb +5 -0
- data/app/views/nfg_ui/app_icons/_icons.html.haml +10 -0
- data/app/views/nfg_ui/email/README.md +12 -0
- data/app/views/nfg_ui/email/_button.html.haml +12 -0
- data/app/views/nfg_ui/email/_email_signature.html.haml +4 -0
- data/app/views/nfg_ui/email/_footer.html.haml +16 -0
- data/app/views/nfg_ui/email/_header.html.haml +6 -0
- data/app/views/nfg_ui/email/_logo.html.haml +6 -0
- data/app/views/nfg_ui/email/_product_content_image.html.haml +7 -0
- data/app/views/nfg_ui/email/_rainbow_bar.html.haml +10 -0
- data/app/views/nfg_ui/email/_section_header.html.haml +8 -0
- data/app/views/nfg_ui/email/_social_network_link.html.haml +12 -0
- data/app/views/nfg_ui/email/_sub_footer.html.haml +9 -0
- data/app/views/nfg_ui/email/_table_row.html.haml +13 -0
- data/config/initializers/web_app_manifest.rb +3 -0
- data/config/locales/email.yml +34 -0
- data/config/locales/en.yml +63 -0
- data/config/routes.rb +2 -0
- data/config/spring.rb +1 -0
- data/lib/nfg_ui/bootstrap/components/alert.rb +52 -0
- data/lib/nfg_ui/bootstrap/components/badge.rb +39 -0
- data/lib/nfg_ui/bootstrap/components/base.rb +151 -0
- data/lib/nfg_ui/bootstrap/components/breadcrumb.rb +23 -0
- data/lib/nfg_ui/bootstrap/components/breadcrumb_item.rb +28 -0
- data/lib/nfg_ui/bootstrap/components/button.rb +74 -0
- data/lib/nfg_ui/bootstrap/components/button_group.rb +36 -0
- data/lib/nfg_ui/bootstrap/components/button_toolbar.rb +21 -0
- data/lib/nfg_ui/bootstrap/components/card.rb +81 -0
- data/lib/nfg_ui/bootstrap/components/card_body.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/card_footer.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/card_header.rb +35 -0
- data/lib/nfg_ui/bootstrap/components/card_image.rb +33 -0
- data/lib/nfg_ui/bootstrap/components/card_image_overlay.rb +46 -0
- data/lib/nfg_ui/bootstrap/components/carousel.rb +57 -0
- data/lib/nfg_ui/bootstrap/components/carousel_caption.rb +34 -0
- data/lib/nfg_ui/bootstrap/components/carousel_control.rb +73 -0
- data/lib/nfg_ui/bootstrap/components/carousel_indicators.rb +54 -0
- data/lib/nfg_ui/bootstrap/components/carousel_item.rb +49 -0
- data/lib/nfg_ui/bootstrap/components/collapse.rb +32 -0
- data/lib/nfg_ui/bootstrap/components/dropdown.rb +51 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_divider.rb +19 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_header.rb +23 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_item.rb +41 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_menu.rb +32 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_toggle.rb +82 -0
- data/lib/nfg_ui/bootstrap/components/embed.rb +80 -0
- data/lib/nfg_ui/bootstrap/components/form.rb +13 -0
- data/lib/nfg_ui/bootstrap/components/input_group.rb +13 -0
- data/lib/nfg_ui/bootstrap/components/jumbotron.rb +13 -0
- data/lib/nfg_ui/bootstrap/components/list_group.rb +39 -0
- data/lib/nfg_ui/bootstrap/components/list_group_item.rb +69 -0
- data/lib/nfg_ui/bootstrap/components/media.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/media_body.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/media_object.rb +23 -0
- data/lib/nfg_ui/bootstrap/components/modal.rb +66 -0
- data/lib/nfg_ui/bootstrap/components/modal_body.rb +16 -0
- data/lib/nfg_ui/bootstrap/components/modal_footer.rb +16 -0
- data/lib/nfg_ui/bootstrap/components/modal_header.rb +37 -0
- data/lib/nfg_ui/bootstrap/components/nav.rb +71 -0
- data/lib/nfg_ui/bootstrap/components/nav_item.rb +103 -0
- data/lib/nfg_ui/bootstrap/components/nav_link.rb +62 -0
- data/lib/nfg_ui/bootstrap/components/navbar.rb +97 -0
- data/lib/nfg_ui/bootstrap/components/navbar_brand.rb +25 -0
- data/lib/nfg_ui/bootstrap/components/navbar_nav.rb +48 -0
- data/lib/nfg_ui/bootstrap/components/navbar_text.rb +21 -0
- data/lib/nfg_ui/bootstrap/components/navbar_toggler.rb +38 -0
- data/lib/nfg_ui/bootstrap/components/page_item.rb +66 -0
- data/lib/nfg_ui/bootstrap/components/pagination.rb +30 -0
- data/lib/nfg_ui/bootstrap/components/popover.rb +12 -0
- data/lib/nfg_ui/bootstrap/components/progress.rb +44 -0
- data/lib/nfg_ui/bootstrap/components/progress_bar.rb +51 -0
- data/lib/nfg_ui/bootstrap/components/tab_content.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/tab_pane.rb +49 -0
- data/lib/nfg_ui/bootstrap/components/table.rb +17 -0
- data/lib/nfg_ui/bootstrap/readme.md +1 -0
- data/lib/nfg_ui/bootstrap/utilities/activatable.rb +32 -0
- data/lib/nfg_ui/bootstrap/utilities/alignable.rb +33 -0
- data/lib/nfg_ui/bootstrap/utilities/collapse_toggleable.rb +35 -0
- data/lib/nfg_ui/bootstrap/utilities/collapsible.rb +42 -0
- data/lib/nfg_ui/bootstrap/utilities/disableable.rb +49 -0
- data/lib/nfg_ui/bootstrap/utilities/dismissible.rb +24 -0
- data/lib/nfg_ui/bootstrap/utilities/dropdown_directionable.rb +40 -0
- data/lib/nfg_ui/bootstrap/utilities/headable.rb +20 -0
- data/lib/nfg_ui/bootstrap/utilities/modalable.rb +104 -0
- data/lib/nfg_ui/bootstrap/utilities/progressable.rb +42 -0
- data/lib/nfg_ui/bootstrap/utilities/remotable.rb +24 -0
- data/lib/nfg_ui/bootstrap/utilities/sizable.rb +40 -0
- data/lib/nfg_ui/bootstrap/utilities/themeable.rb +51 -0
- data/lib/nfg_ui/bootstrap/utilities/tooltipable.rb +95 -0
- data/lib/nfg_ui/bootstrap/utilities/wrappable.rb +48 -0
- data/lib/nfg_ui/components/base.rb +14 -0
- data/lib/nfg_ui/components/elements/activity.rb +10 -0
- data/lib/nfg_ui/components/elements/alert.rb +63 -0
- data/lib/nfg_ui/components/elements/badge.rb +32 -0
- data/lib/nfg_ui/components/elements/breadcrumb.rb +16 -0
- data/lib/nfg_ui/components/elements/breadcrumb_item.rb +16 -0
- data/lib/nfg_ui/components/elements/button.rb +97 -0
- data/lib/nfg_ui/components/elements/card_body.rb +15 -0
- data/lib/nfg_ui/components/elements/card_footer.rb +14 -0
- data/lib/nfg_ui/components/elements/card_header.rb +14 -0
- data/lib/nfg_ui/components/elements/card_image.rb +14 -0
- data/lib/nfg_ui/components/elements/card_image_overlay.rb +14 -0
- data/lib/nfg_ui/components/elements/carousel_caption.rb +14 -0
- data/lib/nfg_ui/components/elements/carousel_control.rb +14 -0
- data/lib/nfg_ui/components/elements/carousel_indicators.rb +23 -0
- data/lib/nfg_ui/components/elements/carousel_item.rb +16 -0
- data/lib/nfg_ui/components/elements/chart.rb +11 -0
- data/lib/nfg_ui/components/elements/dropdown_divider.rb +14 -0
- data/lib/nfg_ui/components/elements/dropdown_header.rb +14 -0
- data/lib/nfg_ui/components/elements/dropdown_item.rb +78 -0
- data/lib/nfg_ui/components/elements/dropdown_toggle.rb +37 -0
- data/lib/nfg_ui/components/elements/embed.rb +15 -0
- data/lib/nfg_ui/components/elements/form_control.rb +18 -0
- data/lib/nfg_ui/components/elements/input_group.rb +14 -0
- data/lib/nfg_ui/components/elements/key.rb +11 -0
- data/lib/nfg_ui/components/elements/list_group_item.rb +14 -0
- data/lib/nfg_ui/components/elements/loader.rb +11 -0
- data/lib/nfg_ui/components/elements/media_body.rb +14 -0
- data/lib/nfg_ui/components/elements/media_object.rb +12 -0
- data/lib/nfg_ui/components/elements/modal_body.rb +14 -0
- data/lib/nfg_ui/components/elements/modal_footer.rb +14 -0
- data/lib/nfg_ui/components/elements/modal_header.rb +14 -0
- data/lib/nfg_ui/components/elements/nav.rb +19 -0
- data/lib/nfg_ui/components/elements/nav_item.rb +39 -0
- data/lib/nfg_ui/components/elements/nav_link.rb +33 -0
- data/lib/nfg_ui/components/elements/navbar_brand.rb +15 -0
- data/lib/nfg_ui/components/elements/navbar_text.rb +14 -0
- data/lib/nfg_ui/components/elements/navbar_toggler.rb +14 -0
- data/lib/nfg_ui/components/elements/page_item.rb +14 -0
- data/lib/nfg_ui/components/elements/popover.rb +14 -0
- data/lib/nfg_ui/components/elements/progress_bar.rb +62 -0
- data/lib/nfg_ui/components/elements/slat_action.rb +14 -0
- data/lib/nfg_ui/components/elements/slat_body.rb +14 -0
- data/lib/nfg_ui/components/elements/slat_item.rb +62 -0
- data/lib/nfg_ui/components/elements/stat.rb +11 -0
- data/lib/nfg_ui/components/elements/step.rb +55 -0
- data/lib/nfg_ui/components/elements/step_indicator.rb +41 -0
- data/lib/nfg_ui/components/elements/tab_pane.rb +15 -0
- data/lib/nfg_ui/components/elements/table.rb +14 -0
- data/lib/nfg_ui/components/elements/task.rb +11 -0
- data/lib/nfg_ui/components/elements.rb +58 -0
- data/lib/nfg_ui/components/foundations/color.rb +11 -0
- data/lib/nfg_ui/components/foundations/grid.rb +11 -0
- data/lib/nfg_ui/components/foundations/icon.rb +82 -0
- data/lib/nfg_ui/components/foundations/image.rb +14 -0
- data/lib/nfg_ui/components/foundations/input.rb +11 -0
- data/lib/nfg_ui/components/foundations/typeface.rb +122 -0
- data/lib/nfg_ui/components/patterns/activity_feed.rb +11 -0
- data/lib/nfg_ui/components/patterns/button_group.rb +23 -0
- data/lib/nfg_ui/components/patterns/button_toolbar.rb +20 -0
- data/lib/nfg_ui/components/patterns/card.rb +39 -0
- data/lib/nfg_ui/components/patterns/carousel.rb +31 -0
- data/lib/nfg_ui/components/patterns/collapse.rb +31 -0
- data/lib/nfg_ui/components/patterns/dropdown.rb +27 -0
- data/lib/nfg_ui/components/patterns/dropdown_menu.rb +16 -0
- data/lib/nfg_ui/components/patterns/empty_state.rb +11 -0
- data/lib/nfg_ui/components/patterns/filter_bar.rb +11 -0
- data/lib/nfg_ui/components/patterns/form_group.rb +11 -0
- data/lib/nfg_ui/components/patterns/graph.rb +11 -0
- data/lib/nfg_ui/components/patterns/jumbotron.rb +14 -0
- data/lib/nfg_ui/components/patterns/list_group.rb +16 -0
- data/lib/nfg_ui/components/patterns/media.rb +14 -0
- data/lib/nfg_ui/components/patterns/modal.rb +15 -0
- data/lib/nfg_ui/components/patterns/navbar.rb +17 -0
- data/lib/nfg_ui/components/patterns/navbar_nav.rb +17 -0
- data/lib/nfg_ui/components/patterns/page_header.rb +85 -0
- data/lib/nfg_ui/components/patterns/pagination.rb +14 -0
- data/lib/nfg_ui/components/patterns/progress.rb +24 -0
- data/lib/nfg_ui/components/patterns/slat.rb +14 -0
- data/lib/nfg_ui/components/patterns/slat_actions.rb +115 -0
- data/lib/nfg_ui/components/patterns/slat_header.rb +23 -0
- data/lib/nfg_ui/components/patterns/slat_list.rb +18 -0
- data/lib/nfg_ui/components/patterns/slats.rb +14 -0
- data/lib/nfg_ui/components/patterns/steps.rb +27 -0
- data/lib/nfg_ui/components/patterns/tab_content.rb +14 -0
- data/lib/nfg_ui/components/patterns/task_list.rb +11 -0
- data/lib/nfg_ui/components/patterns/tile.rb +58 -0
- data/lib/nfg_ui/components/patterns/tile_body.rb +29 -0
- data/lib/nfg_ui/components/patterns/tile_header.rb +40 -0
- data/lib/nfg_ui/components/patterns/tile_section.rb +29 -0
- data/lib/nfg_ui/components/traits/active.rb +14 -0
- data/lib/nfg_ui/components/traits/alert.rb +36 -0
- data/lib/nfg_ui/components/traits/alignment.rb +26 -0
- data/lib/nfg_ui/components/traits/button.rb +47 -0
- data/lib/nfg_ui/components/traits/button_group.rb +22 -0
- data/lib/nfg_ui/components/traits/card.rb +14 -0
- data/lib/nfg_ui/components/traits/collapse.rb +29 -0
- data/lib/nfg_ui/components/traits/disable.rb +19 -0
- data/lib/nfg_ui/components/traits/disable_with.rb +14 -0
- data/lib/nfg_ui/components/traits/dismiss.rb +16 -0
- data/lib/nfg_ui/components/traits/dropdown_toggle.rb +14 -0
- data/lib/nfg_ui/components/traits/icon.rb +16 -0
- data/lib/nfg_ui/components/traits/list_group.rb +16 -0
- data/lib/nfg_ui/components/traits/muted.rb +16 -0
- data/lib/nfg_ui/components/traits/nav.rb +26 -0
- data/lib/nfg_ui/components/traits/nav_item.rb +16 -0
- data/lib/nfg_ui/components/traits/navbar.rb +18 -0
- data/lib/nfg_ui/components/traits/page_header.rb +16 -0
- data/lib/nfg_ui/components/traits/pill.rb +14 -0
- data/lib/nfg_ui/components/traits/progress_bar.rb +24 -0
- data/lib/nfg_ui/components/traits/remote.rb +14 -0
- data/lib/nfg_ui/components/traits/size.rb +18 -0
- data/lib/nfg_ui/components/traits/slat_item.rb +28 -0
- data/lib/nfg_ui/components/traits/step.rb +14 -0
- data/lib/nfg_ui/components/traits/theme.rb +57 -0
- data/lib/nfg_ui/components/traits/typeface.rb +53 -0
- data/lib/nfg_ui/components/traits/vertical.rb +16 -0
- data/lib/nfg_ui/components/traits.rb +43 -0
- data/lib/nfg_ui/components/utilities/browser_detectable.rb +16 -0
- data/lib/nfg_ui/components/utilities/confirmable.rb +24 -0
- data/lib/nfg_ui/components/utilities/describable.rb +22 -0
- data/lib/nfg_ui/components/utilities/disable_withable.rb +26 -0
- data/lib/nfg_ui/components/utilities/emailable.rb +44 -0
- data/lib/nfg_ui/components/utilities/iconable.rb +20 -0
- data/lib/nfg_ui/components/utilities/left_iconable.rb +22 -0
- data/lib/nfg_ui/components/utilities/methodable.rb +24 -0
- data/lib/nfg_ui/components/utilities/renderable.rb +24 -0
- data/lib/nfg_ui/components/utilities/resource_themeable.rb +49 -0
- data/lib/nfg_ui/components/utilities/titleable.rb +20 -0
- data/lib/nfg_ui/components/utilities/traitable.rb +32 -0
- data/lib/nfg_ui/components/utilities/vertically_alignable.rb +31 -0
- data/lib/nfg_ui/components/utilities.rb +22 -0
- data/lib/nfg_ui/engine.rb +45 -0
- data/lib/nfg_ui/ui/base.rb +35 -0
- data/lib/nfg_ui/ui/bootstrap.rb +44 -0
- data/lib/nfg_ui/ui/network_for_good.rb +54 -0
- data/lib/nfg_ui/ui/utilities/initializer.rb +88 -0
- data/lib/nfg_ui/ui/utilities.rb +10 -0
- data/lib/nfg_ui/version.rb +5 -0
- data/lib/nfg_ui.rb +174 -0
- data/lib/tasks/nfg_ui_tasks.rake +53 -0
- metadata +741 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Base Component
|
|
7
|
+
# Defines conventional, shared behavior across
|
|
8
|
+
# Bootstrap components
|
|
9
|
+
class Base
|
|
10
|
+
include ActionView::Helpers::TagHelper
|
|
11
|
+
include ActionView::Helpers::TextHelper
|
|
12
|
+
include ActionView::Helpers::AssetTagHelper
|
|
13
|
+
include ActionView::Context
|
|
14
|
+
|
|
15
|
+
attr_reader :body
|
|
16
|
+
|
|
17
|
+
attr_accessor :options,
|
|
18
|
+
:view_context
|
|
19
|
+
|
|
20
|
+
def initialize(component_options, view_context)
|
|
21
|
+
self.options = defaults.merge!(component_options)
|
|
22
|
+
self.view_context = view_context
|
|
23
|
+
@body = options.fetch(:body, '')
|
|
24
|
+
utility_initialize
|
|
25
|
+
component_initialize
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# This base render handles many of the components and
|
|
30
|
+
# can be changed to have a different base element by
|
|
31
|
+
# overriding the base_element.
|
|
32
|
+
# in some cases, the child component can also call
|
|
33
|
+
# super with a block to have this render as the wrapping
|
|
34
|
+
# element.
|
|
35
|
+
def render
|
|
36
|
+
content_tag(base_element, html_options) do
|
|
37
|
+
(block_given? ? yield : body)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# This is used to help identify where to find partials for rendering components.
|
|
42
|
+
#
|
|
43
|
+
# Set the component family, e.g.: :breadcrumb
|
|
44
|
+
# on any sibling components.
|
|
45
|
+
#
|
|
46
|
+
# For example:
|
|
47
|
+
# BreadcrumbItem & Breadcrumb are members of the :breadcrumb component_family
|
|
48
|
+
def component_family
|
|
49
|
+
nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def data
|
|
53
|
+
options[:data] || {}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def html_options
|
|
57
|
+
options.except(*non_html_attribute_options)
|
|
58
|
+
.merge!(id: id,
|
|
59
|
+
class: css_classes,
|
|
60
|
+
data: data,
|
|
61
|
+
href: href,
|
|
62
|
+
style: style,
|
|
63
|
+
**assistive_html_attributes)
|
|
64
|
+
.reject { |_k, v| v.blank? } # prevent empty attributes from showing up
|
|
65
|
+
# Example: <div class>Text</div>
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def href
|
|
69
|
+
options[:href]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def id
|
|
73
|
+
options[:id]
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# For components that inherit bootstrap, provide a second
|
|
77
|
+
# layer of initialization, for example:
|
|
78
|
+
# to initialize traits on design system components
|
|
79
|
+
# (which are not available on bootstrap)
|
|
80
|
+
def component_initialize; end
|
|
81
|
+
def utility_initialize; end
|
|
82
|
+
|
|
83
|
+
def style
|
|
84
|
+
options[:style]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
private
|
|
88
|
+
|
|
89
|
+
# Assigned on individual components as needed
|
|
90
|
+
# Ex: { role: 'alert' }
|
|
91
|
+
#
|
|
92
|
+
# If aria assistive html is needed, see:
|
|
93
|
+
# Bootstrap::Utilities::AriaAssistable
|
|
94
|
+
# avoid passing aria to assistive_html_attributes directly
|
|
95
|
+
def assistive_html_attributes
|
|
96
|
+
@assistive_html_attributes ||= {}
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# the base_element is used in the default render for all components
|
|
100
|
+
# as the outer wrapping element. Typically, this is a div, but
|
|
101
|
+
# can be overriddent as a different static element in a child class
|
|
102
|
+
# or as a dynamic element in the child class.
|
|
103
|
+
# this allows most child components to not have to have their
|
|
104
|
+
# own render statement if their wrapping element is not a div
|
|
105
|
+
def base_element
|
|
106
|
+
:div
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Fallback component css class name.
|
|
110
|
+
# Overwritten within individual classes for situations like
|
|
111
|
+
# Button's css class is 'btn'...
|
|
112
|
+
# Example: returns 'alert' from NfgUi::Bootstrap::Components::Alert
|
|
113
|
+
def component_css_class
|
|
114
|
+
@component_css_class ||= component_class_name_string.underscore.dasherize.downcase
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def component_class_name_string
|
|
118
|
+
self.class.name.demodulize.to_s
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Manage or adjust the css_classes of the component by
|
|
122
|
+
# adding a new string of css classes to this method
|
|
123
|
+
# ex: super.push('new-class')
|
|
124
|
+
def css_classes
|
|
125
|
+
@css_classes ||= [component_css_class, options[:class]].join(' ').squish
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def defaults
|
|
129
|
+
{
|
|
130
|
+
# HTML Defaults
|
|
131
|
+
class: '',
|
|
132
|
+
id: nil,
|
|
133
|
+
|
|
134
|
+
# Content
|
|
135
|
+
# heading: (nil if heading.present?),
|
|
136
|
+
body: nil,
|
|
137
|
+
data: {},
|
|
138
|
+
|
|
139
|
+
# Configuration
|
|
140
|
+
# traits: ([] if traits.present?)
|
|
141
|
+
}
|
|
142
|
+
end
|
|
143
|
+
# Remove attributes from html_options that shouldn't show up in the
|
|
144
|
+
# html element, ex: <div body='should not be here'>
|
|
145
|
+
def non_html_attribute_options
|
|
146
|
+
@non_html_attribute_options ||= %i[body heading traits]
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Breadcrumb Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/breadcrumb/
|
|
8
|
+
class Breadcrumb < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
def component_family
|
|
10
|
+
:breadcrumb
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def render
|
|
14
|
+
content_tag(:nav, aria: { label: 'breadcrumb' }) do
|
|
15
|
+
content_tag(:ol, html_options) do
|
|
16
|
+
(block_given? ? yield : body)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Breadcrumb Item
|
|
7
|
+
# Subcomponent of Breadcrumb
|
|
8
|
+
# https://getbootstrap.com/docs/4.1/components/breadcrumb/
|
|
9
|
+
class BreadcrumbItem < NfgUi::Bootstrap::Components::Base
|
|
10
|
+
include Bootstrap::Utilities::Activatable
|
|
11
|
+
|
|
12
|
+
def component_family
|
|
13
|
+
:breadcrumb
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def base_element
|
|
19
|
+
:li
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def assistive_html_attributes
|
|
23
|
+
active ? super.merge!(aria: { current: 'page' }) : super
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Button Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/buttons/
|
|
8
|
+
class Button < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
include Bootstrap::Utilities::Activatable
|
|
10
|
+
include Bootstrap::Utilities::CollapseToggleable
|
|
11
|
+
include Bootstrap::Utilities::Disableable
|
|
12
|
+
include Bootstrap::Utilities::Remotable
|
|
13
|
+
include Bootstrap::Utilities::Sizable
|
|
14
|
+
include Bootstrap::Utilities::Modalable
|
|
15
|
+
include Bootstrap::Utilities::Themeable
|
|
16
|
+
include Bootstrap::Utilities::Tooltipable
|
|
17
|
+
include Bootstrap::Utilities::Wrappable
|
|
18
|
+
|
|
19
|
+
def render
|
|
20
|
+
if tooltip && disabled
|
|
21
|
+
content_tag(:span, disabled_component_tooltip_wrapper_html_options) do
|
|
22
|
+
content_tag(as, html_options) do
|
|
23
|
+
(block_given? ? yield : body)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
else
|
|
27
|
+
content_tag(as, html_options) do
|
|
28
|
+
(block_given? ? yield : body)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def block
|
|
34
|
+
options.fetch(:block, false)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def href
|
|
38
|
+
return if as != :a
|
|
39
|
+
collapse ? collapse : (options[:href] || '#')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def remove_component_css_classes
|
|
43
|
+
options.fetch(:remove_component_css_classes, false)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def assistive_html_attributes
|
|
49
|
+
active ? super.merge(aria: { pressed: true }) : super
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def css_classes
|
|
53
|
+
block ? super + " #{component_css_class}-block" : super
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def collapse_data_attributes
|
|
57
|
+
as == :a ? super.except!(:target) : super
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def component_css_class
|
|
61
|
+
remove_component_css_classes ? '' : 'btn'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def default_html_wrapper_element
|
|
65
|
+
:a
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def non_html_attribute_options
|
|
69
|
+
super.push(:block, :remove_component_css_classes)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Button Group Component
|
|
7
|
+
# An optional parent of the Button component
|
|
8
|
+
# https://getbootstrap.com/docs/4.1/components/breadcrumb/
|
|
9
|
+
class ButtonGroup < NfgUi::Bootstrap::Components::Base
|
|
10
|
+
include Bootstrap::Utilities::DropdownDirectionable
|
|
11
|
+
include Bootstrap::Utilities::Sizable
|
|
12
|
+
|
|
13
|
+
def vertical
|
|
14
|
+
options.fetch(:vertical, false)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def assistive_html_attributes
|
|
20
|
+
super.merge!(role: 'group', aria: { label: 'action buttons' })
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def component_css_class
|
|
24
|
+
'btn-group'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def css_classes
|
|
28
|
+
[
|
|
29
|
+
super,
|
|
30
|
+
("#{component_css_class}-vertical" if vertical)
|
|
31
|
+
].join(' ').squish
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Button Toolbar Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/button-group/#button-toolbar
|
|
8
|
+
class ButtonToolbar < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def component_css_class
|
|
12
|
+
'btn-toolbar'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def assistive_html_attributes
|
|
16
|
+
super.merge!(role: 'toolbar')
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Card Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/cards/
|
|
8
|
+
class Card < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
include Bootstrap::Utilities::Themeable
|
|
10
|
+
|
|
11
|
+
def component_family
|
|
12
|
+
:card
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def footer
|
|
16
|
+
options.fetch(:footer, '')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def heading
|
|
20
|
+
options.fetch(:heading, '')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def subtitle
|
|
24
|
+
options.fetch(:subtitle, '')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def title
|
|
28
|
+
options.fetch(:title, '')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def render
|
|
32
|
+
content_tag(:div, html_options) do
|
|
33
|
+
capture do
|
|
34
|
+
if heading.present?
|
|
35
|
+
concat(NfgUi::Bootstrap::Components::CardHeader.new({ heading: heading }, view_context).render)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
concat(NfgUi::Bootstrap::Components::CardBody.new({}, view_context).render {
|
|
39
|
+
capture do
|
|
40
|
+
concat(content_tag(:h5, title, class: 'card-title')) if title.present?
|
|
41
|
+
concat(content_tag(:h6, subtitle, class: 'card-subtitle')) if subtitle.present?
|
|
42
|
+
concat(block_given? ? yield : body)
|
|
43
|
+
end
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
if footer.present?
|
|
47
|
+
concat(NfgUi::Bootstrap::Components::CardFooter.new({ body: footer }, view_context).render)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def css_classes
|
|
56
|
+
return super unless theme.presence && theme != :light
|
|
57
|
+
[
|
|
58
|
+
super,
|
|
59
|
+
(outlined ? "text-#{theme}" : 'text-white')
|
|
60
|
+
].join(' ').squish
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def default_theme
|
|
64
|
+
nil
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def non_html_attribute_options
|
|
68
|
+
super.push(:footer, :heading, :subtitle, :title)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def outlined_css_class_prefix
|
|
72
|
+
'border-'
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def theme_css_class_prefix
|
|
76
|
+
outlined ? '' : 'bg-'
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Card Header
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
|
|
8
|
+
class CardBody < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
def component_family
|
|
10
|
+
:card
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Card Header
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
|
|
8
|
+
class CardFooter < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
def component_family
|
|
10
|
+
:card
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Card Header
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
|
|
8
|
+
class CardHeader < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
def component_family
|
|
10
|
+
:card
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def heading
|
|
14
|
+
options.fetch(:heading, nil)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def render
|
|
18
|
+
super do
|
|
19
|
+
if heading.present?
|
|
20
|
+
heading
|
|
21
|
+
else
|
|
22
|
+
(block_given? ? yield : body)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def non_html_attribute_options
|
|
30
|
+
super.push(:heading)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Card Header
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
|
|
8
|
+
class CardImage < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
def component_family
|
|
10
|
+
:card
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def image
|
|
14
|
+
options.fetch(:image, '')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def render
|
|
18
|
+
image_tag image, **html_options
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def component_css_class
|
|
24
|
+
'card-img'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def non_html_attribute_options
|
|
28
|
+
super.push(:image)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Card Header
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
|
|
8
|
+
class CardImageOverlay < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
include NfgUi::Components::Utilities::Titleable
|
|
10
|
+
|
|
11
|
+
def component_family
|
|
12
|
+
:card
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def image
|
|
16
|
+
options.fetch(:image, '')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def render
|
|
20
|
+
capture do
|
|
21
|
+
if image
|
|
22
|
+
concat(NfgUi::Bootstrap::Components::CardImage.new({ image: image }, view_context).render)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
concat(content_tag(:div, html_options) {
|
|
26
|
+
capture do
|
|
27
|
+
concat(content_tag(:h5, title, class: 'card-title')) if title
|
|
28
|
+
concat(block_given? ? yield : body)
|
|
29
|
+
end
|
|
30
|
+
})
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def component_css_class
|
|
37
|
+
'card-img-overlay'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def non_html_attribute_options
|
|
41
|
+
super.push(:image)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Carousel Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/carousel/
|
|
8
|
+
class Carousel < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
def component_family
|
|
10
|
+
:carousel
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def controls
|
|
14
|
+
options.fetch(:controls, false)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def data
|
|
18
|
+
super.merge!(ride: 'carousel')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def indicators
|
|
22
|
+
options[:indicators] || 0 # return 0 on nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def render
|
|
26
|
+
super do
|
|
27
|
+
capture do
|
|
28
|
+
content_tag(:div, class: 'carousel-inner') do
|
|
29
|
+
if indicators > 0
|
|
30
|
+
concat(NfgUi::Bootstrap::Components::CarouselIndicators.new({ count: indicators, carousel: "##{id}" }, view_context).render)
|
|
31
|
+
end
|
|
32
|
+
concat(block_given? ? yield : body)
|
|
33
|
+
if controls
|
|
34
|
+
concat(NfgUi::Bootstrap::Components::CarouselControl.new({ control: :next, carousel: "##{id}" }, view_context).render)
|
|
35
|
+
concat(NfgUi::Bootstrap::Components::CarouselControl.new({ control: :prev, carousel: "##{id}" }, view_context).render)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def css_classes
|
|
45
|
+
[
|
|
46
|
+
super,
|
|
47
|
+
'slide'
|
|
48
|
+
].join(' ').squish
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def non_html_attribute_options
|
|
52
|
+
super.push(:indicators, :controls)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Carousel Caption Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/carousel/#with-captions
|
|
8
|
+
class CarouselCaption < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
def component_family
|
|
10
|
+
:carousel
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def label
|
|
14
|
+
options.fetch(:label, nil)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def render
|
|
18
|
+
super do
|
|
19
|
+
capture do
|
|
20
|
+
concat(content_tag(:h5, label)) if label
|
|
21
|
+
concat(block_given? ? yield : body)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def non_html_attribute_options
|
|
29
|
+
super.push(:label)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|