undercase 0.2.29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +70 -0
- data/Rakefile +21 -0
- data/app/assets/fonts/FontAwesome/FontAwesome.otf +0 -0
- data/app/assets/fonts/FontAwesome/fontawesome-webfont.eot +0 -0
- data/app/assets/fonts/FontAwesome/fontawesome-webfont.svg +414 -0
- data/app/assets/fonts/FontAwesome/fontawesome-webfont.ttf +0 -0
- data/app/assets/fonts/FontAwesome/fontawesome-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-black-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-black-webfont.svg +914 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-black-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-black-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-blackit-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-blackit-webfont.svg +812 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-blackit-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-blackit-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-bold-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-bold-webfont.svg +955 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-bold-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-bold-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-boldit-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-boldit-webfont.svg +831 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-boldit-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-boldit-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-extralight-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-extralight-webfont.svg +905 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-extralight-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-extralight-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-extralightit-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-extralightit-webfont.svg +828 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-extralightit-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-extralightit-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-it-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-it-webfont.svg +843 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-it-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-it-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +904 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-lightit-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-lightit-webfont.svg +830 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-lightit-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-lightit-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +978 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-semibold-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-semibold-webfont.svg +968 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-semibold-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-semibold-webfont.woff +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-semiboldit-webfont.eot +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-semiboldit-webfont.svg +838 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-semiboldit-webfont.ttf +0 -0
- data/app/assets/fonts/Source-Sans-Pro/sourcesanspro-semiboldit-webfont.woff +0 -0
- data/app/assets/fonts/Undercase-Icons/Undercase-Icons.eot +0 -0
- data/app/assets/fonts/Undercase-Icons/Undercase-Icons.svg +72 -0
- data/app/assets/fonts/Undercase-Icons/Undercase-Icons.ttf +0 -0
- data/app/assets/fonts/Undercase-Icons/Undercase-Icons.woff +0 -0
- data/app/assets/images/avatar_male_small.png +0 -0
- data/app/assets/images/backgrounds/checkerboard_tile.png +0 -0
- data/app/assets/images/icons/calendar_datepicker.svg +18 -0
- data/app/assets/images/icons/checkbox-selected.svg +17 -0
- data/app/assets/images/icons/checkbox-unselected.svg +12 -0
- data/app/assets/images/icons/double-arrow-left.svg +13 -0
- data/app/assets/images/icons/double-arrow-right.svg +13 -0
- data/app/assets/images/icons/focus-child.svg +14 -0
- data/app/assets/images/icons/master-profile.svg +11 -0
- data/app/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/app/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/app/assets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_100_b8b8b8_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/app/assets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/app/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/app/assets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/app/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/app/assets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/app/assets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/app/assets/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/app/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/app/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/app/assets/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/app/assets/images/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
- data/app/assets/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/ui-icons_228ef1_256x240.png +0 -0
- data/app/assets/images/ui-icons_2e83ff_256x240.png +0 -0
- data/app/assets/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/ui-icons_888888_256x240.png +0 -0
- data/app/assets/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/app/assets/images/ui-icons_ef8c08_256x240.png +0 -0
- data/app/assets/images/ui-icons_ffd27a_256x240.png +0 -0
- data/app/assets/images/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/images/undercase/undercase_gem_logo.png +0 -0
- data/app/assets/javascripts/undercase/index.js +19 -0
- data/app/assets/javascripts/undercase/lib/BreakpointTell.js +9 -0
- data/app/assets/javascripts/undercase/lib/timezone.js +28 -0
- data/app/assets/javascripts/undercase/patterns/Filter.js +75 -0
- data/app/assets/javascripts/undercase/patterns/FlexibleSearchMenu.js +64 -0
- data/app/assets/javascripts/undercase/patterns/ToggleNavigationSearch.js +60 -0
- data/app/assets/javascripts/undercase/patterns/datepicker.js +36 -0
- data/app/assets/javascripts/undercase/patterns/expando.js +39 -0
- data/app/assets/javascripts/undercase/patterns/modal.js +60 -0
- data/app/assets/javascripts/undercase/patterns/tabs.js +26 -0
- data/app/assets/javascripts/undercase/patterns/timepicker.js +5 -0
- data/app/assets/javascripts/undercase/popover.js +26 -0
- data/app/assets/javascripts/undercase/presenter.js +55 -0
- data/app/assets/javascripts/undercase/show_code.js +35 -0
- data/app/assets/javascripts/undercase/vendor/date.js +879 -0
- data/app/assets/javascripts/undercase/vendor/jquery-extensions/jquery.calendrical.js +517 -0
- data/app/assets/javascripts/undercase/vendor/jquery-ui-1.10.3.js +14972 -0
- data/app/assets/javascripts/undercase/vendor/modernizr.custom.14960.js +764 -0
- data/app/assets/javascripts/undercase/vendor/underscore.js +1189 -0
- data/app/assets/stylesheets/undercase/libraries/_all.scss +38 -0
- data/app/assets/stylesheets/undercase/libraries/_borders.scss +20 -0
- data/app/assets/stylesheets/undercase/libraries/_colors.scss +41 -0
- data/app/assets/stylesheets/undercase/libraries/_constants.scss +76 -0
- data/app/assets/stylesheets/undercase/libraries/_groundwork_settings.scss +351 -0
- data/app/assets/stylesheets/undercase/libraries/_icon_codes.scss +369 -0
- data/app/assets/stylesheets/undercase/libraries/_mixins.scss +49 -0
- data/app/assets/stylesheets/undercase/libraries/mixins/_button.scss +124 -0
- data/app/assets/stylesheets/undercase/libraries/mixins/_forms.scss +33 -0
- data/app/assets/stylesheets/undercase/libraries/mixins/_layout.scss +23 -0
- data/app/assets/stylesheets/undercase/libraries/mixins/_typography.scss +99 -0
- data/app/assets/stylesheets/undercase/patterns/_all.scss +32 -0
- data/app/assets/stylesheets/undercase/patterns/_borders.scss +89 -0
- data/app/assets/stylesheets/undercase/patterns/_box_helpers.scss +39 -0
- data/app/assets/stylesheets/undercase/patterns/_buttons.scss +110 -0
- data/app/assets/stylesheets/undercase/patterns/_cards.scss +36 -0
- data/app/assets/stylesheets/undercase/patterns/_chevrons.scss +98 -0
- data/app/assets/stylesheets/undercase/patterns/_colors.scss +34 -0
- data/app/assets/stylesheets/undercase/patterns/_content_with_toolbar.scss +23 -0
- data/app/assets/stylesheets/undercase/patterns/_dropdowns.scss +49 -0
- data/app/assets/stylesheets/undercase/patterns/_filters.scss +121 -0
- data/app/assets/stylesheets/undercase/patterns/_font_faces.scss +32 -0
- data/app/assets/stylesheets/undercase/patterns/_forms.scss +617 -0
- data/app/assets/stylesheets/undercase/patterns/_horizontal_rules.scss +5 -0
- data/app/assets/stylesheets/undercase/patterns/_icons.scss +4 -0
- data/app/assets/stylesheets/undercase/patterns/_inline_message.scss +36 -0
- data/app/assets/stylesheets/undercase/patterns/_layout.scss +57 -0
- data/app/assets/stylesheets/undercase/patterns/_length_of_time.scss +10 -0
- data/app/assets/stylesheets/undercase/patterns/_links.scss +96 -0
- data/app/assets/stylesheets/undercase/patterns/_lists.scss +84 -0
- data/app/assets/stylesheets/undercase/patterns/_media.scss +15 -0
- data/app/assets/stylesheets/undercase/patterns/_modals.scss +114 -0
- data/app/assets/stylesheets/undercase/patterns/_navigation.scss +224 -0
- data/app/assets/stylesheets/undercase/patterns/_pagination.scss +33 -0
- data/app/assets/stylesheets/undercase/patterns/_person_placard.scss +52 -0
- data/app/assets/stylesheets/undercase/patterns/_popovers.scss +12 -0
- data/app/assets/stylesheets/undercase/patterns/_quiz.scss +67 -0
- data/app/assets/stylesheets/undercase/patterns/_site.scss +95 -0
- data/app/assets/stylesheets/undercase/patterns/_spinners.scss +23 -0
- data/app/assets/stylesheets/undercase/patterns/_tables.scss +111 -0
- data/app/assets/stylesheets/undercase/patterns/_tabs.scss +56 -0
- data/app/assets/stylesheets/undercase/patterns/_typography.scss +231 -0
- data/app/assets/stylesheets/undercase/patterns/undercase_icons/glyphs.scss +28 -0
- data/app/assets/stylesheets/undercase/patterns_new_front_end/_all.scss +6 -0
- data/app/assets/stylesheets/undercase/patterns_new_front_end/_cards.scss +248 -0
- data/app/assets/stylesheets/undercase/patterns_new_front_end/_links.scss +10 -0
- data/app/assets/stylesheets/undercase/patterns_new_front_end/_warnings.scss +32 -0
- data/app/assets/stylesheets/undercase/vendor_static/_all.scss +12 -0
- data/app/assets/stylesheets/undercase/vendor_static/_calendrical.scss +105 -0
- data/app/assets/stylesheets/undercase/vendor_static/_icons.scss +422 -0
- data/app/assets/stylesheets/undercase/vendor_static/_jquery-ui-1.8.13.custom.scss +615 -0
- data/app/assets/stylesheets/undercase_frame/_dummy_site.scss +307 -0
- data/app/assets/stylesheets/undercase_frame/vendor/coderay.css +118 -0
- data/app/assets/stylesheets/undercase_frame_application.css.scss +18 -0
- data/app/assets/stylesheets/undercase_frame_vendor_static.scss +4 -0
- data/app/controllers/undercase/application_controller.rb +4 -0
- data/app/controllers/undercase/patterns_controller.rb +13 -0
- data/app/helpers/undercase/application_helper.rb +86 -0
- data/app/helpers/undercase/pattern_helper.rb +7 -0
- data/app/inputs/currency_input.rb +20 -0
- data/app/inputs/date_picker_input.rb +77 -0
- data/app/inputs/date_time_picker_input.rb +141 -0
- data/app/inputs/radio_as_accessible_input.rb +33 -0
- data/app/inputs/radio_with_clear_input.rb +41 -0
- data/app/models/dummy_form_object.rb +24 -0
- data/app/views/layouts/undercase/application.html.haml +49 -0
- data/app/views/undercase/patterns/_blue_dotted_link_caps.html.haml +2 -0
- data/app/views/undercase/patterns/_blue_link.html.haml +2 -0
- data/app/views/undercase/patterns/_blue_link_clean.html.haml +2 -0
- data/app/views/undercase/patterns/_cc_button_auto.html.haml +8 -0
- data/app/views/undercase/patterns/_cc_button_flat_blue.html.haml +2 -0
- data/app/views/undercase/patterns/_cc_button_flat_gray.html.haml +7 -0
- data/app/views/undercase/patterns/_cc_button_flat_gray_split.html.haml +4 -0
- data/app/views/undercase/patterns/_cc_button_flat_green.html.haml +2 -0
- data/app/views/undercase/patterns/_cc_button_gray.html.haml +1 -0
- data/app/views/undercase/patterns/_cc_button_icon.html.haml +2 -0
- data/app/views/undercase/patterns/_cc_button_wire_auto.html.haml +8 -0
- data/app/views/undercase/patterns/_cc_link_smartbar.html.haml +2 -0
- data/app/views/undercase/patterns/_chevrons.html.haml +38 -0
- data/app/views/undercase/patterns/_colors.html.haml +12 -0
- data/app/views/undercase/patterns/_content_with_toolbar.html.haml +6 -0
- data/app/views/undercase/patterns/_dropdown.html.haml +21 -0
- data/app/views/undercase/patterns/_filters.html.haml +210 -0
- data/app/views/undercase/patterns/_filters_show_only.html.haml +77 -0
- data/app/views/undercase/patterns/_gray_link.html.haml +2 -0
- data/app/views/undercase/patterns/_grid.html.haml +0 -0
- data/app/views/undercase/patterns/_icon_classes.html.haml +8 -0
- data/app/views/undercase/patterns/_icon_custom.html.haml +12 -0
- data/app/views/undercase/patterns/_inline_message.html.haml +5 -0
- data/app/views/undercase/patterns/_length_of_time.html.haml +12 -0
- data/app/views/undercase/patterns/_list_circle.html.haml +4 -0
- data/app/views/undercase/patterns/_list_disc.html.haml +4 -0
- data/app/views/undercase/patterns/_navigation.html.haml +40 -0
- data/app/views/undercase/patterns/_pagination.html.haml +17 -0
- data/app/views/undercase/patterns/_pattern.html.haml +27 -0
- data/app/views/undercase/patterns/_person_placard.html.haml +103 -0
- data/app/views/undercase/patterns/_popover.html.haml +9 -0
- data/app/views/undercase/patterns/_tables_mobile.html.haml +23 -0
- data/app/views/undercase/patterns/_tables_not_desktop.html.haml +21 -0
- data/app/views/undercase/patterns/_tables_small_mobile.html.haml +23 -0
- data/app/views/undercase/patterns/_tables_small_tablet.html.haml +25 -0
- data/app/views/undercase/patterns/_typography.html.haml +16 -0
- data/app/views/undercase/patterns/_typography_body_em.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_body_p.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_body_strong.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_body_thin.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_body_underline.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_body_uppercase.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_heading_1.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_heading_2.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_heading_3.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_heading_4.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_heading_thin.html.haml +1 -0
- data/app/views/undercase/patterns/_typography_links_general.html.haml +2 -0
- data/app/views/undercase/patterns/_typography_links_navigation.html.haml +2 -0
- data/app/views/undercase/patterns/_typography_links_page_banner.html.haml +2 -0
- data/app/views/undercase/patterns/_uc_borders_blue.html.haml +2 -0
- data/app/views/undercase/patterns/_uc_borders_gray.html.haml +2 -0
- data/app/views/undercase/patterns/_uc_borders_hover_blue.html.haml +3 -0
- data/app/views/undercase/patterns/_uc_borders_left.html.haml +4 -0
- data/app/views/undercase/patterns/_uc_borders_lighter_gray.html.haml +3 -0
- data/app/views/undercase/patterns/_uc_borders_middle_blue_2.html.haml +1 -0
- data/app/views/undercase/patterns/_uc_borders_middle_gray.html.haml +2 -0
- data/app/views/undercase/patterns/_uc_borders_yellow.html.haml +1 -0
- data/app/views/undercase/patterns/_uc_card.html.haml +40 -0
- data/app/views/undercase/patterns/_uc_dialog_loading.html.haml +2 -0
- data/app/views/undercase/patterns/_uc_errors.html.haml +1 -0
- data/app/views/undercase/patterns/_uc_forms_check_boxes.html.haml +7 -0
- data/app/views/undercase/patterns/_uc_forms_check_boxes_boolean.html.haml +20 -0
- data/app/views/undercase/patterns/_uc_forms_checkbutton.html.haml +14 -0
- data/app/views/undercase/patterns/_uc_forms_conditionally_required.html.haml +19 -0
- data/app/views/undercase/patterns/_uc_forms_currency_input.html.haml +7 -0
- data/app/views/undercase/patterns/_uc_forms_date_picker.html.haml +9 -0
- data/app/views/undercase/patterns/_uc_forms_date_time_picker.html.haml +9 -0
- data/app/views/undercase/patterns/_uc_forms_disabled_field.html.haml +8 -0
- data/app/views/undercase/patterns/_uc_forms_dropdown.html.haml +10 -0
- data/app/views/undercase/patterns/_uc_forms_dropdown_with_optgroups.html.haml +10 -0
- data/app/views/undercase/patterns/_uc_forms_full_name.html.haml +32 -0
- data/app/views/undercase/patterns/_uc_forms_grouped_inputs.html.haml +17 -0
- data/app/views/undercase/patterns/_uc_forms_large_field.html.haml +8 -0
- data/app/views/undercase/patterns/_uc_forms_medium_field.html.haml +8 -0
- data/app/views/undercase/patterns/_uc_forms_phone.html.haml +26 -0
- data/app/views/undercase/patterns/_uc_forms_radio_button_clear_link.html.haml +7 -0
- data/app/views/undercase/patterns/_uc_forms_radio_buttons.html.haml +7 -0
- data/app/views/undercase/patterns/_uc_forms_radio_buttons_breathe.html.haml +11 -0
- data/app/views/undercase/patterns/_uc_forms_radio_buttons_horizontal.html.haml +11 -0
- data/app/views/undercase/patterns/_uc_forms_search.html.haml +23 -0
- data/app/views/undercase/patterns/_uc_forms_short_name.html.haml +20 -0
- data/app/views/undercase/patterns/_uc_forms_small_field.html.haml +8 -0
- data/app/views/undercase/patterns/_uc_forms_textarea.html.haml +9 -0
- data/app/views/undercase/patterns/_uc_forms_tiny_field.html.haml +8 -0
- data/app/views/undercase/patterns/_uc_list_comma.html.haml +4 -0
- data/app/views/undercase/patterns/_uc_list_ordered_alpha.html.haml +12 -0
- data/app/views/undercase/patterns/_uc_list_ordered_decimal.html.haml +12 -0
- data/app/views/undercase/patterns/_uc_list_pipe.html.haml +4 -0
- data/app/views/undercase/patterns/_uc_media.html.haml +6 -0
- data/app/views/undercase/patterns/_uc_modal_basic.html.haml +28 -0
- data/app/views/undercase/patterns/_uc_modal_exception.html.haml +34 -0
- data/app/views/undercase/patterns/_uc_modal_with_linked.html.haml +37 -0
- data/app/views/undercase/patterns/_uc_quiz_questions.html.haml +12 -0
- data/app/views/undercase/patterns/_uc_tabs.html.haml +16 -0
- data/app/views/undercase/patterns/index.html.haml +48 -0
- data/app/views/undercase/patterns/show.html.haml +7 -0
- data/app/views/undercase/popups/_dropdown.html.haml +5 -0
- data/config/initializers/dotiw.rb +1 -0
- data/config/initializers/simple_form.rb +147 -0
- data/config/routes.rb +4 -0
- data/config/tddium.yml +17 -0
- data/config/undercase-icons-regular.yml +41 -0
- data/lib/tasks/undercase.rake +51 -0
- data/lib/undercase.rb +15 -0
- data/lib/undercase/categories.yml +12 -0
- data/lib/undercase/category.rb +20 -0
- data/lib/undercase/engine.rb +13 -0
- data/lib/undercase/pattern.rb +68 -0
- data/lib/undercase/patterns/blue_dotted_link_caps.yml +4 -0
- data/lib/undercase/patterns/blue_link.yml +4 -0
- data/lib/undercase/patterns/blue_link_clean.yml +4 -0
- data/lib/undercase/patterns/cc_button_auto.yml +4 -0
- data/lib/undercase/patterns/cc_button_flat_blue.yml +4 -0
- data/lib/undercase/patterns/cc_button_flat_gray.yml +4 -0
- data/lib/undercase/patterns/cc_button_flat_gray_split.yml +9 -0
- data/lib/undercase/patterns/cc_button_flat_green.yml +27 -0
- data/lib/undercase/patterns/cc_button_gray.yml +4 -0
- data/lib/undercase/patterns/cc_button_icon.yml +4 -0
- data/lib/undercase/patterns/cc_button_wire_auto.yml +5 -0
- data/lib/undercase/patterns/cc_link_smartbar.yml +4 -0
- data/lib/undercase/patterns/chevrons.yml +4 -0
- data/lib/undercase/patterns/colors.yml +5 -0
- data/lib/undercase/patterns/content_with_toolbar.yml +4 -0
- data/lib/undercase/patterns/dropdown.yml +4 -0
- data/lib/undercase/patterns/filters.yml +5 -0
- data/lib/undercase/patterns/filters_show_only.yml +5 -0
- data/lib/undercase/patterns/gray_link.yml +4 -0
- data/lib/undercase/patterns/grid.yml +4 -0
- data/lib/undercase/patterns/icon_classes.yml +5 -0
- data/lib/undercase/patterns/icon_custom.yml +4 -0
- data/lib/undercase/patterns/inline_message.yml +4 -0
- data/lib/undercase/patterns/length_of_time.yml +4 -0
- data/lib/undercase/patterns/list_circle.yml +4 -0
- data/lib/undercase/patterns/list_disc.yml +4 -0
- data/lib/undercase/patterns/navigation.yml +4 -0
- data/lib/undercase/patterns/pagination.yml +4 -0
- data/lib/undercase/patterns/person_placard.yml +4 -0
- data/lib/undercase/patterns/popover.yml +4 -0
- data/lib/undercase/patterns/tables_mobile.yml +4 -0
- data/lib/undercase/patterns/tables_not_desktop.yml +4 -0
- data/lib/undercase/patterns/tables_small_tablet.yml +4 -0
- data/lib/undercase/patterns/typography.yml +4 -0
- data/lib/undercase/patterns/typography_body_em.yml +4 -0
- data/lib/undercase/patterns/typography_body_p.yml +4 -0
- data/lib/undercase/patterns/typography_body_strong.yml +4 -0
- data/lib/undercase/patterns/typography_body_thin.yml +4 -0
- data/lib/undercase/patterns/typography_body_underline.yml +4 -0
- data/lib/undercase/patterns/typography_body_uppercase.yml +4 -0
- data/lib/undercase/patterns/typography_heading_1.yml +4 -0
- data/lib/undercase/patterns/typography_heading_2.yml +4 -0
- data/lib/undercase/patterns/typography_heading_3.yml +4 -0
- data/lib/undercase/patterns/typography_heading_4.yml +4 -0
- data/lib/undercase/patterns/typography_heading_thin.yml +4 -0
- data/lib/undercase/patterns/typography_links_general.yml +4 -0
- data/lib/undercase/patterns/typography_links_navigation.yml +4 -0
- data/lib/undercase/patterns/typography_links_page_banner.yml +4 -0
- data/lib/undercase/patterns/uc_borders_blue.yml +4 -0
- data/lib/undercase/patterns/uc_borders_gray.yml +4 -0
- data/lib/undercase/patterns/uc_borders_hover_blue.yml +4 -0
- data/lib/undercase/patterns/uc_borders_left.yml +4 -0
- data/lib/undercase/patterns/uc_borders_lighter_gray.yml +4 -0
- data/lib/undercase/patterns/uc_borders_middle_blue_2.yml +4 -0
- data/lib/undercase/patterns/uc_borders_middle_gray.yml +4 -0
- data/lib/undercase/patterns/uc_borders_yellow.yml +4 -0
- data/lib/undercase/patterns/uc_card.yml +5 -0
- data/lib/undercase/patterns/uc_dialog_loading.yml +4 -0
- data/lib/undercase/patterns/uc_errors.yml +5 -0
- data/lib/undercase/patterns/uc_forms_check_boxes.yml +4 -0
- data/lib/undercase/patterns/uc_forms_check_boxes_boolean.yml +4 -0
- data/lib/undercase/patterns/uc_forms_checkbutton.yml +4 -0
- data/lib/undercase/patterns/uc_forms_conditionally_required.yml +4 -0
- data/lib/undercase/patterns/uc_forms_currency_input.yml +4 -0
- data/lib/undercase/patterns/uc_forms_date_picker.yml +4 -0
- data/lib/undercase/patterns/uc_forms_date_time_picker.yml +4 -0
- data/lib/undercase/patterns/uc_forms_disabled_field.yml +4 -0
- data/lib/undercase/patterns/uc_forms_dropdown.yml +4 -0
- data/lib/undercase/patterns/uc_forms_dropdown_with_optgroups.yml +4 -0
- data/lib/undercase/patterns/uc_forms_full_name.yml +4 -0
- data/lib/undercase/patterns/uc_forms_grouped_inputs.yml +4 -0
- data/lib/undercase/patterns/uc_forms_large_field.yml +4 -0
- data/lib/undercase/patterns/uc_forms_medium_field.yml +4 -0
- data/lib/undercase/patterns/uc_forms_phone.yml +4 -0
- data/lib/undercase/patterns/uc_forms_radio_button_clear_link.yml +4 -0
- data/lib/undercase/patterns/uc_forms_radio_buttons.yml +4 -0
- data/lib/undercase/patterns/uc_forms_radio_buttons_breathe.yml +4 -0
- data/lib/undercase/patterns/uc_forms_radio_buttons_horizontal.yml +4 -0
- data/lib/undercase/patterns/uc_forms_search.yml +4 -0
- data/lib/undercase/patterns/uc_forms_short_name.yml +4 -0
- data/lib/undercase/patterns/uc_forms_small_field.yml +4 -0
- data/lib/undercase/patterns/uc_forms_textarea.yml +4 -0
- data/lib/undercase/patterns/uc_forms_tiny_field.yml +4 -0
- data/lib/undercase/patterns/uc_list_comma.yml +4 -0
- data/lib/undercase/patterns/uc_list_ordered_alpha.yml +4 -0
- data/lib/undercase/patterns/uc_list_ordered_decimal.yml +4 -0
- data/lib/undercase/patterns/uc_list_pipe.yml +4 -0
- data/lib/undercase/patterns/uc_media.yml +4 -0
- data/lib/undercase/patterns/uc_modal_basic.yml +4 -0
- data/lib/undercase/patterns/uc_modal_exception.yml +4 -0
- data/lib/undercase/patterns/uc_modal_with_linked.yml +4 -0
- data/lib/undercase/patterns/uc_quiz_questions.yml +4 -0
- data/lib/undercase/patterns/uc_tabs.yml +4 -0
- data/lib/undercase/templates/fontcustom/glyphs.scss +6 -0
- data/lib/undercase/version.rb +3 -0
- data/public/timezones/Makefile +523 -0
- data/public/timezones/africa +1194 -0
- data/public/timezones/antarctica +411 -0
- data/public/timezones/asia +2751 -0
- data/public/timezones/australasia +1726 -0
- data/public/timezones/backward +117 -0
- data/public/timezones/etcetera +81 -0
- data/public/timezones/europe +2973 -0
- data/public/timezones/factory +10 -0
- data/public/timezones/iso3166.tab +276 -0
- data/public/timezones/leapseconds +100 -0
- data/public/timezones/northamerica +3254 -0
- data/public/timezones/pacificnew +28 -0
- data/public/timezones/solar87 +390 -0
- data/public/timezones/solar88 +390 -0
- data/public/timezones/solar89 +395 -0
- data/public/timezones/southamerica +1718 -0
- data/public/timezones/systemv +38 -0
- data/public/timezones/yearistype.sh +38 -0
- data/public/timezones/zone.tab +444 -0
- metadata +789 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
require_dependency 'undercase/application_controller'
|
2
|
+
|
3
|
+
module Undercase
|
4
|
+
class PatternsController < ApplicationController
|
5
|
+
def index
|
6
|
+
@patterns = Pattern.all
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
@category = Undercase::Category.new(params[:category])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Undercase
|
2
|
+
module ApplicationHelper
|
3
|
+
Dropdown = Struct.new(:link_text, :placement, :contents)
|
4
|
+
|
5
|
+
def dropdown(link_text, options = {}, &block)
|
6
|
+
contents = capture(&block)
|
7
|
+
placement = options.fetch(:placement) { "left" }
|
8
|
+
|
9
|
+
dropdown = Dropdown.new(link_text, placement, contents)
|
10
|
+
|
11
|
+
render "undercase/popups/dropdown", dropdown: dropdown
|
12
|
+
end
|
13
|
+
|
14
|
+
def content_with_toolbar(toolbar_links)
|
15
|
+
content = content_tag(:div) do
|
16
|
+
yield
|
17
|
+
end
|
18
|
+
toolbar = content_tag(:div, toolbar_links.join.html_safe, class: 'toolbar')
|
19
|
+
content_and_toolbar = content + toolbar
|
20
|
+
content_tag(:div, content_and_toolbar.html_safe, class: 'content-with-toolbar')
|
21
|
+
end
|
22
|
+
|
23
|
+
def inline_message(type, content_or_options_with_block = nil, options = nil, &block)
|
24
|
+
raise ArgumentError unless [:notice, :pending, :warning, :severe, :success].include?(type)
|
25
|
+
|
26
|
+
if block_given?
|
27
|
+
options = content_or_options_with_block
|
28
|
+
else
|
29
|
+
content = content_or_options_with_block
|
30
|
+
end
|
31
|
+
|
32
|
+
options ||= {}
|
33
|
+
options[:class] = ["inline-#{type}", options[:class]].compact.join(" ")
|
34
|
+
|
35
|
+
if block_given?
|
36
|
+
content_tag(:div, options, &block)
|
37
|
+
else
|
38
|
+
content_tag(:div, content, options)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def length_of_time(from_date, current_date = Date.today)
|
43
|
+
time_hash = distance_of_time_in_words_hash(from_date, current_date)
|
44
|
+
time_hash = convert_one_year_to_months(time_hash)
|
45
|
+
time_hash = convert_years_to_half_years(time_hash)
|
46
|
+
|
47
|
+
["years", "months", "days"].each do |unit|
|
48
|
+
distance = time_hash[unit]
|
49
|
+
if distance && distance > 0
|
50
|
+
result = '%{distance} %{unit}'
|
51
|
+
if unit == "months"
|
52
|
+
unit = "mos"
|
53
|
+
result += '.'
|
54
|
+
end
|
55
|
+
unit = unit.singularize if distance <= 1
|
56
|
+
return (result % { unit: unit, distance: distance }).gsub('.5',' ½')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
"1 #{I18n.t(:days, default: "days").singularize}"
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def convert_one_year_to_months(time_hash)
|
66
|
+
return time_hash unless time_hash["years"] == 1
|
67
|
+
|
68
|
+
result = time_hash.dup
|
69
|
+
months = result["months"] || 0
|
70
|
+
result["months"] = months + 12
|
71
|
+
result["years"] = 0
|
72
|
+
result
|
73
|
+
end
|
74
|
+
|
75
|
+
def convert_years_to_half_years(time_hash)
|
76
|
+
return time_hash if time_hash['years'] && time_hash['years'] < 2
|
77
|
+
result = time_hash.dup
|
78
|
+
months = result['months'] || 0
|
79
|
+
if months >= 6
|
80
|
+
result['years'] = result['years'] + 0.5
|
81
|
+
result['months'] = 0
|
82
|
+
end
|
83
|
+
result
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CurrencyInput < SimpleForm::Inputs::Base
|
2
|
+
include ActionView::Helpers::NumberHelper
|
3
|
+
|
4
|
+
def input
|
5
|
+
input_field = @builder.text_field(attribute_name, input_html_options)
|
6
|
+
end
|
7
|
+
|
8
|
+
def input_html_options
|
9
|
+
merge_formatted_value(super)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def merge_formatted_value(hash)
|
15
|
+
if object.errors[attribute_name].empty?
|
16
|
+
hash[:value] ||= number_to_currency(object.send(attribute_name))
|
17
|
+
end
|
18
|
+
hash
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
class DatePickerInput < SimpleForm::Inputs::StringInput
|
2
|
+
include ActionView::Helpers::FormTagHelper
|
3
|
+
include ActionView::Context
|
4
|
+
|
5
|
+
def input
|
6
|
+
input_html_options[:id] ||= date_id
|
7
|
+
input_html_options.reverse_merge!(
|
8
|
+
placeholder: "MM/DD/YYYY",
|
9
|
+
value: date_value,
|
10
|
+
:"aria-describedby" => hint_id
|
11
|
+
)
|
12
|
+
|
13
|
+
content_tag(:div, class: 'uc-form-field-date') do
|
14
|
+
user_agent.mobile? ? input_for_mobile : input_for_desktop
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def hint
|
19
|
+
options[:hint_html] ||= {}
|
20
|
+
options[:hint_html].merge!(id: hint_id, class: 'hidden')
|
21
|
+
hint_text = 'Date (format: MM/DD/YYYY)'
|
22
|
+
if options[:input_html]["disable-future-dates"]
|
23
|
+
hint_text << '. You cannot select a future date.'
|
24
|
+
end
|
25
|
+
hint_text
|
26
|
+
end
|
27
|
+
|
28
|
+
def label_html_options
|
29
|
+
options[:input_html] ||= {}
|
30
|
+
options[:input_html][:id] ||= date_id
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def user_agent
|
37
|
+
@user_agent ||= UserAgent.parse(@builder.template.controller.request.user_agent)
|
38
|
+
end
|
39
|
+
|
40
|
+
def input_for_mobile
|
41
|
+
@builder.text_field(attribute_name, input_html_options.reverse_merge(
|
42
|
+
type: 'date'
|
43
|
+
))
|
44
|
+
end
|
45
|
+
|
46
|
+
def input_for_desktop
|
47
|
+
data_presents = ['datepicker']
|
48
|
+
if input_html_options['data-presents']
|
49
|
+
data_presents << input_html_options['data-presents']
|
50
|
+
end
|
51
|
+
|
52
|
+
@builder.text_field(attribute_name, input_html_options.merge(
|
53
|
+
'type' => 'text',
|
54
|
+
'data-presents' => data_presents.join(' '),
|
55
|
+
))
|
56
|
+
end
|
57
|
+
|
58
|
+
def hint_id
|
59
|
+
"#{object.class.name.underscore}_#{object_id}_datepicker_hint"
|
60
|
+
end
|
61
|
+
|
62
|
+
def date_id
|
63
|
+
"#{object.class.name.underscore}_#{object_id}_datepicker"
|
64
|
+
end
|
65
|
+
|
66
|
+
def date_value
|
67
|
+
value = input_html_options.fetch(:value, @builder.object.public_send(attribute_name))
|
68
|
+
value.blank? ? value : format_date(value)
|
69
|
+
end
|
70
|
+
|
71
|
+
def format_date(date)
|
72
|
+
value = date.is_a?(String) ? Date.parse(date) : date
|
73
|
+
user_agent.mobile? ? value.iso8601 : value.to_s(:default)
|
74
|
+
rescue ArgumentError
|
75
|
+
date
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
class DateTimePickerInput < SimpleForm::Inputs::StringInput
|
2
|
+
include ActionView::Helpers::FormTagHelper
|
3
|
+
include ActionView::Context
|
4
|
+
|
5
|
+
def input
|
6
|
+
label_from_options = options[:label]
|
7
|
+
|
8
|
+
l = if label_from_options == false
|
9
|
+
""
|
10
|
+
else
|
11
|
+
label_from_options || object.class.human_attribute_name(attribute_name)
|
12
|
+
end
|
13
|
+
|
14
|
+
field_set_tag(l, class: (input_html_classes + ["uc-form-fieldset-datetime", "inline-inputs", "legend-as-label"]).map(&:to_s).join(" ")) do
|
15
|
+
(date_field + time_field + timezone_label)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def label
|
20
|
+
""
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def date_value
|
26
|
+
value = @builder.object.public_send("#{attribute_name}_date_part")
|
27
|
+
value.blank? ? value : format_date(value)
|
28
|
+
end
|
29
|
+
|
30
|
+
def time_value
|
31
|
+
@builder.object.public_send("#{attribute_name}_time_part")
|
32
|
+
end
|
33
|
+
|
34
|
+
def format_date(date)
|
35
|
+
user_agent.mobile? ? Date.parse(date).iso8601 : date
|
36
|
+
end
|
37
|
+
|
38
|
+
def date_aria_label
|
39
|
+
aria_label = "Date (format: MM/DD/YYYY)"
|
40
|
+
if options[:input_html] && options[:input_html]["disable-future-dates"]
|
41
|
+
aria_label += ". You cannot select a future date."
|
42
|
+
end
|
43
|
+
aria_label
|
44
|
+
end
|
45
|
+
|
46
|
+
def user_agent
|
47
|
+
@user_agent ||= UserAgent.parse(@builder.template.controller.request.user_agent)
|
48
|
+
end
|
49
|
+
|
50
|
+
def input_for_mobile
|
51
|
+
@builder.text_field(attribute_name, input_html_options.merge(
|
52
|
+
type: 'date'
|
53
|
+
))
|
54
|
+
end
|
55
|
+
|
56
|
+
def input_for_desktop
|
57
|
+
data_presents = ['datepicker']
|
58
|
+
if input_html_options['data-presents']
|
59
|
+
data_presents << input_html_options['data-presents']
|
60
|
+
end
|
61
|
+
|
62
|
+
@builder.text_field(attribute_name, input_html_options.merge(
|
63
|
+
'type' => 'text',
|
64
|
+
'data-presents' => data_presents.join(' '),
|
65
|
+
))
|
66
|
+
end
|
67
|
+
|
68
|
+
def date_field
|
69
|
+
input_html_options.merge!(date_name_and_id)
|
70
|
+
input_html_options.merge!(
|
71
|
+
placeholder: "MM/DD/YYYY",
|
72
|
+
class: "#{input_html_classes.join(' ')} date_part",
|
73
|
+
value: date_value,
|
74
|
+
label: false,
|
75
|
+
"aria-label" => date_aria_label
|
76
|
+
)
|
77
|
+
|
78
|
+
content_tag :div, class: 'uc-form-field-datetime-date uc-form-field-date' do
|
79
|
+
user_agent.mobile? ? input_for_mobile : input_for_desktop
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def time_field
|
84
|
+
content_tag :div, class: 'uc-form-field-datetime-time uc-form-field-time' do
|
85
|
+
@builder.text_field(attribute_name, input_html_options.merge(time_name_and_id).merge(
|
86
|
+
"data-presents" => "timepicker",
|
87
|
+
placeholder: "HH:MM AM",
|
88
|
+
class: "#{input_html_classes.join(' ')} time_part",
|
89
|
+
value: time_value,
|
90
|
+
label: false,
|
91
|
+
"aria-label" => "Time (format: HH:MM AM)"
|
92
|
+
))
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def timezone_label
|
97
|
+
content_tag :div, "", class: "js-timezone uc-form-field-datetime-timezone"
|
98
|
+
end
|
99
|
+
|
100
|
+
def date_name_and_id
|
101
|
+
{
|
102
|
+
name: input_name_from_type("date_part"),
|
103
|
+
id: input_id_from_type("date_part")
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
def time_name_and_id
|
108
|
+
{
|
109
|
+
name: input_name_from_type("time_part"),
|
110
|
+
id: input_id_from_type("time_part")
|
111
|
+
}
|
112
|
+
end
|
113
|
+
|
114
|
+
def index
|
115
|
+
@builder.instance_variable_get('@default_options')[:index]
|
116
|
+
end
|
117
|
+
|
118
|
+
def prefix
|
119
|
+
@builder.instance_variable_get('@object_name')
|
120
|
+
end
|
121
|
+
|
122
|
+
def field_name
|
123
|
+
attribute_name.to_s
|
124
|
+
end
|
125
|
+
|
126
|
+
# Returns the name attribute for the input tag
|
127
|
+
# => post[written_on_date_part]
|
128
|
+
def input_name_from_type(suffix)
|
129
|
+
"#{prefix}#{"[#{index}]" if index}[#{field_name}_#{suffix}]"
|
130
|
+
end
|
131
|
+
|
132
|
+
# Returns the id attribute for the input tag
|
133
|
+
# => "post_written_on_date_part"
|
134
|
+
def input_id_from_type(suffix)
|
135
|
+
remove_brackets("#{prefix}#{"[#{index}]" if index}_#{field_name}_#{suffix}")
|
136
|
+
end
|
137
|
+
|
138
|
+
def remove_brackets(input_string)
|
139
|
+
input_string.tr('[]', '_').gsub(/_+/, "_")
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class RadioAsAccessibleInput < SimpleForm::Inputs::CollectionInput
|
2
|
+
def label
|
3
|
+
""
|
4
|
+
end
|
5
|
+
|
6
|
+
def input_type
|
7
|
+
"radio"
|
8
|
+
end
|
9
|
+
|
10
|
+
def input
|
11
|
+
input_options[:collection_wrapper_tag] ||= options.fetch(:collection_wrapper_tag, SimpleForm.collection_wrapper_tag)
|
12
|
+
label_method, value_method = detect_collection_methods
|
13
|
+
input_dom = @builder.send(:"collection_#{input_type}_buttons",
|
14
|
+
attribute_name, collection,
|
15
|
+
value_method, label_method,
|
16
|
+
input_options, input_html_options)
|
17
|
+
if input_options[:required]
|
18
|
+
fieldset = "<fieldset class='radio_buttons normal required' aria-required='true'>"
|
19
|
+
else
|
20
|
+
fieldset = "<fieldset class='radio_buttons normal'>"
|
21
|
+
end
|
22
|
+
|
23
|
+
dom = <<-STRING
|
24
|
+
#{fieldset}
|
25
|
+
<legend>#{input_options[:label]}</legend>
|
26
|
+
<div class='options'>
|
27
|
+
#{input_dom}
|
28
|
+
</div>
|
29
|
+
</fieldset>
|
30
|
+
STRING
|
31
|
+
dom.html_safe
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class RadioWithClearInput < SimpleForm::Inputs::CollectionInput
|
2
|
+
def label
|
3
|
+
""
|
4
|
+
end
|
5
|
+
|
6
|
+
def input_type
|
7
|
+
"radio"
|
8
|
+
end
|
9
|
+
|
10
|
+
def input
|
11
|
+
input_options[:collection_wrapper_tag] ||= options.fetch(:collection_wrapper_tag, SimpleForm.collection_wrapper_tag)
|
12
|
+
input_options[:item_wrapper_class] ||= 'uc-form-collection-item'
|
13
|
+
# Create a duplicate hidden field with a value of nil on top of existing
|
14
|
+
# radio buttons so a user can clear their selection.
|
15
|
+
# Selected radio buttons override this value.
|
16
|
+
hidden_field = @builder.hidden_field(
|
17
|
+
attribute_name,
|
18
|
+
input_html_options.merge(:value => nil).merge(
|
19
|
+
class: input_html_classes.join(' ')
|
20
|
+
)
|
21
|
+
)
|
22
|
+
label_method, value_method = detect_collection_methods
|
23
|
+
input_dom = @builder.send(:"collection_#{input_type}_buttons",
|
24
|
+
attribute_name, collection,
|
25
|
+
value_method, label_method,
|
26
|
+
input_options, input_html_options)
|
27
|
+
dom = <<-STRING
|
28
|
+
<fieldset class='radio_buttons normal row uc-form-fieldset-radio-with-clear'>
|
29
|
+
<div class="three fifths small-tablet pad-right">
|
30
|
+
<legend class="uc-form-legend">#{input_options[:label]}</legend>
|
31
|
+
</div>
|
32
|
+
<div class='options two fifths small-tablet align-right' data-presents='radio_with_clear'>
|
33
|
+
#{hidden_field}
|
34
|
+
#{input_dom}
|
35
|
+
<a href='#'>clear</a>
|
36
|
+
</div>
|
37
|
+
</fieldset>
|
38
|
+
STRING
|
39
|
+
dom.html_safe
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class DummyFormObject < OpenStruct
|
2
|
+
def self.model_name
|
3
|
+
OpenStruct.new({
|
4
|
+
to_s: "Test Dummy",
|
5
|
+
param_key: "test_dummy"
|
6
|
+
})
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.human_attribute_name(attribute)
|
10
|
+
attribute.to_s.titleize
|
11
|
+
end
|
12
|
+
|
13
|
+
def errors
|
14
|
+
if self.has_errors
|
15
|
+
HashWithIndifferentAccess.new(["has an error"])
|
16
|
+
else
|
17
|
+
HashWithIndifferentAccess.new([])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class NameDummyFormObject < DummyFormObject
|
23
|
+
SUFFIXES = ["MR", "MRS"]
|
24
|
+
end
|