From c80230b6e36f16af30113eb790b8f1479065e84c Mon Sep 17 00:00:00 2001 From: HArsHA Ellanki Date: Tue, 24 Mar 2026 23:55:47 -0400 Subject: [PATCH] wip --- Gemfile | 3 +- Gemfile.lock | 1721 +- app/assets/config/manifest.js | 7 +- app/assets/images/logo.png | Bin 3967 -> 0 bytes .../employers_paying_your_premiums_online.pdf | Bin 284477 -> 0 bytes app/assets/javascripts/application.js.erb | 1199 -- .../dynamic_nested_fields.js.coffee.erb | 169 - app/assets/javascripts/group_selection.js | 267 - .../javascripts/ui-components/components.js | 14 - app/assets/stylesheets/glyphicons.scss.erb | 1 - app/assets/stylesheets/sprites.scss.erb | 161 - .../ui-components/sprites.scss.erb | 161 - app/controllers/packs_static_controller.rb | 26 + app/helpers/application_helper.rb | 34 +- app/helpers/webpack_assets_helper.rb | 75 + .../me}/images/CoverME_WebsiteHeader_01.jpg | Bin .../client_config/me}/images/favicon_me.ico | Bin .../anthem_blue_cross_and_blue_shield.jpg | Bin .../me}/images/logo/carrier/bestlife.jpg | Bin .../logo/carrier/community_health_options.jpg | Bin 0 -> 677841 bytes .../me}/images/logo/carrier/dominion.jpg | Bin .../logo/carrier/northeast_delta_dental.jpg | Bin .../logo/carrier/renaissance_dental.jpg | Bin .../ui-components/benefit-applications.scss | 47 + .../me/stylesheets/ui-components/cards.scss | 705 + .../ui-components/jquery-ui.scss.erb | 1311 ++ .../benefit_sponsors/application.js.erb | 66 + .../assister_agency_staff_roles.js | 41 + .../benefit_sponsors/benefit_package.js | 37 + .../benefit_sponsors/benefit_package.js.erb | 37 + .../broker_agency_staff_roles.js | 42 + .../components/benefit_sponsors/date.js | 42 + .../general_agency_staff_roles.js | 59 + .../benefit_sponsors/jq_datepicker.js | 102 + .../financial_assistance/address.js | 47 + .../financial_assistance/applicant.js | 14 + .../financial_assistance/application.js | 13 + .../financial_assistance/benefit.js | 810 + .../financial_assistance/deduction.js | 273 + .../demographics_fields.js | 627 + .../financial_assistance/fa_integration.js | 58 + .../financial_assistance/glossary.js | 1140 ++ .../components/financial_assistance/income.js | 1587 ++ .../inline_replacements.js | 142 + .../keyboard_navigation.js | 17 + .../relationship_selector.js | 18 + .../components/financial_assistance/shared.js | 30 + .../financial_assistance/step_conditionals.js | 599 + .../components/notifier/application.js | 13 + .../notifier/ckeditor/config.js.erb | 61 + .../components/notifier/ckeditor/contents.css | 232 + .../notifier/ckeditor}/fonts/FontAwesome.otf | Bin .../ckeditor}/fonts/fontawesome-webfont.eot | Bin .../ckeditor/fonts/fontawesome-webfont.svg | 565 + .../ckeditor}/fonts/fontawesome-webfont.ttf | Bin .../ckeditor}/fonts/fontawesome-webfont.woff | Bin .../ckeditor}/fonts/fontawesome-webfont.woff2 | Bin .../notifier/ckeditor/fonts/index.html | 10 + .../components/notifier/ckeditor/lang/en.js | 5 + .../plugins/a11yhelp/dialogs/a11yhelp.js | 10 + .../plugins/a11yhelp/dialogs/lang/en.js | 11 + .../ckeditor/plugins/button/lang/en.js | 8 + .../ckeditor/plugins/button/plugin.js | 389 + .../plugins/clipboard/dev/clipboard.html | 190 + .../ckeditor/plugins/clipboard/dev/console.js | 49 + .../ckeditor/plugins/clipboard/dev/dnd.html | 185 + .../plugins/clipboard/icons/copy-rtl.png | Bin 0 -> 506 bytes .../ckeditor/plugins/clipboard/icons/copy.png | Bin 0 -> 506 bytes .../plugins/clipboard/icons/cut-rtl.png | Bin 0 -> 776 bytes .../ckeditor/plugins/clipboard/icons/cut.png | Bin 0 -> 776 bytes .../clipboard/icons/hidpi/copy-rtl.png | Bin 0 -> 759 bytes .../plugins/clipboard/icons/hidpi/copy.png | Bin 0 -> 759 bytes .../plugins/clipboard/icons/hidpi/cut-rtl.png | Bin 0 -> 1576 bytes .../plugins/clipboard/icons/hidpi/cut.png | Bin 0 -> 1576 bytes .../clipboard/icons/hidpi/paste-rtl.png | Bin 0 -> 854 bytes .../plugins/clipboard/icons/hidpi/paste.png | Bin 0 -> 854 bytes .../plugins/clipboard/icons/paste-rtl.png | Bin 0 -> 464 bytes .../plugins/clipboard/icons/paste.png | Bin 0 -> 464 bytes .../ckeditor/plugins/clipboard/lang/en.js | 12 + .../ckeditor/plugins/clipboard/plugin.js | 2780 ++++ .../colordialog/dialogs/colordialog.css | 20 + .../colordialog/dialogs/colordialog.js | 14 + .../cursors/cursor-disabled.svg | 25 + .../plugins/copyformatting/cursors/cursor.svg | 14 + .../copyformatting/styles/copyformatting.css | 45 + .../plugins/dialog/dialogDefinition.js | 4 + .../ckeditor/plugins/dialog/plugin.js | 3404 ++++ .../dialog/samples/assets/my_dialog.js | 49 + .../plugins/dialog/samples/dialog.html | 190 + .../ckeditor/plugins/dialogui/plugin.js | 1530 ++ .../ckeditor/plugins/div/dialogs/div.js | 9 + .../ckeditor/plugins/find/dialogs/find.js | 25 + .../fontawesome/dialogs/fontawesome.js | 841 + .../plugins/fontawesome/dialogs/index.html | 10 + .../font-awesome/css/font-awesome.min.css | 11 + .../fontawesome/font-awesome/css/index.html | 10 + .../font-awesome/fonts/FontAwesome.otf | Bin 0 -> 93888 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 60767 bytes .../fonts/fontawesome-webfont.svg | 565 + .../fonts/fontawesome-webfont.ttf | Bin 0 -> 122092 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 71508 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 56780 bytes .../fontawesome/font-awesome/fonts/index.html | 10 + .../fontawesome/font-awesome/index.html | 10 + .../plugins/fontawesome/icons/fontawesome.png | Bin 0 -> 1228 bytes .../plugins/fontawesome/icons/index.html | 10 + .../ckeditor/plugins/fontawesome/index.html | 10 + .../ckeditor/plugins/fontawesome/plugin.js | 35 + .../notifier/ckeditor/plugins/icons.png | Bin 0 -> 12421 bytes .../notifier/ckeditor/plugins/icons_hidpi.png | Bin 0 -> 40265 bytes .../ckeditor/plugins/lineheight/LICENSE | 22 + .../ckeditor/plugins/lineheight/lang/LANG.js | 3 + .../ckeditor/plugins/lineheight/lang/en.js | 3 + .../ckeditor/plugins/lineheight/lang/es.js | 3 + .../ckeditor/plugins/lineheight/lang/fr.js | 3 + .../ckeditor/plugins/lineheight/plugin.js | 81 + .../ckeditor/plugins/lineutils/dev/dnd.html | 172 + .../plugins/lineutils/dev/magicfinger.html | 285 + .../ckeditor/plugins/lineutils/plugin.js | 1018 ++ .../ckeditor/plugins/link/dialogs/anchor.js | 8 + .../ckeditor/plugins/link/dialogs/link.js | 28 + .../ckeditor/plugins/link/images/anchor.png | Bin 0 -> 752 bytes .../plugins/link/images/hidpi/anchor.png | Bin 0 -> 1109 bytes .../plugins/liststyle/dialogs/liststyle.js | 165 + .../magicline/images/hidpi/icon-rtl.png | Bin 0 -> 176 bytes .../plugins/magicline/images/hidpi/icon.png | Bin 0 -> 199 bytes .../plugins/magicline/images/icon-rtl.png | Bin 0 -> 138 bytes .../plugins/magicline/images/icon.png | Bin 0 -> 133 bytes .../ckeditor/plugins/notification/lang/en.js | 7 + .../ckeditor/plugins/notification/plugin.js | 923 ++ .../plugins/pagebreak/images/pagebreak.gif | Bin 0 -> 99 bytes .../plugins/pastefromword/filter/default.js | 927 ++ .../plugins/placeholder/dev/placeholder.html | 60 + .../placeholder/dialogs/placeholder.js | 49 + .../placeholder/icons/hidpi/placeholder.png | Bin 0 -> 1576 bytes .../plugins/placeholder/icons/placeholder.png | Bin 0 -> 835 bytes .../ckeditor/plugins/placeholder/lang/en.js | 12 + .../ckeditor/plugins/placeholder/plugin.js | 99 + .../placeholder/samples/placeholder.html | 75 + .../plugins/placeholder_select/plugin.js | 97 + .../ckeditor/plugins/scayt/CHANGELOG.md | 20 + .../ckeditor/plugins/scayt/LICENSE.md | 28 + .../notifier/ckeditor/plugins/scayt/README.md | 25 + .../ckeditor/plugins/scayt/dialogs/dialog.css | 23 + .../ckeditor/plugins/scayt/dialogs/options.js | 32 + .../plugins/scayt/dialogs/toolbar.css | 71 + .../plugins/scayt/skins/moono-lisa/scayt.css | 25 + .../showblocks/images/block_address.png | Bin 0 -> 152 bytes .../showblocks/images/block_blockquote.png | Bin 0 -> 154 bytes .../plugins/showblocks/images/block_div.png | Bin 0 -> 127 bytes .../plugins/showblocks/images/block_h1.png | Bin 0 -> 120 bytes .../plugins/showblocks/images/block_h2.png | Bin 0 -> 127 bytes .../plugins/showblocks/images/block_h3.png | Bin 0 -> 123 bytes .../plugins/showblocks/images/block_h4.png | Bin 0 -> 123 bytes .../plugins/showblocks/images/block_h5.png | Bin 0 -> 126 bytes .../plugins/showblocks/images/block_h6.png | Bin 0 -> 123 bytes .../plugins/showblocks/images/block_p.png | Bin 0 -> 115 bytes .../plugins/showblocks/images/block_pre.png | Bin 0 -> 128 bytes .../plugins/specialchar/dialogs/lang/en.js | 13 + .../specialchar/dialogs/specialchar.js | 14 + .../ckeditor/plugins/table/dialogs/table.js | 21 + .../tableselection/styles/tableselection.css | 32 + .../plugins/tabletools/dialogs/tableCell.js | 17 + .../plugins/templates/dialogs/templates.css | 84 + .../plugins/templates/dialogs/templates.js | 199 + .../templates/icons/hidpi/templates-rtl.png | Bin 0 -> 796 bytes .../templates/icons/hidpi/templates.png | Bin 0 -> 796 bytes .../plugins/templates/icons/templates-rtl.png | Bin 0 -> 442 bytes .../plugins/templates/icons/templates.png | Bin 0 -> 442 bytes .../ckeditor/plugins/templates/lang/en.js | 12 + .../ckeditor/plugins/templates/plugin.js | 96 + .../plugins/templates/templates/default.js | 163 + .../templates/templates/images/template1.gif | Bin 0 -> 539 bytes .../templates/templates/images/template2.gif | Bin 0 -> 497 bytes .../templates/templates/images/template3.gif | Bin 0 -> 557 bytes .../ckeditor/plugins/token/LICENSE.md} | 50 +- .../notifier/ckeditor/plugins/token/ReadMe.md | 103 + .../ckeditor/plugins/token/dialogs/token.js | 46 + .../plugins/token/icons/hidpi/token.png | Bin 0 -> 14976 bytes .../ckeditor/plugins/token/icons/token.png | Bin 0 -> 14658 bytes .../ckeditor/plugins/token/lang/en.js | 6 + .../ckeditor/plugins/token/lang/ru.js | 6 + .../notifier/ckeditor/plugins/token/plugin.js | 115 + .../ckeditor/plugins/toolbar/lang/en.js | 22 + .../ckeditor/plugins/toolbar/plugin.js | 802 + .../plugins/toolbar/samples/toolbar.html | 235 + .../plugins/widget/dev/assets/contents.css | 23 + .../plugins/widget/dev/assets/sample.jpg | Bin 0 -> 17932 bytes .../widget/dev/assets/simplebox/contents.css | 36 + .../dev/assets/simplebox/dialogs/simplebox.js | 51 + .../dev/assets/simplebox/icons/simplebox.png | Bin 0 -> 286 bytes .../widget/dev/assets/simplebox/plugin.js | 114 + .../ckeditor/plugins/widget/dev/console.js | 131 + .../plugins/widget/dev/nestedwidgets.html | 134 + .../plugins/widget/dev/widgetstyles.html | 144 + .../ckeditor/plugins/widget/images/handle.png | Bin 0 -> 220 bytes .../ckeditor/plugins/widget/lang/en.js | 8 + .../ckeditor/plugins/widget/plugin.js | 4126 +++++ .../plugins/widgetselection/plugin.js | 366 + .../notifier/ckeditor/plugins/wsc/LICENSE.md | 28 + .../notifier/ckeditor/plugins/wsc/README.md | 25 + .../ckeditor/plugins/wsc/dialogs/ciframe.html | 66 + .../plugins/wsc/dialogs/tmpFrameset.html | 52 + .../ckeditor/plugins/wsc/dialogs/wsc.css | 82 + .../ckeditor/plugins/wsc/dialogs/wsc.js | 92 + .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 11 + .../plugins/wsc/skins/moono-lisa/wsc.css | 43 + .../ckeditor/skins/moono-lisa/dialog.css | 5 + .../ckeditor/skins/moono-lisa/dialog_ie.css | 5 + .../ckeditor/skins/moono-lisa/dialog_ie8.css | 5 + .../skins/moono-lisa/dialog_iequirks.css | 5 + .../ckeditor/skins/moono-lisa/editor.css | 5 + .../skins/moono-lisa/editor_gecko.css | 5 + .../ckeditor/skins/moono-lisa/editor_ie.css | 5 + .../ckeditor/skins/moono-lisa/editor_ie8.css | 5 + .../skins/moono-lisa/editor_iequirks.css | 5 + .../ckeditor/skins/moono-lisa/icons.png | Bin 0 -> 12421 bytes .../ckeditor/skins/moono-lisa/icons_hidpi.png | Bin 0 -> 40265 bytes .../skins/moono-lisa/images/arrow.png | Bin 0 -> 191 bytes .../skins/moono-lisa/images/close.png | Bin 0 -> 615 bytes .../skins/moono-lisa/images/hidpi/close.png | Bin 0 -> 1238 bytes .../moono-lisa/images/hidpi/lock-open.png | Bin 0 -> 1071 bytes .../skins/moono-lisa/images/hidpi/lock.png | Bin 0 -> 1062 bytes .../skins/moono-lisa/images/hidpi/refresh.png | Bin 0 -> 1623 bytes .../skins/moono-lisa/images/lock-open.png | Bin 0 -> 511 bytes .../ckeditor/skins/moono-lisa/images/lock.png | Bin 0 -> 506 bytes .../skins/moono-lisa/images/refresh.png | Bin 0 -> 757 bytes .../skins/moono-lisa/images/spinner.gif | Bin 0 -> 2984 bytes .../ckeditor/skins/moono-lisa/readme.md | 46 + .../components/notifier/ckeditor/styles.js | 152 + .../sponsored_benefits/application.js | 13 + .../plan_design_proposals.js | 817 + app/javascript/css/contrast_level_aa.scss | 2 +- .../effective_datatables/initialize.js | 23 + .../fonts/Barlow300.woff2 | Bin .../fonts/Barlow400.woff2 | Bin .../fonts/Barlow400Italic.woff2 | Bin .../fonts/Barlow600.woff2 | Bin .../fonts/Barlow700.woff2 | Bin .../fonts/Barlow800.woff2 | Bin app/javascript/fonts/FontAwesome.otf | Bin 0 -> 93888 bytes app/javascript/fonts/fontawesome-webfont.eot | Bin 0 -> 60767 bytes .../fonts/fontawesome-webfont.svg | 0 app/javascript/fonts/fontawesome-webfont.ttf | Bin 0 -> 122092 bytes app/javascript/fonts/fontawesome-webfont.woff | Bin 0 -> 71508 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 56780 bytes .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../fonts/glyphicons-halflings-regular.woff2 | Bin .../nimbus-roman-no9/NimbusRomNo9L-Med.otf | Bin .../nimbus-roman-no9/NimbusRomNo9L-MedIta.otf | Bin .../nimbus-roman-no9/NimbusRomNo9L-Reg.otf | Bin .../nimbus-roman-no9/NimbusRomNo9L-RegIta.otf | Bin app/javascript/images.js | 6 + .../images/CoverME_WebsiteHeader_01.jpg | Bin 0 -> 1556406 bytes .../images/address-close.png | Bin .../images/arrow-down.png | Bin .../images/autofill-close.png | Bin .../images/autofill-cloud-failed.png | Bin .../images/autofill-cloud.png | Bin app/{assets => javascript}/images/bodybg.png | Bin app/{assets => javascript}/images/chat-2.png | Bin app/{assets => javascript}/images/chat.png | Bin app/{assets => javascript}/images/check.png | Bin .../images/checkmark-green.png | Bin .../images/checkmark.png | Bin .../images/cheque_amount.png | Bin .../images/close-blue.png | Bin .../images/compare-checkbox-img.png | Bin .../images/dc_health.png | Bin .../images/dc_invoice_logo.png | Bin .../images/dchealthlink.jpg | Bin app/{assets => javascript}/images/delete.png | Bin app/{assets => javascript}/images/drey-bg.png | Bin .../images/dropdown-option-close.png | Bin .../images/edit-blue.png | Bin app/{assets => javascript}/images/edit.png | Bin app/{assets => javascript}/images/email.png | Bin .../images/enter_date_termination.png | Bin .../images/enter_rehire_date.png | Bin .../images/facebook.png | Bin .../images/false-red.png | Bin app/{assets => javascript}/images/favicon.ico | Bin app/{assets => javascript}/images/favicon.xcf | Bin app/javascript/images/favicon_me.ico | Bin 0 -> 5430 bytes .../images/health_connector.jpg | Bin .../images/home-icon-gray.png | Bin .../images/home-icon.png | Bin .../images/icons/arrow-active-form.png | Bin .../images/icons/bronze-circle.png | Bin .../images/icons/cca-icon-exchange-admin.png | Bin .../images/icons/cca-icon-individual.png | Bin .../images/icons/cca-life-event.png | Bin .../images/icons/cca-shop_for_plan.png | Bin .../images/icons/check_radio_sheet.png | Bin .../images/icons/checked.png | Bin .../images/icons/contact.png | Bin .../images/icons/dc-icon-individual.png | Bin .../images/icons/dc-life-event.png | Bin .../images/icons/dc-shop_for_plan.png | Bin .../images/icons/family_members.png | Bin .../images/icons/find-doctor.png | Bin .../icons/gic-blue-icon-business-owner.png | Bin .../icons/gic-blue-icon-business-owner.xcf | Bin .../images/icons/gic-blue-icon-employee.png | Bin .../images/icons/gic-blue-icon-employee.xcf | Bin .../images/icons/gic-blue-icon-individual.png | Bin .../images/icons/gic-blue-icon-individual.xcf | Bin .../images/icons/gic-blue-life-event.png | Bin .../images/icons/gic-blue-life-event.xcf | Bin .../icons/gic-purple-icon-business-owner.png | Bin .../images/icons/gic-purple-icon-employee.png | Bin .../images/icons/gic-purple-icon-employee.xcf | Bin .../images/icons/gic-purple-icon-family.png | Bin .../images/icons/gic-purple-icon-family.xcf | Bin .../icons/gic-purple-icon-individual.png | Bin .../icons/gic-purple-icon-individual.xcf | Bin .../images/icons/gic-purple-life-event.png | Bin .../images/icons/gic-purple-life-event.xcf | Bin .../images/icons/gold-circle-1.png | Bin .../images/icons/gold-circle-2.png | Bin .../images/icons/gold-circle.png | Bin .../images/icons/icon-business-owner.png | Bin .../images/icons/icon-employee.png | Bin .../images/icons/icon-exchange-admin.png | Bin .../images/icons/icon-expert.png | Bin .../images/icons/icon-family.png | Bin .../images/icons/list.png | Bin .../images/icons/mail.png | Bin .../images/icons/me-icon-individual.png | Bin .../images/icons/me-life-event.png | Bin .../images/icons/me-shop_for_plan.png | Bin .../images/icons/message.png | Bin .../images/icons/mhc-shop_for_plan.png | Bin .../images/icons/phone.png | Bin .../images/icons/platinum-circle.png | Bin .../images/icons/progress-divider.png | Bin .../images/icons/shop_for_plan.png | Bin .../images/icons/silver-circle.png | Bin .../images/icons/un-check.png | Bin .../images/images/broswericons_128.png | Bin .../images/images/didyouknow_288.png | Bin .../guidanceforsmallbusinessowners_214.jpg | Bin .../jquery-ui/ui-icons_444444_256x240.png | Bin .../jquery-ui/ui-icons_555555_256x240.png | Bin .../jquery-ui/ui-icons_777620_256x240.png | Bin .../jquery-ui/ui-icons_777777_256x240.png | Bin .../jquery-ui/ui-icons_cc0000_256x240.png | Bin .../jquery-ui/ui-icons_ffffff_256x240.png | Bin .../images/landing-page-delete.png | Bin .../images/lightGreen.png | Bin app/{assets => javascript}/images/living.png | Bin app/{assets => javascript}/images/lock.png | Bin app/{assets => javascript}/images/logo-bg.jpg | Bin .../images/logo/carrier/aetna.jpg | Bin .../logo/carrier/allways_health_partners.jpg | Bin .../images/logo/carrier/altus_dental.jpg | Bin .../anthem_blue_cross_and_blue_shield.jpg | Bin 0 -> 1389793 bytes .../images/logo/carrier/best_life.jpg | Bin .../images/logo/carrier/bestlife.jpg | Bin 0 -> 2314 bytes .../logo/carrier/blue_cross_blue_shield.jpg | Bin .../carrier/blue_cross_blue_shield_ma.jpg | Bin .../logo/carrier/bmc_healthnet_plan.jpg | Bin .../images/logo/carrier/carefirst.jpg | Bin .../logo/carrier/carrier_1_health_only.jpg | Bin .../logo/carrier/community_health_options.jpg | Bin .../images/logo/carrier/delta_dental.jpg | Bin .../images/logo/carrier/dentegra.jpg | Bin .../images/logo/carrier/dominion.jpg} | Bin .../images/logo/carrier/dominion_national.jpg | Bin 0 -> 187770 bytes .../images/logo/carrier/fallon_health.jpg | Bin .../carrier/harvard_pilgrim_health_care.jpg | Bin .../logo/carrier/health_new_england.jpg | Bin .../images/logo/carrier/kaiser.jpg | Bin .../images/logo/carrier/kaiser_permanente.jpg | Bin .../images/logo/carrier/mending_health.jpg | Bin .../images/logo/carrier/metlife.jpg | Bin .../images/logo/carrier/minuteman_health.jpg | Bin .../images/logo/carrier/name.jpg | Bin .../logo/carrier/neighborhood_health_plan.jpg | Bin .../logo/carrier/northeast_delta_dental.jpg | Bin 0 -> 182590 bytes .../images/logo/carrier/oci.jpg | Bin .../images/logo/carrier/old_uhic.jpg | Bin .../logo/carrier/old_unitedhealthcare.jpg | Bin .../logo/carrier/renaissance_dental.jpg | Bin 0 -> 18402 bytes .../images/logo/carrier/taro_health.jpg | Bin .../logo/carrier/tufts_health_direct.jpg | Bin .../carrier/tufts_health_plan_premier.jpg | Bin .../logo/carrier/tufts_health_premier.jpg | Bin .../images/logo/carrier/uhcma.jpg | Bin .../images/logo/carrier/uhic.jpg | Bin .../images/logo/carrier/unitedhealthcare.jpg | Bin app/javascript/images/logo_bs4_ic.svg | 54 + .../images/member-close.png | Bin .../images/mhc-favicon-green.ico | Bin .../images/mhc_favicon.xcf | Bin .../images/mhc_logo.png | Bin app/{assets => javascript}/images/nav.png | Bin .../images/new_broker_registration.jpg | Bin app/{assets => javascript}/images/phone.png | Bin .../images/question.png | Bin .../images/radio-img.png | Bin .../images/right-bg.png | Bin app/{assets => javascript}/images/search.png | Bin .../images/secure-lock.png | Bin app/{assets => javascript}/images/sep.jpg | Bin .../images/separator.png | Bin .../images/terminate-popup.png | Bin .../images/triangle.png | Bin app/{assets => javascript}/images/twitter.png | Bin .../images/ui-icons-dark.png | Bin .../images/ui-icons-icons.png | Bin .../images/ui-icons-light.png | Bin .../images/ui-icons-main.png | Bin .../images/ui-icons-second.png | Bin .../images/ui-icons-white.png | Bin .../images/ui/cartgreen_40.png | Bin .../images/ui/darkgreenarrow_354.png | Bin .../images/ui/expertgreen_50.png | Bin .../images/ui/expertgreen_68.png | Bin .../images/ui/gearsgreen_50.png | Bin .../images/ui/lightgreenarrow_354.png | Bin .../images/ui/pointergreen_42.png | Bin .../images/ui/profilegreen_37.png | Bin .../images/ui/radiobutton_100.png | Bin .../images/ui/sprites/icons.png | Bin .../images/ui/thinchevronblueleft_30.png | Bin .../images/ui/thinchevronblueright_30.png | Bin .../images/ui/xblue_19.png | Bin app/{assets => javascript}/images/user.png | Bin .../images/warning-icon-small.svg | 0 .../images/warning-icon.svg | 0 app/{assets => javascript}/images/warning.png | Bin app/{assets => javascript}/images/youtube.png | Bin .../legacy}/ajax_token_redirect.js | 0 .../legacy}/announcement.js | 0 app/javascript/legacy/application.js.erb | 516 + .../legacy}/assister_role.js | 0 .../legacy}/benefits.js | 0 .../legacy}/binder_transition.js.erb | 0 .../legacy}/bootstrap-slider.js | 0 .../legacy}/broker_role.js | 0 .../legacy}/browser_issues.js | 0 .../legacy}/button.js | 0 .../legacy}/classie.js | 0 .../legacy}/consumer_role.js | 0 .../legacy}/consumer_verification.js | 0 .../legacy}/datatable_custom_filter.js | 0 .../javascripts => javascript/legacy}/date.js | 0 .../legacy}/demographics_fields.js | 0 .../javascripts => javascript/legacy}/dob.js | 0 .../legacy}/dob_validation.js | 0 .../legacy}/dry_run_dashboard.js | 0 .../legacy}/edit_plan.js | 0 .../legacy}/employee_dependent.js | 0 .../legacy}/employee_role.js | 0 .../legacy}/employer_profile.js.erb | 0 .../legacy}/employers_general_agency.js.erb | 0 .../legacy}/exchanges/assister_applicants.js | 0 .../legacy}/exchanges/broker_applicants.js | 0 .../legacy}/exchanges/hbx_profiles.js | 0 .../legacy}/families.js | 0 .../legacy}/financial_assistance.js | 0 .../legacy}/formhelpers.js | 0 .../legacy}/forms.js | 0 .../legacy}/freebies.js.erb | 0 .../legacy}/general_agency.js.erb | 0 app/javascript/legacy/group_selection.js | 281 +- .../legacy}/help_me_sign_up.js | 0 .../legacy}/inline_replacements.js | 0 .../legacy}/insured.js.erb | 0 .../legacy}/jquery-ui.js | 0 .../legacy}/jquery-ui/keycode.js | 0 .../legacy}/jquery-ui/version.js | 0 .../legacy}/jquery.dragtable.js | 0 .../legacy}/jquery.mask.js | 0 .../legacy}/jquery.selectric.min.js | 0 .../legacy}/jquery.steps.js | 0 .../legacy}/keyboard_navigation.js | 0 .../legacy}/modalEffects.js | 0 .../legacy}/modal_actions.js.erb | 0 .../legacy}/override_confirm.js | 0 .../legacy}/plan_shopping.js.erb | 0 .../legacy}/plan_year.js | 0 .../legacy}/plan_year_selection.js.erb | 0 .../legacy}/print.js | 0 .../legacy}/qhp_application.js | 0 .../legacy}/qle.js.erb | 0 .../legacy}/quotes/_quote.js | 0 .../legacy}/quotes/manage_sliders.js | 0 .../legacy}/quotes/page_actions.js | 0 .../legacy}/register.js | 0 .../legacy}/responsive.js.erb | 0 .../legacy}/ridp_primary_response.js | 0 .../legacy}/ridp_secondary_response.js | 0 .../legacy}/save_and_exit.js.erb | 0 .../legacy}/semantic_class.js | 0 .../legacy}/set_tab_content.js | 0 .../legacy}/signup_progress.js | 0 .../legacy}/time_jump.js | 0 .../legacy/ui-components/components.js | 7 + .../legacy}/ui-components/datepicker.js | 0 .../legacy}/ui-components/forms.js.erb | 0 .../legacy}/ui-components/mask_inputs.js | 0 .../legacy}/ui-components/services.js | 0 .../ui-components/sidebars/plan_filters.js | 0 .../legacy}/ui-components/sliders.js | 0 .../legacy}/ui-components/sweetalerts.js | 0 .../legacy}/ui-components/tether.js | 0 .../legacy}/ui-components/validators.js | 0 .../legacy}/wf_sso_token.js | 0 app/javascript/packs/application.js | 25 +- app/javascript/packs/effective_datatables.js | 63 + app/javascript/packs/legacy.js | 4 +- app/javascript/src/enrollment.js | 1 + .../stylesheets/_fonts.scss | 0 .../stylesheets/_variables.scss.erb | 0 .../stylesheets/admin.scss.erb | 0 .../stylesheets/application.scss.erb | 2 +- .../benefit_sponsors/application.scss.erb | 1 + .../stylesheets/bootstrap_overrides.scss.erb | 0 .../stylesheets/broker_profile.scss.erb | 0 .../stylesheets/brokers.scss.erb | 0 .../stylesheets/brokers_responsive.scss.erb | 0 .../stylesheets/custom.scss.erb | 28 +- .../datatable_custom_filter.scss.erb | 0 .../stylesheets/devise.css.erb | 0 .../stylesheets/dragtable.css | 0 .../stylesheets/effective_datatable.scss.erb | 0 .../stylesheets/employer.scss.erb | 0 .../stylesheets/event_log_tab.scss.erb | 0 .../stylesheets/family_relationships.scss.erb | 0 .../stylesheets/forms.scss.erb | 0 .../stylesheets/globals.scss.erb | 0 .../stylesheets/glyphicons.scss.erb | 1 + .../stylesheets/insured.scss.erb | 0 .../stylesheets/jquery-steps.css | 0 .../stylesheets/jquery-ui/datepicker.css | 0 .../stylesheets/jquery-ui/theme.css.erb | 0 .../stylesheets/layouts.scss.erb | 0 .../stylesheets/left_nav.scss.erb | 0 .../stylesheets/main.scss | 0 .../stylesheets/modals.scss.erb | 0 .../stylesheets/modules.scss.erb | 2 +- app/javascript/stylesheets/new.scss | 1476 ++ .../stylesheets/new.scss.erb | 0 .../stylesheets/notifier/application.scss.erb | 15 + .../stylesheets/notifier/notifier_styles.css | 5 + app/javascript/stylesheets/pdf.scss | 83 + .../stylesheets/plan_review_pdf.scss | 84 + .../stylesheets/responsive.scss.erb | 0 .../stylesheets/security_question_modal.scss | 0 .../stylesheets/signup.scss.erb | 8 +- .../stylesheets/signup_responsive.scss.erb | 0 .../sponsored_benefits/_variables.scss | 47 + .../sponsored_benefits/application.scss | 24 + .../plan_design_proposal.scss | 573 + app/javascript/stylesheets/sprites.scss.erb | 161 + .../stylesheets/states.scss.erb | 0 .../stylesheets/text_styles.scss.erb | 0 .../ui-components/benefit-applications.scss | 0 .../stylesheets/ui-components/cards.scss | 0 .../stylesheets/ui-components/forms.scss | 0 .../ui-components/jquery-ui.scss.erb | 14 +- .../stylesheets/ui-components/mahc-theme.scss | 0 .../stylesheets/ui-components/main.scss | 0 .../ui-components/plan_filters.scss | 0 .../stylesheets/ui-components/sliders.scss | 0 .../stylesheets/ui-components/spacing.scss | 0 .../ui-components/sprites.scss.erb | 161 + .../hbx_profiles/dry_run_dashboard.html.erb | 2 +- app/views/layouts/_header.html.erb | 11 +- app/views/layouts/application.html.erb | 15 +- app/views/layouts/bootstrap_4.html.erb | 22 +- .../layouts/bootstrap_4_two_column.html.erb | 1 - app/views/layouts/progress.html.erb | 11 +- app/views/layouts/single_column.html.erb | 15 +- app/views/layouts/two_column.html.erb | 14 +- .../spec/dummy/app/assets/config/manifest.js | 0 .../spec/dummy/config/application.rb | 4 +- .../spec/dummy/config/initializers/assets.rb | 11 - .../benefit_sponsors/application.html.slim | 4 +- .../views/layouts/bs4_application.html.erb | 2 - .../spec/dummy/app/assets/config/manifest.js | 0 .../spec/dummy/config/application.rb | 2 +- .../dummy/config/environments/development.rb | 14 +- .../dummy/config/environments/production.rb | 11 - .../spec/dummy/config/initializers/assets.rb | 11 - .../layouts/bs4_financial_assistance.html.erb | 2 +- .../layouts/financial_assistance.html.erb | 3 +- .../financial_assistance_progress.html.erb | 2 +- .../config/initializers/assets.rb | 13 - .../layouts/notifier/application.html.erb | 3 +- .../layouts/notifier/single_column.html.erb | 6 +- .../spec/dummy/app/assets/config/manifest.js | 0 .../notifier/spec/dummy/config/application.rb | 2 +- .../spec/dummy/config/initializers/assets.rb | 11 - .../sponsored_benefits/application.html.erb | 17 +- .../spec/dummy/app/assets/config/manifest.js | 0 .../spec/dummy/config/application.rb | 2 +- .../spec/dummy/config/initializers/assets.rb | 11 - .../transport_gateway/application.html.erb | 3 +- .../spec/dummy/app/assets/config/manifest.js | 0 .../spec/dummy/config/application.rb | 2 +- .../spec/dummy/config/initializers/assets.rb | 11 - .../transport_profiles/application.html.erb | 3 +- .../spec/dummy/app/assets/config/manifest.js | 0 .../spec/dummy/config/application.rb | 2 +- .../spec/dummy/config/initializers/assets.rb | 11 - .../spec/dummy/app/assets/config/manifest.js | 0 .../spec/dummy/config/application.rb | 5 +- .../spec/dummy/config/initializers/assets.rb | 13 - config/application.rb | 5 +- config/environments/development.rb | 21 +- config/environments/production.rb | 12 - config/initializers/00_assets_stub.rb | 11 + config/initializers/assets.rb | 13 - config/initializers/non_digest_assets.rb | 1 - config/initializers/rails_csp_nonce.rb | 4 +- config/routes.rb | 3 + config/shakapacker.yml | 8 +- config/webpack/webpack.config.js | 83 +- package-lock.json | 13346 ++++++++++++++++ package.json | 10 +- .../effective_datatables/initialize.js | 113 + .../spec/dummy/config/application.rb | 4 - .../icons/add-new-b36b48d01d9e7c4d2c35.svg | 5 + .../icons/add-new-b36b48d01d9e7c4d2c35.svg.br | 1 + .../icons/add-new-b36b48d01d9e7c4d2c35.svg.gz | Bin 0 -> 228 bytes .../icons/admin-icon-e1b90d977e520b490e57.svg | 3 + .../admin-icon-e1b90d977e520b490e57.svg.br | Bin 0 -> 747 bytes .../admin-icon-e1b90d977e520b490e57.svg.gz | Bin 0 -> 799 bytes ...arrow-active-form-4805a9928e4abd99e304.png | Bin 0 -> 1122 bytes .../bronze-circle-1609675da427953c7b58.png | Bin 0 -> 1147 bytes .../icons/calendar-489217c7e40f9841ff03.svg | 4 + .../calendar-489217c7e40f9841ff03.svg.br | Bin 0 -> 407 bytes .../calendar-489217c7e40f9841ff03.svg.gz | Bin 0 -> 463 bytes ...on-exchange-admin-7a8baa611c4a94f83efa.png | Bin 0 -> 1693 bytes ...a-icon-individual-63f136c28cb4acef35ef.png | Bin 0 -> 2369 bytes .../cca-life-event-0db1ad003923a655854d.png | Bin 0 -> 2537 bytes ...cca-shop_for_plan-b738c76fa04aaeeea304.png | Bin 0 -> 3576 bytes .../icons/check-7805d3e3449d50bd398a.svg | 3 + .../icons/check-7805d3e3449d50bd398a.svg.br | Bin 0 -> 153 bytes .../icons/check-7805d3e3449d50bd398a.svg.gz | Bin 0 -> 180 bytes ...with-circle-color-6282e8545436e381815b.svg | 4 + ...h-circle-color-6282e8545436e381815b.svg.br | Bin 0 -> 174 bytes ...h-circle-color-6282e8545436e381815b.svg.gz | Bin 0 -> 206 bytes ...with-circle-white-0f5944b847c368fca1f8.svg | 4 + ...h-circle-white-0f5944b847c368fca1f8.svg.br | Bin 0 -> 321 bytes ...h-circle-white-0f5944b847c368fca1f8.svg.gz | Bin 0 -> 370 bytes ...check_radio_sheet-8672cda1429acee10cc2.png | Bin 0 -> 1700 bytes .../icons/checked-35e87998356701f2c758.png | Bin 0 -> 1425 bytes .../chevron-down-c6a48259e46088294875.svg | 3 + .../chevron-down-c6a48259e46088294875.svg.br | Bin 0 -> 181 bytes .../chevron-down-c6a48259e46088294875.svg.gz | Bin 0 -> 199 bytes .../chevron-left-adf04f3f4797ac43beed.svg | 3 + .../chevron-left-adf04f3f4797ac43beed.svg.br | Bin 0 -> 177 bytes .../chevron-left-adf04f3f4797ac43beed.svg.gz | Bin 0 -> 205 bytes .../chevron-right-fafddddd21de79c86407.svg | 3 + .../chevron-right-fafddddd21de79c86407.svg.br | 2 + .../chevron-right-fafddddd21de79c86407.svg.gz | Bin 0 -> 203 bytes .../icons/chevron-up-ac346b010dead627ecf1.svg | 3 + .../chevron-up-ac346b010dead627ecf1.svg.br | Bin 0 -> 181 bytes .../chevron-up-ac346b010dead627ecf1.svg.gz | Bin 0 -> 200 bytes .../icons/contact-6665eb3cc0867f6fb564.png | Bin 0 -> 3954 bytes ...c-icon-individual-76d047fd4e2afdf8655a.png | Bin 0 -> 2392 bytes .../dc-life-event-258482883eeb858b05ec.png | Bin 0 -> 4274 bytes .../dc-shop_for_plan-b738c76fa04aaeeea304.png | Bin 0 -> 3576 bytes .../icons/delete-04b7f3c679d45cf16e8a.svg | 10 + .../icons/delete-04b7f3c679d45cf16e8a.svg.br | Bin 0 -> 515 bytes .../icons/delete-04b7f3c679d45cf16e8a.svg.gz | Bin 0 -> 568 bytes .../dismiss-close-8ee69b73dc5c215216c8.svg | 10 + .../dismiss-close-8ee69b73dc5c215216c8.svg.br | Bin 0 -> 227 bytes .../dismiss-close-8ee69b73dc5c215216c8.svg.gz | Bin 0 -> 242 bytes .../document-pdf-3092746289babb7b381a.svg | 3 + .../document-pdf-3092746289babb7b381a.svg.br | Bin 0 -> 970 bytes .../document-pdf-3092746289babb7b381a.svg.gz | Bin 0 -> 1047 bytes .../icons/edit-20e56ed77ee4c52976dc.svg | 3 + .../icons/edit-20e56ed77ee4c52976dc.svg.br | Bin 0 -> 324 bytes .../icons/edit-20e56ed77ee4c52976dc.svg.gz | Bin 0 -> 364 bytes .../icons/error-red-af0bef0af8261ddb997a.svg | 5 + .../error-red-af0bef0af8261ddb997a.svg.br | Bin 0 -> 187 bytes .../error-red-af0bef0af8261ddb997a.svg.gz | Bin 0 -> 219 bytes .../expert-icon-63c117fcdd264bb005a4.svg | 3 + .../expert-icon-63c117fcdd264bb005a4.svg.br | Bin 0 -> 491 bytes .../expert-icon-63c117fcdd264bb005a4.svg.gz | Bin 0 -> 524 bytes .../icons/eye-off-1ffda78e576e8946bbfc.svg | 3 + .../icons/eye-off-1ffda78e576e8946bbfc.svg.br | Bin 0 -> 361 bytes .../icons/eye-off-1ffda78e576e8946bbfc.svg.gz | Bin 0 -> 387 bytes .../icons/eye-on-a318d0f5a8727da7fc05.svg | 3 + .../icons/eye-on-a318d0f5a8727da7fc05.svg.br | Bin 0 -> 327 bytes .../icons/eye-on-a318d0f5a8727da7fc05.svg.gz | Bin 0 -> 357 bytes .../family_members-53543c3758d7d913cd82.png | Bin 0 -> 4039 bytes .../find-doctor-944e10dc571dcfd1ee8c.png | Bin 0 -> 6450 bytes ...on-business-owner-d2b0dc79e347461ad12b.png | Bin 0 -> 438 bytes ...lue-icon-employee-90f5c6b39939e5caf190.png | Bin 0 -> 436 bytes ...e-icon-individual-e5ad5aeb643925c4ada7.png | Bin 0 -> 549 bytes ...c-blue-life-event-bf38c295cd93466db18a.png | Bin 0 -> 3337 bytes ...on-business-owner-6dcffe019ec457445b60.png | Bin 0 -> 429 bytes ...ple-icon-employee-576a6bd04e5989fd3e25.png | Bin 0 -> 432 bytes ...urple-icon-family-f6dc8d504d3881f567f1.png | Bin 0 -> 477 bytes ...e-icon-individual-613a0f9a0d0d3603c7cf.png | Bin 0 -> 535 bytes ...purple-life-event-8c34495225fae9275321.png | Bin 0 -> 3333 bytes .../gold-circle-1-dec05d418e15cce2726c.png | Bin 0 -> 1066 bytes .../gold-circle-2-a0b44caefd16746a4d90.png | Bin 0 -> 1169 bytes .../gold-circle-c885d9e2632f67257fdc.png | Bin 0 -> 1176 bytes .../icons/health-18a0b9a8e26bfe4b3604.svg | 3 + .../icons/health-18a0b9a8e26bfe4b3604.svg.br | Bin 0 -> 234 bytes .../icons/health-18a0b9a8e26bfe4b3604.svg.gz | Bin 0 -> 252 bytes ...on-business-owner-c938d0f1fd8edf5311c8.png | Bin 0 -> 1745 bytes .../icon-employee-812f8e8884c107ff4a5e.png | Bin 0 -> 1742 bytes ...on-exchange-admin-af861f7ab385480a95fa.png | Bin 0 -> 1966 bytes .../icon-expert-453e46e7e6d9ca989504.png | Bin 0 -> 1650 bytes .../icon-family-97f566491f709673f476.png | Bin 0 -> 2247 bytes .../icons/info-50cd4642cbab712e7ce1.svg | 4 + .../icons/info-50cd4642cbab712e7ce1.svg.br | Bin 0 -> 886 bytes .../icons/info-50cd4642cbab712e7ce1.svg.gz | Bin 0 -> 1003 bytes .../icons/list-fa315c78b851beaee276.png | Bin 0 -> 1018 bytes .../icons/logo_dc-5ee44130e973cf68f03c.svg | 54 + .../icons/logo_dc-5ee44130e973cf68f03c.svg.br | Bin 0 -> 854 bytes .../icons/logo_dc-5ee44130e973cf68f03c.svg.gz | Bin 0 -> 928 bytes .../icons/mail-7d62449a5590f23ea7c7.png | Bin 0 -> 1435 bytes .../icons/mail-read-88f2e20fd04769372a44.svg | 10 + .../mail-read-88f2e20fd04769372a44.svg.br | Bin 0 -> 440 bytes .../mail-read-88f2e20fd04769372a44.svg.gz | Bin 0 -> 474 bytes ...e-icon-individual-9839dda1b5146ca411ea.png | Bin 0 -> 2986 bytes .../me-life-event-67166fa7243cdbe28652.png | Bin 0 -> 2965 bytes .../me-shop_for_plan-b738c76fa04aaeeea304.png | Bin 0 -> 3576 bytes .../menu-burger-db88b34650e28badeabe.svg | 3 + .../menu-burger-db88b34650e28badeabe.svg.br | Bin 0 -> 338 bytes .../menu-burger-db88b34650e28badeabe.svg.gz | Bin 0 -> 381 bytes .../icons/message-c089f8545d2e1bae5355.png | Bin 0 -> 1294 bytes ...mhc-shop_for_plan-aab615b2d104d9f2de9d.png | Bin 0 -> 3387 bytes .../icons/phone-300c42a1a1d6e1a57ef8.svg | 3 + .../icons/phone-300c42a1a1d6e1a57ef8.svg.br | Bin 0 -> 321 bytes .../icons/phone-300c42a1a1d6e1a57ef8.svg.gz | Bin 0 -> 348 bytes .../icons/phone-d9fec62658cdc6fb8223.png | Bin 0 -> 1489 bytes .../platinum-circle-795ba24c0fd4e9a60efa.png | Bin 0 -> 1176 bytes .../progress-divider-37e41197468556b97ba5.png | Bin 0 -> 1055 bytes .../icons/search-10f608fc5777069417c3.svg | 3 + .../icons/search-10f608fc5777069417c3.svg.br | 4 + .../icons/search-10f608fc5777069417c3.svg.gz | Bin 0 -> 219 bytes .../shop_for_plan-aab615b2d104d9f2de9d.png | Bin 0 -> 3387 bytes .../silver-circle-72c8d13bcfe09e98c85c.png | Bin 0 -> 1169 bytes .../icons/tooltip-85fc1dcac91766995a93.svg | 3 + .../icons/tooltip-85fc1dcac91766995a93.svg.br | Bin 0 -> 452 bytes .../icons/tooltip-85fc1dcac91766995a93.svg.gz | Bin 0 -> 488 bytes .../icons/translate-fc3a717da046f3510c34.svg | 3 + .../translate-fc3a717da046f3510c34.svg.br | Bin 0 -> 1515 bytes .../translate-fc3a717da046f3510c34.svg.gz | Bin 0 -> 1650 bytes .../icons/un-check-6b5702f77767e943fb5c.png | Bin 0 -> 1296 bytes .../icons/undo-e37350aeff0180b140e9.svg | 3 + .../icons/undo-e37350aeff0180b140e9.svg.br | 3 + .../icons/undo-e37350aeff0180b140e9.svg.gz | Bin 0 -> 397 bytes .../icons/user-small-b9a17a62c4cc4dfd30e4.svg | 3 + .../user-small-b9a17a62c4cc4dfd30e4.svg.br | Bin 0 -> 241 bytes .../user-small-b9a17a62c4cc4dfd30e4.svg.gz | Bin 0 -> 260 bytes .../icons/warning-1-48a4637b45e148dba704.svg | 4 + .../warning-1-48a4637b45e148dba704.svg.br | Bin 0 -> 395 bytes .../warning-1-48a4637b45e148dba704.svg.gz | Bin 0 -> 428 bytes ...warning-error-red-fb3935407d6f0174c1a6.svg | 4 + ...ning-error-red-fb3935407d6f0174c1a6.svg.br | Bin 0 -> 402 bytes ...ning-error-red-fb3935407d6f0174c1a6.svg.gz | Bin 0 -> 437 bytes ...rning-error-white-64065c5e5d6e94ea2cac.svg | 4 + ...ng-error-white-64065c5e5d6e94ea2cac.svg.br | Bin 0 -> 394 bytes ...ng-error-white-64065c5e5d6e94ea2cac.svg.gz | Bin 0 -> 427 bytes yarn.lock | 2241 +-- 769 files changed, 51695 insertions(+), 4276 deletions(-) delete mode 100644 app/assets/images/logo.png delete mode 100644 app/assets/info/pdf/employers_paying_your_premiums_online.pdf delete mode 100644 app/assets/javascripts/application.js.erb delete mode 100644 app/assets/javascripts/dynamic_nested_fields.js.coffee.erb delete mode 100644 app/assets/javascripts/group_selection.js delete mode 100644 app/assets/javascripts/ui-components/components.js delete mode 100644 app/assets/stylesheets/glyphicons.scss.erb delete mode 100644 app/assets/stylesheets/sprites.scss.erb delete mode 100644 app/assets/stylesheets/ui-components/sprites.scss.erb create mode 100644 app/controllers/packs_static_controller.rb create mode 100644 app/helpers/webpack_assets_helper.rb rename app/{assets => javascript/client_config/me}/images/CoverME_WebsiteHeader_01.jpg (100%) rename app/{assets => javascript/client_config/me}/images/favicon_me.ico (100%) rename app/{assets => javascript/client_config/me}/images/logo/carrier/anthem_blue_cross_and_blue_shield.jpg (100%) rename app/{assets => javascript/client_config/me}/images/logo/carrier/bestlife.jpg (100%) create mode 100644 app/javascript/client_config/me/images/logo/carrier/community_health_options.jpg rename app/{assets => javascript/client_config/me}/images/logo/carrier/dominion.jpg (100%) rename app/{assets => javascript/client_config/me}/images/logo/carrier/northeast_delta_dental.jpg (100%) rename app/{assets => javascript/client_config/me}/images/logo/carrier/renaissance_dental.jpg (100%) create mode 100644 app/javascript/client_config/me/stylesheets/ui-components/benefit-applications.scss create mode 100644 app/javascript/client_config/me/stylesheets/ui-components/cards.scss create mode 100644 app/javascript/client_config/me/stylesheets/ui-components/jquery-ui.scss.erb create mode 100644 app/javascript/components/benefit_sponsors/application.js.erb create mode 100644 app/javascript/components/benefit_sponsors/assister_agency_staff_roles.js create mode 100644 app/javascript/components/benefit_sponsors/benefit_package.js create mode 100644 app/javascript/components/benefit_sponsors/benefit_package.js.erb create mode 100644 app/javascript/components/benefit_sponsors/broker_agency_staff_roles.js create mode 100644 app/javascript/components/benefit_sponsors/date.js create mode 100644 app/javascript/components/benefit_sponsors/general_agency_staff_roles.js create mode 100644 app/javascript/components/benefit_sponsors/jq_datepicker.js create mode 100644 app/javascript/components/financial_assistance/address.js create mode 100644 app/javascript/components/financial_assistance/applicant.js create mode 100644 app/javascript/components/financial_assistance/application.js create mode 100644 app/javascript/components/financial_assistance/benefit.js create mode 100644 app/javascript/components/financial_assistance/deduction.js create mode 100644 app/javascript/components/financial_assistance/demographics_fields.js create mode 100644 app/javascript/components/financial_assistance/fa_integration.js create mode 100644 app/javascript/components/financial_assistance/glossary.js create mode 100644 app/javascript/components/financial_assistance/income.js create mode 100644 app/javascript/components/financial_assistance/inline_replacements.js create mode 100644 app/javascript/components/financial_assistance/keyboard_navigation.js create mode 100644 app/javascript/components/financial_assistance/relationship_selector.js create mode 100644 app/javascript/components/financial_assistance/shared.js create mode 100644 app/javascript/components/financial_assistance/step_conditionals.js create mode 100644 app/javascript/components/notifier/application.js create mode 100644 app/javascript/components/notifier/ckeditor/config.js.erb create mode 100644 app/javascript/components/notifier/ckeditor/contents.css rename app/{assets => javascript/components/notifier/ckeditor}/fonts/FontAwesome.otf (100%) mode change 100644 => 100755 rename app/{assets => javascript/components/notifier/ckeditor}/fonts/fontawesome-webfont.eot (100%) mode change 100644 => 100755 create mode 100755 app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.svg rename app/{assets => javascript/components/notifier/ckeditor}/fonts/fontawesome-webfont.ttf (100%) mode change 100644 => 100755 rename app/{assets => javascript/components/notifier/ckeditor}/fonts/fontawesome-webfont.woff (100%) mode change 100644 => 100755 rename app/{assets => javascript/components/notifier/ckeditor}/fonts/fontawesome-webfont.woff2 (100%) mode change 100644 => 100755 create mode 100755 app/javascript/components/notifier/ckeditor/fonts/index.html create mode 100644 app/javascript/components/notifier/ckeditor/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/a11yhelp/dialogs/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/button/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/button/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/clipboard.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/console.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/dnd.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/copy-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/copy.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/cut-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/cut.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/copy-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/copy.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/cut-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/cut.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/paste-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/paste.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/paste-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/paste.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/clipboard/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/colordialog/dialogs/colordialog.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/colordialog/dialogs/colordialog.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/copyformatting/cursors/cursor-disabled.svg create mode 100644 app/javascript/components/notifier/ckeditor/plugins/copyformatting/cursors/cursor.svg create mode 100644 app/javascript/components/notifier/ckeditor/plugins/copyformatting/styles/copyformatting.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/dialog/dialogDefinition.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/dialog/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/dialog/samples/assets/my_dialog.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/dialog/samples/dialog.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/dialogui/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/div/dialogs/div.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/find/dialogs/find.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/dialogs/fontawesome.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/dialogs/index.html create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/css/font-awesome.min.css create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/css/index.html create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/fonts/FontAwesome.otf create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/fonts/fontawesome-webfont.eot create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/fonts/fontawesome-webfont.svg create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/fonts/fontawesome-webfont.ttf create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/fonts/fontawesome-webfont.woff create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/fonts/index.html create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/font-awesome/index.html create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/icons/fontawesome.png create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/icons/index.html create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/index.html create mode 100755 app/javascript/components/notifier/ckeditor/plugins/fontawesome/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/icons.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/icons_hidpi.png create mode 100755 app/javascript/components/notifier/ckeditor/plugins/lineheight/LICENSE create mode 100755 app/javascript/components/notifier/ckeditor/plugins/lineheight/lang/LANG.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/lineheight/lang/en.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/lineheight/lang/es.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/lineheight/lang/fr.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/lineheight/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/lineutils/dev/dnd.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/lineutils/dev/magicfinger.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/lineutils/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/link/dialogs/anchor.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/link/dialogs/link.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/link/images/anchor.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/link/images/hidpi/anchor.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/liststyle/dialogs/liststyle.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/magicline/images/hidpi/icon.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/magicline/images/icon-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/magicline/images/icon.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/notification/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/notification/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/pagebreak/images/pagebreak.gif create mode 100644 app/javascript/components/notifier/ckeditor/plugins/pastefromword/filter/default.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/placeholder/dev/placeholder.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/placeholder/dialogs/placeholder.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/placeholder/icons/hidpi/placeholder.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/placeholder/icons/placeholder.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/placeholder/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/placeholder/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/placeholder/samples/placeholder.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/placeholder_select/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/scayt/CHANGELOG.md create mode 100644 app/javascript/components/notifier/ckeditor/plugins/scayt/LICENSE.md create mode 100644 app/javascript/components/notifier/ckeditor/plugins/scayt/README.md create mode 100644 app/javascript/components/notifier/ckeditor/plugins/scayt/dialogs/dialog.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/scayt/dialogs/options.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/scayt/dialogs/toolbar.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/scayt/skins/moono-lisa/scayt.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_address.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_blockquote.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_div.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_h1.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_h2.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_h3.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_h4.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_h5.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_h6.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_p.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/showblocks/images/block_pre.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/specialchar/dialogs/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/specialchar/dialogs/specialchar.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/table/dialogs/table.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/tableselection/styles/tableselection.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/tabletools/dialogs/tableCell.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/dialogs/templates.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/dialogs/templates.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/icons/hidpi/templates.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/icons/templates-rtl.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/icons/templates.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/templates/default.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/templates/images/template1.gif create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/templates/images/template2.gif create mode 100644 app/javascript/components/notifier/ckeditor/plugins/templates/templates/images/template3.gif rename app/{assets/fonts/nimbus-roman-no9/GNU General Public License.txt => javascript/components/notifier/ckeditor/plugins/token/LICENSE.md} (94%) mode change 100644 => 100755 create mode 100755 app/javascript/components/notifier/ckeditor/plugins/token/ReadMe.md create mode 100755 app/javascript/components/notifier/ckeditor/plugins/token/dialogs/token.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/token/icons/hidpi/token.png create mode 100755 app/javascript/components/notifier/ckeditor/plugins/token/icons/token.png create mode 100755 app/javascript/components/notifier/ckeditor/plugins/token/lang/en.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/token/lang/ru.js create mode 100755 app/javascript/components/notifier/ckeditor/plugins/token/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/toolbar/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/toolbar/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/toolbar/samples/toolbar.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/assets/contents.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/assets/sample.jpg create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/assets/simplebox/contents.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/assets/simplebox/dialogs/simplebox.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/assets/simplebox/icons/simplebox.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/assets/simplebox/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/console.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/nestedwidgets.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/dev/widgetstyles.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/images/handle.png create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/lang/en.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widget/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/widgetselection/plugin.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/wsc/LICENSE.md create mode 100644 app/javascript/components/notifier/ckeditor/plugins/wsc/README.md create mode 100644 app/javascript/components/notifier/ckeditor/plugins/wsc/dialogs/ciframe.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/wsc/dialogs/tmpFrameset.html create mode 100644 app/javascript/components/notifier/ckeditor/plugins/wsc/dialogs/wsc.css create mode 100644 app/javascript/components/notifier/ckeditor/plugins/wsc/dialogs/wsc.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/wsc/dialogs/wsc_ie.js create mode 100644 app/javascript/components/notifier/ckeditor/plugins/wsc/skins/moono-lisa/wsc.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/dialog.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/dialog_ie.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/dialog_ie8.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/dialog_iequirks.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/editor.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/editor_gecko.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/editor_ie.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/editor_ie8.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/editor_iequirks.css create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/icons.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/icons_hidpi.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/arrow.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/close.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/hidpi/close.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/hidpi/lock-open.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/hidpi/lock.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/hidpi/refresh.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/lock-open.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/lock.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/refresh.png create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/images/spinner.gif create mode 100644 app/javascript/components/notifier/ckeditor/skins/moono-lisa/readme.md create mode 100644 app/javascript/components/notifier/ckeditor/styles.js create mode 100644 app/javascript/components/sponsored_benefits/application.js create mode 100644 app/javascript/components/sponsored_benefits/plan_design_proposals.js create mode 100644 app/javascript/effective_datatables/initialize.js rename app/{assets => javascript}/fonts/Barlow300.woff2 (100%) rename app/{assets => javascript}/fonts/Barlow400.woff2 (100%) rename app/{assets => javascript}/fonts/Barlow400Italic.woff2 (100%) rename app/{assets => javascript}/fonts/Barlow600.woff2 (100%) rename app/{assets => javascript}/fonts/Barlow700.woff2 (100%) rename app/{assets => javascript}/fonts/Barlow800.woff2 (100%) create mode 100644 app/javascript/fonts/FontAwesome.otf create mode 100644 app/javascript/fonts/fontawesome-webfont.eot rename app/{assets => javascript}/fonts/fontawesome-webfont.svg (100%) create mode 100644 app/javascript/fonts/fontawesome-webfont.ttf create mode 100644 app/javascript/fonts/fontawesome-webfont.woff create mode 100644 app/javascript/fonts/fontawesome-webfont.woff2 rename app/{assets => javascript}/fonts/glyphicons-halflings-regular.eot (100%) rename app/{assets => javascript}/fonts/glyphicons-halflings-regular.svg (100%) rename app/{assets => javascript}/fonts/glyphicons-halflings-regular.ttf (100%) rename app/{assets => javascript}/fonts/glyphicons-halflings-regular.woff (100%) rename app/{assets => javascript}/fonts/glyphicons-halflings-regular.woff2 (100%) rename app/{assets => javascript}/fonts/nimbus-roman-no9/NimbusRomNo9L-Med.otf (100%) rename app/{assets => javascript}/fonts/nimbus-roman-no9/NimbusRomNo9L-MedIta.otf (100%) rename app/{assets => javascript}/fonts/nimbus-roman-no9/NimbusRomNo9L-Reg.otf (100%) rename app/{assets => javascript}/fonts/nimbus-roman-no9/NimbusRomNo9L-RegIta.otf (100%) create mode 100644 app/javascript/images.js create mode 100644 app/javascript/images/CoverME_WebsiteHeader_01.jpg rename app/{assets => javascript}/images/address-close.png (100%) rename app/{assets => javascript}/images/arrow-down.png (100%) rename app/{assets => javascript}/images/autofill-close.png (100%) rename app/{assets => javascript}/images/autofill-cloud-failed.png (100%) rename app/{assets => javascript}/images/autofill-cloud.png (100%) rename app/{assets => javascript}/images/bodybg.png (100%) rename app/{assets => javascript}/images/chat-2.png (100%) rename app/{assets => javascript}/images/chat.png (100%) rename app/{assets => javascript}/images/check.png (100%) rename app/{assets => javascript}/images/checkmark-green.png (100%) rename app/{assets => javascript}/images/checkmark.png (100%) rename app/{assets => javascript}/images/cheque_amount.png (100%) rename app/{assets => javascript}/images/close-blue.png (100%) rename app/{assets => javascript}/images/compare-checkbox-img.png (100%) rename app/{assets => javascript}/images/dc_health.png (100%) rename app/{assets => javascript}/images/dc_invoice_logo.png (100%) rename app/{assets => javascript}/images/dchealthlink.jpg (100%) rename app/{assets => javascript}/images/delete.png (100%) rename app/{assets => javascript}/images/drey-bg.png (100%) rename app/{assets => javascript}/images/dropdown-option-close.png (100%) rename app/{assets => javascript}/images/edit-blue.png (100%) rename app/{assets => javascript}/images/edit.png (100%) rename app/{assets => javascript}/images/email.png (100%) rename app/{assets => javascript}/images/enter_date_termination.png (100%) rename app/{assets => javascript}/images/enter_rehire_date.png (100%) rename app/{assets => javascript}/images/facebook.png (100%) rename app/{assets => javascript}/images/false-red.png (100%) rename app/{assets => javascript}/images/favicon.ico (100%) rename app/{assets => javascript}/images/favicon.xcf (100%) create mode 100644 app/javascript/images/favicon_me.ico rename app/{assets => javascript}/images/health_connector.jpg (100%) rename app/{assets => javascript}/images/home-icon-gray.png (100%) rename app/{assets => javascript}/images/home-icon.png (100%) rename app/{assets => javascript}/images/icons/arrow-active-form.png (100%) rename app/{assets => javascript}/images/icons/bronze-circle.png (100%) rename app/{assets => javascript}/images/icons/cca-icon-exchange-admin.png (100%) rename app/{assets => javascript}/images/icons/cca-icon-individual.png (100%) rename app/{assets => javascript}/images/icons/cca-life-event.png (100%) rename app/{assets => javascript}/images/icons/cca-shop_for_plan.png (100%) rename app/{assets => javascript}/images/icons/check_radio_sheet.png (100%) rename app/{assets => javascript}/images/icons/checked.png (100%) rename app/{assets => javascript}/images/icons/contact.png (100%) rename app/{assets => javascript}/images/icons/dc-icon-individual.png (100%) rename app/{assets => javascript}/images/icons/dc-life-event.png (100%) rename app/{assets => javascript}/images/icons/dc-shop_for_plan.png (100%) rename app/{assets => javascript}/images/icons/family_members.png (100%) rename app/{assets => javascript}/images/icons/find-doctor.png (100%) rename app/{assets => javascript}/images/icons/gic-blue-icon-business-owner.png (100%) rename app/{assets => javascript}/images/icons/gic-blue-icon-business-owner.xcf (100%) rename app/{assets => javascript}/images/icons/gic-blue-icon-employee.png (100%) rename app/{assets => javascript}/images/icons/gic-blue-icon-employee.xcf (100%) rename app/{assets => javascript}/images/icons/gic-blue-icon-individual.png (100%) rename app/{assets => javascript}/images/icons/gic-blue-icon-individual.xcf (100%) rename app/{assets => javascript}/images/icons/gic-blue-life-event.png (100%) rename app/{assets => javascript}/images/icons/gic-blue-life-event.xcf (100%) rename app/{assets => javascript}/images/icons/gic-purple-icon-business-owner.png (100%) rename app/{assets => javascript}/images/icons/gic-purple-icon-employee.png (100%) rename app/{assets => javascript}/images/icons/gic-purple-icon-employee.xcf (100%) rename app/{assets => javascript}/images/icons/gic-purple-icon-family.png (100%) rename app/{assets => javascript}/images/icons/gic-purple-icon-family.xcf (100%) rename app/{assets => javascript}/images/icons/gic-purple-icon-individual.png (100%) rename app/{assets => javascript}/images/icons/gic-purple-icon-individual.xcf (100%) rename app/{assets => javascript}/images/icons/gic-purple-life-event.png (100%) rename app/{assets => javascript}/images/icons/gic-purple-life-event.xcf (100%) rename app/{assets => javascript}/images/icons/gold-circle-1.png (100%) rename app/{assets => javascript}/images/icons/gold-circle-2.png (100%) rename app/{assets => javascript}/images/icons/gold-circle.png (100%) rename app/{assets => javascript}/images/icons/icon-business-owner.png (100%) rename app/{assets => javascript}/images/icons/icon-employee.png (100%) rename app/{assets => javascript}/images/icons/icon-exchange-admin.png (100%) rename app/{assets => javascript}/images/icons/icon-expert.png (100%) rename app/{assets => javascript}/images/icons/icon-family.png (100%) rename app/{assets => javascript}/images/icons/list.png (100%) rename app/{assets => javascript}/images/icons/mail.png (100%) rename app/{assets => javascript}/images/icons/me-icon-individual.png (100%) rename app/{assets => javascript}/images/icons/me-life-event.png (100%) rename app/{assets => javascript}/images/icons/me-shop_for_plan.png (100%) rename app/{assets => javascript}/images/icons/message.png (100%) rename app/{assets => javascript}/images/icons/mhc-shop_for_plan.png (100%) rename app/{assets => javascript}/images/icons/phone.png (100%) rename app/{assets => javascript}/images/icons/platinum-circle.png (100%) rename app/{assets => javascript}/images/icons/progress-divider.png (100%) rename app/{assets => javascript}/images/icons/shop_for_plan.png (100%) rename app/{assets => javascript}/images/icons/silver-circle.png (100%) rename app/{assets => javascript}/images/icons/un-check.png (100%) rename app/{assets => javascript}/images/images/broswericons_128.png (100%) rename app/{assets => javascript}/images/images/didyouknow_288.png (100%) rename app/{assets => javascript}/images/images/guidanceforsmallbusinessowners_214.jpg (100%) rename app/{assets => javascript}/images/jquery-ui/ui-icons_444444_256x240.png (100%) rename app/{assets => javascript}/images/jquery-ui/ui-icons_555555_256x240.png (100%) rename app/{assets => javascript}/images/jquery-ui/ui-icons_777620_256x240.png (100%) rename app/{assets => javascript}/images/jquery-ui/ui-icons_777777_256x240.png (100%) rename app/{assets => javascript}/images/jquery-ui/ui-icons_cc0000_256x240.png (100%) rename app/{assets => javascript}/images/jquery-ui/ui-icons_ffffff_256x240.png (100%) rename app/{assets => javascript}/images/landing-page-delete.png (100%) rename app/{assets => javascript}/images/lightGreen.png (100%) rename app/{assets => javascript}/images/living.png (100%) rename app/{assets => javascript}/images/lock.png (100%) rename app/{assets => javascript}/images/logo-bg.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/aetna.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/allways_health_partners.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/altus_dental.jpg (100%) create mode 100644 app/javascript/images/logo/carrier/anthem_blue_cross_and_blue_shield.jpg rename app/{assets => javascript}/images/logo/carrier/best_life.jpg (100%) create mode 100644 app/javascript/images/logo/carrier/bestlife.jpg rename app/{assets => javascript}/images/logo/carrier/blue_cross_blue_shield.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/blue_cross_blue_shield_ma.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/bmc_healthnet_plan.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/carefirst.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/carrier_1_health_only.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/community_health_options.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/delta_dental.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/dentegra.jpg (100%) rename app/{assets/images/logo/carrier/dominion_national.jpg => javascript/images/logo/carrier/dominion.jpg} (100%) create mode 100644 app/javascript/images/logo/carrier/dominion_national.jpg rename app/{assets => javascript}/images/logo/carrier/fallon_health.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/harvard_pilgrim_health_care.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/health_new_england.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/kaiser.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/kaiser_permanente.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/mending_health.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/metlife.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/minuteman_health.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/name.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/neighborhood_health_plan.jpg (100%) create mode 100644 app/javascript/images/logo/carrier/northeast_delta_dental.jpg rename app/{assets => javascript}/images/logo/carrier/oci.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/old_uhic.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/old_unitedhealthcare.jpg (100%) create mode 100644 app/javascript/images/logo/carrier/renaissance_dental.jpg rename app/{assets => javascript}/images/logo/carrier/taro_health.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/tufts_health_direct.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/tufts_health_plan_premier.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/tufts_health_premier.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/uhcma.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/uhic.jpg (100%) rename app/{assets => javascript}/images/logo/carrier/unitedhealthcare.jpg (100%) create mode 100644 app/javascript/images/logo_bs4_ic.svg rename app/{assets => javascript}/images/member-close.png (100%) rename app/{assets => javascript}/images/mhc-favicon-green.ico (100%) rename app/{assets => javascript}/images/mhc_favicon.xcf (100%) rename app/{assets => javascript}/images/mhc_logo.png (100%) rename app/{assets => javascript}/images/nav.png (100%) rename app/{assets => javascript}/images/new_broker_registration.jpg (100%) rename app/{assets => javascript}/images/phone.png (100%) rename app/{assets => javascript}/images/question.png (100%) rename app/{assets => javascript}/images/radio-img.png (100%) rename app/{assets => javascript}/images/right-bg.png (100%) rename app/{assets => javascript}/images/search.png (100%) rename app/{assets => javascript}/images/secure-lock.png (100%) rename app/{assets => javascript}/images/sep.jpg (100%) rename app/{assets => javascript}/images/separator.png (100%) rename app/{assets => javascript}/images/terminate-popup.png (100%) rename app/{assets => javascript}/images/triangle.png (100%) rename app/{assets => javascript}/images/twitter.png (100%) rename app/{assets => javascript}/images/ui-icons-dark.png (100%) rename app/{assets => javascript}/images/ui-icons-icons.png (100%) rename app/{assets => javascript}/images/ui-icons-light.png (100%) rename app/{assets => javascript}/images/ui-icons-main.png (100%) rename app/{assets => javascript}/images/ui-icons-second.png (100%) rename app/{assets => javascript}/images/ui-icons-white.png (100%) rename app/{assets => javascript}/images/ui/cartgreen_40.png (100%) rename app/{assets => javascript}/images/ui/darkgreenarrow_354.png (100%) rename app/{assets => javascript}/images/ui/expertgreen_50.png (100%) rename app/{assets => javascript}/images/ui/expertgreen_68.png (100%) rename app/{assets => javascript}/images/ui/gearsgreen_50.png (100%) rename app/{assets => javascript}/images/ui/lightgreenarrow_354.png (100%) rename app/{assets => javascript}/images/ui/pointergreen_42.png (100%) rename app/{assets => javascript}/images/ui/profilegreen_37.png (100%) rename app/{assets => javascript}/images/ui/radiobutton_100.png (100%) rename app/{assets => javascript}/images/ui/sprites/icons.png (100%) rename app/{assets => javascript}/images/ui/thinchevronblueleft_30.png (100%) rename app/{assets => javascript}/images/ui/thinchevronblueright_30.png (100%) rename app/{assets => javascript}/images/ui/xblue_19.png (100%) rename app/{assets => javascript}/images/user.png (100%) rename app/{assets => javascript}/images/warning-icon-small.svg (100%) rename app/{assets => javascript}/images/warning-icon.svg (100%) rename app/{assets => javascript}/images/warning.png (100%) rename app/{assets => javascript}/images/youtube.png (100%) rename app/{assets/javascripts => javascript/legacy}/ajax_token_redirect.js (100%) rename app/{assets/javascripts => javascript/legacy}/announcement.js (100%) create mode 100644 app/javascript/legacy/application.js.erb rename app/{assets/javascripts => javascript/legacy}/assister_role.js (100%) rename app/{assets/javascripts => javascript/legacy}/benefits.js (100%) rename app/{assets/javascripts => javascript/legacy}/binder_transition.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/bootstrap-slider.js (100%) rename app/{assets/javascripts => javascript/legacy}/broker_role.js (100%) rename app/{assets/javascripts => javascript/legacy}/browser_issues.js (100%) rename app/{assets/javascripts => javascript/legacy}/button.js (100%) rename app/{assets/javascripts => javascript/legacy}/classie.js (100%) rename app/{assets/javascripts => javascript/legacy}/consumer_role.js (100%) rename app/{assets/javascripts => javascript/legacy}/consumer_verification.js (100%) rename app/{assets/javascripts => javascript/legacy}/datatable_custom_filter.js (100%) rename app/{assets/javascripts => javascript/legacy}/date.js (100%) rename app/{assets/javascripts => javascript/legacy}/demographics_fields.js (100%) rename app/{assets/javascripts => javascript/legacy}/dob.js (100%) rename app/{assets/javascripts => javascript/legacy}/dob_validation.js (100%) rename app/{assets/javascripts => javascript/legacy}/dry_run_dashboard.js (100%) rename app/{assets/javascripts => javascript/legacy}/edit_plan.js (100%) rename app/{assets/javascripts => javascript/legacy}/employee_dependent.js (100%) rename app/{assets/javascripts => javascript/legacy}/employee_role.js (100%) rename app/{assets/javascripts => javascript/legacy}/employer_profile.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/employers_general_agency.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/exchanges/assister_applicants.js (100%) rename app/{assets/javascripts => javascript/legacy}/exchanges/broker_applicants.js (100%) rename app/{assets/javascripts => javascript/legacy}/exchanges/hbx_profiles.js (100%) rename app/{assets/javascripts => javascript/legacy}/families.js (100%) rename app/{assets/javascripts => javascript/legacy}/financial_assistance.js (100%) rename app/{assets/javascripts => javascript/legacy}/formhelpers.js (100%) rename app/{assets/javascripts => javascript/legacy}/forms.js (100%) rename app/{assets/javascripts => javascript/legacy}/freebies.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/general_agency.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/help_me_sign_up.js (100%) rename app/{assets/javascripts => javascript/legacy}/inline_replacements.js (100%) rename app/{assets/javascripts => javascript/legacy}/insured.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/jquery-ui.js (100%) rename app/{assets/javascripts => javascript/legacy}/jquery-ui/keycode.js (100%) rename app/{assets/javascripts => javascript/legacy}/jquery-ui/version.js (100%) rename app/{assets/javascripts => javascript/legacy}/jquery.dragtable.js (100%) rename app/{assets/javascripts => javascript/legacy}/jquery.mask.js (100%) rename app/{assets/javascripts => javascript/legacy}/jquery.selectric.min.js (100%) rename app/{assets/javascripts => javascript/legacy}/jquery.steps.js (100%) rename app/{assets/javascripts => javascript/legacy}/keyboard_navigation.js (100%) rename app/{assets/javascripts => javascript/legacy}/modalEffects.js (100%) rename app/{assets/javascripts => javascript/legacy}/modal_actions.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/override_confirm.js (100%) rename app/{assets/javascripts => javascript/legacy}/plan_shopping.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/plan_year.js (100%) rename app/{assets/javascripts => javascript/legacy}/plan_year_selection.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/print.js (100%) rename app/{assets/javascripts => javascript/legacy}/qhp_application.js (100%) rename app/{assets/javascripts => javascript/legacy}/qle.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/quotes/_quote.js (100%) rename app/{assets/javascripts => javascript/legacy}/quotes/manage_sliders.js (100%) rename app/{assets/javascripts => javascript/legacy}/quotes/page_actions.js (100%) rename app/{assets/javascripts => javascript/legacy}/register.js (100%) rename app/{assets/javascripts => javascript/legacy}/responsive.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/ridp_primary_response.js (100%) rename app/{assets/javascripts => javascript/legacy}/ridp_secondary_response.js (100%) rename app/{assets/javascripts => javascript/legacy}/save_and_exit.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/semantic_class.js (100%) rename app/{assets/javascripts => javascript/legacy}/set_tab_content.js (100%) rename app/{assets/javascripts => javascript/legacy}/signup_progress.js (100%) rename app/{assets/javascripts => javascript/legacy}/time_jump.js (100%) create mode 100644 app/javascript/legacy/ui-components/components.js rename app/{assets/javascripts => javascript/legacy}/ui-components/datepicker.js (100%) rename app/{assets/javascripts => javascript/legacy}/ui-components/forms.js.erb (100%) rename app/{assets/javascripts => javascript/legacy}/ui-components/mask_inputs.js (100%) rename app/{assets/javascripts => javascript/legacy}/ui-components/services.js (100%) rename app/{assets/javascripts => javascript/legacy}/ui-components/sidebars/plan_filters.js (100%) rename app/{assets/javascripts => javascript/legacy}/ui-components/sliders.js (100%) rename app/{assets/javascripts => javascript/legacy}/ui-components/sweetalerts.js (100%) rename app/{assets/javascripts => javascript/legacy}/ui-components/tether.js (100%) rename app/{assets/javascripts => javascript/legacy}/ui-components/validators.js (100%) rename app/{assets/javascripts => javascript/legacy}/wf_sso_token.js (100%) create mode 100644 app/javascript/packs/effective_datatables.js rename app/{assets => javascript}/stylesheets/_fonts.scss (100%) rename app/{assets => javascript}/stylesheets/_variables.scss.erb (100%) rename app/{assets => javascript}/stylesheets/admin.scss.erb (100%) rename app/{assets => javascript}/stylesheets/application.scss.erb (98%) create mode 100644 app/javascript/stylesheets/benefit_sponsors/application.scss.erb rename app/{assets => javascript}/stylesheets/bootstrap_overrides.scss.erb (100%) rename app/{assets => javascript}/stylesheets/broker_profile.scss.erb (100%) rename app/{assets => javascript}/stylesheets/brokers.scss.erb (100%) rename app/{assets => javascript}/stylesheets/brokers_responsive.scss.erb (100%) rename app/{assets => javascript}/stylesheets/custom.scss.erb (98%) rename app/{assets => javascript}/stylesheets/datatable_custom_filter.scss.erb (100%) rename app/{assets => javascript}/stylesheets/devise.css.erb (100%) rename app/{assets => javascript}/stylesheets/dragtable.css (100%) rename app/{assets => javascript}/stylesheets/effective_datatable.scss.erb (100%) rename app/{assets => javascript}/stylesheets/employer.scss.erb (100%) rename app/{assets => javascript}/stylesheets/event_log_tab.scss.erb (100%) rename app/{assets => javascript}/stylesheets/family_relationships.scss.erb (100%) rename app/{assets => javascript}/stylesheets/forms.scss.erb (100%) rename app/{assets => javascript}/stylesheets/globals.scss.erb (100%) create mode 100644 app/javascript/stylesheets/glyphicons.scss.erb rename app/{assets => javascript}/stylesheets/insured.scss.erb (100%) rename app/{assets => javascript}/stylesheets/jquery-steps.css (100%) rename app/{assets => javascript}/stylesheets/jquery-ui/datepicker.css (100%) rename app/{assets => javascript}/stylesheets/jquery-ui/theme.css.erb (100%) rename app/{assets => javascript}/stylesheets/layouts.scss.erb (100%) rename app/{assets => javascript}/stylesheets/left_nav.scss.erb (100%) rename app/{assets => javascript}/stylesheets/main.scss (100%) rename app/{assets => javascript}/stylesheets/modals.scss.erb (100%) rename app/{assets => javascript}/stylesheets/modules.scss.erb (99%) create mode 100644 app/javascript/stylesheets/new.scss rename app/{assets => javascript}/stylesheets/new.scss.erb (100%) create mode 100644 app/javascript/stylesheets/notifier/application.scss.erb create mode 100644 app/javascript/stylesheets/notifier/notifier_styles.css create mode 100644 app/javascript/stylesheets/pdf.scss create mode 100644 app/javascript/stylesheets/plan_review_pdf.scss rename app/{assets => javascript}/stylesheets/responsive.scss.erb (100%) rename app/{assets => javascript}/stylesheets/security_question_modal.scss (100%) rename app/{assets => javascript}/stylesheets/signup.scss.erb (88%) rename app/{assets => javascript}/stylesheets/signup_responsive.scss.erb (100%) create mode 100644 app/javascript/stylesheets/sponsored_benefits/_variables.scss create mode 100644 app/javascript/stylesheets/sponsored_benefits/application.scss create mode 100644 app/javascript/stylesheets/sponsored_benefits/plan_design_proposal.scss create mode 100644 app/javascript/stylesheets/sprites.scss.erb rename app/{assets => javascript}/stylesheets/states.scss.erb (100%) rename app/{assets => javascript}/stylesheets/text_styles.scss.erb (100%) rename app/{assets => javascript}/stylesheets/ui-components/benefit-applications.scss (100%) rename app/{assets => javascript}/stylesheets/ui-components/cards.scss (100%) rename app/{assets => javascript}/stylesheets/ui-components/forms.scss (100%) rename app/{assets => javascript}/stylesheets/ui-components/jquery-ui.scss.erb (98%) rename app/{assets => javascript}/stylesheets/ui-components/mahc-theme.scss (100%) rename app/{assets => javascript}/stylesheets/ui-components/main.scss (100%) rename app/{assets => javascript}/stylesheets/ui-components/plan_filters.scss (100%) rename app/{assets => javascript}/stylesheets/ui-components/sliders.scss (100%) rename app/{assets => javascript}/stylesheets/ui-components/spacing.scss (100%) create mode 100644 app/javascript/stylesheets/ui-components/sprites.scss.erb delete mode 100644 components/benefit_markets/spec/dummy/app/assets/config/manifest.js delete mode 100644 components/benefit_markets/spec/dummy/config/initializers/assets.rb delete mode 100644 components/benefit_sponsors/spec/dummy/app/assets/config/manifest.js delete mode 100644 components/benefit_sponsors/spec/dummy/config/initializers/assets.rb delete mode 100644 components/financial_assistance/config/initializers/assets.rb delete mode 100644 components/notifier/spec/dummy/app/assets/config/manifest.js delete mode 100644 components/notifier/spec/dummy/config/initializers/assets.rb delete mode 100644 components/sponsored_benefits/spec/dummy/app/assets/config/manifest.js delete mode 100644 components/sponsored_benefits/spec/dummy/config/initializers/assets.rb delete mode 100644 components/transport_gateway/spec/dummy/app/assets/config/manifest.js delete mode 100644 components/transport_gateway/spec/dummy/config/initializers/assets.rb delete mode 100644 components/transport_profiles/spec/dummy/app/assets/config/manifest.js delete mode 100644 components/transport_profiles/spec/dummy/config/initializers/assets.rb delete mode 100644 components/ui_helpers/spec/dummy/app/assets/config/manifest.js delete mode 100644 components/ui_helpers/spec/dummy/config/initializers/assets.rb create mode 100644 config/initializers/00_assets_stub.rb delete mode 100644 config/initializers/assets.rb delete mode 100644 config/initializers/non_digest_assets.rb create mode 100644 package-lock.json create mode 100644 project_gems/effective_datatables-2.6.14/app/assets/javascripts/effective_datatables/initialize.js create mode 100644 public/images/icons/add-new-b36b48d01d9e7c4d2c35.svg create mode 100644 public/images/icons/add-new-b36b48d01d9e7c4d2c35.svg.br create mode 100644 public/images/icons/add-new-b36b48d01d9e7c4d2c35.svg.gz create mode 100644 public/images/icons/admin-icon-e1b90d977e520b490e57.svg create mode 100644 public/images/icons/admin-icon-e1b90d977e520b490e57.svg.br create mode 100644 public/images/icons/admin-icon-e1b90d977e520b490e57.svg.gz create mode 100644 public/images/icons/arrow-active-form-4805a9928e4abd99e304.png create mode 100644 public/images/icons/bronze-circle-1609675da427953c7b58.png create mode 100644 public/images/icons/calendar-489217c7e40f9841ff03.svg create mode 100644 public/images/icons/calendar-489217c7e40f9841ff03.svg.br create mode 100644 public/images/icons/calendar-489217c7e40f9841ff03.svg.gz create mode 100644 public/images/icons/cca-icon-exchange-admin-7a8baa611c4a94f83efa.png create mode 100644 public/images/icons/cca-icon-individual-63f136c28cb4acef35ef.png create mode 100644 public/images/icons/cca-life-event-0db1ad003923a655854d.png create mode 100644 public/images/icons/cca-shop_for_plan-b738c76fa04aaeeea304.png create mode 100644 public/images/icons/check-7805d3e3449d50bd398a.svg create mode 100644 public/images/icons/check-7805d3e3449d50bd398a.svg.br create mode 100644 public/images/icons/check-7805d3e3449d50bd398a.svg.gz create mode 100644 public/images/icons/check-with-circle-color-6282e8545436e381815b.svg create mode 100644 public/images/icons/check-with-circle-color-6282e8545436e381815b.svg.br create mode 100644 public/images/icons/check-with-circle-color-6282e8545436e381815b.svg.gz create mode 100644 public/images/icons/check-with-circle-white-0f5944b847c368fca1f8.svg create mode 100644 public/images/icons/check-with-circle-white-0f5944b847c368fca1f8.svg.br create mode 100644 public/images/icons/check-with-circle-white-0f5944b847c368fca1f8.svg.gz create mode 100644 public/images/icons/check_radio_sheet-8672cda1429acee10cc2.png create mode 100644 public/images/icons/checked-35e87998356701f2c758.png create mode 100644 public/images/icons/chevron-down-c6a48259e46088294875.svg create mode 100644 public/images/icons/chevron-down-c6a48259e46088294875.svg.br create mode 100644 public/images/icons/chevron-down-c6a48259e46088294875.svg.gz create mode 100644 public/images/icons/chevron-left-adf04f3f4797ac43beed.svg create mode 100644 public/images/icons/chevron-left-adf04f3f4797ac43beed.svg.br create mode 100644 public/images/icons/chevron-left-adf04f3f4797ac43beed.svg.gz create mode 100644 public/images/icons/chevron-right-fafddddd21de79c86407.svg create mode 100644 public/images/icons/chevron-right-fafddddd21de79c86407.svg.br create mode 100644 public/images/icons/chevron-right-fafddddd21de79c86407.svg.gz create mode 100644 public/images/icons/chevron-up-ac346b010dead627ecf1.svg create mode 100644 public/images/icons/chevron-up-ac346b010dead627ecf1.svg.br create mode 100644 public/images/icons/chevron-up-ac346b010dead627ecf1.svg.gz create mode 100644 public/images/icons/contact-6665eb3cc0867f6fb564.png create mode 100644 public/images/icons/dc-icon-individual-76d047fd4e2afdf8655a.png create mode 100644 public/images/icons/dc-life-event-258482883eeb858b05ec.png create mode 100644 public/images/icons/dc-shop_for_plan-b738c76fa04aaeeea304.png create mode 100644 public/images/icons/delete-04b7f3c679d45cf16e8a.svg create mode 100644 public/images/icons/delete-04b7f3c679d45cf16e8a.svg.br create mode 100644 public/images/icons/delete-04b7f3c679d45cf16e8a.svg.gz create mode 100644 public/images/icons/dismiss-close-8ee69b73dc5c215216c8.svg create mode 100644 public/images/icons/dismiss-close-8ee69b73dc5c215216c8.svg.br create mode 100644 public/images/icons/dismiss-close-8ee69b73dc5c215216c8.svg.gz create mode 100644 public/images/icons/document-pdf-3092746289babb7b381a.svg create mode 100644 public/images/icons/document-pdf-3092746289babb7b381a.svg.br create mode 100644 public/images/icons/document-pdf-3092746289babb7b381a.svg.gz create mode 100644 public/images/icons/edit-20e56ed77ee4c52976dc.svg create mode 100644 public/images/icons/edit-20e56ed77ee4c52976dc.svg.br create mode 100644 public/images/icons/edit-20e56ed77ee4c52976dc.svg.gz create mode 100644 public/images/icons/error-red-af0bef0af8261ddb997a.svg create mode 100644 public/images/icons/error-red-af0bef0af8261ddb997a.svg.br create mode 100644 public/images/icons/error-red-af0bef0af8261ddb997a.svg.gz create mode 100644 public/images/icons/expert-icon-63c117fcdd264bb005a4.svg create mode 100644 public/images/icons/expert-icon-63c117fcdd264bb005a4.svg.br create mode 100644 public/images/icons/expert-icon-63c117fcdd264bb005a4.svg.gz create mode 100644 public/images/icons/eye-off-1ffda78e576e8946bbfc.svg create mode 100644 public/images/icons/eye-off-1ffda78e576e8946bbfc.svg.br create mode 100644 public/images/icons/eye-off-1ffda78e576e8946bbfc.svg.gz create mode 100644 public/images/icons/eye-on-a318d0f5a8727da7fc05.svg create mode 100644 public/images/icons/eye-on-a318d0f5a8727da7fc05.svg.br create mode 100644 public/images/icons/eye-on-a318d0f5a8727da7fc05.svg.gz create mode 100644 public/images/icons/family_members-53543c3758d7d913cd82.png create mode 100644 public/images/icons/find-doctor-944e10dc571dcfd1ee8c.png create mode 100644 public/images/icons/gic-blue-icon-business-owner-d2b0dc79e347461ad12b.png create mode 100644 public/images/icons/gic-blue-icon-employee-90f5c6b39939e5caf190.png create mode 100644 public/images/icons/gic-blue-icon-individual-e5ad5aeb643925c4ada7.png create mode 100644 public/images/icons/gic-blue-life-event-bf38c295cd93466db18a.png create mode 100644 public/images/icons/gic-purple-icon-business-owner-6dcffe019ec457445b60.png create mode 100644 public/images/icons/gic-purple-icon-employee-576a6bd04e5989fd3e25.png create mode 100644 public/images/icons/gic-purple-icon-family-f6dc8d504d3881f567f1.png create mode 100644 public/images/icons/gic-purple-icon-individual-613a0f9a0d0d3603c7cf.png create mode 100644 public/images/icons/gic-purple-life-event-8c34495225fae9275321.png create mode 100644 public/images/icons/gold-circle-1-dec05d418e15cce2726c.png create mode 100644 public/images/icons/gold-circle-2-a0b44caefd16746a4d90.png create mode 100644 public/images/icons/gold-circle-c885d9e2632f67257fdc.png create mode 100644 public/images/icons/health-18a0b9a8e26bfe4b3604.svg create mode 100644 public/images/icons/health-18a0b9a8e26bfe4b3604.svg.br create mode 100644 public/images/icons/health-18a0b9a8e26bfe4b3604.svg.gz create mode 100644 public/images/icons/icon-business-owner-c938d0f1fd8edf5311c8.png create mode 100644 public/images/icons/icon-employee-812f8e8884c107ff4a5e.png create mode 100644 public/images/icons/icon-exchange-admin-af861f7ab385480a95fa.png create mode 100644 public/images/icons/icon-expert-453e46e7e6d9ca989504.png create mode 100644 public/images/icons/icon-family-97f566491f709673f476.png create mode 100644 public/images/icons/info-50cd4642cbab712e7ce1.svg create mode 100644 public/images/icons/info-50cd4642cbab712e7ce1.svg.br create mode 100644 public/images/icons/info-50cd4642cbab712e7ce1.svg.gz create mode 100644 public/images/icons/list-fa315c78b851beaee276.png create mode 100644 public/images/icons/logo_dc-5ee44130e973cf68f03c.svg create mode 100644 public/images/icons/logo_dc-5ee44130e973cf68f03c.svg.br create mode 100644 public/images/icons/logo_dc-5ee44130e973cf68f03c.svg.gz create mode 100644 public/images/icons/mail-7d62449a5590f23ea7c7.png create mode 100644 public/images/icons/mail-read-88f2e20fd04769372a44.svg create mode 100644 public/images/icons/mail-read-88f2e20fd04769372a44.svg.br create mode 100644 public/images/icons/mail-read-88f2e20fd04769372a44.svg.gz create mode 100644 public/images/icons/me-icon-individual-9839dda1b5146ca411ea.png create mode 100644 public/images/icons/me-life-event-67166fa7243cdbe28652.png create mode 100644 public/images/icons/me-shop_for_plan-b738c76fa04aaeeea304.png create mode 100644 public/images/icons/menu-burger-db88b34650e28badeabe.svg create mode 100644 public/images/icons/menu-burger-db88b34650e28badeabe.svg.br create mode 100644 public/images/icons/menu-burger-db88b34650e28badeabe.svg.gz create mode 100644 public/images/icons/message-c089f8545d2e1bae5355.png create mode 100644 public/images/icons/mhc-shop_for_plan-aab615b2d104d9f2de9d.png create mode 100644 public/images/icons/phone-300c42a1a1d6e1a57ef8.svg create mode 100644 public/images/icons/phone-300c42a1a1d6e1a57ef8.svg.br create mode 100644 public/images/icons/phone-300c42a1a1d6e1a57ef8.svg.gz create mode 100644 public/images/icons/phone-d9fec62658cdc6fb8223.png create mode 100644 public/images/icons/platinum-circle-795ba24c0fd4e9a60efa.png create mode 100644 public/images/icons/progress-divider-37e41197468556b97ba5.png create mode 100644 public/images/icons/search-10f608fc5777069417c3.svg create mode 100644 public/images/icons/search-10f608fc5777069417c3.svg.br create mode 100644 public/images/icons/search-10f608fc5777069417c3.svg.gz create mode 100644 public/images/icons/shop_for_plan-aab615b2d104d9f2de9d.png create mode 100644 public/images/icons/silver-circle-72c8d13bcfe09e98c85c.png create mode 100644 public/images/icons/tooltip-85fc1dcac91766995a93.svg create mode 100644 public/images/icons/tooltip-85fc1dcac91766995a93.svg.br create mode 100644 public/images/icons/tooltip-85fc1dcac91766995a93.svg.gz create mode 100644 public/images/icons/translate-fc3a717da046f3510c34.svg create mode 100644 public/images/icons/translate-fc3a717da046f3510c34.svg.br create mode 100644 public/images/icons/translate-fc3a717da046f3510c34.svg.gz create mode 100644 public/images/icons/un-check-6b5702f77767e943fb5c.png create mode 100644 public/images/icons/undo-e37350aeff0180b140e9.svg create mode 100644 public/images/icons/undo-e37350aeff0180b140e9.svg.br create mode 100644 public/images/icons/undo-e37350aeff0180b140e9.svg.gz create mode 100644 public/images/icons/user-small-b9a17a62c4cc4dfd30e4.svg create mode 100644 public/images/icons/user-small-b9a17a62c4cc4dfd30e4.svg.br create mode 100644 public/images/icons/user-small-b9a17a62c4cc4dfd30e4.svg.gz create mode 100644 public/images/icons/warning-1-48a4637b45e148dba704.svg create mode 100644 public/images/icons/warning-1-48a4637b45e148dba704.svg.br create mode 100644 public/images/icons/warning-1-48a4637b45e148dba704.svg.gz create mode 100644 public/images/icons/warning-error-red-fb3935407d6f0174c1a6.svg create mode 100644 public/images/icons/warning-error-red-fb3935407d6f0174c1a6.svg.br create mode 100644 public/images/icons/warning-error-red-fb3935407d6f0174c1a6.svg.gz create mode 100644 public/images/icons/warning-error-white-64065c5e5d6e94ea2cac.svg create mode 100644 public/images/icons/warning-error-white-64065c5e5d6e94ea2cac.svg.br create mode 100644 public/images/icons/warning-error-white-64065c5e5d6e94ea2cac.svg.gz diff --git a/Gemfile b/Gemfile index e5cf7fe45aa..aeb4f18e6af 100644 --- a/Gemfile +++ b/Gemfile @@ -87,7 +87,7 @@ gem 'net-ssh', '= 4.2.0' gem 'net-imap', '>= 0.4.20' gem 'nokogiri', '~> 1.18.8' gem 'nokogiri-happymapper', '~> 0.8.0', :require => 'happymapper' -gem 'non-stupid-digest-assets' + gem 'observer' gem 'pundit', '~> 2.5' gem 'rack', '~> 3.2', '>= 3.2.5' @@ -102,7 +102,6 @@ gem 'roo', '~> 2.10' gem 'rubyzip', '>= 1.3.0' gem 'ruby-saml', '~> 1.18.1' gem 'sassc', '~> 2.0' -gem 'sass-rails', '~> 6.0' gem 'slim', '~> 5.2' gem 'slim-rails', '~> 4.0' gem 'symmetric-encryption', '~> 4.6.0' diff --git a/Gemfile.lock b/Gemfile.lock index 455ef737bea..9dacd6eef5f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: https://github.com/ideacrew/aca_entities.git - revision: 5db1c3417d2b5e9d55ad93572f8142b386591006 + revision: 34591c64812446385fb4499950c9af324fc3f81a branch: trunk specs: aca_entities (0.10.0) @@ -383,336 +383,339 @@ GEM amq-protocol (2.5.1) ast (2.4.3) aws-eventstream (1.4.0) - aws-partitions (1.1220.0) + aws-partitions (1.1229.0) aws-sdk (3.3.0) aws-sdk-resources (~> 3) - aws-sdk-accessanalyzer (1.85.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-accessanalyzer (1.86.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-account (1.55.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-account (1.56.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-acm (1.100.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-acm (1.101.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-acmpca (1.107.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-acmpca (1.108.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-aiops (1.13.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-aiops (1.14.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-amplify (1.98.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-amplify (1.99.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-amplifybackend (1.60.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-amplifybackend (1.61.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-amplifyuibuilder (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-amplifyuibuilder (1.55.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-apigateway (1.131.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-apigateway (1.133.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-apigatewaymanagementapi (1.72.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-apigatewaymanagementapi (1.73.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-apigatewayv2 (1.90.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-apigatewayv2 (1.91.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-appconfig (1.77.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appconfig (1.78.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-appconfigdata (1.49.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appconfigdata (1.50.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-appfabric (1.38.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appfabric (1.39.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-appflow (1.87.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appflow (1.88.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-appintegrationsservice (1.64.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appintegrationsservice (1.66.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-applicationautoscaling (1.118.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-applicationautoscaling (1.119.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-applicationcostprofiler (1.52.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-applicationcostprofiler (1.53.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-applicationdiscoveryservice (1.98.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-applicationdiscoveryservice (1.99.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-applicationinsights (1.76.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-applicationinsights (1.77.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-applicationsignals (1.36.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-applicationsignals (1.37.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-appmesh (1.89.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appmesh (1.90.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-appregistry (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appregistry (1.63.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-apprunner (1.69.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-apprunner (1.70.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-appstream (1.128.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appstream (1.129.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-appsync (1.119.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-appsync (1.120.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-arcregionswitch (1.13.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-arcregionswitch (1.14.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-arczonalshift (1.45.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-arczonalshift (1.46.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-artifact (1.34.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-artifact (1.35.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-athena (1.117.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-athena (1.118.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-auditmanager (1.79.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-auditmanager (1.80.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-augmentedairuntime (1.66.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-augmentedairuntime (1.67.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-autoscaling (1.154.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-autoscaling (1.155.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-autoscalingplans (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-autoscalingplans (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-b2bi (1.44.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-b2bi (1.45.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-backup (1.107.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-backup (1.109.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-backupgateway (1.49.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-backupgateway (1.50.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-backupsearch (1.18.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-backupsearch (1.19.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-batch (1.136.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-batch (1.139.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bcmdashboards (1.8.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bcmdashboards (1.9.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bcmdataexports (1.31.0) - aws-sdk-core (~> 3, >= 3.241.4) - aws-sigv4 (~> 1.1) - aws-sdk-bcmpricingcalculator (1.24.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bcmdataexports (1.33.0) + aws-sdk-core (~> 3, >= 3.244.0) + aws-sigv4 (~> 1.5) + aws-sdk-bcmpricingcalculator (1.25.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bcmrecommendedactions (1.8.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bcmrecommendedactions (1.9.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bedrock (1.76.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bedrock (1.79.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bedrockagent (1.72.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bedrockagent (1.73.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bedrockagentcore (1.19.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bedrockagentcore (1.22.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bedrockagentcorecontrol (1.24.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bedrockagentcorecontrol (1.32.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bedrockagentruntime (1.71.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bedrockagentruntime (1.72.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bedrockdataautomation (1.26.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bedrockdataautomation (1.27.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bedrockdataautomationruntime (1.22.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bedrockdataautomationruntime (1.23.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-bedrockruntime (1.73.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-bedrockruntime (1.74.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-billing (1.22.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-billing (1.23.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-billingconductor (1.53.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-billingconductor (1.54.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-braket (1.67.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-braket (1.68.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-budgets (1.104.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-budgets (1.105.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-chatbot (1.36.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-chatbot (1.37.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-chime (1.114.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-chime (1.115.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-chimesdkidentity (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-chimesdkidentity (1.55.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-chimesdkmediapipelines (1.51.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-chimesdkmediapipelines (1.52.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-chimesdkmeetings (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-chimesdkmeetings (1.63.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-chimesdkmessaging (1.61.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-chimesdkmessaging (1.62.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-chimesdkvoice (1.53.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-chimesdkvoice (1.54.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cleanrooms (1.68.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cleanrooms (1.69.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cleanroomsml (1.42.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cleanroomsml (1.43.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloud9 (1.99.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloud9 (1.100.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudcontrolapi (1.51.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudcontrolapi (1.52.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-clouddirectory (1.86.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-clouddirectory (1.87.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudformation (1.149.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudformation (1.150.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudfront (1.141.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudfront (1.142.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudfrontkeyvaluestore (1.33.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudfrontkeyvaluestore (1.34.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudhsm (1.82.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudhsm (1.83.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudhsmv2 (1.88.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudhsmv2 (1.89.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudsearch (1.86.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudsearch (1.87.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudsearchdomain (1.69.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudsearchdomain (1.70.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudtrail (1.119.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudtrail (1.120.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudtraildata (1.40.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudtraildata (1.41.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudwatch (1.131.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudwatch (1.132.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudwatchevents (1.102.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudwatchevents (1.103.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudwatchlogs (1.138.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudwatchlogs (1.140.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cloudwatchrum (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cloudwatchrum (1.55.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codeartifact (1.73.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codeartifact (1.74.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codebuild (1.170.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codebuild (1.171.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codecatalyst (1.46.0) - aws-sdk-core (~> 3, >= 3.241.4) - aws-sdk-codecommit (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codecatalyst (1.47.0) + aws-sdk-core (~> 3, >= 3.244.0) + aws-sdk-codecommit (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codeconnections (1.32.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codeconnections (1.33.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codedeploy (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codedeploy (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codeguruprofiler (1.66.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codeguruprofiler (1.67.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-codegurureviewer (1.77.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codegurureviewer (1.78.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codegurusecurity (1.41.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codegurusecurity (1.42.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codepipeline (1.112.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codepipeline (1.113.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codestarconnections (1.71.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codestarconnections (1.72.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-codestarnotifications (1.63.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-codestarnotifications (1.64.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cognitoidentity (1.85.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cognitoidentity (1.86.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cognitoidentityprovider (1.137.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cognitoidentityprovider (1.138.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-cognitosync (1.79.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-cognitosync (1.80.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-comprehend (1.112.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-comprehend (1.113.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-comprehendmedical (1.80.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-comprehendmedical (1.81.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-computeoptimizer (1.90.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-computeoptimizer (1.91.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-computeoptimizerautomation (1.3.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-computeoptimizerautomation (1.4.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-configservice (1.146.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-configservice (1.148.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-connect (1.244.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-connect (1.248.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-connectcampaignservice (1.45.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-connectcampaignservice (1.46.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-connectcampaignsv2 (1.22.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-connectcampaignsv2 (1.23.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-connectcases (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-connectcases (1.65.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-connectcontactlens (1.55.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-connectcontactlens (1.56.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-connectparticipant (1.77.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-connecthealth (1.1.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-connectwisdomservice (1.59.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-connectparticipant (1.78.0) + aws-sdk-core (~> 3, >= 3.244.0) + aws-sigv4 (~> 1.5) + aws-sdk-connectwisdomservice (1.60.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-controlcatalog (1.38.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-controlcatalog (1.39.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-controltower (1.56.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-controltower (1.57.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-core (3.242.0) + aws-sdk-core (3.244.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -720,661 +723,661 @@ GEM bigdecimal jmespath (~> 1, >= 1.6.1) logger - aws-sdk-costandusagereportservice (1.85.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-costandusagereportservice (1.86.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-costexplorer (1.147.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-costexplorer (1.148.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-costoptimizationhub (1.40.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-costoptimizationhub (1.41.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-customerprofiles (1.80.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-customerprofiles (1.82.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-databasemigrationservice (1.139.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-databasemigrationservice (1.141.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-dataexchange (1.80.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-dataexchange (1.81.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-datapipeline (1.79.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-datapipeline (1.80.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-datasync (1.119.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-datasync (1.121.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-datazone (1.68.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-datazone (1.70.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-dax (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-dax (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-deadline (1.45.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-deadline (1.47.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-detective (1.79.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-detective (1.80.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-devicefarm (1.102.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-devicefarm (1.103.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-devopsguru (1.71.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-devopsguru (1.72.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-directconnect (1.105.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-directconnect (1.106.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-directoryservice (1.100.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-directoryservice (1.101.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-directoryservicedata (1.22.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-directoryservicedata (1.23.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-dlm (1.99.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-dlm (1.100.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-docdb (1.101.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-docdb (1.102.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-docdbelastic (1.43.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-docdbelastic (1.44.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-drs (1.59.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-drs (1.60.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-dsql (1.25.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-dsql (1.26.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-dynamodb (1.163.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-dynamodb (1.165.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-dynamodbstreams (1.89.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-dynamodbstreams (1.90.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ebs (1.70.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ebs (1.71.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ec2 (1.606.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ec2 (1.609.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ec2instanceconnect (1.69.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ec2instanceconnect (1.70.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ecr (1.122.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ecr (1.124.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ecrpublic (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ecrpublic (1.63.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ecs (1.222.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ecs (1.224.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-efs (1.107.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-efs (1.108.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-eks (1.160.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-eks (1.162.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-eksauth (1.31.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-eksauth (1.32.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticache (1.139.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-elasticache (1.140.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-elasticbeanstalk (1.99.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-elasticbeanstalk (1.101.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-elasticloadbalancing (1.86.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-elasticloadbalancing (1.87.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-elasticloadbalancingv2 (1.148.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-elasticloadbalancingv2 (1.149.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-elasticsearchservice (1.115.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-elasticsearchservice (1.117.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-elementalinference (1.0.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-elementalinference (1.1.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-emr (1.125.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-emr (1.127.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-emrcontainers (1.67.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-emrcontainers (1.68.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-emrserverless (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-emrserverless (1.63.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-entityresolution (1.44.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-entityresolution (1.45.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-eventbridge (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-eventbridge (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-evs (1.13.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-evs (1.14.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-finspace (1.64.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-finspace (1.65.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-finspacedata (1.63.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-finspacedata (1.64.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-firehose (1.105.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-firehose (1.106.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-fis (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-fis (1.63.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-fms (1.104.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-fms (1.105.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-forecastqueryservice (1.66.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-forecastqueryservice (1.67.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-forecastservice (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-forecastservice (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-frauddetector (1.82.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-frauddetector (1.83.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-freetier (1.33.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-freetier (1.34.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-fsx (1.132.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-fsx (1.133.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-gamelift (1.119.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-gamelift (1.122.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-gameliftstreams (1.21.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-gameliftstreams (1.24.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-geomaps (1.21.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-geomaps (1.22.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-geoplaces (1.20.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-geoplaces (1.21.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-georoutes (1.18.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-georoutes (1.19.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-glacier (1.90.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-glacier (1.91.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-globalaccelerator (1.89.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-globalaccelerator (1.90.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-glue (1.249.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-glue (1.252.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-gluedatabrew (1.66.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-gluedatabrew (1.67.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-greengrass (1.92.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-greengrass (1.93.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-greengrassv2 (1.68.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-greengrassv2 (1.69.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-groundstation (1.80.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-groundstation (1.81.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-guardduty (1.143.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-guardduty (1.145.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-health (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-health (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-healthlake (1.60.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-healthlake (1.61.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iam (1.140.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iam (1.142.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-identitystore (1.66.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-identitystore (1.67.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-imagebuilder (1.98.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-imagebuilder (1.99.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-importexport (1.70.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-importexport (1.71.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv2 (~> 1.0) - aws-sdk-inspector (1.87.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-inspector (1.88.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-inspector2 (1.69.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-inspector2 (1.70.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-inspectorscan (1.34.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-inspectorscan (1.35.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-internetmonitor (1.49.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-internetmonitor (1.50.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-invoicing (1.20.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-invoicing (1.21.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iot (1.163.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iot (1.164.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotdataplane (1.88.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotdataplane (1.89.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotdeviceadvisor (1.61.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotdeviceadvisor (1.62.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotevents (1.78.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotevents (1.79.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ioteventsdata (1.71.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ioteventsdata (1.72.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotfleetwise (1.60.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotfleetwise (1.61.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotjobsdataplane (1.79.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotjobsdataplane (1.80.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotmanagedintegrations (1.18.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotmanagedintegrations (1.19.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotsecuretunneling (1.64.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotsecuretunneling (1.65.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotsitewise (1.100.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotsitewise (1.101.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iotthingsgraph (1.67.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotthingsgraph (1.68.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-iottwinmaker (1.52.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iottwinmaker (1.53.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-iotwireless (1.82.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-iotwireless (1.83.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ivs (1.81.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ivs (1.82.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ivschat (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ivschat (1.55.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ivsrealtime (1.58.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ivsrealtime (1.60.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kafka (1.106.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kafka (1.108.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kafkaconnect (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kafkaconnect (1.55.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kendra (1.111.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kendra (1.112.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kendraranking (1.42.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kendraranking (1.43.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-keyspaces (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-keyspaces (1.55.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-keyspacesstreams (1.13.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-keyspacesstreams (1.14.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kinesis (1.97.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kinesis (1.98.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kinesisanalytics (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kinesisanalytics (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kinesisanalyticsv2 (1.87.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kinesisanalyticsv2 (1.88.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kinesisvideo (1.91.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kinesisvideo (1.92.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kinesisvideoarchivedmedia (1.88.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kinesisvideoarchivedmedia (1.89.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kinesisvideomedia (1.80.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kinesisvideomedia (1.81.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kinesisvideosignalingchannels (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kinesisvideosignalingchannels (1.63.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-kinesisvideowebrtcstorage (1.43.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kinesisvideowebrtcstorage (1.44.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-kms (1.122.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-kms (1.123.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-lakeformation (1.86.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-lakeformation (1.87.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-lambda (1.175.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-lambda (1.176.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-launchwizard (1.34.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-launchwizard (1.35.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-lex (1.90.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-lex (1.91.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-lexmodelbuildingservice (1.101.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-lexmodelbuildingservice (1.102.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-lexmodelsv2 (1.87.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-lexmodelsv2 (1.89.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-lexruntimev2 (1.65.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-lexruntimev2 (1.66.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-licensemanager (1.87.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-licensemanager (1.88.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-licensemanagerlinuxsubscriptions (1.41.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-licensemanagerlinuxsubscriptions (1.42.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-licensemanagerusersubscriptions (1.47.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-licensemanagerusersubscriptions (1.48.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-lightsail (1.124.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-lightsail (1.126.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-locationservice (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-locationservice (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-lookoutequipment (1.61.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-lookoutequipment (1.62.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-machinelearning (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-machinelearning (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-macie2 (1.98.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-macie2 (1.99.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mailmanager (1.39.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mailmanager (1.40.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mainframemodernization (1.48.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mainframemodernization (1.49.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-managedblockchain (1.82.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-managedblockchain (1.83.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-managedblockchainquery (1.40.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-managedblockchainquery (1.41.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-managedgrafana (1.59.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-managedgrafana (1.60.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-marketplaceagreement (1.32.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-marketplaceagreement (1.33.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-marketplacecatalog (1.75.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-marketplacecatalog (1.76.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-marketplacecommerceanalytics (1.86.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-marketplacecommerceanalytics (1.87.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-marketplacedeployment (1.32.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-marketplacedeployment (1.33.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-marketplaceentitlementservice (1.84.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-marketplaceentitlementservice (1.85.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-marketplacemetering (1.93.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-marketplacemetering (1.94.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-marketplacereporting (1.19.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-marketplacereporting (1.20.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mediaconnect (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mediaconnect (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mediaconvert (1.179.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mediaconvert (1.181.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-medialive (1.179.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-medialive (1.181.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mediapackage (1.100.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mediapackage (1.101.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mediapackagev2 (1.58.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mediapackagev2 (1.60.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mediapackagevod (1.82.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mediapackagevod (1.83.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mediastore (1.84.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mediastore (1.85.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mediastoredata (1.81.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mediastoredata (1.82.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mediatailor (1.115.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mediatailor (1.116.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-medicalimaging (1.42.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-medicalimaging (1.43.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-memorydb (1.59.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-memorydb (1.60.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mgn (1.61.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mgn (1.64.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-migrationhub (1.84.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-migrationhub (1.85.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-migrationhubconfig (1.64.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-migrationhubconfig (1.65.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-migrationhuborchestrator (1.43.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-migrationhuborchestrator (1.44.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-migrationhubrefactorspaces (1.52.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-migrationhubrefactorspaces (1.53.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-migrationhubstrategyrecommendations (1.50.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-migrationhubstrategyrecommendations (1.51.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-mpa (1.12.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mpa (1.14.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mq (1.92.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mq (1.93.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mturk (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mturk (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mwaa (1.70.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mwaa (1.71.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-mwaaserverless (1.4.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-mwaaserverless (1.5.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-neptune (1.100.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-neptune (1.101.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-neptunedata (1.39.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-neptunedata (1.40.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-neptunegraph (1.46.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-neptunegraph (1.47.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-networkfirewall (1.85.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-networkfirewall (1.86.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-networkflowmonitor (1.22.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-networkflowmonitor (1.23.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-networkmanager (1.77.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-networkmanager (1.78.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-networkmonitor (1.32.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-networkmonitor (1.33.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-notifications (1.19.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-notifications (1.20.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-notificationscontacts (1.17.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-notificationscontacts (1.18.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-novaact (1.3.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-novaact (1.4.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-oam (1.46.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-oam (1.47.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-observabilityadmin (1.21.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-observabilityadmin (1.23.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-odb (1.15.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-odb (1.16.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-omics (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-omics (1.64.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-opensearchserverless (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-opensearchserverless (1.56.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-opensearchservice (1.87.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-opensearchservice (1.91.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-organizations (1.135.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-organizations (1.136.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-osis (1.46.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-osis (1.47.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-outposts (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-outposts (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-panorama (1.53.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-panorama (1.54.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-partnercentralaccount (1.4.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-partnercentralaccount (1.5.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-partnercentralbenefits (1.3.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-partnercentralbenefits (1.4.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-partnercentralchannel (1.4.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-partnercentralchannel (1.6.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-partnercentralselling (1.27.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-partnercentralselling (1.28.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-paymentcryptography (1.51.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-paymentcryptography (1.52.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-paymentcryptographydata (1.48.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-paymentcryptographydata (1.49.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pcaconnectorad (1.35.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pcaconnectorad (1.36.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pcaconnectorscep (1.28.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pcaconnectorscep (1.29.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pcs (1.41.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pcs (1.43.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-personalize (1.95.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-personalize (1.96.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-personalizeevents (1.73.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-personalizeevents (1.74.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-personalizeruntime (1.80.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-personalizeruntime (1.81.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pi (1.91.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pi (1.92.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pinpoint (1.119.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pinpoint (1.120.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pinpointemail (1.78.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pinpointemail (1.79.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pinpointsmsvoice (1.74.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pinpointsmsvoice (1.75.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pinpointsmsvoicev2 (1.52.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pinpointsmsvoicev2 (1.53.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pipes (1.50.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pipes (1.51.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-polly (1.119.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-polly (1.122.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-pricing (1.89.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-pricing (1.90.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-prometheusservice (1.68.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-prometheusservice (1.69.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-proton (1.66.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-proton (1.67.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-qapps (1.29.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-qapps (1.30.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-qbusiness (1.55.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-qbusiness (1.56.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-qconnect (1.50.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-qconnect (1.51.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-quicksight (1.173.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-quicksight (1.176.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ram (1.85.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ram (1.86.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-rds (1.308.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-rds (1.310.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-rdsdataservice (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-rdsdataservice (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-recyclebin (1.51.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-recyclebin (1.52.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-redshift (1.156.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-redshift (1.157.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-redshiftdataapiservice (1.69.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-redshiftdataapiservice (1.70.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-redshiftserverless (1.64.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-redshiftserverless (1.65.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-rekognition (1.128.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-rekognition (1.129.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-repostspace (1.34.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-repostspace (1.35.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-resiliencehub (1.62.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-resiliencehub (1.63.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-resourceexplorer2 (1.47.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-resourceexplorer2 (1.48.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-resourcegroups (1.94.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-resourcegroups (1.95.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-resourcegroupstaggingapi (1.92.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-resourcegroupstaggingapi (1.93.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-resources (3.254.0) + aws-sdk-resources (3.256.0) aws-sdk-accessanalyzer (~> 1) aws-sdk-account (~> 1) aws-sdk-acm (~> 1) @@ -1480,6 +1483,7 @@ GEM aws-sdk-connectcampaignsv2 (~> 1) aws-sdk-connectcases (~> 1) aws-sdk-connectcontactlens (~> 1) + aws-sdk-connecthealth (~> 1) aws-sdk-connectparticipant (~> 1) aws-sdk-connectwisdomservice (~> 1) aws-sdk-controlcatalog (~> 1) @@ -1741,6 +1745,7 @@ GEM aws-sdk-signer (~> 1) aws-sdk-signerdata (~> 1) aws-sdk-simpledb (~> 1) + aws-sdk-simpledbv2 (~> 1) aws-sdk-simspaceweaver (~> 1) aws-sdk-snowball (~> 1) aws-sdk-snowdevicemanagement (~> 1) @@ -1788,264 +1793,267 @@ GEM aws-sdk-workspacesthinclient (~> 1) aws-sdk-workspacesweb (~> 1) aws-sdk-xray (~> 1) - aws-sdk-rolesanywhere (1.48.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-rolesanywhere (1.49.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-route53 (1.131.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-route53 (1.132.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-route53domains (1.91.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-route53domains (1.92.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-route53globalresolver (1.3.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-route53globalresolver (1.5.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-route53profiles (1.31.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-route53profiles (1.32.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-route53recoverycluster (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-route53recoverycluster (1.55.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-route53recoverycontrolconfig (1.55.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-route53recoverycontrolconfig (1.56.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-route53recoveryreadiness (1.52.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-route53recoveryreadiness (1.53.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-route53resolver (1.94.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-route53resolver (1.95.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-rtbfabric (1.7.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-rtbfabric (1.8.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.213.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-s3 (1.217.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sdk-s3control (1.126.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-s3control (1.127.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-s3outposts (1.59.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-s3outposts (1.60.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-s3tables (1.26.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-s3tables (1.27.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-s3vectors (1.13.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-s3vectors (1.14.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-sagemaker (1.351.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sagemaker (1.355.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-sagemakeredgemanager (1.55.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sagemakeredgemanager (1.56.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-sagemakerfeaturestoreruntime (1.60.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sagemakerfeaturestoreruntime (1.61.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-sagemakergeospatial (1.42.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sagemakergeospatial (1.43.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-sagemakermetrics (1.44.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sagemakermetrics (1.45.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-sagemakerruntime (1.95.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sagemakerruntime (1.96.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-sagemakerruntimehttp2 (1.3.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sagemakerruntimehttp2 (1.4.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-savingsplans (1.73.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-savingsplans (1.75.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-scheduler (1.43.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-scheduler (1.44.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-schemas (1.65.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-schemas (1.66.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-secretsmanager (1.128.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-secretsmanager (1.129.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-securityhub (1.152.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-securityhub (1.153.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-securityir (1.20.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-securityir (1.21.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-securitylake (1.51.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-securitylake (1.52.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-serverlessapplicationrepository (1.88.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-serverlessapplicationrepository (1.89.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-servicecatalog (1.126.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-servicecatalog (1.127.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-servicediscovery (1.97.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-servicediscovery (1.98.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-servicequotas (1.69.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-servicequotas (1.70.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ses (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ses (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-sesv2 (1.95.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sesv2 (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-shield (1.93.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-shield (1.94.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-signer (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-signer (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-signerdata (1.0.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-signerdata (1.1.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-simpledb (1.74.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-simpledb (1.75.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv2 (~> 1.0) - aws-sdk-simspaceweaver (1.44.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-simpledbv2 (1.1.0) + aws-sdk-core (~> 3, >= 3.244.0) + aws-sigv4 (~> 1.5) + aws-sdk-simspaceweaver (1.45.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-snowball (1.98.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-snowball (1.99.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-snowdevicemanagement (1.49.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-snowdevicemanagement (1.50.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-sns (1.112.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sns (1.113.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-socialmessaging (1.21.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-socialmessaging (1.22.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-sqs (1.111.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-sqs (1.112.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ssm (1.211.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ssm (1.212.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ssmcontacts (1.58.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ssmcontacts (1.59.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ssmguiconnect (1.14.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ssmguiconnect (1.15.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ssmincidents (1.63.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ssmincidents (1.64.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-ssmquicksetup (1.26.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ssmquicksetup (1.27.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ssmsap (1.50.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ssmsap (1.51.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-ssoadmin (1.69.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-ssoadmin (1.70.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-states (1.104.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-states (1.105.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-storagegateway (1.123.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-storagegateway (1.124.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-supplychain (1.37.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-supplychain (1.38.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-support (1.88.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-support (1.89.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-supportapp (1.44.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-supportapp (1.45.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-swf (1.83.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-swf (1.84.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-synthetics (1.80.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-synthetics (1.81.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-taxsettings (1.36.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-taxsettings (1.37.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-textract (1.89.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-textract (1.90.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-timestreaminfluxdb (1.38.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-timestreaminfluxdb (1.39.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-timestreamquery (1.65.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-timestreamquery (1.66.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-timestreamwrite (1.60.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-timestreamwrite (1.61.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-tnb (1.41.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-tnb (1.42.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-transcribeservice (1.136.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-transcribeservice (1.137.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-transcribestreamingservice (1.98.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-transcribestreamingservice (1.99.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-transfer (1.133.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-transfer (1.134.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-translate (1.94.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-translate (1.95.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-trustedadvisor (1.34.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-trustedadvisor (1.35.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-verifiedpermissions (1.61.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-verifiedpermissions (1.63.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-voiceid (1.54.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-voiceid (1.55.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.1) - aws-sdk-vpclattice (1.44.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-vpclattice (1.45.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-waf (1.90.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-waf (1.91.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-wafregional (1.91.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-wafregional (1.92.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-wafv2 (1.126.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-wafv2 (1.127.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-wellarchitected (1.65.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-wellarchitected (1.66.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-wickr (1.4.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-wickr (1.5.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-workdocs (1.86.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-workdocs (1.87.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-workmail (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-workmail (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-workmailmessageflow (1.64.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-workmailmessageflow (1.65.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-workspaces (1.153.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-workspaces (1.155.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-workspacesinstances (1.12.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-workspacesinstances (1.13.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-workspacesthinclient (1.41.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-workspacesthinclient (1.42.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-workspacesweb (1.59.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-workspacesweb (1.60.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-xray (1.96.0) - aws-sdk-core (~> 3, >= 3.241.4) + aws-sdk-xray (1.97.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) aws-sigv2 (1.3.1) aws-sigv4 (1.12.1) @@ -2064,7 +2072,7 @@ GEM ice_nine (~> 0.11.0) thread_safe (~> 0.3, >= 0.3.1) base64 (0.3.0) - bcrypt (3.1.21) + bcrypt (3.1.22) benchmark (0.5.0) benchmark-malloc (0.2.0) benchmark-perf (0.6.0) @@ -2153,7 +2161,7 @@ GEM cucumber-html-formatter (22.3.0) cucumber-messages (> 23, < 33) cucumber-messages (32.2.0) - cucumber-rails (4.0.0) + cucumber-rails (4.0.1) capybara (>= 3.25, < 4) cucumber (>= 7, < 11) railties (>= 6.1, < 9) @@ -2235,8 +2243,8 @@ GEM dry-schema (~> 1.8, >= 1.8.0) dumb_delegator (1.1.0) easy_diff (1.0.0) - email_spec (2.3.0) - htmlentities (~> 4.3.3) + email_spec (2.3.1) + htmlentities (~> 4.3) launchy (>= 2.1, < 4.0) mail (~> 2.7) equalizer (0.0.11) @@ -2297,7 +2305,7 @@ GEM highline (3.1.2) reline holidays (8.8.0) - htmlentities (4.3.4) + htmlentities (4.4.2) httparty (0.24.2) csv mini_mime (>= 1.0.0) @@ -2340,7 +2348,7 @@ GEM jquery-ui-rails (8.0.0) railties (>= 3.2.16) json (2.19.2) - json-schema (6.1.0) + json-schema (6.2.0) addressable (~> 2.8) bigdecimal (>= 3.1, < 5) jsonapi-renderer (0.2.2) @@ -2392,14 +2400,12 @@ GEM marcel (1.1.0) maskedinput-rails (1.4.1.0) matrix (0.4.3) - mcp (0.8.0) - json-schema (>= 4.1) memoist3 (1.0.0) method_source (1.1.0) mime-types (3.7.0) logger mime-types-data (~> 3.2025, >= 3.2025.0507) - mime-types-data (3.2026.0224) + mime-types-data (3.2026.0317) mini_mime (1.1.5) minitest (6.0.2) drb (~> 2.0) @@ -2486,7 +2492,7 @@ GEM non-stupid-digest-assets (1.0.11) sprockets (>= 2.0) observer (0.1.2) - oj (3.16.15) + oj (3.16.16) bigdecimal (>= 3.0) ostruct (>= 0.2) orm_adapter (0.5.0) @@ -2511,7 +2517,7 @@ GEM hashery (~> 2.0) ruby-rc4 ttfunk - phonelib (0.10.16) + phonelib (0.10.17) pp (0.6.3) prettyprint prawn (2.4.0) @@ -2653,22 +2659,21 @@ GEM rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (8.0.3) + rspec-rails (8.0.4) actionpack (>= 7.2) activesupport (>= 7.2) railties (>= 7.2) - rspec-core (~> 3.13) - rspec-expectations (~> 3.13) - rspec-mocks (~> 3.13) - rspec-support (~> 3.13) + rspec-core (>= 3.13.0, < 5.0.0) + rspec-expectations (>= 3.13.0, < 5.0.0) + rspec-mocks (>= 3.13.0, < 5.0.0) + rspec-support (>= 3.13.0, < 5.0.0) rspec-support (3.13.7) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.85.0) + rubocop (1.86.0) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) - mcp (~> 0.6) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) @@ -2676,7 +2681,7 @@ GEM rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.49.0) + rubocop-ast (1.49.1) parser (>= 3.3.7.2) prism (~> 1.7) rubocop-git (0.1.3) @@ -2716,8 +2721,7 @@ GEM semantic_range (3.1.1) serverengine (2.0.7) sigdump (~> 0.2.2) - set (1.1.2) - shakapacker (9.5.0) + shakapacker (9.7.0) activesupport (>= 5.2) package_json rack-proxy (>= 0.6.1) @@ -2764,9 +2768,8 @@ GEM rake serverengine (~> 2.0.5) thor - sorted_set (1.0.3) + sorted_set (1.1.0) rbtree - set (~> 1.0) sprockets (4.2.2) concurrent-ruby (~> 1.0) logger @@ -2786,18 +2789,18 @@ GEM stringio (3.2.0) symmetric-encryption (4.6.0) coercible (~> 1.0) - sys-uname (1.5.0) + sys-uname (1.5.1) ffi (~> 1.1) memoist3 (~> 1.0.0) temple (0.10.4) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) - test-prof (1.5.2) + test-prof (1.6.0) thor (1.5.0) thread-local (1.1.0) thread_safe (0.3.6) tilt (2.7.0) - timeout (0.6.0) + timeout (0.6.1) tsort (0.2.0) ttfunk (1.7.0) turbolinks (5.2.1) @@ -2841,7 +2844,7 @@ GEM nokogiri (~> 1.6) rubyzip (>= 1.3.0) selenium-webdriver (~> 4.0, < 4.11) - webmock (3.26.1) + webmock (3.26.2) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -2948,7 +2951,6 @@ DEPENDENCIES newrelic_rpm (~> 9.6) nokogiri (~> 1.18.8) nokogiri-happymapper (~> 0.8.0) - non-stupid-digest-assets notifier! observer openhbx_cv2! @@ -2984,7 +2986,6 @@ DEPENDENCIES ruby-progressbar (~> 1) ruby-saml (~> 1.18.1) rubyzip (>= 1.3.0) - sass-rails (~> 6.0) sassc (~> 2.0) sdoc (~> 1.0) shakapacker (~> 9.5) diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js index 68d4d725e53..7d52bcf3562 100644 --- a/app/assets/config/manifest.js +++ b/app/assets/config/manifest.js @@ -1,4 +1,3 @@ -// = link_tree ../images -// = link_tree ../../javascript/images -// = link sponsored_benefits/application.js -// = link sponsored_benefits/application.css \ No newline at end of file +//= link_tree ../images +//= link_directory ../stylesheets .css +//= link_directory ../javascripts .js diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png deleted file mode 100644 index 4782cb56ef494f11e23168447f1c85fdbde74b2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3967 zcmbVPS6EZ&+6|#8)dJE4V?Y5ZAt4DRQbUj`NB|=sEr}rn5=cUqE-KZE2+~!$f&wZX zML{D9Qp|vK1q76$1d$?tm>K6k7xSEpv!A{9SN2-#E#LcI>_q$H$3%r>g#ZA6sHKIO z19vRvK59DzxNkvR=u_?>!^Gg2SlSt8h!>p*Fd@*qi6BdVFA~v#=tT$%d__D80PqsX zjyNXH)n053d+$OL&4No1-4c%h*M3?dT@z$X#5TDAdb zq7T_3oKD1sA9uuuQ}B8Ou#q9?XsA9{z@NzU0)_hfQ5pK72H-z+^||xyZ3r0jCxl5c z0RQC_&ek4;rqPKYgr>FzUJD8ZA(5I;I0A`;s)Jx!P#8pudm}ZVaD4<)AEpEP`vP;V z(Ftet9n8%Cw#8i;fPI+E0DTA~BqT&LL|c92>t=Kw*LrI8Gk2=n=(kKR{#X6sRi-(-;V1~ zG=u3t{C_w870qxA3m`%qhzwc~9nU?FGm5{-+}!EH~MyTGWSrt{LERL)mqc}a3~z6t)mV7&9$U5m|j#o@wZ(v*Y00jr1^j4>Z9pIFD8xd zNTd1vt^j)<8k5HGp#^}@SOn-KnM$CAFt!ipuUO59baF6}U{0s`gZ|8}KKWm)W6-7u z9gK;Nj+vGo2EmP57p7%q3g33#TuT?O2mYH&_+K&x;W`7^E{*>vmET+3`rDrVQ~2D) zKdnQga{GnOZH$cE16Kh6;RlvxCXS(lUrvh#NcKxMAKcl(qaMeX1oJ)O&F80fujklH zA8V_*i$M|^5++u1mt}rdfBRnLJ;@{4VXl$lf-jX&Ps67Ni{#gU#N|p;_UtOf$Z8~j z`G0QhJh!|a+@&}-HQyY$pfRwtp?22JjGW1`hEKy}LWWu8*qvIeeHD@AW9!85^y7KQi`FvF8&h z!wia*bN-vI6NbRi=zY^)H+dt6#$6Ppo8|IadakP<`|wT0-=mEb@?k*HN2lAl(!h|t zzWlPia4V!+xufFbwI2I1*^IgVN3X7ZJh&JEb+<_a+!bEcAE*B$^{<|F5%^{n2hw=v zwg0B4N{vK+>=yqBkD)KcxkNtS{0QJjZ??x=Pf;rR*2^bBfhs?e+fj`-6`>=&T5knU z54!WulTjfSSO~i#Lgg~PQg^NI(JPeBSb;HlC__@@`?Iwe8ejA%a3oAcczji4tulG{ zoebHp>Gie(OVX?Si@pIjjT8DRLVQrN7e>pN1)i(2nNHd6g;&OuowBgGkfw9M>weLD za}}{uW{bnHiyu?S>JqCB9Wzn-q5Ga7Ruy@^(qq1tux!>!FMO*Jq$Gdup{N+ke^EHw z;I`c89e@C!5JL71SZ|sghLeX{NdCt6!h}z z05_2+iP7~5T>&BonZI&FHP^g%E_)Er-9*-EFHe!`&-pdy5Ul*9>DbJ=a~#`>XX!F} zKuIuXpft+gH@0?njT)e*azgH2PeaO#fwY1Gk9v%Ydb=%YQE^NLFgpO>y+bW9PjY7s z-OhB7K&uThz&H}hV)dO%)p=lbFZyBBuOh>CQSm*kV!R82qrCYmyJpb&#|15- z2U1$IE>f~TGxA0;c~WMj*aH5{YA+6IQ6;qiW3p(LRH7sLO4xaC)m9s($F(YU&8LA( zc~l~a)ot|<=<+|4p9?v%H(0UELeN0g8TE8;s}UfiDm~R&rs{BN?4%e@6Fekhh$Kcx z3f|DXZZpsKu}Qg9AJ+MO2m(TJDvb<=6_mb9^5&u()`_SEaN$=b79lgaB+$wG@sY-{87 zjNz1gR z3vR5Eh!9R&>#U;Zu$%kSMUALfCz)14 zU&_qYgScpsX3M}ghSIqS4=)Rk2|d3$$$Vs*dBv6JZBxM@voW(C%46B$QM(&O*XB!= zqSW2pPAWsse4jL_b((UC1`}jm3SwOOoG7=hr^!27RtlW`WiG~A-V~y4pmcwkWIo_g zwqLpVu??FfPPoEXSOLFt$>DL~X}!Umen4$%L8U4uhn+jtD@~Vlt_YYZmjQpM>Hmr!R{$((y6P!zgaDZx8q<$nEm_${ z4dqM+&du=?JNVO{#GJkThp0x@vXqF?4gT_Krhh8{YLWH+`>r`xan(#^=M6E}a`DN~ z#G;O;Eav%^&mWz>@rS!HM&8Ih=qh+)uGc(gKc4^|kXT1VHZBM`GCD)>oihh#N>!UI zGVfQLMOH4YJaDWdd4^K2De~~o9VH3zwZY4LZ-46U-l}WwK8=ngBiVa3eh@ETRaEDE zNa7>Y<$cgQ8|663jyGUgZ`nfcdGy?UP6p z!uv+Sll22%R9GQCYZJ?(r?FdFvkRSZwO7E2*_de|B-R?koHOn`DJDz35Wd?N4k}Ojvxy`~HY8*9`vC{@+R=!-?YkSFwp3~MtK(61Qdq~+aH}sre z!;KFO%lTWPdYR5sB7r7jh|~{9ynlKKSd#nglKtIz8YHa}wS@ik@9gv>0UhJJu%p%K zbyhyb#fwLCS+clP8po+U|7QJ+%>@@)q9*B0`+kBd7D=`tH&|qzu(Lkogz8VM?plDl z4@W9Q3)C8o2z_N2AHf1EBu#eM8PBM^EG7Edfw zDmm1j_+t?`Z^SNMDn7z#EIQ|k8b17bQ09xMR{U92$&MYDuNPcO08;B5%gt!=Jl(bn zzWSRG$20Zkk+&s#IDE78*l{~=(Aje>QWL9tLMc~|ovu5P__?xr&sni$>c$CtcVIRR zNgwTrnc$}!5ZTom?0V|$CN>b8Wbc{kil#dAVgBWl0{1JA=U=i)9--ZB=%%Gw?M)J_$SY~DVA-YDL1o(bPU>5l ziv~7@ua3NzXJO<+?dl*w=786we$5t6;erAzH0!a`-RCX1na%81B`t;vV`z>kFZ_qy zMA}72IlSo4Ap}vAmyR(>cJzhXT$O@EXFmSskI|b&&yVbx=n+mR;5fvZ`mxv#9p(;%o2+ zixdoUkH@o*dWxP;E<;HfxUsXjvbCqSe_trt@^ve#(${(pw$MN;Gs_ z15Wc)3Abv%01p|bm)W?PQ;mRSw*F?(Q^J5RyseREi6{NmgTSD>*Y9-Kye?&LgR#3rU)d zq!iH$O$}1oHV*~bhFh&M$0lcmGHj2{-S`EtIV`s#HS^l3>?`0)sAa;>!i)QuT`FHZ z+DnYq=5iS=Y|r|wn^mQ*E}KP3v}vHs#hQE6G@#x8J9+2|Iqz%%|bE zW3ps`$$T|KVGqMud)5IZ)lNTz@fJlxDee;L)Yc#cl<>Tfo}RQbuCMK8 z`HMSkLfLpf0AAQF`raW7hrK8B#0F@-@`b%^gpC^Mv5>0usVcf!er;e4i4WDQy!yyx z^NtAT<9w&}#HPGD;EF?-62Phzh6%eaLMPgW~2i2~kfb-yNSpU3+J%ZeWC6m;X9{GK5Wd6I(tDpcodwiydb~3@POq^#1#~P{6Jngd0|0$IRT)6thAhfydb|kNKQmp zo>xXrKvJBKS5SsmhL2ZXo?k!&C?G5&Bq$&R5)=T*%LxIc1?45pc)%{U5I>XqkqZgm zm+V~OBjkgVsLi7aak2Mupyd-5x+loz_b>%{v|U}j;BEMSwb6ky2;M@3N7vsC!egin zvEwl?;iKiJ<%6@p)5`;51;fE~*s->@wZylyw6?VTgq(uSKj18jKhFGsKIcgY7^nG} zWHtaPEotBl9{zYWmfhFjac|4_Y|%^oNc6H~1I)uAN|&t70gz_1N=qO>?)_8L)Od`i z(&zaamV)fGse-6eM<{8bwA!s?oI98#cbIld849mR&6(A@b)^ z<+@^qSz?C6Waph`Qtw}T7Y7EHTt7T#M;%3^4biuFii~fG;EO`Bgo6o}-5=urNYT^F z%EQag17e4R$%})@#3ZkwfP?v$WZ_a32K|RrWoh|D1pifNv_L-4-)seecywq%eE*3} zmX^D=mX-m-1ET}gbpy0x!3d$)oY?hJQ}csYA!Q*Ud(@^1VCDTUbY#I`0pw#}j_(*Zhk-mCse3a&Y;-S(4b-+HMpJKKd+>#+=2z=J%lg z@ij~9EwI;K%l_G*o8m$uQ}7(8&&z69}aF>|B( zJhGsj9vc`K#i}HiR^NkIYOJFX*y%n%=S48i=eqkBmi< yKcur+a;aYyLe5w=*vfZwOr7)gWG0wpLzNa3%YtW13d>5LGLGS8p#K4Hw97 zE8)5S(G%W+_qQ6tyV`i^dO#q*wewyY+P`&D7LLi;)&4&W5^li%AuDMY7gsMh9zo$> zJ!D;7ydW-Ko^XTsg#!Kok^2g`9sc?d{QZk2`1_as!{7JF?&}5rynppGFVua1Nq}H zTs?H$tZX3n-b06%mQUz6J7jhE;P7wm$?5>%@V#TxhVxe5&r4Cq3+_kYJrsZS_%)7u zCj%e)JsP0JJ)S=d)P=*szj5m7!f^`!!o#Dh3&$z^Yvk~rh8ot65S#nXU>LkT@ZP~` z!(n)P;O`N_VR!}qZ=~=7yhh+RR(Ju9O5itIFzg=wg%;i&?n4BAF%=FAz~R483BuvO zFbTmW_ZK2zIQ)CaU>FDv|8`JdmS|9)!V`;86G9vv^(KkahNSn;h=8^o%AY2ANB)bABtHg9G||pKHWK4epwSC#y2-c`d(Din9u3s01Jsr-C+{g zyO6uB)cXA)YvY{*NL7pAwF)FX#iWfEbj-K7YL^d0Y z?l_Stv;sV&^LgHi9~AY|JQbG+GEgZrAAPXIT*rJ1tBm&6du4+^Tdiz=_onz+9z?Y` zasAuFBUk}5VTE7TT`7Ckx7T)*`b&Y8r72@XP3gfmn3W16T|k=N?5O#9$Q{(nE0^0Z z&*+Jl{8xZU<31fz0g2Ka6Gp7E#OP>KV+G+VC`MR#fTZ9Am7XV3zv^i&eVC#7$f8D~ zBuSb_Y_4z0MS<7Mc+qaw;VONUChD7&h>QIb2HNXZ1NW+Bn~@GTwUL(>%Ki2b!d1&v z^o7@~U+@pR&5rW)g!A-XkQF5Tlzg%peMz0!_LhhJokg{{j9^dotRMEBx%r`=P$itlZi7NtLij+g2aHIE_gfmfGQG zkfmyn>Ka^$Z@P2fXC#&j!hA+jn%-FPV38z&1)MF^---NmXKs%UYd_&pT6i9grq~By z_4l^oQOQr%UlWRbj#i61^NJ-UC<+s1O>FzFnX&f0L1Hg3j=8E_Wm~hJM%(@brruyV z=#zAy0W(HS)ZLnjdwv*je{4rCnPEA39S)q%Zzot~?k@!u=bW#MB^siAqS~pdcfP_E zAqukL@EH7r0kpMP_Y>OBMv;r3p9C4S{G>E_bXT6)>DN|5@SI=DoBrUr$eLFR z*q0Ae{1@F!QC9&f znd8jKCay0+cB`gW&(sh&oQe>ygiIv}zdcQTPe*7Lv(lsF$A;?WjwMg~Hg}-yQ zS3tu|Q*~NYLgGLc(g~xz+{ZpCz_B(E??JAj{6NHKJ}DG@$jhXF1kpG|ibe_tY^-(N#xY@VmXj+%b*>pCXrqznfkL=E~cDU}B?ot+x5ZjCi znMpMGwi4&{yxxV{=ON`LI*^*Bbh4su>vbxASFWx6!bRU16MFMFM{R= z37EZ`Eqa8uz5|oYgW$zMI*n6!XI)6Kc5*=)tG)UU6E~aWz7(2OjyOsem89ML`0*48 z8=7n(}w+Yh}j;qvO z6tPz1z*e*u$sbBOY!YP?|7#9pd=zT%hS*PbC%9;Q*0S)-t4L~0qo*`7c1RNN-Eh&C;k2UD^YCHtG1uaIs~e*B^`fLnevQ@ zIk)-z!)es2-JjIu1KR+CSNn?lze@goIr87H3I3A&KiBv7lAm@dlfn;wCq6=zCL117 zcu7mAl31W5d7iZL952}FoOUFbSMu|PZ)|Mq0{wardgU3%%ks_dF0XytRGzBKdZM?9 zc|R75ICIO(-A&xvx&dcC?{qqvtvh_ty=0R*IuiBO8#n9mQ;O7DkGD;JA4D~LZ=0b} zHh!uL4|OOj8y`K7dbBxIrh?by{tZ2AZr0^+#c4HChw5Vk&5PBn-37?{Vt>Nz^Sd8_ z)o+3Ow~w*8EgJbJ1Y{{2ZMMT}E@$a#^sfz{pK{ThF@C&wdfVr|e!bMYs-u1A=hqQi zHAXIi>^g38mDr2?BGuxh>l-p%;=93XKsPO^B^}mUnuOsv<`d>eVZv|JY)kS6)J~Y) zi0m+0!;L~YtukpQ)Y3}BXS)MMM1Y%y?NaZ(YK6nk5JUVU<(9nKw2 z96k#8QApqvDrkgN%`fgk|8vpE`bqx;3HR6)X9V`F_V~zqzNb$*KGz>ydRhclcB|=Z zaZi$%eZufjT8(Nl6UQx!tGiP9fys-o>;E2pg7AOs8-MR3{zp9#77+NShX_iCuMeg0 zBVK>!ICB5Kdo#0RAfw9|vQS$sXINXC9wmUHq+*>5D*g6#rm-M7ZbD@Z^osv=zKDuH zU!WmRm79mQ`OPC7se!jp*SV;34Q4@M)O=!7aw*8Oa2caZY|g56VZ-F|Z+;BBRv9A} zeBr^P+7A#LIEnEGMR3&FT_U6os8x@Q?x5V3n)XBI-(mwY(D0vykZI$!kIBDj-U`Ny ztSc^_OGP6{1dE1X0U1-vKNuU~!RYAPZ)0A`nKFsdZ0(WT^|5ozW=@|!5r@*R7%j%L zBrS@OW$1m!?t(NK{EQ%&9%?{6LsFyzI2=67A!Q=QLvIQ_-`!x!<0_a37CdE6!S z3teZ|L(Y6Ib~o1i&g(Cvv+L0*^wZ?^^)qN$YQJLR;E}|F)B|+~Ll=cQ8;{7tdcR~~ zusVo)^igBg`5Cz`h0d786+N+%5!(?5=|ZSoga zf6MpXD0Qqw&zv@+w?Wdr-Nm>m_>|k`QF%K?oRhJ^*ZRXZ+CHTO&nvTP=Cdb^*=gc- zud(LW9c6mGQZ@Sq%oE;q(}Qf!AdN9-jYRriAsel;p5UT3@n-Kp(?dyRogqWwt{c9U zhb>M1`ECUEPjb2FA;s2UnhN?_B!i8M)P>Qjf&`-%ZH?(|AAVNV8wjgOJjKdAmZm^? z3-vk-37t$pQGwnTs=kg{mp2oBH^Qm#TqBE#DPcu6D^DDF%IiIjTT}_d;|b2i+D^zw zq!F2BW>B7(=H)?;ZYaC3I*?=v=SFsd3omjd*~gs6SZhi{_c6%Lz%$NncDw8>#I-n@ znzizQb{Ut0XsPs<+YZ@{CKKIKx1~NP`6~>C7BIHAr&Kv;V#x9o=H^AJ+JbXLi|b(Y zvlx3D*k-_TeU>nPR6PR;ZJk$N>*J;0S0vV_zi=CJ{v7yp&8qQeN z+VZ#2+z=mkR0iv>_{?jB?3#^jiz z-*!G*q60G z6eLj8Rhl{II18-4_QEt=Br%!d2>SFnXbaVzKM?Zald0lp-Xe{6h4i?%L)>%{o*~L$ zXZ}mmpW!7$b}jqV$jKzZ-(!6{1j}@Lr$`j-iR5`P+c$5G&EG|qO|Q(`iE+d#)}F*= zki~T7CE@e&mN0pNhq!9;ac7e``BB*nH(ut0 z0ch5>sIfh3t9t%nkKb(Q?Fo)j(2Iv(o@7k$r+;y85Y$@`chvVPgLr~~(j`ed7s%AF z5gHMh0jC@$A3>mMqX_14A;~z9nC*B&=lb->RD^&AN+FHvySV9!*rYAQ10?kCL5n=g z3v!<9FBzs)sXpp(vk3s%6Qi|}GcJD0VdkS$94+V`StIYnN!fSGw|_z(pI4;{O%+R7 zir&KQc6g7U92vSR^ghDPmG%1g)P?4yKh$k{o_MA_hcG#;u=b5WFMq!l}V2k?--@QwyHVwi^H?NRrV^&5uh0@wtIXrhqpUdeSb@# z8K9O&Ro^a5+&F%GIUr)+JDRhf1VeFN-b1E7MPRjRV>Xujg2$X6~ysAx_x%lr>7JY}BttLC3x0-gxfdaa-Z z^cFcd^%N1=%dQ^a{L`PT1u|se?Gd1;NF28=h(P_rD z`R%}*rzrQ$;)Wm6R1*&>HisLsWdoYBX*MR>>7d-Vg1k`C8V#vB6bI3RcEwSH!8aUy z(3?emw5K`rn)AriqbX~ru7$f)I1W93Q?rz}O}nnO!6w)>4&QtP}A!zSiq z&b2#_kxVfQm-2k*7ck~`q3$6CoFo)<5@ko!L1*t5RClT6U49rnMFbm(-$yT*FlL0N zO-LGi6YEO7TddqjypT-+Hz9a@zV#Db@oVSrl+j6lJT>UFc?n(>iFp2gZ-Du8 z?q26$Ntt*icqBaIrI;tH2Nxw}GY6gyfDGN|%HyC~!u2~>xZL*gLqt>rs&H+xf7Sbc z+&2FAhX+7@-hb-7Y4S_QAztjrcTX^>H)Y*VCw0)9)$QjSe5fa6DHJGWe!SAg&JQoVsx z;>``?RMCNr8hYi&UX{YuFhbineDrrt%6uW3n_7?HCoL5ut|kApReZC;#kLYS!PMu0DfSHmsmFXoOA}ZH;clwwX|@nuD=&6UC%1TqUd`6FW(%8f8dASg6uZxTS1$#f4FYf{mqxYddW0RpJ5?#e~fdhsxmB4X@I%T~5xO-6Vbh>B`=I3li9yt_7m#AI0!tGFDOeyPslC zw8`LL)n+P!4Aj1E$*xN*eb!%eRznPNkZ?*%JdvF!XpNv-a!E+)eKd~r-G#AhlB-X- z(i#V|?=xVXTIz^C$a8F1>>F24Q);A9?V~wO)(aob@>jSg%+3f^w~4ljX1vc8z9lfe zK&3Y5_&8v}f544P{?M^mB7&}Bof4*b}Tkj<%uF`F=8{(L^TNs(36%0!V_tuRq z0jp4>Ae&oAT>LtdK$z-y#EXMLNSNH~S#|2mi?jBN3O6w}1>!oZQVOk@9cmU)CsQkx zZcp|uG-HFGI!m6#S`UouMX-zwjhDy8SBB9Zu5pT8jamt^2=dlPuph>(D)8WK(#+ik zf67W6jX;RNN<_j87hl}SI+hCVf?>bpn)$vLaRMv4d`Mad2%&>~+W|Z>FwEq7pdZx|-?a7EborY{qoo@|bxgI>=ujG8 z)K`yz*1JTlhx@TT3}W9t+tK80j|jJY$k-N1IGT=q?CjIH<7VUMR%%g|M7B2W{8X}H zz)^jn*=9Y-$o^Xwet&5tPTC`9BW`jGa{>N#!FaU&6?B;pxt}Ox2t>6u{Qqi8_g8HH zqb&*j=S^0;?n@U+I{dzO22%vJp&^iv49n*tw&O$*G<1UwwR5;n|z2yk3p+l&WT4 zJ1}p~^HU;&=SZjN(n1S0slp1j5Y++F^J5bGSyK>{e2%jjO(yd^1;6n7e(CUfrV|yO zX|Z8EA#o(6@%7dog*YJ8WxmNWx9m4hlX-CvLKnk)= zX>d&V$U4pPr?&!$IrK%)qNT?gZ5pFw@lIiT*PvMmEy(y8<6TU&cOXWxt5r%k6)1rX z8ZV)Cmq`eLeDBnVJ&=(EkKz}ooj&eCcum(|3GL7HdR28xhVh|gV^IwpZO6}O^-!dQ z@n?{B4O4%+_fP#(HH(VQx`oPd`P%CeYV-*Aw_RSAb+jC1Za?>^be4f^13FO3;+*`U z9tKY1m)WGv{UbuIGtz@>W;GVYbvznowFWv_U%aEcO{qIGCYQZ6d^dB88o04=W` zhM!3`&!z2AYHzU(-L!)gVPy&$Mvg{r3fM1cU2>{~^QW3=pHd}{rR8}~1)oHi8QwZB!QqvU*EPosO?Q04l z@i4T9H5Y~AuaY$t^Ly;l4tzpN~M}{_e5BwgK`qx&~e8C#ZNn_M@;Rrmg(2r7e6>% zY^^c~@LH=gh|FGusz7xajuvWDUtP$MRQRPQ)Veb=`c1BW8d7@Io30bo(pj0u7sr-V zl8;!N(Lsl7=yGyu>|7yjiS(&;^jq)e^vfuV&mE;{3J3e>aL3uQoGji zs@3bI)~cnNL2WNF_Gbi-Cy0Fm)Df`W@}>LIld|aLDjP}Ae#uXq$zN{Kok3fe5BRD; zZC2Uxq~w6eo`6Bm z96Rh(r1hn+<%jUa21158tF$HL(#N$!MflU@64ahk!%b*zpIXJ|rw%-$VVIl<4?k0X zP51qTfp72(bfMQI^Vz;m|Jb-=No%I7lO1Y<@v2z*T{Ufz?ZUGxxgFVBSW9N*=+5>_ z7I2b#7)n_{T$xKT)0Z0lE(j`xEK$cZ|oM6{DQ2?w^n_B?#2s;XY6V z_;(xvuP{i6N8JhrkIdrHQM2-Nf(K#zj?U2Ww)VP@*aE}gp$@;p6#j&9@EAaC;Za`# zeE(QU{apKbiGV8&k7t7**do9a;?GTl5d>`X`viYt<6~iAVdLTA;NSuXadC-=2uT5i z000FgDF8r8L&HJ|U}S+OMxdaeAW-b@gouNQiH(Vki;ay-fQyTbLjVBa;Sm7v3CIZW z0RSQZG4Zbl@qMEBm1yo013ba8adL7Z{r@8Pxs8B=K=E?`fdC!B4Y2?jfgS;o01=4* z>E|$FDFOl#JRu|A5BOJlfQo>Ih=PQSj)94VcwdS5;IAqK1Y{JX2MCC$X!n))@FMa9 z6f`u{r+*qCA|azZKqCSK)^mmUX0m37M76yVY5Cb!;$aR{F)Gu$aU*xEW+#0F%Dbnz3DdUnR)^^VZ%X2b1obELS zhrl-dMAh_;=dIf5knpJm1v@fjauu-qK&fsi7bB*DTj^Fh*G>Dpj0|C#Bg$e=VtkR5 zyU-j-wQ7-60Ic}St|9|3_WmmwW(7;~k;HIEf3BC4*ObkZ+%TUs}$wqazDWQhB$Q zF5#XQtkb2;8$3yAn+jJ$F4kEr!Vfmol@|Ew!QS=eOM^#Y*6OM{_}^%WAM~&W!HV!t zd!17YoDD)C9h{I3T3tl2HimKtiU}D6OC<&qj6&&-FO5*WJukZ(f9$XK6#_W1j_1%{ zbuiJPV0L6i-*obp#wo8+E=S0Jsa1YQ7BO_p@+#9gzT0-mVEc0wZ?-#DeNP94DWOYZ z+LR+WPe851;vws&aN(`;i@8cu`9oNypKfLlZ_cOVAp3)GPPx;RGyxQmXw?=yNy2)s zxt2O+C^F@R%jt1WPO5P`bQOD9IEgW_AsU}+|6ZCsqX(DXF{%% zx{VO{K*9Wa=qtB$S)| zX-wlJZfmf*9g^+FG5=tDXKu1OpS+}Ao)Mo08e^)hBtTcGIYos5(0XT*3ZbQCTnky2 z2{7U#SrR(2((;+`b#sJ~gj?iL=*JVK*rnK@L*v_hjs85j7Z4 zQ+jJ;rAH7j7&R+oL?0Fvl*~*92I?I!!^IuF7IpWP>V0nx$fz2Eq?c#Y8N{5g8kOL%$O-S~4H%P=y*fmqSi? ztehh7VLDSj+Ocoj7H9mhtZWj(RL9U~493!ZC2(h(#yN+pE`suX)w%2N!DP+$;P=&c z5T#+TX4T5lX>$pGm;|MBuTAPI0W)lu$l5rXHcYTzkq%EpsC(+Ffvd7yHP7_OPd{@} zn}Y!Hyss{`Y1Ejw&ES%?U&ODi73P_vrBK*RiAJrR}w(^arlh^RtxD{tUA=bbKw+$2P|AN(Ccl4CtUkRV*6uL3H0~(Vr0J;o zRwU7eAYxO>oRThD-6>qU9Mb_O3yU7n$wfh1o7=BMwZ4)Dfw0O?M3xdwKX^p)8B{|Sy1m?P6h_(oiW=gR1i>9 z=8v_;dQKBkkA-!alN-^Bp540idk?}G8Pg*`M9%uCN;#z?PHa#Wz#zt$I?DCpU&wT-JS+WtxIZ)A_ZtC2 zci)QC_S^_8kB#waDz|MfBL6Kvun5V`icT+dzF*!-A}kG799xbP!KhxRCA7b$5g${9 z=?bV{(}E&7qHcvGM8)TA{nj6xX6Na>SjtwBxp@p@4R#MLb(u_3Z2DNw+LmT1!fqfL z1{>pAOcnMRQ=+nNb90In!iGKIy?ZChBQsSJnvY$=ouiTUNBv+rM@~isL#6oEcv3zC zv&>83zSHIu3=X!(5Ozj{oD4;(^<=`^qlu6lAmz87PQe|^u(fH_RK8wO# z(hDM2u|`pJ>o*&|?@7TBk~L)m7S;U9L2wJQ2AzO{G`ndz_b5VhieRL>dQhSa!p}MT zbYqc~W*-1qiGWFkQ9>$KYn-C!3hrPSfH}^qj;~eftR}a~9EE+`@a8Cb3+{jEszcFf z$Hu~9=Q3jiIAg$CsNQ2?Y|k`Fl{WaACHeM{S7AP#Pff=ZJ!nZ5MGRP;Nj`9N?r z&REA2Xj5Q`pn!?a3l-u*q9WGSbD}R%X0HYlc|Wh5&?_@fsOa>9_X;YJ`+-yR`IWRE zjijY86Jm55!cBYM+p+%!WHDuvSg9nJ}~M zxsCn>*@than?)aF8!W4>)Unfr9#|)8R)^`oyAVthY!+ZV(ykJFlfQ<3jYgHTbrkqo zC^y6a9s4{1k9)MVSP4+sIWBXqvXxdWlwKYTF2(6rmAzQl79gQ};OFJ#w~~-+ZeDo} zErc-6VwA_RhT?}J0VfQ>%3#`@lYv9R2xVQ8W<-qKh;zs!yb5cBcSDq1DEn)YJ zb)O&s4b>FlRWT{PKg{qm!OeajKKYUE9tx;jRfww>F-FD+g{{0>q_WPHn1n|0lEJR^ zisfwdBRz&^BZRD6PxBTOmAkT>Hxxh||X@A~Y=c2ZkJ1vXb_dcAmub}>|o z-^Oa3v7)O`85yT|UWiUrm1R`6S}vWnu-(rJ%Pt5w)=_8PqmPp1%=Y!Ougf~_xv{XL zCtWU}gN7cgZe1MR&rSPn`=;ulkVA!9bQ@MD2?86kzA&dv86ab}c3h&NhCL=qO^wg)-$>8wMaye25bctq_QA|@79!xo2(%oXR>i;7@V+*$0Mg7sdwt67G- z8i&&SP~fL}?gz0d6Va`MCM!a5c6oLY&@U|(6F5RM)p06VXzApKsCo9f@)Z$b6L?^E zS?@9q;?{|ZjRR6nu@p3yUSO-tBN5(cF|PTy!c(~fgwgQ}_IxRa>94XG|J2J`>ZHoV z0A9vjAxfdBW6EQvBaF$<9D73(1f_7+OwZW~aBZ*l$JX0TUeZo2RagpCe^9+fo2z3@ z7sK3e=Hz4XUltG6FU71Ov@$X+NN?Ux-H^s8mXYE!kK#z_ex_;+aMh?!fMN8^i*SJl zO95c`dVj{A|7u}nnp9KAb?`VPH&>#~8b zvYLH+s0@vCRanuw&vtw&HI$z}yJeETxCp8`(J-$l+kjFqrf(_`u`m$GPc*U;okehG8y8CA{Yrm{iaf9Jd`yk;?@!s zy-D>jfS~6EU)hcX*-&T4(nN#Yjvs7)`QGLKdQ6N9-62h8EIo}aKE8^9cC!xFnog2j zYyxJ6W{3bBqNOAA{kW_SE2Ni$Sqk`(WkN#SOiH6h=Z8fTa8h*|Vvm?Ims&EHLM-FF zRwbV?=)SUybk?4>g^^dWp$4^^vHL4XS3V$?v!)uq5eJs-WyWwD8GB5wB@;C;GJ@8b zF!@!XVez~^G)6{{UE~;|88$Z1JcD8a|j@C6-y_4h`*U>BK;X(?mH%|;1Ie#eOV={!LQ z=cK?F&DQA92`v;x9X=>inov2r7Aq5H@ifp|JKcxf{@M;`py$m8q3PawM?M<@mTs5a zs8B7U5^?fZSXZ8VeknWjXVQ|<)*;lElaueHimXRj)Ebw&mS~@IQ5sO{E^jabD#h+F zVLeys$)S>7R}+jWIHuJR{J40?+JZ%%L(UJTF=C9OLtV(j{s=CjL`t6|W>Y5Aj9gfb zwe3VFsbvm75;y?p92zyG0j{3e`~|fR!dSS6HLWc4gpKQ~!+hCLy%Syt`UGk(g!2i7 zJ5NO)_tQ@^j8b$yl=iV1O%M$x)L^rZt=Uv+j$@TE{1ELIULV3+Oxubf#?1?8e?UoC zo%c+!2P-jRaF6SC!OGeOu(yw?hB=>IS%Zx!o+(cG{MJR{B4<;nP8NQ~b70#buP`c4 zWjn-!X$5WTb~jK|6h|Cwuk!|%jI*(3s!D3^-I#r7lG_@#&y&UG(&^| z#n!!F0S?dF?3Qn~)3gh)oToWB8_5L;9ww3q$u}C3^h1v9{>lhMeC2lIL#it9P(wB=40cTtI)VKFvN6Z!V_7K4t)9|T^VbGd ziP!uTeIb}{D0@C<_S&eqs{5#KiP*;(Sjq4*{QVKF zKZjMOv>wKVLQv9D#9?EOTygk3h7cemdDJYM0jK;(_`Nn2{W>Wz%;A3zo{En@9hKGy$SpIyXo zC2@jxJ7N-L(a@RMxg4E@_@&%4w#bH;B{N;}ZnNgA;m@yU@XgKgy1Pu;CUElf?SXTi z>WZ6)V(BqXt-z7eL_4)4!}by2`=m~)AttrGBh@7(5?Yu3a@&}N;SwQsggnfUvBP-R zzot3zkU~vpr?;H3p&?=Fe&m^(HE^S1;{z#*#NJlES@Z^Nd^WHsGR`k^$@fb8U7J>^ z`Wqdj2Z=->jC&LQcy&1O9LWenGQr)Cm3j!bV-s&Ul;ht=$H(7Zb+CH}U4uvD)qXC9%q7|St25%oq?17l7B68y0mN!2_^`MpCLQJt}G)|cG zb6v-y@XI4l`Rvfe26@Mnlj;_jap9? zattOSJ@j&yX6S@_%5R=UlkhT>W|Wk~W&hGq$hnC}%}$|_0?hh8x+Tte#LUO!+0Je4 zpwt^4&_OvDL}tK&vITW8zMwMa0Xl{dFALdtJla2JB|salY};A;yEoja6I{(JfSN9^ zdh{tqZJ!It5rm%$|BER~G4%5Llg-|DZ)lLjNqx^gZ680Sy~5*IcIZt>kFXUjncSYL z_v+)d`*=COUZWmatqo9&k>}M&`&4KB{wD&S){K%sedk+#nZ96mKj-Q7Fog?TTcAv4 z*)W)Gih2C2U}s>o96*Q34$Re)?)1o#uU_-x#|C}_4YKb#EO~my#|?Qr*w;6CAcpso zh-q~eG-g$A7IJtHW7xE>_h}B zqba|Mp?HpHl4s{!tj;RlkC7ZeU$hpPp+g@OP}5XeLTrnY)GF@8@k>(jAHSrVwU&mcX<``8f&huv?f`N+tHSDv>u0{C$Ua5+Q}b;iYRlci1EEU+lpiy)Rbu+ z&(=^#o)}CW0ZXehVoZ%XqRfrUVxzuU8z{{DIK8Kq;CxeXnhNG@6}f_iTs3);YTr^n zb~xXT69UT;IVgnbewdNZ4b+^Ga*aX`7q!_ELW6*?2yqPMLC0#Fnq=_ZeU?Q>&4X4$KA0-%qc)+P1%$fSxh< ze7I=y5!Z$D(zfqtsM)A6PYC~;`<+#rU+4q9pASi1=vbO>FaewHvk3{FJ6_RxMi`Xg8Gu zWJ)Rh;+cPxhY=>8V+fNUF-9PoSL4heL&i+b(xy;r3;+~@=Tur}bV8gR@U|6v=M+TAI^p455#xo=16x>!j} z4in4cK#|upRBibV=YMgZI=Y4G{MCyl4~omjUzi9zcUx&kun8Bj7@5C(UhGZuoSq`m z$^g%CDmPcIspnUK2vK5n+pMIu69|c432(<85+zdGx#J#q2;$WeF5}YH!&(g<5MRM>U>Qxw8D|31=}kO=-dp zv4(E7-pnZ_D5?eJ#hrvm#Hw18gDyi+re7AN3dSr$q*IVRgoR*gEtK*C{aS>j?1)?Q;F6`_*|Zu>;<$y(&!pIKSttmPcviHA*?jYAfAE zZPI4AY@M5_F0hEx27(Du5{p!I2LD|A|Cyes(@Vh=>9%r4c7Et|k}{128KG>n%iize*eUUuU5QT}?!ATgHz2W{< zkHm2~YZHq#N)`9Wls4vtt?}}nJTQ;*nUk}8w$uPtBl94IV;};5Dzy4Ql{(VEhDTh1 zN;4Y~%r=U?yPj$SG-0w*o-5CRVOR2|xv8Ze5n+El2(6$DT z3vZ^OewknnOy4%#b(Cs*tzvsS59N^GE}dkZQT`lB-~mSuM-7b3L9w2CIVelpy zcTINJQOiLEW>UhRd#Du~!yLj24}oP@bzX+)GLCZwT?8e^fBi|Nv@Iu+S-u9VYcXw z)Co$QS~XUb);5r~w>GH<89f#q*cc230)hGQ%_)h}7{ZTyG<5`I3ccG1CzJs?4iuK$ zYa(Y*#U0GK=Lv?>J?hHws(TXbrCT)-j0-K?1NGVT;S%T^S)XqQ>;idQJ$0LE*;XgxlEm>80AC4!t@Fp7kaE4@KZvY>c3PLOK->2gMM`0$25OO~CEQov~S;d97lqw%I; zy{CME``1php2LQYDBhCTG;?4i$5lpLmVbVA>_|{hpeGr*#lym_QDp1no^Tv~U+i0Q zFXIb8*1(Nt5iX77T7{@i;@d4pQO5@bBfFEf0L!@@O;|hMp zw5fhVhc8edsR49LSnk$jeD>jYX64Oo&dw~zT<9g8>NTW2tuTCToK|n8zU4HBFv4EV z!xi)hMnM%{dsZ9e%PzO}vq=tGEXhY2W+XqPZnj6l&Noi46vj&W>^Rmale#ui z1#}-@X}UatRL#^0db%x+*N-(ChoL6emT^X$IY3)Od14BCiYMjpRTw57zBCFs`G5OB z___4I@Lj{hK-w?{dUV?T3PNRXs$nDhY#>ksC9Wfu?t2?6axBJkm}8o8bQRECi?;Kb zTjE*CbBraoF@ik13*4(shREpnE7h3RSx2G&L)(1-wUMq3q9%wO3_@h^5G0U9Fklf4 z9s~$W0%1vrB*Ku5M265#`gHke=cXvnce+& z|699tw{BNS)zw|4>gukq>;2yM`Ch$sJp8g+CG_m*EX{8EP)^M^*6%X)9%4+ZM}~8a z^2W-wAY0`rKjBd!l;D?W>C*?}4B_lm@n$DyZgjQKH`%=gmq~fo5PhWBRL7@jqB$vP1WTCHEO63h5wnZ(ggeD(jb4{O#YAe zrqFl4hQ1kV{#O}QfcQTh5VLFcz$(&~iIN}7#qc&H?V$HL3X7a)a% z`t@)*wiS3ga96|MNCj_bhWWZC!nHMmOqKZo_mY;Nk{__Hd7Dr^)Y%0q#zM--;H5_Lpw-@O$n+;Ioj+BAsfr2&hi zkR?e=$p_VNd{Ul~MoCtDTst~&9P*{EU^P*^(BP>FT4e^RVsrfq!S7{dJ@s@OFFyZFSg}Y*5yrZx z>0N_TlL?sNLGf{e=@pf)j<{MuN2i6K&Ey`M^5J^~UCTCs|P}g%{%e6x(SYgwneBT>V9yB;n z1fusO({7A%$B4L>Yi)PnL}VM-T~%I1+;Wu9mq`-sIMoo{UPAA|V@v|*L6&+=P+bA&z>QdMZm2%dVM=}^XA1T6Am zv1!?A&giN4c^T{WGJZ3143af}W~^{MP)?$p3{~JR$g$v80_gw0j{ZMSaQtKCuUCMe zrD|A8*bB$tpPV7+>%N8H4RBUgzJ1^Q(3sGKBw52!ht21(Ranup)uK3;kO8c|62w?X&dHmtLi9 z#SNZQ`eD3pm2F=B*Un0U%{}RjyDcG)G#}wk>v+5W;Cb@+cW*=0#_pwIXWHw#zPGFt zzke5yk!<^TuCoe(UKU-w&dG&*+!?eKz?k!}pk=j9TR#f>OeoH3pB0_%(Sul<{KDXs z8_(9(EHk~Y^CT7h;nS}ZCp&nZBt(EpR^ZIxK;RbMYwr_ zCpxNomWeeXP}E)9)}8~~>01rlDiX*4DCey2`eP2%s zeVa2(+P`wnv?AWz7%hGM{@bhb3b^?}gRf<)KU^A$5l89uB~Qd|`%NLDr$a}6@!C?# zxfAl?*l z;+c)zE-nlinfb6Nd)Rx95a#eLS+i#DM)|&^n880d2Fa4nx4JAw*8tK+gRcU%L?O+ zQ52GievK%kJ(J3l}xU>00#T|XZJ{yc_VaRI#S9d z=<#})qBV%dQY#dfm9_P~fu0&|8DKg}l~aA>baP+7QNyoWuwE&6O-`uE`yS`sYF1n1 z6Zz|=y^T)kGls6dd^?{&vxlzJbNyW+J(XtJ2Ll_qKqS82=bJb>ywpn1RIVW+F zhiAc3;6H;UsoQs}2DJX3Jp4f*#jM-liFQj_m!66~OMuAKY*DjpcGDpmPyhLZg8L)z z8+alv`J%meeOO7aqJ6w4k7g;;;KNXrnO2+4;8TSILcQ;E6|iZZ_YC%r_|xHI%S=bx zO=a6MdQoy714FR0zEWf@>BpWKo#@uhmYKSVAN3O{S_wt(iyFZ2Kf?01L&kUC2|nKk zKJ>g+ME9@n2^~rN>uDLcCyrKbFgp3HH8+%AU>A}YsM5Hp#B(#7cX%MYw|tDMy)cOQ z^-J+y<9X=xY;pNoekD82v)Ja(0O!B{Qu@dGe`#9(hZY(Ccc%4BvHqKR>*-!Z=>9j- z`oBZ0XYJPh`*NWF-w>;ikf@NT__=dH8F6uOptQUU2qb-8T1H7m`aI-MuzDV%3jOD% zs;P6fX&RmZ*nfWhy>W^BU;e=6^-3XN2{?D^^}U01wBRYW*(}D}d+h z%$aii7h?Sg2vV%`j^&&#wA}T&_1Z+w2 z@r_QX8C`sT_6vXd(0^&xKW*s0C9D0vW$3>l>z|DEe^H^ef1%L7Oz2;T^}isY{|T|4 zT_iU@f9k){E+-du6kd&X8bvbj&O_#$JcEE^3&0nFMf-~#e((S zx7eRbdNTXu*1m;T!2j@I=_!eV!#aF+xxzlPamvJ4e*&gUTHZ*J7$n+ zbR{|zkkpUn`J^xX$bqy9=K!MN7|1)p$X_)Yx^EPgQwimbLb0i|=eRID`1PpfVQ5jp z7H$H{WnU@UF0Z8Jd|&WexexP;3Nsxo3Et&MtWK!O@bcmiB~EF>9O|J())}7T3K+;^ zPIjiX`eH!Q0QOBk4eX(f!1G4KtHr>+aey6+YFpOp4u0l~%92>9S6hFST=EV_ql;sb zUkC4z=2}t59*Os5^YTOSUjw|^Tyx#_Wy=lK7!7Yi|3DHHkWiDRuhS|`i34wFe8 z!~|Eo!v!b_RJKrHt3n$%-r}S-fCYtB#=C3+wR2td)pKgrrB1Et{1`}E`LcIS zsuZnJRi){)4e6N-S?;_3ML;G)&MGl{;!U6#G(B257y>80^S{WAZ#>yg&NKk4RTPx~ zbh--lhTc{N7j%@OvRf_viZ-QFjz}m@{f15Vc242+)e5gJQaK$DXmM9Rzc4{jej63J z!3H7ichvRALTm)fA1Adj>REz$4+Ae@s$q2b=<8?c^4ZtRhRB^+($*qKBU4_ZX!gWUy%eyCdWMHTue!FnSc#^@cXNT?cXW@!6OYUFsXXJl$fc|8aG}x&cal41% zuxyx3HR?e zY0ys&k)rVKK&Ns3}RLsXq`=dFG11_IeQMJ$dQ4^R4l&V%00LBH^m<|2S zy2LBhzh0~KbH|KOP791Vj15=6nX%TNadMtI(fi9y2ML4bK+2_B;G5^oX)M7w^l-M1 z!hTPItH>ts$x{Qklisl#_UI>b`heK(>cY6Q-h8RCu>+Qj3HpG!?eH}N zr$BTff^s9dXzSt-NQh|I{n*;^Bny>-!Uow6%ZlfEB`g&{c=z4Ca{V734nonZ;G@G# zOe{6pQ`_Blua#WaGW0rBQ@OgfHa~#ML64~j=%;SZtHrf?UomYjcFrNLM&`eUy8vkR z+{hBMaa5#1Ot2MrdGqil9>ao(1Ve6xZ@p}5?kbgKps`px}3rDo!^L_NoM{XT%^t*85@iD7jhvniIK~ zlcM=3Qu3zht@@G|(=WZ3NLDjsOfCYTC+`|pK4I7B{Bc^zO30zD(P=rXU;Fgy<e4BfbyF)Bw)OSJ566Ha0!v(lWiG|h;JSXn*>!? z+#UE9v_qo@rQd3@NigqTtNR7kl_qOV} z?Q>V7I^90hd~~pSeXYs$@_i=&a^cgq=Hk1+JA!AuCRVh5Xud~9)h@%IOIvs3?|T`F z543%$Ur}ARFk0_39SEejkH>Tk&~HJn2qC_hd}j})5y971$71+|z1@qmKHcRR_LfO6 z`o-1tesiC&3y(c+TyrDsmg8X3x_&5D2V0USD0!*;XdrH9`G%1Y&BY!XeS;UbOl_Kc z=qVP+PO*^9cfqD@JwrXu1=sQO7h&<^9Xr4EhZHJDvJKjx;LG6^USaWL}>uau{CM3bMXM7yy!}hwsiHl4NF2?G_Ej{MC zvPLWGv1jGH+kDK-{Rvdk5_E2X9;jhONz3ut(Q*wP(50^C?f)#<*%F z@oE&kX*cISXT&Jek7z3QL78%T=d;oK*y{!HLQ3Ey;j?5y#l^Jra{JBh+Qx!wFn-H) ztc+i%RE41&xrh$4D+F?)mAF&2)n=5mLc0c%SUiGEPblbDfcM3#CZjIil+%kizKT;zI zNycWnCaINvD7Z~f105y_=BiHObg$>14I#}dclA6ER>nRPe!F~r2Vx^&%aukm>1pk* z!AKYi1HYQWO^&3O7O%AU$vI^_YmlK66S+HuRX$uv?8{Iza-A?x4TWiJF^iI5Fp+l_ z1aotBt@fLBSx^QK7)hJjcX517f!fm~HOAh^@!U@?HM~D??WTm_D+j{S6HTX{l)^^4 z@}rdX>u1NNgWN)CR`NKa_MVM^-ACkt!{Xqb4N>y{>V|{boXzM)vD>~zavPjXN-c98(2t)lT@J_hGUV`DA$(Zu6T@^ z?h1#TP8h5#kKE0pB&|t3Q1`tMPN|nFoZ}G6B-;J{N?!nN7XW}R1kEpA%IA} zDu6A*$IG0p-s0+JZ7;5ylUO@zx8$C=eVT4H-nDOqZnbIkI-#DXMH{9eOS_pFX{?BI z>Wbl=Qgd&H$}bjNylUz=8)9}NBnQ$2u_5y;k}{tz97MLb&EmA(dCHb zLnHWr$GV{f0_SR^chP_Xxw&5*QsSZrNzIL#7|J-{7x>M)K2bwN(4Gaz5h{ryHd=CY0^K$|&!62Lb&@+<+iEW#G%O?K20nt(*aCOX7h-8$5YW zE1piOi={^yg*2l5LUJcSPc67;Ad(LEExRCpFD;p;|5$*d4OcUEyYrDxZs*zWR#Uy_ z%&RWgz#=-eNXn-m*C?+pe`D*~3uRpl#}5wgjTTTA?F@~0Bb4c9HmY|2`g?%A7l8DB zT*}t~XJm|~#M~{~WG{z=7o8wDL_Uja>351}Qr{CIwU|9ZV*|;9DlI%}sWKs4Es8P6AYtU0-%($>IEXO}*Kj%s5ilrf6c}BeDBD zON+KC^Sx`eA>q0rliZ<-k5#(_o+qVa2q5y@;0&k!MK8mA)xP3^H)?|rVF}3AY zPIOi=$LVlan#f2@#%h@dRy$5GL{OCQ>`KCla2I1RCSF~FloSWY!Ncj+_CXBJ3tSfQ zC)4|NsW^54zZTs4i8oq_H>qtojfFica)a7bTVv-yM|~<*+j(|7RcKX*80getoMAl)$Y7) zQ#p|@OvN(}5|B&Q&={!B75$d++KlctQ`%3-O`gTUFoM<4a0DPiiJI{r8aL!%jnNV_ z==U`ejL$h+#o?lDuhYWYEI`G@q{MiRx2YswsG-6{kL?3SK+%z!;SFoW_PrkI?b1c!ZSMo;E9uHApq1K9-zd_{R zVvM~+1=<|mZdpy1N#~e6%_VTo&ED9-mryKYeC2Da`NVD$khB=Mu|z-3P?!B z7b^QFI!gD6PAS?|ZoJx$cQ7_6{UwR1WJv7~xZ0p|K7ty&ky36Uh%Ib{34+9FR(=5u zLl-$y^Mg`X`FZ!!YaS_+&EMad$&eJYlT_Cq1tu2?_>j$AKH3|yA!3pSw z1c56cORNXAth0GuSWRhWYR2gI{GvFK{+KUzHyg9A1_{!IIVy7N14gYd@AT(W#bhy; zyGo05^-Wvl9)TKQ%a!RXvSzDmud9w5R&ou^3yLp58T5&prnQ*8)2W33){82dN@?dink~$K~;! zT=Eq^uFCR#wYB@A@UJ*ETH79~Chx>K1F@9D{%OR6sfp<&zE4oh(5W zrW}WuTEs&rHAA9x3Sb7LFBjyRf1oDYREgnsRK2{TOm4I%{~Ro-&h2lck>VGe&Ah32@;zW)&EKZC7B325;UtAPTDQKM?o5>kK_U`iZhejsA_ zDB{!K8%uQ=1;FuCLjmqsV}`a8gnAzao>(j_&=>Sma#wfOzi*(wcknt`ae}2Kw4QdqbS`z_vP#SL&L8_&bTHJC2qez#HD?>(K7RlWXz#@x z9W}q*2Ja_FubQ|xR{X)BpAzvOZg+faUF_~-cSmbT#~lK_Pe&J|i#YxjLBF|t@AHR~J zUsG+8ry`$%PeEkIXt#6Yl(088yePKQvqnHrRBBWkze=QPP<-k2cd`TY`4ziTqn~_S zHUfyDO*ZFP!R5o+sUa>X5k}Uhof!o#uw0>3Px0tP{wd};DdOmwqReGSk%+sRG+RS0*EpdnsVBgu%u5^3yIv-ZnV_=|zuZ0<3c zM5$bg=7#3F4Bg3dH|L^RVpUzz6{`=8rxt;o$_h+7kx$EE6WPF}&rwxsfBRLvMw~LY zDM>a?>iqk6GyY85h%`8nZ5!Xjg!pB?g}=fscSa=}l~p{(is^?wArl?HRH`Z)d>*{0 z#D_1GAm?j59J0nczlQ{>y%l<6@g*iw$r5v=pmwsA!9hvePmf=)-D0+~?mJ5W1(}_` z4=~j~nqw&sxwe#AUlO%57CbcoY-UGGBt48@k)cqr{_we#*i3X@PDBnr1et;fSpB3m z_wRS?-4M~_TJ;h#~E)aw?h+HTJFGwd} zMaVE^yj+j>JG_-d>b?Bu6h&3jnf?1We)4Tn-&7<%Gc^@=ulc+eTeCCSCn+WMh-CPt za|FcB#5bqBStAAosqGs&p8xl3?^1K|3b7^~j%DOJlLEWJhSLx;JK^c!$yPF1RWnieH zGjx@^Jv_H)X$Zp!e$9V)<07BjwVxqso9D?KYr*)cI%gD_%_A3l!Cyy7@a zZgFwU&kxA&4LjUrg&m+bzDI7Xj+Bw+GDk+P$l0TbO;l>3`w?CcRZMAuwFEkn@7Q%; zo4E*|!o3i3nkFWot>IwB@Njbc+~IK4fE7V=v^=7K+H>y zs+iDRJd@r-cv~ocp*e+1Pxm{; zwcbJY(COQPb%Z?D)r@jPo||ua5;_p^%d?ik*7s1OLSXZw67QYs*+`>Mnukh99}NAazWTw%EID*#a~)z zk|h4&{0w2~80AQKZ>AhsqtoPbFSJbQm^y=n4YZNofu+_45Q(Kn6Djw;eA1W=doOce zf2ipsQ;37TUigA`GLrIsab(m@u)}x30kLH<-^GrPiOtA)^NmE4Fqnv47t@d9yKG!3}JU@cSh|hv8koA56@BM=B3gf zlb8R^<^d8Jg;$8Nt~agTz|e}tI)wG1`J&Gag6H3w)fy|OQkCNUn+S))ufO-szx7P_ zP8GTR6pSS&Dp9ohx^0qjbCV=jlM2sQJBZG(yK~;q8ueP$#g{TkChas^OJ7sp9bq15 zYLNud=w#X{u93+t^U9AWUDllSWz!+9AO)s3nq=>w91Ih+f=IfwBXY@<`yJG61)Jnk zOLu2bbJYwWZ+G0TBf;sC)_`E`H~T^cmpL4~EGObyQHK-31-mHm52;^CaJUtu)U>ql zosMe_d1Q||C;2wN6QIO#7)n>*#I!m9Pz&$5Cp7NkW_nt*_(VJqIPetSYo(i`T|5ifLN&>iII!r z01M`a$sG7p7S|$f+iu#~&>&s`c@)n!2P{_&Uf&mvnHw>YglXr-?Q5wEU+9U)!?2Pf z`|JuZcr`vYKQ-^$X;D+*6P@rH6V3-O}5i1GVTQ}+Lh3r)bXt7E5AO~De0|PlHReSah^XEVP7LJ@S(vN{~ z^P~vp3)LIOHl~;BQ}%9I->ebPCU}v^*-%|jX0skSg6a&L^}hpNE_07mc$H)PA`3r1 zZ)m3DO0<{(GTL4mk{BX?jOyVT6rQ4p+$F)isJ<>pRUMc!)}_#+{sOcWL}RKA0C;3J z6MKaBWG|j`wTH1B9Fzq?C!Y?jz-I-O85pYN*l}a#W?okYU_V{ZXkx=P{7d1G1$!9A zkuNb&fsyg%x~)L^O=sUev#2=O4d0(^!~{uM1~9daswNuZTRzs(wERA-*ojctc^5VP zW2u{{&AT&{bvl{)w{X04?)F0Xpz9cass_^p-$=J9ot;=w=IBc@lDLswR}4HkSy*3^ zuWRiKt#%+;h<@{>EttP)R9W$S6Wj6w4Fl>N43%j`Mg72(5#ytKIb1lg6vWPRB=*X! zOK8^SS%p^=qIexNWitx_9;)R?=Uo|!fHQ>(R=$q6Ko84B z?A_>8XPY#FD>DH;^EukRsC)Finy^nzdkXJK)ErG#YI|1SrhV&bV zv@ZsABQmyTcuGG_X(4!uzj?drU}dvper1f@P<5r@)5UyMB zLYU(y`B8s{scn>B7t0Iou-KFI-rDWyEw>M(J|!(C=L*UFt*TMeRi!1qqC)&vae+zs zXdxvA+_$HY&ch?d0Ic0}fLMikAlAzD1iuL>f4G?P6~u1jzxza3#=# z5*t|t6}h>zf(SxBWJR-$-Z(0HV9|imVX55tmF~!B`E>DPNB%2|!=EgO-2(+y1KazP z3V~Rw1Y+$jna7HMjP%m)V7)#@2qSS12q!+&?Ncc!g%yyNtn$wu2#_Hd)9$LJ|FbT& zuau6Mk<>TohB08iEs&=A+q_@-yYC>Ei%5G#arA~{Kzu3%s4Xg**LU9MHp}tak-AjT zmSH&@t>jqPDu(d}ioN7-c$jO>Ei9^QX$T!7KAzLP4Fh=ISh5GUIL$`9CNQ;qN|ueo z`B9LGk$T<)8<3!2LfJ`!IF9j^P$!i=o+R0|frE-__onJ;GPF(SUx+xkTg8t_mU&E^ zD3(+5v6c4x&*b6^tty8anjA~R(u+J<8ou1fi1b5GpQI*jmOp)w{KH4F@Y+@F{e+h? zHJ5fp_VGGLX_E)c5}S-L?x@UVedYtVh61bhN0_N&c?VMC9!fMt`^{?MIE9DG=MJ+h zhVyo*+-Y=?Cw^3PAvM>s40?%1BiRc98UOws=Wh-r#zKRM2==#rW3Bcq7cd z)#%G-qvtNz68q~5T@WJ&hsg)MLN_OJJDo+_jXdsz7;eK8EOJwUB+&KaOR$;82=6D0 zM0py8%z%n>$U^qMeQT+vv7fPP~fH@OzAzeo!uF*A7rV~~6 zo*SGy#?igYwi7mCqtdmN4cC5?BN^Gi4;H>uQlL^dF@x=Uu3eYolGZ9<)xz5$ zuB22ZyolMMXH#&O0$yBvYJ6;D6;v>U{NjBBK+(l2eeHgjhMKp(x;VCtcy#%yrBsEk zLtW*yQpLAt`|UhfvbXudj!X-^`QA7d`+sjbo48HytBt(F8Y$fxT=FSu=|9T?Y5G2W z0ZS+vQ*K7guazviV!lTgZCMHsr9}9Tt!~^Pq6ZEp^U$orUx<~sL&exJAKc$Z4OkI- zQGYT{-g(I5C1o&uEcHjx4V7NYsV!#Q zLHYZJ_MUV2-Y4e(PFO9AR?etEn1O*rczN?VvOCd?reapUa{R*Pt?C2%&A30ScsWof zlV8FGt+IY!4_TSwFZS~?{paj0DI&cHXVm}TcJw75DI{qzT*!cVex>!f0nVOXxOTf{ z)8qvk9rxKr>jy*|u|W&f(nk+nlsrk2`ApAPXZt_A?uPg(Adaewgpo21fo;VWMNQP& zKCjWt{NGpChRa;D2>RV=8!iEQMTyEi0p=j^!pfC$seMg@h`rXi*onSRA^5)BLTGk0 z?owKp>~l5!7*peJEVxP-uQeExc{%9U0d+0b8{A3B1=Wn19xa>pUXfcE9se(0a}K ztJ#ybnF}loh8Wi%!j(z8iY><$ zBE6c?EUVy^dU(^)MuZ&EQBZUz;}gzI^YcJS_^~pL@mX3iq^#hEgOZXdkEFh|!-)HDGhl(!>C-B# zC)ZuiBuZI+7aoRa1o1gHWWxL!+=ZGQ&?h&cucqjZB_pInSGY3@xq z?e_!yew+8uPwx4|%u9QT6FFKBN<>V66+=z7SEeNJT1Y~qLZm#$;mM@gn|~i4%o<8r z1+k`Qz}F_rM%$}ekSjMVd72v8=<2P?N59B;-Ck3;=f{7!e0N-~i1XG_NDI$}6rHv( zs`6qhmXodkie;*~a4rSRrjW#rUJVf>IX>>m_3d}G8;q;hQ;242wuoedgtw9|dQ&F( z0htE#N`j=ol#^VUNLUA4W+UYK%|mfDSzTECm@ZraDI0y0XU4v%=m1(}SK@0hg<5LG@eqlxn3#^NPTfu*Jn`Sq+cLih?TG){1GWxIFC zuZ(45G#RqXYD<1!=rD#+$~zdA0K)?W-?aFiW|^t0YERJWOp-Q&9(E-o>czGXVOR*9 zBi_9*Eft08+kd3<5B5pY_)IV49XZHglhq(U+CAINR57-j+V-j0z8m21f zobZn#?qXN-gHb(6W7$R_al7#7vbg8O0BChZU{PN#ZD2<1ph;@O0iO&g21-0FNa!}_ z6=o(%8-Qfg?qVdQ68skEka3A+tEOtl_ejEUy!$IY=-!7uM=VB*Yr}ll!J>&ycKwkd zbg>g1SHg0@n02iw{*PgsQ$L!*Ird(8aXodHhV`g4uM{Sh|sH8?a+!ZLw z3@KRYnW_l)FJ9ArY9wm=S_R(KV5*jO18j6Y3~GR}7HQ)V;5fv7+zUzRaGY&j6vXS3*=xj-WN6_|9bzU0}5A4NX%x{W_~WtFY<#CJ~*QSHqO zp=CQb*vzDsUzNYzbgAWJ2JlHE^3qb1ynC!{nU>xplrhTy4NN{J<@`xI4fxK@-K2FVT*9UVK zEvhWwE%Z1F$lkHFV5x6u0kr;!K^MKukeQoac1lT%1#^HuM>^DU77rz&c*oGEk8Nh! z{W;8)cBaW`GKccXJ@RVrIkNPvs`e#3Q)d>PyZm{-mnQ+kYG<-VM6DCRznMYb1?uEJnYY**eVKIUpSUCUz3u+&cUYUVx(V*?Bn*bIiNe_#f^+#Tz5+w>J464jJUjJYOJ6`fK9 z{6>`GfC!MMaJK>)ib}Dx(8gY|I-K?H{(SY87<$mMsa9>B>rJ)b z2x>wukij8q%^`@n<(prKGQR(`3v$--j)Fn33{Kk@UqI9kY0I;&EgcPxxdF}7%9g^S zyzr0~5~pjox*IlFQ1};%1reOZbWOwAj2B2t*W5s2^}1BO10F0_hZD7pq|k)M8hAC} zFk3@TdwB6H@QYiS^*i%K*J&J&vDSytzE3LF@AUEpLPa)`Ip7YvPXL(kbBv_E#oz_= zu+Vte7q7v|7ALuJ;e~28huBt2zr5VI)o9Dg5dAmJ;}A`0kYlyTaRJ`2i-Uh-t|C|u zDil0969x%@p_xr3S-(_nf$HUWPxt{1-c`;V{4Xx()MNaH84%Bk0GO@$*hL_(+E^VW zavt)a9c{NEiAN_Q|x&~9@e{9FAtQjnd z4YYodR3KG`-(=bJth=*kQ6mE$+91$Q0~Q{AJgNHRalk@hZ24u6*R35~iZFM48y>g$ z80zjI`H*2P?;S}5*1Ss4>@QUN0jIcGyb2Dm!D2VHwwt3}q|=O!RGWb{5*HycpeesK zc~>i}X8!|hD8n$0A43d`N=%L}IT%r1%?i!&eUSF>Gvg|k?8vy<4~}z?6L|~C<)UQW zI%0j#4X@q3$%v&+wMsp&4--MjToY1``ekti&R^(e+NIxD>Dd)YQwAGC^KV5Om*Nt*Dd)XI|3X zc>3`W@a4@4C4ST^YF*NxF5}h4>QF6)>M=Aw5w5HdWSpVaTimVr!DqU9P6@hG8!%Au zSbi()5&x>kV&~CH{|pZC@xzX?XS4A8C(u>QMAWl7D`;k830K)bO0Ke(jjnN^UB~aV zIDc27ThL-~i^0hnFd8cEJQW0dWOx3RWbt_;VZK)@#T2rA$82Zmg%D`ChEn}a5>g>t zJW@F%ecDc~6eE!ixdDdsx?-T)d6jT$*s@PF%#LLP*LPIs;GNI&v>D4ZZ!&C)Xc=^7 z2#_+X!5rg(J zeD!_kS|nmDjdA2R8i;WNNGK1j9x{CD_Yh0 ziBUI>456}&9$9I5%+mkfumwFpOKp`B1nSbq%Q!0x5zpq70|VdE?m*KpH04cP*^YTQ zW(YYD+h2wfvR&kA>wX_tau%z|cGfIw&gD|!tH#eCW@>n@6n%fbn}OrmI&4`_V2CBT zxn_nfXYdq43v#P7g{+r5nI+~$rIyP?Qgd;kdDjl|(zcIy7mCzi!s8u5K1Tc3EJWoE zbff4ulWsw+ZW(>Ww?++ogYK|PeZu6A-=%sv?Ro2$>OBE9pS6l|Prf$lh31)5yX$R( z^0M8pl1iYr2Obu0t zC}%Qb^cf-O_6vSBLg9@G-ET8(ypPMVC;_EwTv;#G3iJx4WvKnhkki+rUi8LDumk4g z@<>@oz`!0SHj(nMkds{gbj|G-;rK(8S*hQX_2zKDsAR5;kBy3~Ij&V5kn!=*bWll8sX=G4}%eaS`niS(Aa`CMN{ zt;|bvLG-VZX%s11%a@K~@am_?=~xXcqu{QaTZ5U)&F;}IrmhXOqnvl_Z<)TpQfVf6 zFUjGL#YcRyZba?SZ~;1KeWu?enM3r8k4O7VS|yZdzxp`4RNlm8I`vy)F_*+6cieHA zTyRPls0Lpf(07G2{d`vfU}5F$Z||`Zyxv4A$mb&3r%URn7frj3U@Q2~B@#&?>_W`w zB^L$!RwwjK8RiY_<<5|fi^`ATwV|H5l0;rrIjhNhy7Dp<)Cio$#)I(qB96paz!f2l z*7d*n#*~({77>%H0SO8<^21ueDsdK79YSo&3UuKKk{zGKDvP;VS&^1`T`u@QJxX#1 z>~CG|U4M1L_s!cUl@(cTqPnJC>LDW>EqQzZD{FSAznHnC1-HyaL&u~y1tQ5qaTe^2 z;qkl-^o*2Mv~&VS0Eg0 z^fTz27TfmhO-Ir_Oy2I4xQJUsKNIY7-(aFf`x7(GvJq~)z#lFkC++yTT+J?xR;J8& zg#|UPhU{AzyH~_!xGxHN;Xv;aW}4m4x}MS=CeP`)hKWbdEUdLV$QX}HAO<}Ma19{K@ zT~bK)goyCIXjvA{cR?@fgpYp}bM;idni8-(u>3~_nm45`8gz6L??j?K!LZKyy?_tR ze~OVJmSwc68SoOqw#$<%SDkpL8>@0u$>xR2H<6YbeFZ>z+Ex|JNMO1p67-w6mQ$%; zFyBhJ21+E96t{PrbpGm7__yF9Sc zY;g+O2d1z)kgNbD{qKJWn_myt9tbq-UyS6C+t%E}S4`<=-cnmF{(l&I=jTeoZ+$zq z?TL1h9ox3OW81bSwr$&<*tVTaY-=W&WaiBer`~f;)#qDv{($bPetLD+!o9BBXVf#Q zY$wCEf(y)^@pd1&Iaownni}gmNaK(^f2|m(L;1&E$+{<*sOwO_WstOxjJ&R^D2&4< zw!psXhAUYtLr<>VixLZp67)lzxx7wgGb;TCnXiS5&8v;7Jh$8(KA@zv7jIVT5OUYuk+jJ%a;|IQd zE3fK?SXGV5ZxB4h4GQ}zc1AGeLrL=R==vFxgKiha zndB^UJ&n++vh+km)YiaK=Txyd5C=#SPaGM$^%p$lq->R=oUAU;&v@dee(P(8PEtWv?W4v-c0OqmhdfIUNLQCAJ(Bs^H`L#efZ zV~h+?d?jZvRWMNO1{XrFOolJp5j9#j^L zai+4kvacql43D1_zfsggWkE%)onap)SjKC9sjfT#)lh?zE26MfilhLh>IF^V>2~nq^>cUvu z+e%`slAX7BQFT(JCSP>n6g42mDp~_si77X)o{eFZ6h{Z9DoeF$Ei-Z(oZ}Kh`jd@N zM0I4>-nyb9Gb1;XwCgDaK^u%xT~BzxJlJGi3|jdWZ1FS_R-eug%7iLSmc?>53*M{> zX}a%SS9JD-(jA{P8zE69#vUTw!8#-Hoc%EUT#_JGEAau-`IgBfFs-~4-J_bFCtlq( zTZPpXmK;!y>_2S4J=#?}Nw9#cT2e{(QX+H3ld8=boTU>S8#;ji!jc7_^Ps=6M5LOV8)5RjJvnN?)UdA9-o4(c}Yi-F=t|^j41D>ZMsEz zD;3DYDhw5{u;ACdATesg^)SM0>_tdxSi;G}0p%JXxXZky5DaHcXB;dkbSvn2WR24H zcSqhtl;%W!VrbK7K(_N9GmydvmfoezGAq_r60TZQR1%966OUD3j)utz(r;qn^7?Ud0rrk2$^rRfpz!L@uecO;<+&fuxvGeV{?<;xazJk{QX40p04H z@azKOSC?=44fcq%8q4%m#}$Uh=jVkAtDeWF*Y}REuvO*a$ zJj$SSQ^qygCF!B^q!k!Fdj?>^DZ*bkz@D8^pp%hn2GY5ELJ+DHIT5j~DDE~1t_P%~$0i4f>`nsdb>6->IqVoyG4W_F8G=N2pdIu zCi(uq(j2$0>rc?aI~J<mEhi#?+(!C5B0l-~B`RpUi}K_0GphW{_OsGE0s{psVwuXKO6(E4*q9ol z)^@m9G4))3-;s~v%SHF?tC$n4o)<+1$+B6y(=;$)*f#8tJ z*Q^nJLhrma)j4T+5B+Hoo5JoMXATJ`Z0;2`vQPy%M(*7_7RJ-VKRCYA_EOa=7`inM z;87yjr$pk?m;%N7OJW*!?%0irA##kgO2;~>X3NIDT{(ChFECkj zSyZ?j{f9eAV$Hscz>FeQRku8piH!8{%Z%~qccL99n@2YZ!B)%A;~R?=SJS{He&*=-1h1tt$x&z2ug&9PhfVIfiy(P`><=42IYwf0 zIjH)D`6Os-q-I=5McDk{q8qq|BaGsCG_c1jqg4q@riX{>4(u0AzlkY0o1 zIeuMaM`3B%TTf{%mH2)r>O)Vmd5>Sc{!*DY$|qT}K~qXsLXlRPfh>$nQ$3C90g5P+ z%UU|Y?Do`dk-=T{N_Tf4jFg9Z%|37fPtu&uaXs+W z!Z6JaYgVudy$7n!^Q0Pnmvl@pLNJ|$qGXg&bRXda^1E7H~;#r7{Cdz8iG5pOEK*EWj+N6`(QYQ-#e|?ak zDT5D}2Ez>jnp80W^r=;&lu4tYULP)Rzv@ygtwLwChSGXZbe&%yrmX20LOc@kU)cU5 z2xcal0AC$h&Wv)jrDl+A6h4GIn#sTfHCP(fvdPYeO0-J_T4B4Mnj+tkXQZO*dowRZ$yPKHA21jOqH8 zbG{JblsP}tbf8uiPDtE}z?ap_eCG&xAhFdRqrLbom;H+8P+GiJN<*@xr=Om0zM#GUm+++?Q}a_maW*#QW1KDAZlRU4wgZaT zP=X2LDmfwnt~&`Xj|?I&ZkMp2-rQ<>u!+&)&|IoOw#I!FeMRQM^VO^uOnEqSP) zWG|~W*R}9($zolq5{d>DRdqR&hDb-x76B*;bs3B78EEx}xqeK7yk4(rLsav8nqnxo zG-SZ_R3|Hk{pHD&!^484WkrA;rVSRjtFUk~fHBuY^k6Vt@DY~ zpiV&}74l|;`3`m!f&mdT3rlCjF4Dq}E+*G58^)F03fe?>u3_x7Fv<{g@1(G@MiFpI zG;!l0jX1VwHE1giS=+Rg>kU#xQ>>6_X7w5cx;x3&SPQ~ zh`|^Rw7--`ce-CR8~9cw0l!Az+yxDES8$bamtFD3h66O_rDryk>3grhVuitCsD~yN zwjn5I$3n?^%(qZkmFdyqg^@}3u++oiiJ;1Aa<-1LvD?I)Fj_P+!)3|DJ&}jN%Bo&Z z(do~*KO=il?n1VI>8tRka_?P3@mSlgy$Lx2KdRH^XQpGEfFdT3VKP_{nFAilDkgd% zfhfP}8rKl8nO8Dt6y01$YN5!Hh*)6iPCMH0%B+k>3+(}%@-21kfvHu=C&Gn{a+J_Z znc1-(YnWAYjRy;%{3qezTXfRhG-Y~@?$ni-3X(~p*(T&WH~1!Fd0OHCFy7^tj=)%1 z&E~Wr*2Q#s>(x+EWym@q-AK5RGGCw`x!sj~g>0>a5+7@4n!{vji8M0C*W(`y1c_BQ zrPQ(J(Kcc8Ur(Kax~Wv-NZDmEL_;DVpi!#FgxzLMx1*V|>%as5t=w>x%yI&hYg89> z@^hr+YE(5YZN<@5U4BCFI2-MzaFJK!foeDe3GK(!XC`D-Kwq+@Qi5oW;u5^Qg`?WN zIf@boYWatj-1}#%przuoX^C*|zQ`%USm2yB%ToH5KM;D90tyL3T!M&d6o^u8IY zDE>x1X{At z+p>U)Q9KS)wZT?^PQC@FcBFNxz<;l>pU zYE&cFJF?=B5XT~1;{r-Oaki2ero6&1ACJc3gTXwz@(lQA0p_8kM zHOeRUaXT|l@|rrIt~&mSndeBNR>?bV@`Z8n^=7std3tlFR2z;?32fx7%oY^L;g{8< zW$JaR^6s*g7?%>r2O?YJ)Gm&jRJ;_`U;K^xkr1OM5d>6)(gk!O3w0DO4agti9L=GG z=I&st;aB@Wtb?%aJlp)c0}D^Iv38#~O>QaC%)?RzoGD5MNLMSGoZ=uJ+c_Er!XB+g zXlM++Ofn7G*Dsk=dxS3TbHJX!s?w2d-pomTHXE)o+tgUecdBeTYNBf z`MOCAjI!2_BbgBpm!oDeguo#_U3naML`}`2l=GU!ThjiKuXG}Kv7ECx20da?GqQ8H z;pn)y&Qc^{mRM?EAy7g6#m&i(cwc`+nBVIx`j#R-uH$#M-^&kLLIyzFT^tMi7LNtl ze9z2i40HRU$GMXU*fq5!E9tz2K-x~^?U|mM!J!*%EN!vQ1aCGYnFXFn*B8=bc`3SY zakz={p(2OKeT*(HaN8Iva->#xc$uUkC*FkBHR$g1>9kI;5u~Q(rbeNjY;pvY4BLkCS*XC8pnFx9@ zJd_@TELph`D@9!gx$h9oUQ!)S_c0k4D;vR)0EE(I97hhFT5@EWsu~4a8r12=s9&Va z*N)PWTdS&{(*6e~{R8c~frWx-?41m1Rg<&QMqH6z+k(euK1IhiK1-e0&$XQ9G&PFP z!e)O@LGTg_2FqDu)u0^W1{zq+Xcymg?4J)=>_T%B(A&F$3fUAowL=fGtWFnmZEMFE&`lhnqrAMLD*53N&WS<$wB=m6(th+ed z)6I#b0s7oqkpA)*t(6NVt~6CACzxi~8fLz)icX~x4$%+Ey&o3uu;gR&mr*32uDQV2 z@L{Vq0Y>OL`kMMlt;c%a&C7}{S#^!AaK20A%Qg~q!)d{&Di4cnC@$tDVqp*ySd$l| zZ1gDNuDjA7F2Z*OXGc@_Max%N!$Nf0@=;xRym8q0&#(Ct-fiaoFOr}9N=PogPHpkA zrc7+}gy-^lxk#$#{o1EINB;0JB?Z|=NlqMAJy znaYQ+Kej*s->e~caM;TmU{i~nNQc=I{3y`;IeSg)%BnL)-qu4mfq_enjUI!z9H}Rn z2_e?XxXJ`arq06u!mpOQ$alzv|K%r_(O^xNFnu9rsCP!j*5HvRU;V zAqaqF;dTEiD0}uWI_oH=ic%s*66kJ>=XK&sE1+0!22x*UC@HB-_m;BL(kkit=B&9R z4(n6qH;jYBq}4lW=#0{5D@V_vKye;BLVPX;UuJJ2 zKBM$FSC?#+MC7wmC0CNA)@%OER}!vFuzIMzn};ecf|am`T3L50K4s`xtgZRz=AaJ8 z4G#oZ5{|47iXqt6Hh5kW&oJSx+CPDIMAXA27I8H&@>rvT>*IC^7H%3ixfJ`&^3hDQ zUF6*)10Z}OtwF{XQ#RMSi}Dg2lEfz(tk*KPrZASR2eGczt6P%dap4z1V2_~=P*&WF zGw2=ni>?~Fsq+M!Ykdd^z;rx)MS^BDCbkU6L1KI`yw8-`2Apj)rzm2A|?b zX4BClZcNafd2PCF!UtmJBrsGbeytLMEBoP~%Q-Zsl526PDC``1fEANJ%yGLSscnDQ z^*3Ai;MEz)rzge+kNR*F>2O$2bVXfgayQF3wy>7(863BT4_B(PvKNh@=PyEeD28uH z=d=RwFy*=Ej~ngSIGAT4V~d86*P%T}a($%_iZ-|P^F1%BNu#H(mNw3s4Ha^tA+?5h zm5S+0q@UfR@Gr)Qa$M}-BfhyO<3a``2XO4a+5NX zI-1xZ^Yb(Pms`E0ow1wwfBDt_7txc0jpM%=ozhW$DZ7e9EJ$H@Pgs3+Nu0KPa|wVE z30xhOsA?;zOGvw*c9SZEYOl}ynd^b-fjx1VF~RY->!Jf!BLdFQlcZz`xz4-(2+!w$ z-`I1E8d&Lu7r(u{n|Or)wr(zu2d#!EkSPmJ#Ns8mI?Rvd_Ozwsi)rCEy1ar{q>1(! z0uD(Gb>cjUd2hf!*p5|1F~k$;JigppVFTLY2K*m(aMKAwj(_(I1*orbKd9-2>arY2 zf`fIZZUI~bbO%U0p13{X95(Lr=`>Li_A}RMoZF53KRJ0ni5bb#e4;H_flV~OfjTN| z4E$0GvcEJB2zPIMR_no@#)Dy93qk^fD z30V-g|B)`s^M8ph zRt_$9CPh-V{~2Pr>E7yUo;c&*9Vhb>(;A0Ok#z$bVG=p)jFX6=RN!Rbz%fLnH=sqt zp|K>yL#xwR*X-RSl_c^Q>rLxW*8DG*AYYg-&$(N1*5mVVxux?c zxBIjASKbp?A$3`G+bT06Sln9Sylm_!4mOraDLfb?0_m4oJ*#&eBLg29?0)i?T%*no z{6|c_0c@gmFS-2G0Q3F7D2DY5WH4cTZdjVsHkVvJ=lW`{bNN^NT<@|ps&Ey|s|P6O zcJ?Nl{N6LaQ=Y96ggA|$7NBLGXbJO!b*|<*ei}DL6}RVVRoV-;;pk@BRHe$%#|~DF z%9IVb@C8-32#{%f6VXf8d6M|>w$E28@7`c@6IRwl< zYePU3LQw64(;1=W2JxXmd`E*A5@C;oog^hb4uojLnh@bx028Q$Whf+e3nFPGv4a>k z;=_aN9t?0oiw#K_guj<^BJqQ-57ITlkPnG4g5ig5AcZ3rL5f7w7C}j*JBEG}GoitV zj!-S4uLPqFQcuKT6=hgJsD!L*2iaU)HADzhxFgot(Nv&tCFI1MgvIaO1g6C@m0c&bcSd9y-x8E}bz zX@7}H5O*q$SZ2Po(t6TLwsmJ!uv~7%bWYSotuM+{On7m1{%t8?xxZM*m>JI@)=H9W zctC4>W0rgLclN_htnH~O6^B}8TUJ~qF=w~kYo?5G7prNeT$aL&$SK*W#3=<%*vVLO zqgk!S8r&7l6^w2Ata;4Fg&lHtMsI|Fynlh%VTbb}4}v1~8RQ&rPM>ke{ZzKYQ}#PIeFLhb*zEAH2oBwBJ0&}| zJ5sw1K4=0XBxxkN0)5Y+0wMg<0#f`;K7$5>1~v_K1{po@dqsOXcPe*;qFv0ATGTsq zxsL~bO5fdn$Nu4eb$?)Z-re_I`_*QcXqfgh^CttkR4V-?8ZoB-+1&-xuWt|i1Osr= za8`)i829#tnuV-Ry88to9U|5uHNlE7pA_7bTHktvev3rPNy|+5l5vgjJBN2@et6T6 zv2(UEJRdFK8V?$WH-;F0N5u`-48Mc#?-yvPuEn{<=<~eAUncw}v?i~k{P8a_tK$J!f8;T!w5fPVB1QmX?&At0u7|Ei5l8)s zPO{2?YlTc1Bw0H}{(Nz1S(&XwH!&OPG&xT>%Ve?S3_yWmQH5CrQiWg2WmdJ4KsrnX zpu%3hyLZ98$m76^S30BIQNBNgY@%}Vw-^-*8-*+76O(pvZF+6X=FauuwZNv5tBLEo zi^ECR8G)Szdn}w z3dqer%1CB7*;TGCLxbV7G*g?NPEcKxW|C=B?JDN#GeY8ojd+sF9QaHzU#VI- zQpHtORZUc#Py#F*sR@VLl$|AfFq&m`|;=M?wUk7>^7_8E?uwpotZ zwmHtZ_Ia-Pjs>2Du0{UEz9pfh!DaE~u@#w>=~czm#Wm2{m;7*jf5U9!eA908VasFd z&vxJr^iK3H+HU$D(O&US;LnDA&i&p4@q?K|wZrWr)1#|n*W-_q&{O2o^s{egRp+ed zJr|M}3zxc=Cs$5af3CxC&~I{YX>MEZgzskVweC+ITps>C#y;UcRXnpl54|YA?7iB* z{`nRC8~=CZ8~5AzyXO1ZAI}fikIYZtXV+i3zdQfz|NVnN0{a#E^yfcimTb)br_7Rt z^DD7r`JaiUiIGw6!TI6w6y?A`VveTjG08C=K01EcKtO&_Tu>G`5=Kf4A`v8npYV0h zM~^xT()|qqBt>LjEg~zT8VQq;0wWDA_!4a31`VK%8(;c6_~FcBGDIP_DMTVeaw@V# z$V!x11QZYCCb2N5p^Oc*bnGBce_=BXn?Q;9;KI_9>L3e12nZtUXzrlo_@On(#>CTK zN!m}-M9BeNiDLr`ci)W*(4g(0K0T$P#k;^yI(H!lqoF6OohRF8Ho@XcKobi*UMgm# zNlBW_3<4(|0FxQxX8Mmu#PZ)q^j~${|46aF+yegNMXdjQ(f_+1Wcgp^ppB6*I5OCm zB>`L_IQW0ODck?$rfgj7tp8;p!9vQx!}7mgTdan!8`cT-zumi>P5oqHPVosu^L8;& zGI&%G5*Z}K9OML2O3DETua0Rd%0MH8RH;$UFtO1SvNobdWpL{Oa{DX^QLYMXh-e?h zqLYoO3zgPrEFN|C@#<7j4pJ>XVan0Xz)v<>0- z?mzlTpQt|Wr7nP&{A>CfTR_r7;CmU}dM#st-pp@y(p&xqGn!0;R0Al={xQKdCggf+ zH2n5O;VJI+^>pZrwOjs0y0nKQyE}U=gKg%kdy%y=PH-1!X&$BRqM@Q&4XJyiO=8E+ zZ-^3ilvUM~6AqZw#J}`G3Eu1-+pX=HT>uSP3Zf{t@+P&4xnU=F+V`hjrCVVfqktW6 z!>G4e!b^+a5kkc!qtuesoUyq}B}_1df%&1x{>l-(Zty88W3E^x>=XM@8-=`YBI8 zirNIP%M-J^5mC}1c~qG{w|rJyVTDz(;_`?6Pb*2q)=v)V?4OMZlpWk#n_9sf{Eyxr zNPOPMa@SYL<(#d{G_<8A+45}XJn!(trQc)p9{M^Md?(Gas6Sar*C(eR)5YuyNVc)N zjnZ>$JJLrul=jn}o$^7MF)+0QHnm3r&G6fq?XEBJ%=miqYVr+7kbXmM*z5QBp1D&z zR0~Gs#`0muwIuf~TO?d0?4lz<vn~UYk<;)|@M%B8zg3t`Y4q?qTgA zrqdXZN!|vnN0dOZL~C?R4@Pe_a?IiYn;tHcfGxXyS*Jf6X*Ze-!x z-#n$92^sW{aKW@_JFK%%CCccSR)aS-_Stl@>eKhSiZFIq zrm29(z}#ThOV;Yt6ZH^TbKKj?28zn?Q5N7zqg{pWA>3t?0=>16-Fp=-ZIuksVZ1ki z1YW7xVKH7!t8zOYrQ+syITfsJdzV^zCrUP(oO}fb79!{M^!XdD1U?kcd)S>p-L%j9CqHZg_GVd- z6R>-42t;4AvXQfK{tLe~N#90;N<)MAZS~SX4nwOJU*H+u$KT62aGi?H&S*?$y=g|? zGv*DQwO6NOs-ipAS-VR}Yl-O*Y=~{GFZ*DPwafPLiF__Ken`>>;K?c@aA$7Q?dHtr z;NWb|) z!ROBK!O;QvOjzKa0mTPsw>w*J)T&YH@`-!#^rqli$K&6yLGO-OPc@~FKazTU(vTSS z>K&|lh?$OXskdJ+WKNyFbJ0fZ;kg`xfRQu}Yk;)XN_0oME$R#qgQ8cs(pMwSTSdHMWyxrO4dU1p%6aLgV@Vd-(nxiDxnSSrvmm6{ zB8P+a@4JVVWu~NvgQwmGvL_-FkeC@zq3D5(!8XhZ*feuk3Zw& zOth~xwzuZe(;lrmBoJOpXALLR-_T;EhT@hejHODMF7|q znehI;NwCAPs1*La-Oee*5Io1lG<@prcb)G%%iaES+kHo@9d)$OCheT$VlJnL6*kHf zjb+&?&CuX_PIjf>c}46w;WNE!(|c4d`HPrK>g5spZS)N=`ZlVMvAZ@hxlMxjDVfbK zGsc;P(T6T1?ybx(Le6)Vl~J;A*!ft@4LR}7hhonTf$h^zM#4z)d_vdGePANgdk>{Ge-TsHRYcC+Dw;QJ6mcNA5 zn9b3aoa2rW0ml7k_m`t)^}51m?-k|+VjoUNfJ77+hU7)`36TV#7{i)SfFVJ(MNjE! zMAPc4H(LnNUecIm^ud^tfbg%f4?65Ms+diV>sB_=Kg1d#nkYx_J6VtATyX7q-jE^3d zx;BpHf=8dn@5W2cbvL-b+ezawpFfuMOykS=abM>+tYs@Tfxb}x^ivX!^6$zJYG+-i zK(DN8v}XI<5`%R_k(#h85Xe*-x^qo>q^PeR&$`E)(XKR#)j^H`m$0|JKzp83>w(;V zKCXXZO!Glnns>GRJEGJ3B{7^f{ix5d4u@=aR8w*xo50`KLH`Jf2v8>t4tDVubQaSE zsJ22G*yI@}nDCJdJrKh1RA&EOuoYqvi*Iak5DpqT>?crPjeX$W$gw7S0a1pLI+S;rL-O( zDqGZf_7FR@$9i`#4TVua{h%XzL-v3ECiO_JirRsk&FF=y+`lLnh>6D+=|RYGWWlKd z_C*FM;Up+Fh$a(7Wj8i;!@Ut}4Y8W89of8coa*N%BF=pXq( zS3jwN9^0xiU}G7HZ9RgN!u9{2l%~**!?`oW+!p%D`g~^z*s3M!LgDAqNq{!8oH_okE>n0l< zAB74p*mXbmP8RO^g9*bKlT&U6BeGJEb3wV|SoQW1oaR<)dO57E@x{*%M!r%$tu)E? z2cqpXLvud!zTw_!s}~5AfpgCXgT(RAe>2PDyytRGG_5V^`$AmVlLYT%e=n0{7!p3A z2o3Ph%o=2Tj}3=Bh;K4h8WOsF@q(#9X-RZ|FXc6sNNr|@J zO@ZMtoZBBB=9H-G(#G#Qr?ra|?{{DQ32eFehW}Xdvj1O7URHMY|KB!|g_M(-o#THM zy(_8SdZ2Oa@$YAIGvJ}q@iYj(`e5hNia8b~ZHrlMBfFhr5Xs@tvC=w5p%<+VqsNdn zSJ-vhY_>ZjORVb%Owl-4+QuXY!}bXdbr{_C#Nyuk-Y@?3{&KyW$#Om2`ID3N1P#ud zgd9|_@565OJmTpXN%E#B6q3Sa6t^rx55l%T1#`w zh7Qdc=^h?GU68D7u9@nu@UwTJv!0F1;R2ukX)fgZ`?;Tj>PsLG6Su)OLo0Dgb`po+ z_0|#mmLfzplft*GRI6NDAvCQ=>FqcCs3SI84dkB?xpT`8uaP6M$AynuiuQNVBkeOu zrp;qB-@LzZ^Ud7M6XoT4KPzhFwp)T5*N~b?nF?X`fbxB0Y9g!cB*yfMB4i3`K+#*io2u`Ub74IGjTgsp2gm=US{e{6k5!Ae+3inf*nC=l$_ zMa;8h=jU-RtcI7_?)w|2vP9jmrbir_WH_;>N58yZ<*}bmYKk-P7~Uh@oW*vqevH^V zOMTExjVK+~cToGpaGBe_b=gs1jL1quk>RZ>W40+1HdzH)SjDd|5ZI$7?48F1;6)Zm zkK&mbLr|GiPvB&kWNXn=Eh(_l1VR9Viz`vw%L3Q~muT`Nm-yJzsg_~cBTiKr>k9MS zA_Xfb+)@=IiC9GCapj)>{TV<#h!pj8lYo)ID4mGOtX9U`G)oF8wnjrP9b^xsT2Rjx z-Aol*w&J=e7HCzXMK(^$m=LGo8#H4>EU0-T+ne)k8rWs*ng?G4 zeeqn)ENM&CnhCSm)!c9%nnSLK5RVC)YoxKQiyQU;{sarqj!S>Y>)ID(r(j{0vMtI@Y zP=qX!9V+vUv06S5_^HLF2yXUG)LSE16ssGIlF^>e26H&Bqr57lmepwgaFSpt5~S*4 zbueEh5L(FVI5mP-w=Zp9e!ys@)G5^tui;7d*>kUvoM8BdbI}#2wb!+O zZti8B%g1vTLzWP;n3~*n?X&6y)C+4?)@0k}*~VOjUX@_@u#0G zo?v5R=Ra9r5=?L{#S;4fsH5?9=KXq2!yf(XV3Q)qr`z)V5H&ca+qZP}3oh}^%yqkK zDb}>Ff*hGMFYJwkn+i9lI`hJO%X7`HH-5hJt^y##g_QmCgUs6r|9WcatE$^r zpK8lS*Gj1bVm9t__VPnqAI|Q0-{;skVxpX~mr%#nZzVgg=S9)J4l3ocm6)WFRRJG77@WZKs>K@6Z-S z+9v6OKkmA|J^fXyxel99ZTZNk(YWB4{wVuCJC$U4^N$BMEb^D~HN`>wM_71X|TiCTNCjvh_{wJJTvkxQM#2}oGY>|gzUL46Mb5fz$`%YNIbDb z;+QZq458`7ioYvESCdjM%OaJmN>}vai4>Sn-bhgq574|Lm0XaHEgH+0A7uvHy(93r zVJue$KK_Pum-L@)S>@uF$^-p;)O+!CSNse)d+>8N@ULL3{Qd~>(%UuBd6`VBI@%K{ zbUb?5+%+V(0_s#IQD66}qCGIbgau7aue$e5cwfRaD07+T^H)1mZC|1^s0%&Pg31F9 zS9`*ls=9m9W4y?4pUnG)G*<=O3!YXXUlP}=q%IA63jh!Rbi@{0qW%G(Ek!9_8D}`8Of>L0v!e-NNv1sAu!HoSv9ZZ!TCTQrHKQ z%;Om0M=7T4(ZQY!F|ThCj}=5?e>!Qu?K}OAt$7fspNrrQ7CIyNz^$MBej+UxOQ{o# zr8BDX!PWj7Zrd-F*e^Ek16u0IIsSlYbCkLR=lf_|XW-SnO#O72U$oK_zE4j7sbdGp z`dJInpKs|`kNsCy2>aYTzy8jB?zzqjbg1p*g&M&d?C1xFCZdgs!UdrbiNf6~0&j2Y zM~i~n%dSXjCGGXs>#hulQC~Iv_P*6d%s)V{jc06t5t>jSjceis6_}WQ5K%mEa1JsB zUy8&PT71pdiC5q+VP1mYMM4UV7ii#6$%Ds4%oZrE2-p#`VHtueNqMdCTbuLjEVoBJ z+IH~z84U&_A{Z}-NY;t z33W8=P|Q?RhE>(XJauH!N(Qbhf>kujMap0p$D1N5nI4!-Yt5=iCEX>DFq?rinM$8U zwaKdQVirD=%)_dAItekE#y^=c+N_>Fji3#%HOsS0RA`oHpY+%y>o!ZcJ`zd&qDbSk z4@+(!#Tn7D2c4oJ>lbm&1cjrapfBK&7XjHraL}OZ3OQPX+84fj3t`XU@(S79f^HWe zeMFh8;CH{YBw-iKh#DfiX2MkRLG+n0n~9KY#*8x|Z;fCsWT=nEEc9W3Mx^v%8!f~u zBY~Olv_?3M0hs6#C<1vgE1I|x@odpyD~M55n9&6<0!2(~N`=P_TG+FHr%x zN{>hW%?0~vAL0aJGO3~|Ro~*uy$B?-RthAQc>&8{1kxej+3Ey!ZhXZkUP#`rHUaC;0jSPzMaxK9wJs=RV_31nfN; z$)Kqh#J8dG`zVtWkO)W`TMeLY4U$X)ou~sq5+JozkOD||74)JGxhl<}kyIUJQ=VOe zLn|v$lU|)>Q?gZ^T%BrDfl#wn-ACI%TNzzlU0t+QGj&OfU7!7)6#&n#dH1dzP*re~ z(c3oQBDCIc|MVd%^t0g+@x!L0)@INi`@r>+pnsv^#XBI+@Ob@?U;iM}E1`e;2dU81 z{A0}g0~>evj|b*}gor1Pjf&`dxPStwN0j)JJpO1;XQI2)#h!>GZzk&dz8}1s^HF|* zDZfdnpU4yshI6N+xc@%@N*telsNa!IaW zQ~U~>;n&z4zrhyxEk@yY7>#eRC4P^s@CR&-KVlpF3ESe&*be`W?eQ0U7yp4B@K@}J z|HMxC8+OKjVHf;2cE#VZ8~z8o;~&@q|BF5GPwZt1VDGns*2e($H46I~jr~ms2N=YG z#^4|m;9z5Mh#?$m9L5;NVaDTdBRIko#F3^D#+t%7$`rvkQxr#=Vi<3VV}dDxV@yd* zG^H@fl*VLJ22)H~Of}^&&AfwSO?ez=D&Tli5hs{RIMGzbbW;TVPJw@-*S$emgs`uz=dausb`}B0ZU+3rpdWJrzXX-mz!OKC0*H zV|t!GuIK9$dVxNvbM+~`P@mR$`ix$r&+2@APA}Hy^%8wSFVz?IGJQ!e*O&E5eO0g0 z*Ys+AU9ZtM^jdvWuhX~mdVO1O)OYkIeOGVR_w*KhUvJe93S@`f(cAPxyGBXoie({VaVCtVBI%0;_2F3PobEnQo>OAqNjJ*Io~h#t@r*VXlK-CZx& z&Gn?G^n#w#D|$vRU4J*&4Rk}@05`-9axwI!i+4$Gj7xC|F4-lzRQelzOJCC)`ij1z zZ|HmH9J$J_lB?_LxQ?!a>*IR6SU1v*b!o1UE9Q#060Wc-?uxpSw3^n_TG~i!XalXI zO|F59aE)A~Yv>xgaMy&+(nUH?|6{${!=tFK__;GTyJ7BLc0q)|s+o02N}7Z~2_(dr ztoz7=@W>094X@oi_`>(~L8&4|{fMOsU9_OIwAvQ>uvjaPS*V!EE81GyB2*OnP;4ne zl}Z#v(1Pst+?m}a3D`gSb$8i0zu)hiGv}Uj_mbJK^eFq3J<0*Lgx$fGvSsY6>`wMI zc9-&ja$Y&7e5`z^Tu?qzK4C){XQP>uWibaEqdcNKtgKhoDH|NkjyaAh$23P1D`n$Z z2`gk%m95HC%5LRpcf@|JQ!dDGG8XmHfBud}bPp=JLwR3$PdV$Taa8lq@o_wlf1c;_ z0$#|+^CCWhPsHb|NxYbE<=fKt)Lql`{T}bEB7CMj4r_HoNzK71D)A=0g;~}Ty z%yN!)j&Zu3H#l!}-sH@7s!k8z#TU@o^hm}K-ou~ed-z_ykMHLPcrSm>Im))uKE>8$ zyU+Fwdx^c&w#q)$_Dy@4?SA_$_Hx@Ad!^k=^2vBoO-e}}fPE7{d_%uS$@}pALwE|F zhG*e9_yfEO=ZFGfxE~I{TktRV5H1nG=b`J#4I~f#Z?E{Oj4uI~d+~W~6hPu);&lAU z#A$$xq5YT*h(^)eD@RSKM#BCxbt*k;68 z`=8Q2B*ZOtmSic^gf`6Kw zvASoeSGp%WPNI+KvdA&8wx>b{5-eE%4sy^i=ao(^ZQ)8hKBIf-}S?X>-NQtyNJ z;C(o6exHR8@H{yOA0fVg%vnTNvxAwB@%;(>8!qAmKZVQv(B(nOWr*X9fe<1Q8RA#0 zE3EmCk_=+QGcA)0AqsI2PKFXEaUnBMVQFR9Rf^*p+7Oc&POc*(@Vp#Fvd9?X#&h#V zaudlW9&&R(ZFE{uQPId)l9SX%nvtW^vDxS`s-JHjnLzHsZ*i&@p*@illgXrnOhu*; z@fQ%6p*F$1`k)?K;fruF;~nWG%s&E8m6*3`;ez?|=C*|N+09Lj4fV5T&X`^|t+uAR zDj4wlZu3@F+**E1+0@dKDU*xF7Z!}m%^9oRoSijdn9IqTG9=S(%b>DEpdhGKg;gUr zY|vb-rlwF}ErLX(9}zZGq^bt`7;4ybQwMr_(R0xtPp{?aO?wiTS`Ouf1!_=JjY9!V z?ItY^I@%8fw2*4_nf46Rrnx5I2s|E)P=i^W0o5R3HE2{V>x>4&0n8U;ieK}0D1`+O zQy7{IEn}RvBu2(n5Yv#x1ng!02kw zEv!PTdnb5{@8CyJgj-dsDk0-XIW>K(bcLJ7GU?yPY!-iR}DEg z+}hSDu91$Y76@2xz=E8LJ|5$!nlaVq74nYQKT&~Mrc0E0SQ&iU~!Xf zh9tv`5q<;0ZOJI3C>RiRsljMCU==8GX$^W0OiCP&6|3%Dlb{$vq7GxEABU0~jOy)+ zjO?(x9rx!VRd;&~ZwT8L()5myn3Co)@{Z%}JmwwEC|uhh@07DxxjiRS)g`wa64OFL zt->$OSB`=U$7Mn>QD3>L6E~#X@GeOYVGYQGK+f^k2uT*9{u;L@gT zvtKS366u<(`+R0;mbWMd!QIT9rCIl6KLAYpJZf#_3>F{FwX;$Isrd35W)umQN zBi)Iv)@aP@jV=j>JIh24t+qX?HRb>Y9Cp1$g%OVj5Y~5c85X zO)Yv4{w=GnY1Vg2MDmAyq1af|^d1$!YqFAH1u1|kfXLK{Ak*}B_jm!iOqH61iQBpf zm|SLxBhc0@S)41yNyt%)^O~G^;gGUAvBh}Y2Gw>ko_j)_(QruoxL_oX5iF*snrFR%gga!J#Ow$MC?TM$-M zib_C8nS1Uz=YHp$J42xxfx>VIptcUKHA6YG3bmh&JOS@5Cf7y~FV2mRZX$M|!67o& z80j7z2G~{Uu5Z0=i@iltf0^qFr2|{16eh=m;-zIdcpY!k_SbjHDzRF%A#w#%rU!lV5_aCe48W69s+(z(&LS9v0-*s?ANNhozz>-nY*r ze)0r8UMBGY1tDVLqx2d27JNj~$cWOY2Q5bfmyn2$!k6YeeEnQ!r>WU^8HN<9#n+Ju zPLxNpPKFW#fsEX4*iZM`yEDf9)Bws9e|P&D+-^A1@f$dPyYPO&R=j3U#|t+Ltu5Fd zvTIkBg)$lq2DvUqwMUgyGMVV0+S?Sl&O&Ljw$z*sI+>6tx~d}SpvV~0x9+c?7Zt=v$Z$)@6K z{)mU;JQ05|LUcun^C2Rhsk_WC*eXb=Xfh#Cg-Q_WF^8y1X1>i z$c-&-h3Dit4%IR;w#!N+j~la6mPZ11(1H-H4$HE{iEbpqm69wFRkaV73|O3G@G~*4m<~!x6Vz z-?u0oGFoW4PEk^Gu)bLyqfCdGGlIcAw>6oT1ZH)~-^Ym6?P{#8${^sE4K}$WIln7v zH(bFN@mDs78(l1IwuzW2TAVy%@HEQIPP>bzY2NL;R{SmC@c=?h3Xmxw70pF&R^nSj zO`P}hE*FpT)EkpcN-|H4P4fO|9@A%ATaDp-+3|25N3v#HZ=08l+VZ$zGHVliFg4(>PQ1f17{vlO>4_A0Gp9RbxOOvEtL#GNL&Qz5{=tplq}l`%$?IL zlTsFrY}>uObUM`B9KwrsoZSAHH?~lnGqR|@^p>}!d%>QGbZ4`Bp)_yJk~c2TSvsc% ze`C?MRUP%tXcO~PQ?$N!=Rmx_v(3gORy>V=AMI#xmvVu4rucF5;ue4D6;Ja*1buA9 z)SnrFl_9fV(&IN7MCxVgm&k&=coPaCrR=7X#~UY|{S16nTx@UAd~M0&&68R4D$UoT zdb5xrH;C9x09oMDqbh({MXD@%0cdliQUD)=tDNhk3b?8yiiC*3iV~2r5CT(J#oVoO$m1Pkr^&*7i_+t;wq*$YX-EcL8Y*RD-tbar!xOQs03J z>Ze{sX5=k9>CNL<)@m1JL)J=3+{1NbMbi+8|s^83&*kmic$jaHCqX9HJ8Tl zZwUVdXaKw(Ce9a?pbhY)tGovqgW};z6TCM{a^(P2^W9L*pftxiUpS&jFQ%JT)=t3G+ap&UzaA!kVw)ckn3mVF4OK6&YKF8i5j^2G6RxTDeuV zVBq-8Lc*rkUGfWL&5x|B5>S$F(10JX<+kbqS%qbGi&8>~Cac9#P>>Q)B`JxblvJV# zNx**;tCLYBA&Ftm#u*H7qxj-KD?D?p!j&TUR)yE2iVs0lU8u1VRYV;;pXF?Qy0JJ8 zW&(Q7Rs^#Qu9$`oi4}ut62zcsGp3hDW!w+IdVaLDvYv}N2)kjn_PMkOy7G8rCh~Cn z23bG*UtgFF$p>L05F7xQam62pn#*Al@evTPUzQpI0s!tv#j<;U<$VohjOAGeT7b^$ z)?J8NxtP^jm8aS!rC0*UIV8>PYsgQ1lyz7YYFR^ltWK~IPT&pJJl=H?FkIK`8;k)z zZ6(?BG&Hib3Vl00ji5L*@+5dS`5EY}#6dd)U`2__ZntX&pvYkkjsi}J_9T@VplFv4X(1R3*TsC?IuGF863HZ} zk<_mFOI}`9T+7*bgMo()e<>aprS@nks`mGIzhI3GN*7O&6qfusxv3!`F^{ zaCj-u*C#$W(o_0NZO{0|O)stt)h-*~L@0Imd!;iYD~{j&;n91!^~;a{>%x<#c0Atw zwG(Tf{=o~GB|A@&o&`vvp}q%E0~#+^_^{y}Y696&HT7QBjO-E3N;vkZXAK5H&ObO2 zV)b0s)hlS(Ml2_17?mKVT*v>ni4~{iSx|uVU}iQly7R@Kjc+X{vCvwNTVwst?igq) z6CPy6YAUYWwSE|4n?g$F_0T z@%!DK?btrQa=AOlk2vS}ZRh-c<>iZ$CXN#)Y0@_BQm1Lsrd`|7SK73NqA^Cr5CyhU z+JQ#57EOROHj)sm6$Z2wXj1zRRAnGdFtL9IsghiReJ4Kp=oMn+=(Z}eI>=VX{5H@ zz9o83S`0R;@E<{o9^rmi23fTL?&^Fa5kO3WGVm}G&M63O9lQS%pGtC{9+eRB>~EeQ zVFJ9jYr5M_tI9_n#>U4T0i(jvvok~43YYJ_^1{7Wr-om8|CEy} zE|-L`LS0i^#22v=_&nta^S&_&Y%n^FM6>4M(-R!aPjy(Mtse3TovQpwTeczEdi+dk zQ_5mj>r_yc3P0XL4R6B7%C?){s(NUbM5z^%JluwDGtdYQcZtU25( z_)cd1Js3!w$N+Lx@||w^D@RmVQ;Bs+hZ0#URf8mzI5?UbqBZp|J57C$FAA9Mt95=ZBv9 z&TP-ot?ec?4x^SfI(l#*G!(al3Nw3W3ZV_hE^Xtsk9IXEWGJT4sMVpq?MXlHr-CE9 z_U;-Efv4xbx+g~4?4~eh^O@AFhh=l1n!06knpe z6iRx?FUWLFF@HM45cS{><+KDT@H6x$PA?_H)%Du)HEu4InBzc)o+NM?<#Rx`_CqWk z$9{=K5gvG}bDNThmC(s$#O+4fO6Ue&Z@?Jv7X~mTA_o2*1F_Qjk9j4bfir51>-Lp^ zkvIR=4zSbqvv!oXkJ_j0n9gpqqXcfZ<5rkhc`X4UVKwSO!Frd=3;cwGE+}-q%M%40 zF$N`9^H<_zvACls@H^-)9$qaThK#?F7LvcfcV72@ej8Ca1lfhbBVHrF(RfvLt5C#3lpKvlgkSe26uNTGdmR3s|{+o%F;J=u>JA#(}BND zcWy~E_GjYTIGa|lQ0TS&?OEr*f!y%XK}W)u@ikcN7Oly}*c{fDCepk4%=TZ`JEClg zPsD^d^ONiE;fU-I#A+w{$r)U2-kqZI zs&r~uixlw6q&;NQj+|LKmfklO*4h)E@>{+Ak@&`(0N3Q z7=aD3A&%;<9VK8}B=h*|Acuq@8r5o02nWRN2TGuCkylo>zvjQ~U(LYds(|Q-sHp$x zN);cg4FOO&_nOR<#BQpL-lk?xqk6-I?Q>_hd7?AV?HD}O zp%x)$A?_w-6XAY8RqySMnZnUTvt5GMY<>(PYF2<M^S+ag&ha4Re&hOG^rGwp(t#YUc7@g>FkJ0e3i+I>60j~M`b{ng zg)T_j6+V<}9@6LT=gde3()>nr?MC#5IN7QG&6{eZQN$xvse-&VqC)eLJV&ewj$Xv; zRC0x((axCNCgKVVNU{d<3So&j9AT^a5J}45rGt*b!bW$WN2|o~KU-T!g`!SjaJKu$ zRE)=(46bo1c$*9!(4PmBRu7{ZoP1`I)95sfZUjTj<#X6&>=#HEGK}m1Xr(Uvh%ThS zQZ4yt{(2s>Gu~bpQ1EQxD$YLoZO291J#vrYrvCf}o8}} zR7dvMmWYGj7H2z>5r!EFw(oSe%nba4_G*ibLDvD2N83G%5uV z9#A9{DMmEv3n5-}W@cx-v0W01kgc7W-~W#P^PO|P^L)63%U&`HX%4#wtXU8L> z?n#Z9bswfVIY{NwgY9o;aY5AvQ1M&EgQlQG{3`1$MxsS8Yl~E3g~L6%R?x4*r>l>? zSPO;pqDR+;$9p@3VB-B4 ztOeQkXYa#c_rL;h90L9t18+zG8a5=3Jfri19s3$6bsv1vAbzxBao16gOmX93Ra}Sb zsJGq8sYTahwFmu1o3_#QoNn@T-Axevi}jNy-hQq;uz2C*3vVAUH`YXHcBnkp+uJsu0)Z$~$N=(Y z(~$&wX(jCG;IdZ2s_>FD4pygye|i21nxSIoMs?oe|O16PI2c-IC-mQhlB^IxDNw@jl28&HTtC_m#3FYnRnUK9 zxPwfNJ9yTNP9hGJCmgq1MFIGvmEc#?3qqxm&mUMw^Q#N+s}!15Sy9?d4*Z}0+Xn1} z-knO(^>pV9&1Zwy?o8~EfZLTLXJ@5H#|jRXFtHSqmgjpzJ#l+S$>)6)TY2MY1P%em)l_vxCNtuF_4RyybXk3Z2E=0 z=x;R7_CB;YNkWUiuerL$LbYn7j7Bj6XnlSCCjJ5bE0}~wn;p%7{MZlF@5c_voGn|8 zGo-s3ap_{=9obUThL}oTN{6bnuR1WxgKTe~c|8WhCSjzy`-(>|5#WbfVobdV`@Ez26p1}M1`2ISUmd!HG4_CXYe1YM{`s(YyUxsT2uChhB>Em%{wCbFs zn&QP-NvC0M0TwRJ47l^w3Z&M>UsE3{6%`hlQ{K7Fw}&)@3`V>O5FX#Sjm5UXs_mBi z&|vyI$p;6D#lbL7yoq6F2re>Mlm_7G7DYmRL=%#i!OvmXk8ramAC2ZZ7<>uGeu60i zG@9?A@gFh)-v*YLkD}K8x`AwGkO6-|5VQg;%PPPsFmv?UQ%v)Tpg5(98gJn50Ll^M zh=%eCN>LWX1JhvViX8C-XpgIo9hW)T;_+AAw5>`{5YxznuCUu6Y*rKS%M}GWcH8X$ zTM*Y;reur7;%Kb9sj+QcHU%_?!*0aB`4lx%OB7s~@q}3<8&}M(NH7>gyM&2c$X@lE>cZZ{*31{8TwYRWC9>HXCMBR$BJ-+@4ewaK0esK($co*rx zeufMoBsRRl4Z%;+Q^#JDc_bN$_$m7`NfxMGeKmg_?KoE$MTS;~uK!LkAPQ%;<`xe+ zsaR0E!>9!kkH-`i)aHshN1AGoPy*Ym4)MeJ`4eL%wA3BUdRUY~O=7@d>8VN1j?!$o zYpNWjVXBY@dwJ?$_wzqKDm6Yf2TO@mZ_sQG_NEf0pc()3-j@&dnclNnag&9)6-cUiDn&IhKe?r)JnAKK%LsEh(hMUv~?AI zu#L4EXltp2I*PQ8mTGH7s{)Dlzt=Y}6NyOMZ2fe;d+vAd_uX^8bH4NC)f5%i`m9!8 zEwT7b_7_3mj*^w^CrM}gHOnP|LN}P=H>_!&SIO&DVJ{{t2pMqNdP ztO(;w8%h~rF7Lw^_Vpy*)6`ECgN2k* z>c)k{LN70a&3k(kYk8unGiHZbS^59v$ckfnd$iGJI;Oh1flrDoDN$%BF{mt47}8)f zjJX`SX|iNE)pEp$COaIsXgMA(O-ntTZc0rCQGnD7daoSx4K390n-j?}~jl8tu8I!vRzUxBG zF$&+UVhgmrN#D#2_cLSngwwiNd5k+BHMe*A+oS&Wc7K$&c+PPDB!YdE4i*?H;Y158 zX=yskR!|+utasF2hrgprGicR>L91e{>tt(ZNsI|mdv31S+UaoNzC*RGBgR(XM7Bb+ ztx~3hZq(XT^J+OO;o3{V8`!==p%8M~l!HA{v-Sa)xRw9^PiD&76ZN^Iq@1bpobyfQ z%vloal>5`Od46>9{@AvKyH-b1WF2p_8OoPzT2Q^bF3Z<6(ENxw#e~w)ZrTy){#LFd zxTtjAw_C#|y-6={lAPAiyQii1=?&rR$jaJ9TiXiRo^^*eRi&r%PC>3N&7bY|I&7)_e0NFbqf6>Gb<|jRePu^KcAk9H zXV=6uDn@qvQj733T`AKAnUu+NHm0*M$;^yuk~As{p$w)k_1a?GL#G0QK=+;DWK?-y zM9sMA@RSBr;|5^dQv$v+7-RjXqTXeOF0D3&mBVAfa}`LL2;floMnwg(CVbwjCObH} zDqv-SQWgj@eR>+R<*%iu z44Sgb{Q2cs#&NsFVb$?EvwQ;;KpBKE7`7a<@Jdg_`1#=3gm|T zd8yo+vRM{zKrr69S` zV)LVfClWCkiLrv$^76##tA69jk_Y7&TmP$6muei>^tC<~yrdkIl;y5Qn-Xl=QFkKF zQj4otaW&JXqGr+mW|)~-b1IZ(9Ce|Sl(U*$+tifP`WEJAM>n-b`iisMIeA>aj1yRT+W0(QlYiia?Gg5ifnz)Btxl&k#qH0? z47d!=OsA`|qo%BFUWO?vz*Q9bOc}xK`l|6y1+KhrMDYlbc;@fH_qYGB&su+z+|G+^ z19Hw4X4kO5oiJJU=4Tz`aF;=oJYUo#B;~vuL^51SHQ1V*~#zF+Pf)T7@`qr z9Pe(L1uqz&j(f5*0p8OgEW}tq+>7=;v=e+sk^DRO_5?Y=H+lUPnWiJw(vRngaF!gp zCSI3kWRx=3+}%?3rE0Z>bfV_5=f<3%VT&i5UxO10GXg$k^FXQ z)L=lGyxv0|px2~Fc$xOknM(3V2Pl{fwn9IDfsA)?kQy``s{E3glc=6Wry_+D2yHaP zucj7_x@qke-Cm%l7RizTecOb$zzArgC4!C?&js!&a!YTJTb9W!{CQe?dlLJS(Dc%1 z67M9T>1Xs`iv0SsY45&1bx(9?G?81^OKz-lPcrJa-p!EE7C$Pii+{turY-F2`1c?) zAUA+&up4XxgV5{2kigRxAwmyx#`uRC+xWl1<{C;LP{9qVaz2+yY5Y1Gl766!HG>VR zycIvJ%BAqfz35IL{Z{qe#CzJf_h~3W{0qpHd^xoyh{qvm;#$0vKzM|{&)L!cEpl?7 z07d?lJfaPI$g6WhjFMA#02Iy*%=6JCdS}t8@aM@Penq}y_*amd{(#s>rj(jAcvUW^ zO^DSl{up&|zoRPdCUtX*s0K2^y-gAJ9%XXRA{X7p;ovcPfbEZez`c(4ZsdZk==%-0 zNww;8$}x$hz5v;E*XW!Jtl4nF2K-=(|CSHU01 zef%@3?&n}*lI}3*XLoS@6L1I|R`pxJX8u83TfsK)l&b#`*v9AJx*0sI>YfLW@oBiu z1o^7&MR1fmiut?%UQ~5g!4(cQ2KNRyjlLhF-be>c>isCNGW5b)CRJWl^ka?xA-&v# zv#8EE{C<0O_X~lFXiy1Bs$4860$vD)a19}7!Zi>@Mec?I4P_v5D;H6#REtWaUeGk^ z^bfJIgH~}yM};y@(W%nWDi6?@;suo^AoIg)4 zOKBOgHKkksm5NZe@Gj>E>i5bB;?;(ymTdE_LKrinJDS~45S3B>pEcM>P1A_A# zyOyr`)~1O{%q>1U_5g(UdAWKbNz%2M;|(P9U+_VbzkJjdb>9+ix|XuZ?hU4`=LD6@@mdr zsk@bD5s}B4r2fV2K%FvEjNLC!N1kL4JRa>8^QGTxwE9ZGTs<4>TxIIe-_xAoI++ZfKR^mH zrV%R|B_}zIy*yB|*_Y#-1NgO*ymwqi694ne5pvWb^!qL8=MI;#T#u&B0@wsopaQaC z226&DFa(O&!&96WnfqsCqWLxX>qng92V}bWK&F`K($oBd`1DWWWF0=bj=89l2`~wC zyt7~wjE3u#AB?Z~oX6Lrt?`+D>%%sf+CC^#NK0nv@_6B`T zAGzMUA2z|rsJs?d<)$_$kl!l)#cdP%s*vXVGI$R*N98+F9cAz? z?27Bs^rgR>WWJKYHrN*;rRYnJYD{xZ6P$z(;p^~PZXgF~lQ=i<`u>1vTBhd%HlMBJ z{Kg(|bkG1hqp~5YI{_ynzSg=le<Iumy9vO-`0$| zP%bfLkPMLW(V`EbZCj@5K1Cw37Q`$&I@Q_$P-H9 z1Kxi@?ryB&N#{OSznH*(tu|ZOKr~&(P;IM1mUfC2_MOE(#7>vZZ|s z5mkQl@WKtP`Jy~hyQ5D*i2_F`7d-aSi{_Gh%vJ)17HSJYQ7m` z<7PUo|F0;@L)W#$=A^A*?bB&<9p6BgAURyFR5XXR^osUM%p-W#gK~j8n>nRFkAHCg zM!%<6i^1e<_2gJbsH>6Qns>R=gYV5YtB+;mf2Gd);IzNc=4ETl9%9Qn@|lBp4({=5 zH`w|?c!*={J2b-0ku1{}U-dC_TrHO~PeYO`Xv@Jn-Nd`-IyvD?tJjeRw;+i>i+qBA zEgqmcI6%(ZmA;E&oi|(1&Gx|pZC9V!F?w~V;OHUB;!VxF#B!~*ntF?CfDvwZcm5$WUjAMNEHkWt{u=Ddd@%i zn@u164x3pGm_z&aMQLhX^XlpCt{Q>%bPD{_YAtKiIP6KF9T{JuW9xS=t?--5z&7xxe@;m)w5N!YGhvYrFnNyhFhpI{r`3s z>8!d-GGmGAMtd3BZ3^|RdM^4L_AlBSxNEwQ|8{gZ7|NfdafZqRr zg1{I01hliK`(K&5wn-K4xWCv*<1UuA8l|L_#%TCuQs4N|GI9d`g)!oFpQ!DP-ADLq zS&!&7I34w#)9*#T!Pl`%u8QZ`0(6FEe^5qsysoc|;O-3gYfwh@y{;dl&k@*4oPWJ$ z!mS~-W;na^Ol%uO4y0orXVzXA#J|T)%p0n4T5u+(N+$GBd5}&#A0Y{99DQ;O{q5t@ z(Ef;Lk@zyt#EfD|G~~!^;@*68U?aP`G_n+ZUNtdqb^vkBuQc(k2nLWN?uAW~<*brS z;@pFV6Q+#BzY3WRjqNWOS3}GTo%8ou{rq#L+~98`{&j~|>J7BbRvD&xOIbADnK-sX z>aiYuSN7HSk-ZJjJkZ~i+yzd1{QEL%N+*U5$2Mb`d!zq4vAmhxQ?x!A82!fG!M*gg z3=EHvfldnh;7Su`1NT)Sdv;0Ys6F)Wf?uAOk!mb)Y#g*Erp)sH#$7uU--);1=DZc+ zD}~r|JU)cYvE5W_8uOjzyj+v!&Q2Mm${1_2jHG{-T8w`!l3XWM>bQGknEhLxMeoj& zCV%V-<@N}Cyqp+1oxUH_=Otop9DemEe*Of$S|B~JV{hVjL-LSv^kcmGF(qR-8>N(e zzTf17O<1SSGh1`+qj~0Aod0jiGnWRr=2aPF@=cv<26?8*F@Gm%eV+AM zQ15crFOkQrPbC){b+?{?kFe1!=^A=ZnuYfI*R@UczvF93p*Lk1_9zJbhx@lZxz{_? zw@ZQ5pBP&bvANxjnAeUng?j_r+ix*m5A;>MBv_5`)sdX9PSV@@QifTdz+V2phjg{p z!=K=nXy3-H>3YQGq38S)+Ww&{{_+g_f-kcB$81Y z$`e)&Hu5C778+7Lt{6|Kxos!iv$*AmyOSEM*thzmGglqR%xKDQkNkATV2*gF-LqJz z?eL9r%5OMtPEAvj*%pR4A1Z8zTU_+jLNdExdg%XlokPMmt9sJ5uZ||s z?v`#91-K&CNfhEf)S6jIs+i-kHibPxuqGW~BB{C}2s%eC`e>1N3y|J^QK&^$6rM0P zh359u%+Fnv zN`5dmbzdt|K}_Q|z2Y;8qrDp|%CDbN6j+3XW7l|LDH=uws%a zxY+shXFoF<^z?{QVw_;#y>c@Nvb4);{}jFF|5Ut#7Z$2 zYIo%_!=z46+npOH#MCfgs$}1)mLciTGzBy^ttiF>$k>HE!|&pF?2{a4e&)@r<#|6~ zxe{g=7WNKoogN92vSBref?hE`pKRMa1*?J)E1wT9k`Aho_HSG*zl`f;D4yYjo8uK| zgMi8aJ@-7-1i6M9u7_@VAF6+JZS4W;U?c^dxc}!?6|!yX);wjP`7&?U;L!i~r*?t#`r%z_W_F~Y~zssg2X#`H9Uo+Pth&d zsGOy%x<`vShP!qMt|iLK($|MR*N65t_SMQ$wW(v0J-#d)T^C7mR!DG1EZ{t)qo&I$ zs4GsxGv5KT^_)|j^B-F6P#tDyp3D6CE>*~=Bybm# zPE>M@e{>RFFJm%Cl1X~CLo{qQh{X~Q@a7j``_+oTt*| zwx1Nv2HB_1n}Yu4;+=M(H>wQLi#%}RX`XS{JgVdGsJ0CM5@(nP98pXxo@5z{_!|@P z1d2Q@xJP>#ac^tNkAh9`H5;_+ygH}Ae9W)xFWu(}5T1zhn1i3K^sQj@!awxkMD}z4 zP{hQn#GCd#afn~)BZKq)6^E;j}FZDos46OgyB2!o6$7*@D}YO+9K zvZ!pq6{gR$@@4F8B^KXX(9?WcnAz~^dFye1sBvHEO2;!F?lk{9EgXrne)Tp|9FJ;< z)!yTo9NlJo7a~X_o#-MJPpMZR$r!Y|VS-NY?nz?nLG(%L-- zs?V=5f}V^5U4>ND+r7$eQEt$J?R7%&;qdI%#HF;L3I#5{}(B7ZGuSBq&}(Ql2d-_b!dr^g$3?V(1Rtd%q2U5sStYG>Ho5Ov@}lW06a?Ziz# zb{tc2>rg*kw?-WwEZN-<)7lVY!d|<%z=uggE0mvEG8;8}fSue)|96te)^tYT$aXB{ zL1cw2UUL`aHdXEx8`Gy1>7xtyvX;FH53!nNJEpdCq88~%sQYRYarwYJ?sQ{THK8^1 zlnS_N``PoP2A8{^txb!Tb~Apr<)Xid7YD>y9i1N1I8^AsaJ+5c2)fP$`gNFMbQ75N zV7%J8o#=7EcPO01i2GpJ)%xcF_bi&8p}!OO!iRU{O(aP-z+Ik9ou_}Z4bss%RwCL8@n7`=5>%xALNq4uqTsY5qq z!WzD17nAdQ2Okl4hJ7&uK3jS^r?+Fv)j(s^^5xOx#^3tVRM!8(-U}*4Xkp#__FGKY zp4OjrOR`>Mo+H^Eo#W?wEk{Bp^X?Dn!+JhKlp+%a-M7fBcn@-v$d5ND?PZjyyCzE8 zb|V*J?2R(g(8C6b6VC4>7kw17I_Sr;S6h5Q-7|_7h^3ki#Ri#ys$x{KQ zwnXO24&cQtUqyfoLl0XaZqJ3oqZiwelTdn4>?0$IUwGd>Tt?pdyiy4}O)`qVnhQ7i zQV&Zo_go-f9jN*-N9bpVjnpbT+G1b8>}-dVFza9;XOGvPL@??uV^1!e%VSFqxU;AY zI^Jo+7m7K1dwk2>n+UMq)^9tR6LE~XF?E)$3vCgU>p5RTgXn4HyX6|!@2Q^sWJWD4!; z-e5v>b0oCYTM}9S*eraM*TjDw@+%1F<}N;8@-q2k$-Qg2yUA2=FvzsPCbX0jdY8IJ z`$+b(zw2%~gCU1QdtJ^J?Uc-!F=0;egIRxHGpI5B+!#e6j(sW+ajF}gP7$@Ysgdd6-ngv6jO=uRj4CU($>^gIhm=1T~Z2-xCmHM#`tEW zp!f{#zjt?T{vP17{;PyXHbs^tM@Q{z<)LFQY-dBp<|gGVZ2rsoU&X6>Li@N77%ui7 z-=78Ybx!ZK(aF<>8W&uGvb;P^I3Lg0uh7e5Ilwym5lH_F${>AjTvgS86jwhTPH_XhJ=r77BhJHbU0_Sry5zd>y4XijeUV$m zfu$+DV?zQLa!Yti+`7m|(7G<6F^|N8`{662BTz$hOQyQm#_(BJzE#1pOjn^*jIq8iB|pW+v^mWL|$ zQ2v)WmZEgL3_w{TSnocq1>^ovD{n+X9(60h1r56){wBuuQT1 zM!sDMmN{v>q@fHy20Ar4&A(Dg#6&KzoL`B9IS!NWsq|gmyIiplJT!|uBqQpayR8CxpAej$GcDOM_rz)S6Ft*S`Zd74Z&VF%DiOLxnMbOza zeTxi_usbP~fjrPbkwyZ$oj?g|Ng}vB#Wzl~^iDbn0(>8E&B_&= z3vE~%EDk>WG0(dWys3;#8BH-U#*DrNx2la28AW!HU>~FT4A=qzM5zl-?oOzfVq3Iw zKUm_K_pA4~`orMijCRN9c#JX8y+p1d^i#lxgck-^<&*6-dI)Z_Ez?W3hj1qWa9*|t zUpKM#U+N*$J^Ndf*Z6^VK>&DQ>=+Ho5DWB3rwL74|ikdrbG_#O{F^YeLPji9_Oh0(bvh&m2Ww(VU|(UcsE> zyBvjnaXl#BTOznekePRTnU-`b0<1AZBVct|+@r+{HfP#WpCCnEDO>_e_dI5ycwAf- z!H%)Otam^MUh%|_f87**zOKXE6m$ri($@<9XS*^eWZ;#`c|e=_K#YA9D0Tf;*bNDS z9c+gzuw$K~ zcazszPi33WIw$gozV5eNC^}cI7NIFud%Bx!qsa4;(i?|%0@UD_C5z3FF17ERCT7Lp z{~7q1t;^2$X~diA9HM_Z4qLlzcDk<71d0(d;;1fG(SFY8W};k_pcLo8kewxEV1&sY zE;Ocuh_CoB{80ArZ_cMbk(7jZSQOE(@ROVb{MPbXHsBfZmGd3uE8;m%x2})3Fn2cg z6ub$`J68D%);p3%I5#hLj^+{J9p2k-$s3|OOowl#@MN~}6yw(+3Te$RTcGp!N99xh z5ndy5IS=Lf_vq~dX6ZlSL#m^}T!Di0$pd5d#4P^fgoQElLnVe#rg#yC%t->6qMXHe z4F||{aiVg3!?0n=FV%ZA1(9zlSklmV!7+RzrWF%p_B3dG_MyKV2%pi5m&$aJ&jmAf z`a68Jg;%G{j}#uD)`FUI6K%5>vjm1tuMUHdx+GP%#dEOk;vIr5qKfzXP7=qZBc%r9 zguKi^R8qx?oC<=p5iMiEXDsOp$F>U(G*L8hXhmrMK0yn1Kg$R$v$UseMsGQpr?pC# z)UT~ZL-Z@No2OAnPp52JBD3rd2yvzvL|+VhYuE>zSn&=IJqfGlf}~227)b4%1n_z} z@!t^z@G{|(!`UHl3YUpQa8T_<@e==}2tgtlBDoB((PE}jpS4wmjUHUx)x4Ix#yz{4 zYTb-bZpEB<5S)mdOk_UW-dG& zrY~!`i+I#Q2G+7i$t^Bj7l$aJ%9fPdY zN-_L!q9l=(89ij8q>z;mH8xg~Y9?@qu(v}02{bEyH7CC!!y%g*%SEz)IHS(*ndSRu zhQUs!V2g)8ned!2jW{@zI9yJ@Bk1Dq=NLCP;_`NdcJw8C3(MkB05wR>Vu2S-RoAI+vR{wba-yz&PYD zU{(N+KDfn<=x+z|a*&aSPH}_(oA4PJ3 zW#Jj5rm;f!IL3_OTUC*BgGQ}hAPqUpkbk~DIWDJ7wcwA|@<9-Zrcp*(CS5^kDaA2n zWU1Z&En7w(PF)S_1BT!hB2(E}%3Q85w#I{d9aa>{$VPU?#GVGsS;x-aw&uOU#%84J z_?aK;?UTs6kN=$t{`2F5J-hg-`|G=7-sJwj!~dE8zu^C@%uKBRTX@I9%*OQJ^n7CB zi%FhZ%F3vtD;$(GTJA!WtvM@74Vw;1H-t9BbN1tz&OUdKP|CyvkCmN(5SJiXm7??6C) zu)}WE`sXDjvr`_@Zs~CO0G9yI-jvo~fi2#7$fJR~}{b^kx zAt17TsN*}-Zc^8aRi+Hj#XxFU035p0(^7cemiM280Oc`mI1S37-}$;FkXNObVV7M4 ztJWHY4TH*Vc)xN!c<($!;lKuN_K8t8S$ zu+sV&B0k=7?v~RjU_T$`8RCnn+r`>V>P|&RO;HhMB*_scW^~ed`AL#1ryN^(nNE>D zMIP_rHVZhI0<_`R`=E1yh-N5%Zb5m?VDaH0s{ewm3y_{d&j`An0^ZSqg!J2q`On3{ zAmziC3^1jM4=eFCnn6epUXChhTl(T{uZ>h6lq3WPj_hGrh za`*7LqDIStM&_(ED!zAMxbXiBVlqL;!$KJ$KhQiVvEMLb@|LQ^FmGYp$jqKRnYuQqVBe-^}B+$P(80q~=FmFlZLiFrcOYxB_8>kLEAQMTupzJ zS7MW`I5b^Zke1G27ndq!t0lWBp83xP=0{7&wgZYd4l;RQiNie=VGfVT9K_kLvzabp z!H}f+NXTk3PG6e2sCXz$0yWN3F-}Zv#Xd243djZ!uQ6;WJgddl&MypLKFi5wI5#QA zV#K4$qv`)d=TNs4%5Wzd%o{)^=j2Hr1Di2rd(8Tb;)_!}uNmT0k8H&z%;k7K!H9ZW zPA8IkJUKt5e6}7|%Llbzs~}Ztpw+_JJ$}l8*%@9&XIWlUw61VL$!RNaHdX-s9Mx! zS!MiqXF_8Zx1DtNU)&0MU=O!T$N~VQ-Z?1S>=M%G*F0bg+Ei|}0Jp7pR6Um6mOWZs zn_EZhV;rR)sh_ErLTyRLE^wZ5J39wDm)dj}l{=}uPwOt7m*$$Oo-2D)>%6S?T)jSq zgsOZYflRr$DaQ z{lq>YC+Yb8_Q=C>%O`y;qy@>tV;ThbBjju5PmPZ*_)A@ak6{Vx6RXpwq??1Rwg+hH z_lFN2gO3i}CC3J=e`Vl`KD&iB;RDBpnK2;w#BIzYjPd8)Rda)Vu)}uh2XX@>;dz(=YZ~8qk});W9YfgV~^@<)hD6}O07p$utzA`Ge8fP z{EM>_&oht4V2={j&m0%&sfXo=wb$aqVJ%unwFLF|TYqEB42 z+j>a;hBA|=`{3oSk+TPSkL9lNow#$X@K*gPlau(fAAIlWo-=U>s!na`M&COqc_{22 zo;p5Z5YP6v_Lf0?;$|Gr2!}RR^^L1GZpE#*i$*1E@IIuA-1d&*jj%T5>7G<)(DE&y zYwDsc1I->r_fXPHeLEgTi{@tBvrA_?_2(Go9?&+4_rdd?_fvH3-;E@vt-{VXy`Pt9i*+Mw}ZoEtOX$og26< zrB_FV-ceVUA8X$(emG{}YyB=^I2NI6d-}b>U;3hct%O%(Sf-*IZk!_|t3sU1Bx^>Q z28!0}Kb5*a(Et={PMp&*tw>fO*=CH^DN`+pRx#O983I8@WPc@vV$!%E{!i|I34;>L zWoe!6pid|~a{M1Mh~|EAV={2%!S5t8a}sJI4TIw5rsQXM)N}N6BAlW^r+e_CNT+0* zd2J6d*)!t3dChk*;WBWTqT0vAZw5ZF@xK^Uf<|S~iF*tL$aoTeqG5<9$ifrn5NQpG z=#wzUVUPZ4yMt;TH4}+P6iH+hO}LH4NsU2L$61ZVlQT#=7ER#t8~pMfCFg z9gzcyF2O#RB_vN&Fav-o;ZlDkL6GqL6sLuwD3dot$bUwSK?GoI>(se7!|GqCVRp?iSgm2G+tlQYcf z&a$)5?v;6RkCQWcbLZ7F0riSYd-#zx3g?FKt3&w=OYNGQSMV8l`%Fr``_SscyLI@E zQ@s`KO31yV@R_cB1FhYQb*J_nxOgS5J&|<>_8q}`bKD-Pbz}7H*L))F+VoPBUuch7L^Ekm~<|{>S?NME~pG zu>Q~Je^|z-!RS#05xXMts6r`(C`MuXCi0NG61Et6V!HmMAt6P`(Tw>tqj9|k@<{R$ z?2?T8G!qKF4tJ>0^a!?Xr2&W%29q?3U-bX5lp;){l=CDDvt2@YID3gozPLUs<_dF+BTaF#yizSP1$CKhR_ws5+55((1_*C(QG#gkL* zUjsmO=_$8I#dc-snKy^(&C0?PAh#giBI6T2wX6ez~Q?qi4qD?vd%EM#g$svt5IChVvfo^V{{dJ8O={b`%B0 zF6rKsgu1|>A@tT11gYh&I@f(f(Fs|Dcva%vlnOhGyM9yAu2B1=(5%U$rBVXhYpe{-a^>dK(AYqu8bN@C93=wpD+ zyyN@OlWX7>AL}BFo#5tQ)~Ft*U+90db2-giaT`&ph;O0o@5@N*&bdCqc;93ZsxB$p zKWTHX%sJb6YuTcmh_u_&Y@yf_YtgHYqc{_5+pA_Q&w^=)W|~o37d4&_5J5(cdk~!D)Y|MUf@~$ zuKrT|5c^1d#^dm3@Bn|B2RhGpwUD)xHUDVpUiXpBG)*sEZtPo-pftnCmXti>x=MR4 zaFOs7=DborHGiZkfN9DRF-u#XD|`05(!MHi>2DlrTwM@KY>KSO!)Xd`nFqOA{4UU5 z{;v8G|0paSUbr;R%RKvXLeds&HS?X_Uiq%kUi#iEe_5=jtvjm<^NvSpL{u3cS7XoY zzaDv5l46O(F{CZGT(ffSUaz$=a8wUouc1-xT;*z3)GjAcFYZv?D&_eXlPIB5%~Fr~ zM3|ydTlu5>Q@Sk|x&#ea01qw?Ay0!qYLCD=M))Q~nB?|{5GgG6^`8(!xRl9*dYZ6W z((tX8>gc&Tux20TnETTo&3~x%!&VTM22)kR%?&J1NgioiCp9F)MquQ`u8HYJEaZfa zV(jU{#|e-MhaQ{WwC%BJMi}*Cr0U`+i7xZ}Dse0d)i%VE{{&j1g3^zi-JrT$-EJP= zyL0b+mOt2Um};+K>JqCGsff|C-mJp1^=lheRxd7LTvDMzKjUZ$X-1!EQaUpZk2+ zpl$@wF8R*b-2h|y;QR+OZzbK}c=~s4O-@w%3v)&u){XoopC*&{2;JZ~NTUp%2{WV~ zGo?mS+c{!7Il6ccuyCEEfuv)MV8 zm}8MD2wvsKMnvap-_tx3qT9c)hZ(+{cRlf{6>LVVK|Ck%kG1+bl&5QDz+)BQ%k3$@ zizYJY8Zex-Po#^b-((dCZhy>C^SND~K~ug_cwgF$7X;4G6xaVsVZ7Vg1e^;pR)581 zfW~dVhKJjKSuWBFM1$bgt>JC+l z{lMX1+IT5TY}K@OP*eWm2F z?Q=gdP6K!V%rdQ;2G2+05Om(67zRwIWYQNS2_1-7xU*R_l!m<)+G0^Uhp3ATH(eiBFbAUv$w;i|5Ph>QdCj z^AXTTggN4ruh+9^#Y!@IR~i4IR*i0iUQ5YGkQ^>mexxdbO}bf`%SW(0Aot9&g=_{-mqm_1BPcN1mL=1fwT+8|`hqvKHPe2gE@ zX*iO5OT@Kc@X!JXym(QKqB&8P>R4DL3C+4)%a8o!7LgG1U>J#?p zAdt1@)0!&rA45&v4dx&DA~pq*#S^2xRXTx5T6p;SOI&DvG$5W?t97+dnjeTi$!MCJ z2xu9O>{F#FkW+jzj0{{hAVQS}cbC1rt$uJ$XT`*7-fwXGcuyRvPzTy$I(IUUMNwvp zHJX`Yg7U}$;Z`;Ek5LXyvP1OYO9jwVB($vWugHW}Sby^)ajR^YkK!)rc!&q^b0%Z< zkLt_9Bx8&BG-QmTUEMqc^zzzClNiX-ylJ$(BhS9>>t4rfLVq3^rod%VP=hKyz$CuXfI z5#-`=FT!IW?V=P-S^BD4V`CTaE#kA$MGwPWmQR!{;Cr)if_>nw9rC!bSDI*qjAr zs!Q*qMwXN8Y>aRMVszn2u6_>=T-Ky9LGey$Y;HxZ2jzb}t}7YPG0rASgbI}RsCBg} zywYKID2i07AEnl}q-}g^4k;z($(vh2rKap|BgtTm*Bm>Etu3wFz`g-IYFi&egzkq8 z4XV7;ET#)`@QF3R_CqQFXanq(gYxGzy}$(nfEA^P3G5%{0VPaK*h3P5iZQtqE1GO!3+}g0Z`_Ny1 zP45CVRU*0mT8eq%q{7(r%E?DM0%63VQmv=)Gnj6@9^-PK{7{=6qSRv8$iln(!N%`^ z|GfGQR~yimx34Emtc~VxmkqUS@MH%Y6gW^akG&>*vfL@o25=5j;u!|2ESP-$v1gc| zN!SRCCxuZWKHyNvmn=Z}@DtsT-R%1$@uR<@JteD<|Wg6t0!UV@dRnp#8uh@X)E?Fu^7 zXuhAMB8Rjjqqtv7esF?RNim~bh>Skj7&PNpQxUl}ev3Td)cje}eAEWqSx^ex z)vI7OzBCCQz?!$G1_tnw+DDG7D(lV5#*U}0Y(SWTV_6X|fQz0vbvWp^4@iDOwd$DR zJ7t;GP2jjdfJ+Wh-+iWp!&Rc(r)6)d-pF;uj~WrPK*3C#N+!x52MjmUMBwCf-Sr*m z$+yXw^&)n7{eoL!c$WA5y-?Ea&6M<96ucbeth2#T;iI3QyphzhNezazHpmVzhyIUs zoo8UTUW0hQ4td)3u$Jytie^DtSY;>YO^2ND|5U1(epVzqd*P< z{nUD6MK@n0w__;hDT5r6ME*kRY*+diR6_*oD$02g1!F6%*shrKD6q^JfsO)k;eJ#D zV@ig70+lK8Cg+R{F>fL<`yz5PHzcebLxOTTyY0{RcjMH01NBFt@y|icsC>QJqpRzQ zgP@>BohGmq@$cr^X<(L~+ zd1t$6<HC|fZ;j-^#|*QU=W+~@T?-|9qtz~u<{g0CH=&GZorcpJhP zWkc0zVvNcQ;q0O<{61Y7We7tVRJU%!K0eCJh%z1qGP(c*bhIC{j{dsDREm0lb0f$_ z3AypuFA*w>IJ42nF~w@SXZR2y0|O5juNboLk?a!0({oX@dVh6B)Ob`TMq-G;Lfl;$ zGZlSI!gqO_X0lT6C2W01zJI=s&M!hyShRJEjn!!apPDzmoSiOv%xT5z@6xSdy3*W$6s4rbYnUQ#BIjga73H^7K_@MrozW z%Ca-zib@h1i{FC%2|b(d~AzY;tOI#vRj(0!I$ctB&nP-#JZhY2zn!pd%Is z;ew!xtnO3cux83oX(vJC_-uPlR{PXg4Z6{tst92jsi69poJ!w!XdTeA;ebR)Lqhui z@@_PFkRzGD0vl(6?J>=P%3?U`Zj1iQ-=fDMjc7}8JC;pFgTTG7hmV#o)3&Twnu9u9_gDy9+0(_UI2|5(Kb*8wvPTMCsDaQ# z6r5lb4~1+VJ;>A~buvkXNJpn&ddpt`YH)xWUkviF4HlbfNm!8-BLxxlWUR}^B7!!% zBDiws@ECF4qK4LgBKu z7N)xHN46M`*7!98>7N6gUz&_*b%gCo{Gzx4{xzI(4yt72m}Q7$m&lizFPdXI zcMO;jxBeRQu<+d~1BMgs4IpDnZ=;cAieEz@cjey~^g`a$m*B3pf$JP(FyzbMvmH%v z?*(Xd({Lf-v>i@tHKvL zH!Xx-G%M(~Xe{)>UnX%}0PITVp7r@l+nggb|10!ymk7yIQ2;c_YuoNpwz)Tz_xdA? zt;aj8G+nDZy&}*(*(ioizyi?eW3D3obsMD(7b!%sU=Z?qPh<3yjs=Kd4!~r2synXv zmXrfYg#x?A=Eo=wYm=TOb|`bmUyZR&4@e*<`>!yjFB0%TRA3fPra{mwci)HmpNTSc zm;_1EK!OaI@*tKR#Ik%H10xS4)X+EVazM2)nfqFTt=0&u5f$$$FCUPiFtoExz^tHn z2W@cvAr-r$d&N;Zgrjrn1`%d>+>%+?lKd^^AJu|6WD7BLf`yAZ@EqdtAR=|66y=@j zkIhi$T944Z3!Wo5TflFrrZWTjRWvRr0y%t)n}C{{0qt+* zp6^YLwW(W#!>|ro*1^%HyeQ0Vv3O~HZ$HUMw)JYBp*St51j4;qPmd&J{Vvd6*WaAU+ zx9Jn8B-rFVKOaLOqdR#96ehC<2Ra5`JJu4gi-JM@)r~lUqbw+(s+(`Hl=g17aRJqO z6yU-I@B7eOCKsN$DGf#zLOopJLxYOMvVvfK?OOm}n=3HontZQ)edREdu55icu@KL& zu(}6O-<^NpaQ1Q~U3@s>IfB~I%M}^{#=CZ>liSQE^KmTZ025FA#YQK(f}R)qy`toz zO9aNY!cg_4sc6i1~@Vvxqf6=s9?4m^qH}J{g>8yu;|F14rKojqcw)K*)s01yuMeodq7` zBAyIxJzr$r!i0Z;+MJouoEe09RZNk|LT(|DkZ=@x1lK{GNMStRQK3wEluK?+Kyp;e zA`blVJ#CujDF*7)n>(X+`>}cQ;g0U!3uWIs9ldc5_I!O4t7DBtyZp0%)o=R1e?PT# z0%w$pr7DVo%Y60E+SlC6EZ55CzOIEX__(01K}e<_X*+DIJH}Z+td;NbdU3kErm7`l zQJLHJ1W3MC3?jI8-~$N~e2oi1Dh-76y~+5I zF|tA-l22RF+VU*=Cl67%M4{Y@`TR%LZ6Q%{OVn5Sl8bHoSdT1lOi#up=ggAa z1ssXc6VA(&XszXC6V=@7@5BXpz#=0P(gk@-3CqOw&}k3whe+b9!4dq(sdzAyV5Wg82he#2-`pVFo0a#3ap5~gn_3Pn21bZq(EAw zr=}Zt3s*67U?X>MZCd5|RipNMb5671CYuxk?m3IxLwdytxG>S8H5`<$CtRrZPfqUX zU}4?3QV1@;1LdN63Z<(%RSa=1iCrCq8St(pK-87sDeQUqX{qn43pIDyuWi8Oc&4=U z(MTmqLwY&n#lcbEf^`bLTEBCIzOZ4jcH&cQ~n zn67l==jfjkM|^ML2e}Bjd4>w`;HkQ{Jil9S@dH|wG;=3D&az9F*(~fgRjP3E)y@dB zvwP>^4zZEbIB7cq42ZBOBSDk+JU+ZH1^-*Ddc8IX!Sje_3y;N$c9%*pAPr?eOYOhV z5-2Bbc!}!iW}V~*X;BjnhNfFUG-N3o%x=;!N8Kx{E8pejegg(ai@ihT{kEd@R{W9k zF$N-*0O3+y=HQ2f+)mtfM9w4nVn=UqOw*z*9 zqkB8o-1@O_ChM-YQJK(s?M<`H&rw|;p_&6XpJk@9skRr#(}7nqi4a_ak4`jr6oV!OCx$oO4!lHsS8F*LcfKDd>TX4>deYpQPRPi^JUllRc z6)@cuFm+CwBUCK_e?Io zyYxk#_VsQwtJ$PPkqeNgFf`e`?6^>*pz!qm{cB6^+wBc=RvOj!;-Yw6h_T#GuocWowh2u~ixK+S~>6DX4iK zag1llT*^j&Be{^!Q>%r4iEbP=A64o&I z$G}FxOzLECc^ydU3$penIX)!9^kt7BNz9!6vWQ%<^OZrGj`@~|q(*2coa>cnoauz` z%`)5&{_eW_a!Uw3{i*f6e?F$Z7^(=BF5&(*;DKJkYkM>F$p?_j7tReO7-U6pX53L#cvVU{q#6u51^Yn&C0* z(}D&XSPWu;GH-CtZ$6R`X_@_7_^NiY`Fh`lVbE1^MFEd+OPx{aszl?!V$jH9QA?|3yL+0bX)Av`}0J=yT z`ramn=K8f?t!dt19~63B@!>x6Q2m}(4V)$HYRHC?#q!ris@@MEN)tvE`+}ChE++ja zAd5w}Zo55Xdwfo?PMLyQrOQ_=k4oAop#;HG4W%|yg4hZ(q3Q4J7#O5})xST75RarJ zLa00}@@NX^YJw>w8CGW>Lrm}OQ!SOjp9CA4q%Pi@^Q~8g_J1hVO=O%Wi+z)dbR~TJ z`keW;MZz-!GcUmrKgEuq1aRm=Iw}jWV@~;JE@4HP%{5nU=k;nGB)U^bHgf9@9Nd;< zIREItiV~P8cnaqnQI`Vc2;C+3KPKrpJC$6!;$fO6<#y6F`r0()JdF;!Q6b!e9$l5b z7lPtVJ8a(HJJpxNJ4)F`zKmcOa)$Q87s?!@qp?c6{yE(9qh-Uz;$nHX9jWALiEfPA z@ihJ5@rs$@*aso8>8)8D4 zoh5pP!xXa$M#%7iHusgd2~MW1V31c_m?xPVe_HeYQD)IS>Tl9LbLt8iZ853 zAnbgpH*Ct*g(U_4sLqCqgqH*WLde-(|OK-KVBS&*k7mgIn_|>5l$FD(8lB?KR15dfrht z{H#BL(=YzK@AfUcn#PsL-(OrwwH$jp3@0i?q%B2+p0r%klD@A9I->xT?iTTlIWIzn zA`kYG#CJu(QUKNKAQEzZHF;#Hpa~`#96H%b29g(?SBHcP5Uh){-xxLmK`l7f065$) znFI2v7U-jDQ0b#O$C)~zxNTtcg=OFs^HxN&93)!_{XLLj;fLR5{yoV<@anxP6n1O@ z>9fPk0qmG7R)7FOFN9blHh@Bp!Lg_iKH#rWB!^^Ux_p{-zZP_>>Ibh!+c%RzvHHWw zdA-!fXa>v?2M93~FD#~k3{1FzDg- z_)=oZP0#ZVIthlGd8P1R(Kt~GKPiVor%2}Aj+zCR^M?VC^K*5r1R#`{KZAjg z;r5RDZeT8keZMOrX5AFJke$%mYwCbJ;!#ysFRJy1yz+K^Q@<)cf&MvgFzb&b5swTrGJ_yu1DmbJKE9*> zzL4wDB9To(f7@im@YGiFOsz%u#14iMAtL7sjG@tuP_5EBPbYEnM-xJKEydV4rn0*4 z0F?lx3HtU_wtCvlY5D(R?wwQPMcUMEQpgQ09o7{TfJh6l$#Z*3bpu_L^u&NbEJ?uEz zs8^*ZpkjT`@+U|!$XzTZzddL@a@<}N6CgwMRtXqX=bI{H`XzQKb7*amQ@9%`WD`;* zx&5>-eiH;ywTe*!i#wPqK%w<}+D1W%j_3a1OEiM2%-1by<Fnp^Y2wmgB1{ki(FTjA}Uj}YeS9VYR>$b#fD4cmOux655 zjj4LYo5n{Q$J;u?X{%nOifb!WwHynM0!@&Z?p8i7`4vT4BPa@ezKje@D|)=|^Xtot z@m@L}mEbzl{j;g1t|R!zzB9I*4PsL8gsJkX;AjLtW>}C*cPiZ}O2-I{oXpSpI7W_^ zwwkxB(3eO&4$;MUAGBHQTzu_+8mS))!^a!4;tOwrD-ZD?;0V%Ace_El!hjI11Qm*@S; z1{vT=6wvcR13hn;jdad9d`IU4v@emE;&;U_159cu%m_(L7#Yk8WlUAMSE_e%IxOv8 zX`RKXVT2TOHy!Ctig|+<+ll@h?+q^qZ*p&`HPz>`fA>y8v)ZtpydyM#4*u2ve|zOL z5~qQw5LyF;2(WkG1VgsMcXTskgn)NwAFdZQ%E>(;S_!yO`jlP_3Ga-B~Dx`{0R-1K|a1!=-a1ymR2jyQY&g^&Hkt zX8Y{biG-->uDW_nQS*$|@{dmB$2a#IA01UoeNd-U`KDd4~* z1hy7yI;W9k65bSff>rB<@~O9%@z9})F}YX)Aw?A-HAUT52uj4Odbnj$WEkAwO0Hb1 z*0jCF!zCV0D9_>R)54dlq1O5G^da;tNIT2*htXHhaU~n5V_D;RgEAt*0ug`Lc*0Rk$LNz53Fqy3fxqaIC~YYv2aW#|PL*_TQa% zu3SQK-vD|C*r_(gb-~?Kj9*vc=g(*sFry3XLEzcgEDnIu$dziF#OMMi*rEc8syru9 zV@~;He+O9XtsvH@d}-3(DnbfU0&wAxzHUokxfQ5^CN1W?#Eg7I7BH}6MP(vPcFWyI z&VXugFQr~Nj#YnuIi|mWTow34e;@f$)->;uRWo;*)~su9xu~Wj8C@7`(P}1FMbH`o zh&C{Hpuu5N`^ZRsf!j^e>S`X%m^cZ~X1i$=^q{~C>K;GgV+x8Oio zL8ChRPDmu+t)|^$_pn$fZ2GVTuqGE_Y*5@9cBK)-!HQsZ??5v!J(AH*^i8(-Rzn&| zVzm1^?9a*4(XtnCQR{Jkx6G<2wctI^cF08}Ar7Q)AE{(}C80VNGy=%K3SWMWVqp(p z;v%`+<+H@F9oaqMwF4^FXz~&Rzmdn90Q|}rn18_w27c`-@_>_`KY(8mf4$|H&uz=8 z5+ozWERL&!7Ycnn31slk{Dh;E@mo5Wc^>_v9!1JC7F?XBm<$Oi zR`x0%&stzoXf&!*CA4}1fpCMr28A`TK_a}S4<+3Q*dr*gP?qM0ahQ@7a623T+7_a; z@G#ji?%`TNjrlS2RZ#@nL8lbR;d_8GO&)!)pMIym6-*xXo`bL+;x$# z*vX9og!&VF3wjt5g0jL;j$_hlO$XbNC*Lo!mKTXLiitg#RkHV1PSMF%)~=kH$cX}Z z)J~w*;Y_yC9^Uq2$6gekSQB#OHz=V1z%ZXa34^emSjN_-O zxia-;k#Q)=d3>lRG``dpyzURFouc34ip{wlgQ}$PyXf2kb4O_^!uq}R@d?hYC2>~> z$ayZFIW7zMLcAm2>SAVe6n%VAo@>T-W+O+AgVl05f58hnI$yXZ|B@2l9KLSA&hdk_%RNgz(iZ=8uj(OPgCOV>1vo?E8AStGaOW-~xT;+J z`0^VPcRNWoc!V-rT=|KPL$&CdsH+QJ(OQH^Sjd`@OR27bi{fyT^2FHJ)Bh^&(pJTp zNn3Jwjz5Jhw+Iw8l9su^8m8zlsu1Lt8hXnFE7fWLX|)O7$Oy@u#sQ5U7O3L(>H}_O z6_|>3#i&9nn10M}iYOH#PAjQpm;sCEjEHiNU>&1k4dEnZ52Q1lB~tNeH~KYM(u8Kk zgYx9ha^5KbYPpLjgq%xJS9$2#WA2H-v*)u(7eRIJ2Em4B}C>aZJV5 z70f7|l-w*~zX?RVFwHlO20WdalI*#3tUvIF73Fdzv^rkAKBE@#xB`@%xA5P&U%7@t zZ67~N3h-)QA&oMbv0EMjESVXuu4q@c*x-bO4X}W$n^?l3{i<*~Y{w?Q^I!yPzPRvP zaqejSpRHqBZoy;XK0OlLL(A5pNnXeDSP&8Vx34%+q8qp_pS3H)GeLiX|eU-I+lr7}q?DsNt8BE#hzJ za@5ue*pkT`zP$@ARjxOIvF<#EF4^3vN_AcHz~D7LMLeF$3NJFj(ST@5K??^Ep!V4B?)?7BK!w%9CO_@fQd#<8vy%p47 z?UGI}F!}B_dU85mk2(fmdLk;t19hM|U#$eJFDQiYeFgKjTV!XfWT^AJ*pm^|i}=ee zl?@GU_P!3T(0!?D$E=Du*z1{aR)$n%E;B7QULVrFCtoibOl2=4u4!}d6H&t(*hw3# z7@=7++!uy?JF_?(_r7v6*S6cheZO3>`MGx(4{4QOkk)~xqs3wDc2*NoriCX=B{b5$MdIYB#h+I(W|cj zh%)X{3$Wt%OMTv9tPkM?iOo}PbG58zvc+KNuOUx<70|P^3%%TZl zDDI5$IO4LI_z{ZNXaF1y*DQh#v3W!kqZQ{D4T4d}E?-nR~dD+`$@n~|qF^xCd5 z&|M)5^7lC$wlG|DHDv5*{UR_L7k15M)B2_~DQhyt3~@teU|_ncij7}hsk?}9xk^`j zW$8|uoDX1RHf2m_RP9!b)Y*~d{c=B7p-XCMN)a|Sq^Dr?{6OZqIvJ{`v)>E;LlIs0 zr=2bZyy3Q&t>Vx8UppNEfuFxmbF}Nu3X}mD?IX?5v*%1P?l^nd4&G>((-(6Bq&|+_pS}P zQ%Xz_R%x<3a*!50VN}r{mS$*w&|kSfb)8MG&N}I?Bpc*DCBbm%_?YHX%4MFO?{J}h zb#@zSyI9na_taT_C>aXwOmFuu+w5eN$V}(&JvC$`L|Mi}I^C=?Ebd<5Y{g$>ttHxE zWziLquOPez1{!LPRYi4Cu1pxtWmk97J9_N}9?t%~_Oo?2&o$q;=8;o_Ak5ni*3yvq ztTp?4BG(_W|D-03HqjJMOB@Pa%hgE1@ri9oo>5aYa7%WtX4!A?P39heNW_p@YIsHR z=TN8&aPxA)W1QHT>{2`CyzGTFbiDfH=Y~UegOCSM^@pfEVVuQo$8JrR=+}amfydL( zyY#rJ>YJk5pWF)s)AD~XBC>4OWS6MLB(U8~O1Y@FWZK#Q*NEa@Fpp;}ofv+h$>3&- zb9&6#=8`RjLyyBs{26g;0}^)5vj60IX_^53(EEjfo@}h{5>5yV4Jy|z?}d0oYVa%P zwbv|+q97z)RJwps!x}lnOxzNU%iD|rk1JhnAyHeUD-D3UBshCVr6vavbXF(pn z<;U^HxNj(}cQWQC^CsKzdix>k#$F*)o~(nMahus#f~KMJ^js?=OI!K;!T4>`J{wds ze=B`=#tyA|m8Ir0P1R@Fo|bBQ%Cao#c8Km$7m(m9Ftu8b+HE{VvlA&j*0S-+*KPae zwR8Uw+#g%i&MT*Vr@C zdI~?yj!Usm+1+axghw$y$ z*`?J!+K}aWTWuaz$WTYBs*?|XxM~(6WJW=$0oF;YPQ{Wh(b`llct|8LsSk@qoE}0`33|XDfA8cQ}cUsS&XYvzy!sTJsg9vqG zMhrhA`ScGUPS*|v4&d+xZ4O#MQ_ zf%weJY6mV9psRn>;Tffwg@@t3jU#>MHGgWddX~ObJYM0?OYp%CG(l zL*ATB#S@QSXO->aYG$5{wHhpZNAn|Hr;|Chl$-0+mQyUlNsdOY%z@Gr6t}m_*$BD2 z+s`f2b(1Dq+Iq@*!uk`$KVINX25lPAT?#c;Y(#(rq#yiy|vVkIg`+ORx!*f;HFxe_1*(|z!xh|QxFM0faF6}|sCir$)^gFY5 zD%cg2$|;(KtdmSW2zOuqfsz3D6=K1I>V+ zh84zV0JaNx8D?T1;FkTDcEJR9$g_)iIYN>}iQ)8l2t!Ay#TLoM&JSYMV@U}K76Y(v zVINz+<>b!$TLq1f;mgR2XeJ@{C896}n?yXRi^M8QW#14jWxXNEYEzfJNm)3@O&ewI z_q6$SB3uCLoKIT&ALy7QK&q|2fmR1`-cA7N0Y z3Bo#gK7(;2=V(7-vOKWnAWs2P^9xG7NUnyLHlOI)9&ir50KI=8Pc%!$8_h*lf076@XUm#2`zS5GB&IL)vQ+Na+%RINbG>n_v)t1w^Ca+|=w6vNZSzs<#PQ}x zrw@oY!Mklo0eYcx*?#O&XA&G}q5-G!B;Al1!u8=)u#@SX64b=E+(IRJQY&#L3J9Mi zYq{87-i@{vB_>A%erI}@*k^>RuqFx->|)g9fwfUgNo*7gUP(+vY;)h)bJ=JD(x4$a zYgm2Xkg#7M2L-p$Z3oLf_Lpf+nxZZW#gq|DLy}6E;m=hlXK^OwB}HxLJT6hs^_J)8 zVmL<3w*m08kgR`hfOz)7)~Vf3ji19kmh`e-1yA8#F&UJ_<_?Kj#VGq3o+vKfI`DHf z637<|(!Efh-D1>Wt=(LTh7jJ&2)VvAuOM2fAl^z z6X~>owZ7wl=iww$T%_PHo!iZkreAi*Abd>OUZaV0ftB@o=C1K$+!DPU_|Qa%d81OD zBE3-Dg3@87(!CNn2hla?UG^)V<%4hOEl|o?+T>14z%Gg3f&sO2v=)XJrNKN!-)LW~ z&CqvNSi{@1sU=ebxX+|U_*41>ir_hb%c9?R%;QMeqS2n=^Fapb02*QLjbH8V%lIOc z3{Hw_tn#5dqWc!PXCcx4QAq6tdMJu>z95-Ed`piwz1VXxPuG9g2&@(#NBSNN5Wgg9 zIXZ_O4Pf6{cW0fvcMET^k9{$4SDadUMS(3~_f~dshjl<#hHMrM&?XSN0L9N;=j z0&UCocQ>B-ult8mCbBMl8%0M6s#F)hI>C`H;&fl+%5(%HKci26cj;ih{hFEb=wi5c zTm+YFk2&_dwC~CuSQ4^^zi)mevq0fN0O&?r?J3yrXN{IX&s8|kR>fP2UPm1Z zWy1su(2f`dIbs=9#I<-7H7u5&(0Xn7wJS}Cu8c9JyAFCcQe{eVK7A6=l?ZF_Vq$a{ zU!ulbH~_8=-h>Z;ENEpQeKh@n~@*0^?g$hk{}m>do1m8#8P0$2WpAHy;43U#Qb_Kg^euo=6XFAEYFxM!GTGD%!$nfp|X|b{705iM}fM2iP z?8C-y{Pa$35fFbK<^V)}7v^0O5ue*J#rQ^oq zJ$uKt8`VS7y;*5_pk3?$wbVzy+8EmNV%04T#XNpzppZgE$#sY`KQWb7*s;Y3e`&z& zPUUV&X!|2aO5BT}Ya!u-xa@#F{~EcIK4GflG)1c#j8iW7HLH*w9CjEV_kLP)B=XZQU zMP-0!&+N?F4RsT$OzlnIm=A(>=20R&s@a6tOPY)MylZMjqELmOO;mU2<96n>1u3jO zy5u~DiL3Fp^`v*7dWhkjbDnh%c#{EKxA_e~LYK^`KXe*sRwkf+voY?7mt%~ajkE{o zUZmbojm%}-2JDApXNOMv(*dj3E7-Qfjb2>$+_9CeQ0eM- zQ?=<5e}z8347A?8^$#BOB~5#_hw-azu?8gxfu9#Q#XtFOeq#q=V^`Yz{O6B{!&bs( zwMVt=F#nn0R_USrb45U>4w1VYEbZ>ysR#QlLY?Z~12AU!-K8%D->sK?wyjSBHprtzu2 z?^@>vp1n+{2Zb=tXh6u^*OvKeJ4Fcu%w4f^NE5blaZ!zW{Sl@$FSR`8BkL zzIJ3oe@icmj1z6OXvezVD!n_@K+Hfmzv&!& zS=2J-1G#QlxK3|G)c3W!!KlNjZyOY>{*J3_gm5yo79Uv;Z4pu4;pAl`f?}J(nU>!> z4#$`%$d;rFdQ)fD*-Pz@;p_sgUFgTD5(r&iQk1W6^uS(tS_vpCGBI`wU$1>jPqs7q z8`Lv18b&#O8dm_LUBTC0XG3edc?Hm0FNNJJ2@M7W*7TvOMu^xC?fXff0-VROe|*XW z)B(!v=R~OFkO59+1?l_OvB5|3h_YL{|xG?P}6;HY6GOLBul4w}{1N zTtX55CxT3P%b$GrEcUV)Y>K9#y2Y9RfDPw*Xf?<~vt?h8Yv>c5_7VOCl*FB(|L@zA zwRi661@g~fw+58K&*|M8A8CgnrhOO0?jk4+JlXWh;kDEO=IJFN$!^~q+dIbPoL$i_ zy5*Q{{VsCTiWde`a$eQ0*k;M=oY=ekL{lSi_di`Sw(FY+X`d~bFRum9&y&$J$G`VG zIA%F*a=Kq23QRdDeDS3Wu8F?%^$6EZ1t<*v*N`NDTx{Lvcu3G})s^VdUd=y(kz z-uOUxu8AAhYM7j5_WM#ts$d7^QW(KuUFLC?_nb^z@kx6(Eyc=*X84EaSO%t=tbOA> z>e!uIkImfTdlV}^bmyFAz?z3QiuubY13-0J!(nYvnVcI)KAKxty&}-Kz|-le60#2k zV{KzY>$sQZGApT}V%hkTF{#+(gl`!ATXb;-Q1(3wbgi(q>pl6I zW@r$FN}gSGGk56xRLZGqkYvl%t{q5^s?EoyS4Ec#DAufD*4}aE9oS(x`Fv$z4B1)a zEpS#%F1=~8)D8YkTj(@5pG6jR@Fp4=s!?v4`q701aM~dzOXx{aV52c`GoblEj^l-w zYy~fK4$EnX9%m|@ZU=XPv(dBSzJxyL+d|8ff3=}>3e4#P;#yI#C&am`e(#D(qn)BH z?@E7=T1m<*znLGF|A^)_oXWI}w>7-0{C%?KVGH}f1;O)rT-#`j$JMG@R8S_G=@JWU zz&oIoWF2cRBSCOMZz@^+l3X<-8YBJEEE%p&hB8U`c<{#^ct?F=O1MD_o@&aTQu1)z z!j@%b*7&=DDan^=Kudstr~d^I{vy0t5ZBq2$2&m2ZGOvmta`e^!n9@;8*oTTIYF_@ zhf8GamU=(9Q%J+%|AW*e#@AJKtVwxc=#7D5DeJ3bCop0%;)+XvX)gL6+iLBdOu^p~ zm0Y!LG5q3wD^e;txA|b~=h$}t+xsi=27BGM26Q8BMD6|Gb>@SoW%852$wSS5~HpY zA1x_R`~pP+2cuM62Hs1OR+BFWRD(mXwu05iT5|(~;|em_B|zz~p`(FEN5cEVlDu5I zPIu{kX-I4szmxWS&U|p4_|ClXS;)U^ibmN`O}!vs!Dh6=6d)r4+E9?J^RyqOb;Ayk z3mmJ+Z^0+{qZ|XcDk+&=M_FFXWZck~#h46 z-8OlNiFF7xWw~{+k!or_>MN6DbAAW7Hru;()CfJ(KGJuppFGiD<=lboy2KJ&V-P8N zeBXt9wk>V;UrlmS zjzkzuN;!C*UahmgRNrXj>+`uB;Z4)~6l;@Wj%V&*921pA%XCMsn0VGn6$Z zQXjYi7{AI%o}>=$W3`!Pc6}i8(hXN{1y$)4cW1- zXMypZf*L6gcHzw$uX~K;2Af$QN^A^*0nW&=dBaYJ>*sF0P|jX9S!fqGKDg-$T_gzn z!>gFk=UTX*zfl!($`1LO^j=L*5Z-}%(@+DgA`_{JMl-6r;H`n;n!VJw*=F|P0D1c>3bSZ zY!f~RPrWiDwNO$x1C5gR%ViUXNvcEGw0{fD%k+Ty=7r1QB3f))@c&pv8hdN(&iZxQ zNq;egFs+t@-37CAssEnMY?cL|2-|_{10NB#^yu1-dcHX+_%plZq6cF6pmNDFzs5<- zA>%t%2fPN^75N!hIlqdg0QwL{9wHbwo~V!QnW@!8UK@&=D+Q08?7ZRXE-Kd`l9aei zgyLf$E6TR8N^nxIJ1BbgV@_JLD9odXvz{%q9mVUc-(%#VuD5+F)^)b`n|C^oz!&x75Bm>S=uL9asT?1$ zLkmt`pA)#Ra6&uHWYzs#fELO1m&b(16!i^(F@y?ydG=d%WQ=S%V#0Yd$N3u=;H=fD zNtO`d;t+hVWN_jb3Gh))>XTPKs|o!xuD!=Ij)Qzot)E|h2)8(Ui(4bs?k?OXUo)zU z5S(ZZvt7_hq~l8WzI5)V3q2wIR@*~HWgAL+-mH7&vzyZIz&2A;Ueb++8LESWb%94b z!+EGW()?Of%l({dQ=#3Gq-&k?B&pxV)3yEXvT9JF2TS8B3X$!(MgOGnN?Po-pu{-qqPFjcXX1u8Flyy zxlk?Q7%Dnp^2(S6`8t>Mz62bU;7Qyqt867$wru?+1DM+n`^<*B>|L4_zjJli5iTBlc_q*6WGwCpsddyYuJXzA| zdR++pw{hl++JRb1QJXUdMI=Rg1Ab#Y-A76+^BKya$SK&`ZD%=gi#d?BAe?cg?#6nJ z6!=P(vs?)t7w<*IpyoWgblsbD-GFqRq4XV|^A*QY$;I+bZ7AjUqsDWr2lsc_2rlPv z8Ja9fGRl5<`fHvrCPpklC*lZRAbyBg{PW8+&HYy1r89!hC;Q#5=A(2_+kBrj(U=W( zUBAs5+6R2SE2io$M*P9I0Gg!kOUxib&6q*c=xwy8pof{&PJf8G5qsXZzkMAh z)BTc8=x&gs{Qc(jD#Wbg>cp1^AD!oK#F|0*U?yzM6s-Yb^;4qbx;~bmiRO0WQb0hXGX31MT9kGQ~9p74H>H;;bZfR zxPVTYq-#p75N|IL=fbO2qAc%5dCjwiT0_Y?S6hj=@T>d6f;zC=>x5s|c4uMVCtNMC zN!My;`E`%&6KZUF*Cch3QUz z0$S@mpoK}2n&=LEN`8aBeY&|F7UFcE$KKoUHX8m`PGsX6+j`Lpx(0}pb}JObl|7B> z*NL@LH-u~UipD8s-`jU>5@4pSFQZ65;({$YpW?9TA(CQo!kr08bl`0U(z8;soAT;=-NSB@rd`7c*|<>c|D{x0Etd93 z>RhIi4Dlu>uBvPwazFotbGV87Z3}UqdN`cD%Y&PuBpW8_LyMOo&1ma8>$^se@mgHY z6`hk%Tm@z&>7Gyv005~K*JGk>l8--mrMpR+V4O+Jf@_=JEPz1o0tEiil2&WP0I(5PN1~&o_%HxJ~Xsxzbq{Wu}zm6JFSY$Ap3k)v4*N zWW|tCvCDs6@^wrWxg`AQFYWmq^b)(eesoF2iPzuy#CzBy+#wb04)%8EE%gud z^0)R`wA~z8_t?7_({eV(W&0eX@)$W8xl-qE;l?kytM4W1uuG3h5`0A|6>f$Oaa5SpbC^iq4ugbzwY=$xqK97&;dFm({tkLP!W3TLRXs3BFly+-405&{ zzv-yP!2KO=Mks}-4tMsFe*L&VSlZcXSFv`kUh^2ayD=(1+tTieyX!#`d!j+{K&Z*z zfvRC57P-biNY^IuBg%IaOFG?5oEiNgc@8!Jcz3&^w)GRmzdp!BLk=dp9?iO@)!x{o z?l$=cRoYhmC4`PdI76dkLDK!_O@8}L6v&4?>*Dxs2;;~0qLMB*Zz}rUccdxcb&aaM)9SbR((~{mQ?pOKi$-QnRo9$sBp*uqr|?i4 zOcQ&LX2J9HNm6&?hpxZha{0UQ^@U{{9-To%P(RC3T~i1B}q`1wx?P}{K>5ixR+ zqR?M$Vx?7zgka6EBL3hYEprc1GD-MGOyLm@( zq%L79^^n^zuRRnUc>&bF66?t#$0$e3T@lT0qvJxzQ?MAMk0+>Wja6c(3tGV}4vOvO z&S+a0v*W+lYl4<13$5`r_Ue|~!Xz$I!5XU*=gCbLSRd@C(hSzuZ<(p;haJy2^qqN) zDWkL>C%Kmo$gN$T#m}T<5=Cw$((|Bi&M5r>ep-U#z&m7TOCAGWPWNh;q>Q}W-h$6hU+m4Qp zy==|fDkcxA#oEcpxdjUsC~zGh6}SnN2Hgh21m?hH#B|6i zMn?h>50?fy7GU&;><<$m3gH3K0ihw0Az=Yg0U?0sEcW*(!!)R4(UaTgeAYmX; zAR!15n;P>cM>$4IVjE(aV;5o-V`T}+i3kK`_;~}o zAUXb3Zo20^Nht&nom2w;t}Ed(h7+m>a?!y&miy_RxHEhEP_3RghJ{2ihI^9%VF!2!}|P zpOt@Ea9Lpaj}NFi$Q#k2{U`$APAE6HI@}w+5!zu#Y*MT!Q4GHde>aFb<~`!!My#y> zevlW+J&+N{Ar9gqe)u{--jl>4M(8T8ln1#=}d?X0}2F&@AyvGRr#GUdX ze~IS*i2c8G{^$4BqlGr&%(#%PMf0!38u7xL0dp=S>(Nr4+o%>(BA>JHi)m4>tf-Ri zPB}T;)2?Ilnfrgx-_&2T?F~#&sA{wjuMnxi+yL%5j?j5c@ZXGUs zG$z1=SlBb#3_zBUk0+|Ry&6)$Vrw;oG&C1~Ld-$zX2?Dgg-h#J%^}Jh&5+&U4@d+I zn&k*1SvBSe>7PLEN3r6I!|MlE?zNiH#`)kYJ8JE+&p7Jdo;pU)uut22SqPmdWU}Nt zQcT~T{vM%>mUX)(iQzqF@4G{q@gB9$Wb^60;~nwD9dR3z$M2db0C0PR9x#k-aJ!yL zT3m2-mX#yyy2${CNiUGZ7A6K@2=mhrmhz)E>IciScFm$wRLDJx;ke{kDLrp{hQ{gq z>u-2AHRbGM-r;&qzE*s9UTD4UyIwXuWl^%T6-f|`Zo3b&533KOHyt#mZN&fWP^?Gc z0L?6IbZumTs-&tUDWoZf$r14|Ol~?3G7c&ZA~qbf9HfEdq~s(cq$4DvN7DcY7c~bl z2f1pz*vphY@A$5Gp7^bJZHE&Xjt!zUx;3&j3peC&eYf>^ZgI7G;d=FY@p^gWcq<0( z%N2{R$$FW3mFlXv%H+!U%EZc8niQG@nxwJhQJM(Sh{N?iW58oxW8Cg~)tOUqlgX3u zmdwV&)Mxb9x9+-y=zi*}~5ME9?HV}xV;;&Sn{WASAm_pds3jPNQ_C1VNDNp&y2;*(;i6E9)!~>6DRYBqYT4Nry=7Lkf5( zP1xtfEB8+Mxsh82Nhzr)i4oY3eucuWlQJS_kZ4>tj%Ud;y>=GX9&(5iwKe2!s`G=> zA~y($OLcpBn$qsudSYDBdxkudkNEDoeh#nJM1BS2+@WMMeFJ=U*IzRE`V757ZLxm9 zbsev$r+Wr5UU74Vj4X17omP1JMqVKan4ZIU2SGMZKJmLExLTt$n|0QuHPNoXyKFA1 zv>TF^s`sHsQmmoYNwo&Ss&h;)Gpk};k`I`1bBFRJlcj4ejoo+%#i z`t)D#5$-$?A!_+N{F>=GbFZSN=bwd4Ej#L9xUhEoue3IXo2nwQMg=i7D+L>;mh;xh zF6^ueSVUpeMa^((@h@u8Eo;{`2>|j?+h0 zwI=(lCi|r(ciYY;*=WnlSXs)`SV^fAGjN+UGEkdTa7-x+qMF>A7{@E3mK~qu^R&DR zvkPJ%k4~3yjiJ3m>8HXWku8bDsC$o^H%f*LhN18Ek?#*yFPuZd?~xop?|1 z+s_^zrCr<88O1GdMQ3H(s9kU`Eze{Z9u(@fN7i{QuuZcW?iuIOShoAp^EjdLk0RUP z9s_b9UEM1+D+dD^66_L*RQmQp+x!d2ohXW(<=PzE7(W!>;$FWLz1Y9yI*Y=(T2(f+ zw((2Oe@7^O?TZXcM>VWQXw#THqfzVj*~WBXelR@STlwdAuihtplEn-tjvLyG@@ABX z*Z-)aTu4+Xc|WUXxJjfuZETHSFK-@uq-&;S#$?K7qQ3}?2#2oOsJeJ|Z(TMxcJPQq zFpBEj8`5;AQZ0SCWSB7jd$UH5nHd%{8g`hQO89cAFk!g}Up7%`m`PU~xoJ?Tykt{X zqAZdc7oZ6S-27={;k)pt5Jgk^r6y1%z74^Gky-5b`E%I4pw>&G%7Ag z#4HTF6oKzNkM2B|)uJy{s58P<4u$2GbvpoKNghu5j%>U4qBLOK4K7Iz2`$!7RUW@4 z7k4}#R!79VGYCT-8e4~7JdvOKF93cB5e8w?E|21GFBHUOm_OWHEiv>=0YkPR5vq{C z##^U`UP!=LVjiZV?*aX1INvRo&p^#97~cUo_fX91ubl%Z`~xnp2-{nh?*5cl;G6?y zufMXljJ*A!Zb6}Lejlx&9j$>It-%?s{uiww6|Dgitw9m3eh=)S4eWsn?7<1_{s-(K z1?&L>>_LI-eqXDhU8{jxtHD{T{#UCZRSdDA49$AXtondItA0;vp-pOmOKQPMYW_!R zAw_BdLux_6YJP92p>3&wYpKC$ss3lFA!VrnW2r$1x4hc}LQ=hMk<7-6=`AY#kKs^bL*ag^XRy4UI(|^xglN zhPFn=a{3O|j@;bz|Ep<^gpB_&-`U#6k?=R;KSUV4h`E)Mu>-w`mA;el|A;{^W^8V1 z=0wQI$n-yfVuWlA^fLO^#`J3Rip~a3?smrX;@0}6#`H@6VXDa*SQr~R(W{ypIhp;B zsQ+_8&|=}2eT=_=fPngQzspRaWOM(S|Lw;w1&RTPNeXQ1|5hWm|4%exW?}o^YsA3# zpBk}qF#oqj`ai?|7m=3U6xQW1hxHr&mE9nw$j{wZvFj^$9#Gk|>w`m+OD6o)^&@FU zysNi#M!@mKdDS_Cmiactc5`+C^4eq9yBr$qu6MRFEu$}hDh#DoX9@k8F)3ppF3*!b z1!Kd3#ZykqmF9^f`S1ZFT+uP z#-1B|-&XIIYxi}d2(&~f+IR?zGP0`ez<4IP=(`K9DwyaOEV4*9!P{i2czH{B+!vBd z0qe$7p9@5ZI6JsdC^F$?#YS&csoBi(mK_pozsFv~NY`5D7)zmYF|1g#@|T~W$+%@;Pf$+J)vyn~n;2M|HM=C_-HwucF21Ja) zZv-4B1r!HG$n@*~m(E-FLoY6eiYHLICf*3I%$}O{I9ef>nx#@S$Br97374b3y0l$^ zu_dnxOdG+(ot&%@4|`o}Ru^4zg~``l-LGo31fnmN`b)gXDO-G<&E)Z< z|AW1^4vVW<_C{xL*TJ3O?t~EBg1fuByGw8g?iSqLJvhOgph+M=a0w0pzDZu$@7d=) zd*|MBp6_|?b5H-VX07g?T2tIZ{OT@M%4Yg^7lZ#KG)*}8)| zl{>^}#0`}R>!f;$?GuKgNFr1<=JFg#j@HV!$Q($1!+S#L;m6u7+v$O2?;56Fi z$_IPvqYOQGtSs zhmReRVO(Z-SV9C+PwbGeURhIx!=LmyAu*7vufI1y|G;u>*fEHvEaUk68j`^8ZFN~a zjYCcR(P$^>Xk>nAPk8=P#BI*d(Re3mcuyqhsoN&^o9s~(;w6i(hxcf(Ha=N6kGXFl zkN|O>2wQ)PEzf@uTS!^C*uY(t{uPLV0YcKw1&rLxN~U0pwRAK6iQksCrY=sF#(#hZ z*FOMO*3j9Sl$HGlzA62Cxcz4&=>;N#0k$vqTHY3gJNMsXZGbnX0U&xA0Q_4;@cg18 z{(BPhVfVVpO&7E0VqP?<%KE0zKd9_M#d(l zX66=_R?aT2ZtfnQUO}&eLqfyCBO((Llaf`Niec_08=aI(SeaAYh?Femws_ z3J`#AF9;{u`$MgKdk_e!0H8}L!bi$084fDoniAy3;}?NPHhxb^g87BFRrHALe2HT zei%dj@{Wu}Fq$a$EHiTGC1FHRLC7vJR?9sGijc1X22z;e5g`~hqxoE9b;+VOB388H zvwWpXo}zikzZ<}ZAu=4jw!Z=U>bjmJYVLrg+ zPM29RO5M|iFNF^MxPNk90m~3sGu102EQOP#3W_r65nC+;dY%et^VkeI^5PgN3QJSO zP+JsHQBhS%Nj;ZbV7{d#m`s%wqh!=S$iSe>ECpxu4RftJfF;yf$TecjzP>ju}AB`(Eq&ynvFGX08lHE_#*&J~B_JRa@ zqxfiTlo;(pc}78SFtmcYxrHkThl^AJ93^inn(p)`6**?OFB=Y3WtwpBRZ@f}I8IBf zk}^JIl-Z^GVaPmV31Wi^HnC+z+v0(ro1|GQ-G93hq23bROSpLk208d4H zfa}AAq02eBXwQ(~i~PL4Na0|q@`@G<_^GO)0F z`1C#v2Mpy89l^K!siP#Ll0=J_#9pS!y@Q?P+O{aQ@TRniKq1Ww=T$-&^a+kKc$fCsMP%|X2(9`)N7Nf5d8Dv9}A zZt+Geq|g!|(fVz$4wrrmax*=4C=?`;ileAB(+|^&{vnc4orQrQ%ODC(gz2A#V57!} z1P6ngH;B&A_CsPeuo7(}2lD~}{h;Uhl&L>%yM`M!MTylFZ{r5;3lxc@OeB6BP`k1* z{U?dh9@&TWP9cwmzbWP8HkcH6XMGS2f$CIg0NBGBOe~nu`K@^R#CF z194Le9jY{ufnIKY)0E8gK0b`TywUmM*KotnQ|V+~`qN6ZD_cZSK;x-}OYd*YG6S=^ zHAAIMrNV7W6J~T}XW{Vnq_loM60{gLe`VSf%FxHrkiEWNOWa9-!Y;&9Q}$57o2Nti z^IjpOG(pstI)v;^d^SUp1ga2Etwe9E7`)@z$30SfFg36dN@CdmM$OdltEyLp;`9u) zxykN0T^gA(%`O+7PP053*(Sp1fJl@O?m^Nx(??M0R84~pVwrDJcjUS&oR)RkjBtUy z6($_K2I1Dzw0}CSrQ;x1<^f!}vI3oDn#xYSFbg>qmD>In@=b!6h@qEX;2e4QIT8wk z0Hg=(i&Kj2^;Nm6T6|duq@=KdN#vyDCX$xRE;sNl+o72%qu99p1O3k%gIf~|#DWAl zu^OAnz9w3{TJrp2E6k2DVp*)E#%WQSr>HURmeO8lt!k!H`93929IwBApbG7DL<9#t zm9{6hcrMfF9DjD%*uY%rwxhw5U3LhrIW9ch92<{2KAm3bjd*DNI5s1ewrGBX0meKR z>bS8oM|5TqI~IEw5?S%Y1zT_=LbhcUy~U7b@HsZADf($;9U{y*y^fMDA`^@YO<P-A{=!rTqlh0m-*Yax`#P;H-KHZ-Ns(2%JDek6feFP_RMI1#atSsaNQ zLOKadx*S%v1eWORi_n6+S%oD?qvAsIWkgnuMpdY0EP8l}5HHRTVo})j`3&Iq12o_>Mg(-D!6@NijXI<0JZuJy#=lgCMAClHG_sAmI-^p6k^^MD9# z2RgN&8I5`<1@RZu6KKs5v5OSw)hJSGom|pwxDc5LP2$c8y>`fkjv3>cUNYsMY3Qm- zp@~oSIXJl%E}m*Ce4&te&)*jASR2CX)0K`B*>{i;jNZ`D1RfbFXsi&L1QU}`w^hst z1_l=2hD?^J@#Nbx^tnrnK~h8eQ#QG{j+17A>3C@*OjFXvsW zogLajAweiWZ9+ZG_@^5~#-s=`>C8bi5zJ5MCfnq!eMQ3I)G4427;fy-*X%qRi{y63 z-#x*0ezTBl3$rp-*(+9pxM_x96K*<|Y00$Ht_FgadnY`pWr}qOFQbw<29nu##w5Pz z7DE~0kf!ZtpOd^&g7U1Vfg;7Q4Ie!v(pRKiAE zXrcmzon&Z+C|v}nAX3!|J*TxBCE2^|;*BakL1ihehzT2XM$7%$;#I!Ti+iyWqk;T> z76ZjoKl|WB^Qd^FK63PuHPg+Y9jy8y9`m&-gyy#i_x( zq19O&c|AQdJ7VJK8e$x+qddW#@vV0<(tL3x>9foFGF!He^+=RMT9eQWH|u35w2O5^ zV{kMK&xhnbYRt5;i1g*mi491MfTYdrV8_kM>%Ii=wgp;idb&X-x3xtGrwHRZI*dz> zdr2iUh0PcTNorl|JslGr8y+_{WCwagTIA=2Rib8d<%|aO%W>gMbd}_NuhM0V9ZqeE zE}Eyqqv@&?Ml{64;HI*6S1S-$Lh0mT;W3$PTgH|1NSPXGY3ZO8qJ-8s*|S8)pKWgD zq;A{M2J{JI`36UlUrLUPtR4k9k53be&phUK$K!>z#X$l1fp7ULH&^2Kuy6^mUD{3Qa1f+U6PUz6!Obc2%1EE9vkD`V%8QeW zL+bkFS%QqIXQLrmifp^kQkC``XT3Yu!RRu7vTK?oKR6f`%%B|KfO zLNIW^2w_82>mfcri=emVEDTrgXeC9HU%s0u298w>6pQR@i*R7c;K5kV&)=9HA5w`L zv%x4dk39D1Ekde*^Sw1-ec|o1W zcVWTOeD<%36H0Id3lSU?a&arcNwO=xg)ei%2e`si@F(r8OmX^RBJlCbbgt3`{Ol1? z!nS4Du`zN}^VU$XN*N`kR5Am#A~;pWLw(J>flDq&|_6sKC& zNy-fWU^$V=fg<#gl=^X+aNqBe;htim!FllQb%M|;mNx9s&%%Rdb(iC;w6RCW5?$(3 zBiCM0(zFAmtYz-(mR4*;BW>Y1W-Id+jdY!$Sz;mrHK;Zyne;62COZ|>O)VsQTHCxR zB~z=3IoWpfZEYk%U{p$ybeO32b@FTQkyh|mh19eZjry8;@q$OqsnL~LRa3L1nL$QT zXU$9q*SjFPP>&V}b8z^$}rY$G$wG=dd4XWWsyDumU(7>uU0ag&AhyBg1*7Yog% zC}L;OgVJ2TY9oC_Bo7l2o>2~BM@Lx;?;J_YHy|I~@2s=v)E$U-J1%x5&CArZXzb~7 zR*FKQPiCx@TJD5zFL%5|OZT@sNtxCGWf|A04@F0pHhIOb}JPWp^d;(## z_=0ru*R~doeJ)irb%x;TP&p>3ERjd1MsmgX~c;h;guguUCMs$p% zGF9kO9mxjh_7hZW&7mhk#IcTwY>md8)=2wsZ@!Wt)g@8kT{MAmZz!=Q!Euuf)>Ut! zDf{3S_zfs4U(7MLPHYdr%u6A2ATvt!tcGGl<}Zg)MPc{HxT1NAyoYyXNUo~2f(R&+ zb#1$B)-pyk=RtH1FVj+H(nZLzoNg+jSnqO)Tp18V0Kg^cMyZiIM`yRt*#c#Gna40L zWt~eY5UfkBEowHNRpvX?_Q@qk3A=phlL~O&nXssYMxyjKnrGYVMjveN_0sBBIMJnZ zWQEt74Wid>r?#{XeMXj_a_(>pi-Xds-D8obQiYrgKN^grS@{c#yuVrb?>a7)^#QHIAHUZgE3aSt(vfByA<|)s0h~A{TDDji#J3M}!_G zH*-)1lQmqagia(XWg~4-k&2{{6n>Rt9*6@wkvckykS=Y^jFr~6IZw;8kSk!-qPswl zL&aH{hbwYr4#ZWPcBpA*RI-z%3(pkh(7e`+zSI&viC7)2&50#zx35y|3u%|s!Iir4 z5~&RnmWol7?e0s4BQlbpl#p$2l$4ZkavG$z$bpQ)N}pMsiP_il*YwtiYzbO^rr|Q3 zMYsXI4zS`-O#b4Dcf5??E(ly5geOI5*05pf2K&?bpIH(X8WFWMGMf+ZL(j*t?hfDm`K)Zk&xkld-Ob&OhqD?&v|Ut1&jRAkLFsed{`6raepcrjHfk_bR| zi6wPVW=4P=nVZrVhLM*k30|r9NQjC=80BN^*S*p*N(!dCBPdf8oCHuHo2HZf{7Du1 z$4@J4ctNaO!KdZFb-A#D{T)BTBK}2G!~Z}q1S>b&zw|-zaQxwe;$i3f(ju6p}?C!mRXpPltK4>LQM zHZNv6ciA;y4cam7vbi3Lx{sBgnuxWg?D${$-k&|(p7)z=v?Y!_Z>LHuoql%ss)m+|GUc*WEdT!$E>k@B-l@$3ys7RK+>T zE6A3hXUU`9FSo8>+*Jb~oeN!M(B!>tMoB$<$A`wiP-8N78S1MyEt(SDl57&JQmw$0 z*`81sfh(Zhi=j}NYt>#&3xRo12Vor`8<{}yjREVV4n|v0fdesLlKi7FGE5XY6g)ZH z>G@KIuOV*t5maf!k&Qg0*X#p^0pJwPPwa0&=!cvCS3u|&A_Blj@(Z3{j(_(1a{R!- zU-0|>Gvxf?_x{^}fX~BFxBvl~zxV!gu>Yda|2^+N2gkogUe@OH|L2g3AZWD@vh|) zyR&|Y!_3 zslB}Ru|lQ0MY2lz*`_2BMk>Q1BTaf_D zJ6$&~cmI9`_pZt9mVUPFEd@EOZ574;J^WwM!Gn35TZ=oa$YuM{qVzWQ*n;@MPV?&P zy!ICEDsflq4bL_gL&JmIkDXTTc7~;L_vMgwsJ zb^qPbj*h4`c6*JKQ&Z>O#bfsQy&u@91gx`ETGXT3;sc%HP29{ZjoqJ0)p$emto(_O zPHY$^OcKz+sWY~3&gy&|J-fbJn!BThuB_jx=;{0Ma^hbT9dxh7nR*L3<)6Cw-9GH^ z<0Cb--}!m^aS6mDy}UPXebjm3XJhhGJuN3aq}Qw%vF$A0;>M7{-|vOMi!6MCDU*5@ zH7a)g6e&^PYg(OmSw|jzXwnp+hSj3v=!ia3b+DtF4{p_8Lws==4?XSPWnQWr^XtBE zwuKcxphgIRY3Ccdk4J^+u)mOQ>Gfe*jGD>aApybwc+1(D{}%c=eh~$K0s8*~lyUsI ziu^6G=O^6$0>J+>uKf{Udns>=Adveb^5cK3bW;U@gQ2)S{1@{B=dWw#w_vDWjZtR* zGe(*H-%So|f5wJ!aDd~Le>F<^C*8kH4yjM}m|uy89|Smd3sXi^d1-4&Qq;80+N+yx z*pPHN?Z;{KB*Mcr#y`WBNCovPS->*3m|DtUYo*HdTS&QxO0q}?5=ck&zjC9H-K5k^ z1Sw@FuvMa4E*83q&vBf19#39npXBha3TB=A>UmKJ`0-Djd-6{?Pkr^BDpCRfG*a~e z00Y}cSU`ZP5W*?=q7p$V;0au(8V9ik3+O2)g}&hi0Mwvqd)@&6wREq5kMO_sMg6TW z)@Ma_&u+glb(`>PlJ8CPb$|fELV!Q_XQ>L=k(g_9%z5K}|Zsc~dbo`ckrt+ZWtqJv#`^&u-$2PbL zlTI$~LrW36&j@UHt6OF@?+G{b2bY10)W`HE3qVM02-==}ps(yr7RMzz!M#s?`*imaDD250?_|ZP z2fHq|ChU3Y0Or)8)lnwKia-~>)x!+eFuVNwH3qp5x4ix8>G@M;eNpq359eiUEXVWB zS$ECKsTaa*8Zk4Ipjv7IZP;WHr>g-2tgNfhEzwNZeBQDb20g;yfgKO{DDK0B?;Y`G z|86k`{k!?rdg{#E$e}3D=kx3n-;b$xk=4$eV0q7%UkxvgL%r?1ht&Dh;hs3rykU;x z%onb^eOX2HjvFPSm9W49aVb&uVtACyL|v=mM#EdgDSzU{h_O<37(^2LE8q^2fnLA) z7tYWnni|xu2f}iJ>mka#50};1H-*PGB$0XkbqD5GA6#@lxRtWwxV_fmZbTZNSU1r+ zh0DX6vDF#9E4i4hbgNukp?b31yAO`Nq=tZa5C-OvsiW~Os+h;iDFcB3aJ z<&fOCTHi5oy}a5&?1*)XrMtJDC}NYnAX-1$GJgN-W8hd zYL+riC|*cm3*l@vT$iNWfESesNN_a=CwMz|@7m>2$aq7%g48CQO)Esc;14ct5Cbg( zn{2z#zZ1V`NuKDkrlYG3THsJC1SCQgLoGI5_H)0LfH?i0Nm5-_+Jm5Wt`QFrjd>#q zs5F4K#?uC0prd&QVO1J18q+HQVtQnOwcsmL8!-eHsn1go2GH~xV@r{s&oF`Lf3}=b z|AYsC_5mD-Mxjzu5SS}i=Oly>2LZ;E00=-p@{jmPdPoE?w!na+Vk?noz-WZ05TG=J zn1o)$FFOc{pg1a7~Mff&GR$uzX+*k8Xsof)I_EwHoa zKWx5T5`7d&c&RMA&4));Yr>#%P>UETtolNPwa-E!pkC-)@nhGD%U+qR$U~HVwVz;! zpc;Vxu>1|hG;0fN{-!r5+oOc}v-9%VD(8ErXcBeWlDAlM=6Y78E;BQtQjX5zR^$tg zD^Nj7!z*xal{%Z7=EajO$|K;q5`9|RUyv_)s^JFJK%?_Z5|TsXn?D$#SXYI_-eiNW zwwx?z1ljN%pz`5~j{%E9Cn!DHU5hLJ!_n?w1_mJFqy~dj{S+Y-uvPMGBrc&28dPu7 zJWb@C0_n`taPD|4HV}wnZ-Q}XC4m&wWw&vO`Nm4dkM4j=QJ$^_1seY^eQ4&Ks@ zaatW(GcYNP$heDIISY-)D=D#EUNscxd{6`MW*~xkgwcq%yCS|k&{q&i_r`$$MVc=# z*;F;@M$46)3P{YU8d?F}zL+O~y*0u0`8RY<(fF9?-qiVx{pcCP4Pzs1mL_75>u717 z3?O)>Eoa`Mj+e(ddQm=Zv+6xQ6uZu<-9wIHYWOC?#=Fyov21e8tybXi8046=L^gEM_eKDP`3kMmJ@q?UHt2QiTyL$kLq^wGmkCyc$sT4znFTUO# zrlWw1Mz>#)hUq0F!VpdjrE}PpiBkgNCcMJuM*T8CUuuZSc^fB)6c6!!Abo4j+F;)p z@;&Qi0fi4V02S^Lfz)>~{0~8efW*kT0PMc`SPW3^pW+Jvr9#SLkx7UDQ?(egf_Ty$ z2NvpYPcL|dz?KVMJeUds0X?Jt=`qh$xqvVgEt6M13xG&MaIsNSI~JsU4S@gv0l@d3qi7Lcby?1gmEPjy7{E-Abw)2WqOdY~O)_?0G~35O&)b z^AWGdfw9yoWbRf~xJi z7Uap{^J>t>O74Si8(~MWc1)4$46y8aav+7?jm7XSh~I#Kve1IJ2YZA=mxH~SoWy~5 zR~v27m$=^A_VXChAKc%-M`S4m9MX8=9h6t}^F>q-fOSkI1Q>c+z8&$AI4QX>BuB#>23laWoEoOGtn}KSy>g_nqCl)oBf)o`lS-{p>vXr}A`& zckcm`t{WL;{DfjH0VSw4F{?*k-jR?HRuE;cjES#*uk+_<&lHG2?um^gXftZWb`Rdh zi9FQq20t?w6{C~gbd8iSXpj-eaa)!HHcKiQui^PRa7Ku-ALi=HitPY4q1!D11AxT_ zm{wk1o34&%;}PB#J6_8`7)<+#W1G%rrSKlt4b$9`B#>_pY*1#nY$ zbWneQ_9T;k4TPew26QNzV|AQdHF|C)WCm!}l-L81rtB2VZxr998*ou5o+f@}l zx)^F0AFsgue6T)v5_W{mSFc^8Nj2-nTYt4Xr*{AOW|MuSHF5oI*1g#LcB~Y^=Mfqw zs}d_Hv)B1$Ig0?vsl~}m)Kq;b`L0L~TmxtLp-`)~-X~U9BLK$?0a9(92PEGU%qemJ zkgK>CV1R58@Wzq_paF?%V2qChSOmZWbJr$?N0h`wka|+j$yucA4u*aQL{e}6X?0trjY@dP6;%3Gg!S2kAjQE0NbE0|o z+D%BzIG| z0l1WOkULKamQ55jBNSWGO4cRV6GFd@1bBDADF?E7fAK7#%&sSqxeM;w9}myahrq8$ zwXIwx>SXWK*#+N^2K1K0ykgFH{o4SIS`h>kVpPofwv#?H zvN1r3{ds72m8g2uu>r;w0qI33(Tb#D-^f#8X?yGwa&fbefb8;ORo&ZkvMvjh-wmk3 zBmfJ32!_Ysxj~BJcdLms2iWIQa|7akHw@YwAQ$xS!^0w|`8ylI|G^&34PMjmW-P+O z00hkp000x1|ACW7@V3G6t3HdreP#B4Xa71U59hyh*|M|$!*RgL@#{|8pLGB7ZfMb3 zc^(?PIXiXT)Ll~pTX74d5oEMO1{$k{>PNy7gXVzRGWqoMtdTB+M~>Zp$8T=j)i?Ch z+LZG?sOL!pUhX)G&$TzgS8X9IYcyG^2w~85ls5H=NVRNExk;^t`?KhN)3FqFxqMXl zqPLg!!_gH0w0LZPc{$%6n@N}aLX7hsHcVW6cxWgut*&k+-r0P`_l?!<$(;Ir`Meiw z=+KnBZdQ65(%|^GPR65|(T$6Kmlua}cKrUa<=f1($K#=iwp9T^p_Z>^H4{F3Y}1GQ z8D&ak>`LZCB{l2a9S;7Mdq7Zqqs!Ar`G!>LFs;i`MJ3&2FYDa{`j(T2tKGeZg|7s5uBr{>DhEXLLzu|J$^siT-&aZyC$Swm?Q4;IRE(V zT;1O7qcAHkuf1N?qubZf0fUD7=VgI)(#}!xi(KwkSE#vh4_(<4sqd!rvk4C$ILgk_ z+Xj;_tJYulyDPlk=sjLs`L=HTb;>7a{-K0m)jRCuF!ZisF4_8~`FIb@Zy2o$J-}+YZf_hRvEh99)xVSr= zkN|(TifFwHm3_gooYTQ{SVYYj?_h{C2C$D(&u1uEfq*Iz20JF4GjCp z`3k|yZA!BWjp~CF1*~UUJpAoM_p3=re!(~Nm)VMq^&gYf@4lfQGwLt+hW>f#`iF1m z$Pym>M&SR;r4^hF=85pXa7Fz;$k_1z))mFc_OH|Bus#1XT@EV?C-*;w@ZSZA{UrRC z^~MLVFY20T`0Sn}<2{D46epeH6{ID7X-WMg*dSdNUdk3Ku11$)ja%IJlA^&!<*QW= z57aXyqYi#|^!d0107znm-1G+kmNbB8U`LcqWxx&C$Hb*3=mP`< zyum_yf&uglA%y!w01S+w2L!pDFaf zC!fysXFRsgxsDrJXA$h*>K=Q_yleG5Se}YL9}{4e;~q<7r`fS|x>;IWK;?|$$|UhJ z>fga6nb$Hjo7(kFK8L>U)XjTe*r}=iZQyYOU%NWJVfDfdqW_nAl!EBj+Xd z-ImGb=id>V$`^|Gk3NyR9S`eyUQcEdytB)crHv&(I-U_Jx#f+>BiNK7if-vrT7SJf zeuzh}uevSm=N{`JAW+`6oiTCz^eh0z9D2Z(1l|sggydeO5tGMarfD3 zi$rX7%Y(AV!_3TT3w6ydeG2ZAp8ogUV&A=yS!?P2n0J>!8l8`yXO3$Qo{)(MS%*sw zIGEwPTrNgUB#pO+?JgxyLJ!4kI}h&pjlDh|O z$I`EVs+z#>wsn7-$^Q`AZFhF(yEk*uE2}(w2fh7}Do{|+RsIPpK-?5Mc<0NZ-N;56 zceN}szrT^p+(&QDQWBgpB49?rdoHw~TG;P24#d z8Qvz>A(=Z%XXY6cd)hVKC6?S%cFv2eh)Eu5F0 z64QIW*;ZdRubM3Ha4l-C8fK=aj1XH1(VID7AGSSOx??_CT-38YK@b$FhuBPsebn8w z_g8=S)xdw=%_h3WTNj;L>f5RkJgaeaM9#PNje7xaB?b-bqo*Z8mIH)}Fqov%7jr zL&a(DUFGT?IcGOL0C@x;sd8~Wrl_n|Q zQsZ;m zS!cETUcBz!=B0z=!qj};7wv9;llNT)o@bn}p~W!cFFt`(RXxZ0y+#(H|shAIh&kt7oEnBY0IlF#Sj3Wtki?m$DwRz<0Re3pP zme^tTkr>seXj1|d^Pyo0SXBF125wkl4+mB4lM(c2NwKD);q?@|sO=tlfC;DOk+U$R7z-0E1<~)y9tH1PS-Q2kTYwvgGEH-~>KGXgQ zb8%jww`X65V@U)KBm_@?o_u(Vg$DMI*}%a80_ef{LOw?Z006DzqyRwm-&E1T1Y@L9 z&`u|hXqTY#@WxI60mnq|0>THr#5+he$ic$_G)R3Qg%^`NroV^RLXc<1Kx7IzaDG=0PJ5$(3XYOxCF>`x=E=L z@&t7_i?uFUrdz-fGjvVj+Yvf>aq8__BAddT=vJu{I@3yvu<(G-W0e^J)9zkho*BI$ zb&_Jkhfmi>SJH7b2|H4d$7ZE}G^S<(0DMMN!IGXoBUgPnfzk-OqFjEXM-8{y-yvtIzm_@VgZ_hFwfCO>r)Aei>sb94z6bi}pA;6rV_8}urH?k6sqQ8B z6v7N1sJNF`vr`h+Io-UUy5>Uz00He*Yh6kI&Cf#RpJoYX zX2p5$@|OaN)yHTfu8M#KL=8fz=zsvkcL5G8SMI*Gs-H9mcQRw7suVrR)oHeps}~id z8uVYrBSCML`wLo>#k~&`7Lsio8V^>$>^0CqH@=nmpn~0s5^0t%jsY6y%yV0QIj01E zY?QwQhA*qh$s(5;NiKs8W+J+qv>3)VOq0jR?umyI?@jP{4V>`+HR**$c(HSgNLLCL z*CL}1tn>?z>~ly)-f3buH>xcc@revtC4LBi1N$(LtohSbQr)GTnD}Rmbj%$(H)LBQDEftGAfQff5Vn~jMu@TQm00gvtLxh7h_OHQ3 z3+YUNYk8$4{Tw^?7AClRkM~>etMJ;#?6|RkDAj!Q18lq3rs%~*#v4UINrtH6`7ACL zSNubn^1JMBrq94ef&~cysCD>hFIW)ysI4Ru_aw_t%gn}VBk|7wC-0UVdL#PBIt2{- zk%{bfr$>6BQ^QrKgj}k0$1}TK+~*(fin~A0)D(BLm$$2`z9D_8k--T!=Y|!sL;Pq3m5z!Hw^iMv{f6|s z7b0*C%cBC_gkOU+t^>lJGiV$Z5z0yZbCr19twEsRaU^@o-B%KRzmEbfjBwwYUPD8) z(Kl-AKHfaESY|vPeJSz(ezRBe$#3QH+7zh+D7&xucqb%18vf#}RS7?2O8g{bh6rs% z=$jvO*j@YTA^{H z;z4{l3nMOOFxD%wxZidp=2Y8@Sip;VeWta8XH+k*)4oQSvz|c>!D_Oc{;5`w)O~Os zk^G_m?YpP%raOp61WNdJA)zKh-6{LI5VB0Zxti9WW|cz}Z)`5~aMw59_%wR^RYbEc z4^Kwno{LhEg#S>%=6KcPZCLEvDc@)20d6xWi>i}whMtV3msH&auOI_;SW7v(8Kd5n2*# zI#At>^KUx7v2xioiVC17W@lg+=gOIkTW#zudSFfx-Z43acf@5bXXC6$3d!z&lH%;F z$@1X#)QS4`dmM}b+K`dMlC9`3Tog`gs2m3EMG#e`FEnqH zuIoe!FjnTF>uiK|rotAJ2v46^QPOUxrZ*6loe!k3SK1&fqks zfb`CyLDuzOcle}{&{`$8j+n?Rl9*fZH8cbHfHf!FtfYE?5EIL9)Aq!^75*!#Z(5!< zGZHoZeLU&wZ_{e!BOQ(#Oz^scj{96vzncT+6HT%`8b7Bs`bjRd?PxM}#><<@5hv%Z zgz*yF59xJG@zEP?1De z27+~hq_4&AI?}92{eRed z3*b1KEL~L0WRWeFELmVNGg-{cWHB={S(0TjTNX1jt3?(wTG(Qy7Bjx~KX+#5?*6+w zv%7KMdl9#zqN6)A>txl*1C^C0&j*g;UsF9H%L;EnyCjS=eYo$}ySg9Xxz$N{%K*9v zlPabmOhszl@n6>3@U4*QKb|)IetKQ=TlF%*(;yi0mJ>hX0f*{-hxg*V>>v7tXoQ-w zRin=3zH_+@?){4MUbNc_*~pLHTu|8A;PT}xJe@xHIRz5UtC-^ZEdYT{`1e1!3JztC zjr2dFxZV{0Vfor-2Q@?!yz@%X_ETb3vj(BYbu3Y61nAAM4X8q=pPzFG-ilES^iEh?5U^$~ zD2IXQB0}A#i1Z&$<@fl!Lq~O{Q&A5}?8B{@y2Ih6Tx|BZq0xXi&L$KzH7oh}OZ6kk zWfjZDMD!{(V!v%<3=?}mUf?&+wYa(-CXT$Fh^`clR!0rrn-$n&xX*DNMqrLV%?CbF&e07zY z)zl#~$lBpXR}jsKYOqh$4{kYOOW+(=Nr@=>A~F;mrI`JT>8vKAX_;*StO5Ge0p&hG z7iB&P?72zN3lRpXQH56prA*|3q4|ukrlK2tr2e@|z~F8e8ddY?7q$2~fnAv#PCbkf z%HC_Aeb)P4{gzzkO8yv!98LhOTmQx9>Y04GK^_s0j){R9yT6$}?%@6TJcwvp6(;b- z&0%A)=a+_8FDv6QY&S&y#aOmv)ogtFDhqgWVb<07LnIO_OZdqH;V?UvRs88G8ZA8U z6>_2ZKcY7CIA2x$sAqxWA*G>fMIoc@|Ln(^X+1%%3t`x#KFC6iUX(xU_;XyI;K^ml zMU_gS^e?9F%%PgX5%|Fhf*mOT{ic2WxMk<_`yI-|x1UFImbS|V-8U*?+06(Tz6`pI z?S46G1?yI97}Q$Ljwld%0$L2)G%1#DlSuN1(@wY_kFhTeS3C5tejG~493JPpsvl>) z(~LDD$*^n946NdPG1=*ES_L!Q^Oi%?>#4GJGx?~yizu4|Scl)H zUK|VJS<@7gXDj@14Lw;=K3Afu%0A+!tMza#uU@D(@EuK(waJIaZ_*)Grx9e{O^F*& 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 z�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 MOiWVB(!_-S1M#Qtc>n+a diff --git a/app/assets/javascripts/application.js.erb b/app/assets/javascripts/application.js.erb deleted file mode 100644 index 75600788f2e..00000000000 --- a/app/assets/javascripts/application.js.erb +++ /dev/null @@ -1,1199 +0,0 @@ -// This is a manifest file that'll be compiled into application.js, which will include all the files -// listed below. -// -// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, -// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. -// -// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the -// compiled file. -// -// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details -// about supported directives. -// -//= require jquery3 -//= require jquery_ujs -//= require jquery-ui -//= require bootstrap.min -//= require jquery.selectric.min -//= require turbolinks -//= require classie -//= require modalEffects -//= require jquery.mask -//= require override_confirm -//= require floatlabels -//= require dob_validation.js -//= require date -//= require formhelpers -//= require insured -//= require qle -//= require modal_actions -//= require print -//= require browser_issues -//= require bowser.min -//= require consumer_role -//= require plan_year_selection -//= require announcement -//= require bootstrap-slider -//= require bootstrap-hooks -//= require general_agency -//= require dataTables/jquery.dataTables -//= require dataTables/bootstrap/3/jquery.dataTables.bootstrap -//= require freebies -//= require responsive -//= require effective_datatables -//= require jquery.steps -//= require bootstrap-treeview -//= require_tree . - -var bs4 = document.documentElement.dataset.bs4; -var disableSelectric = false; - -$(document).on('page:load turbolinks:load', function () { - Freebies.fadeElement($("body")); - Freebies.allFreebies(); - indicateRequiredFields(); - indicateAdminDesignatedElements(); - Responsive.setSizeListeners(); - if (controllerName() === 'families' && actionName() === 'verification'){ - $('.verification-update-reason .selectric').removeEventListener('turbolinks:load', Freebies.selectric()) - $('.return-for-def-reason .selectric').removeEventListener('turbolinks:load', Freebies.selectric()) - } -}); - -function indicateRequiredFields() { - $('label.required, legend.required').each(function() { - if ($(this).find('.sr-only').length == 0) { - $(this).append('*'); - } - }); -} - -function indicateAdminDesignatedElements() { - $('.admin-designation').each(function() { - if ($(this).find('.sr-only').length == 0) { - $(this).append('âš™'); - } - }); -} - -function displayAdminDesignationDescriptor() { - var adminDesignationDescriptorContainer = $('.admin-designation').not('#admin-designation-descriptor > .admin-designation') - var adminDesignationDescriptor = $('#admin-designation-descriptor'); - if (adminDesignationDescriptorContainer.length > 0) { - adminDesignationDescriptor.removeClass('hidden'); - } -} - -function controllerName() { - const body = document.body; - return body.dataset.controller; -} - -function actionName() { - const body = document.body; - return body.dataset.action; -} - -function applyJQDatePickerSetup(ele) { - - var el = $(ele); - - if (el.is(".jq_datepicker_already_applied")) { - return; - } - - var dobIdentifiers = ['#jq_datepicker_ignore_person_dob', '#family_member_dob_', '#jq_datepicker_ignore_organization_dob', '#jq_datepicker_ignore_census_employee_dob', '[name="jq_datepicker_ignore_dependent[dob]"]']; - var isElementDOBType = false; - - /* Checking If type of element is Date of Birth type. */ - $.each(dobIdentifiers, function(index, value){ - if(el.is(value)) { - isElementDOBType = true; - return; - } - }); - - var yearMax = dchbx_enroll_date_of_record().getFullYear() + 10; - var yearMin = dchbx_enroll_date_of_record().getFullYear() - 110; - var otherFieldSelector = el.attr("data-submission-field"); - var otherField = $(otherFieldSelector); - otherField.hide(); - el.show(); - var otherFieldId = otherField.attr("id"); - var labelFields = $("label[for='" + otherFieldId + "']"); - if (labelFields.length > 0) { - labelFields.hide(); - } - otherField.attr("class", ""); - - var ofParentControl = otherField.parent(); - var ofGrandparentControl = ofParentControl.parent(); - - var inErrorState = false; - - var dateMax = null; - var dateMin = null; - - if (ofParentControl.is(".floatlabel-wrapper")) { - if (ofGrandparentControl.is(".field_with_errors")) { - inErrorState = true; - } - } else if (ofParentControl.is(".field_with_errors")) { - inErrorState = true; - } - - if (inErrorState) { - var parentControl = el.parent(); - if (parentControl.is(".floatlabel-wrapper")) { - parentControl.wrap("
"); - } else { - el.wrap("
"); - } - } - - if (el.is("[data-year-max]")) { - yearMax = el.attr("data-year-max"); - } - - if (el.is("[data-year-min]")) { - yearMin = el.attr("data-year-min"); - } - - if (el.is("[data-date-max]")) { - dateMax = el.attr("data-date-max"); - } - - if (el.is("[data-date-min]")) { - dateMin = el.attr("data-date-min"); - } - - el.datepicker({ - changeMonth: true, - changeYear: true, - dateFormat: 'mm/dd/yy', - altFormat: 'yy-mm-dd', - altField: otherFieldSelector, - yearRange: yearMin + ":" + yearMax, - onSelect: function(dateText, dpInstance) { - $(this).datepicker("hide"); - $(this).trigger('change'); - - } - }); - if(!isElementDOBType && !el.is(".allow-future-date")) { - el.datepicker('option', 'minDate', dateMin); - el.datepicker('option', 'maxDate', dateMax); - } - el.datepicker("refresh"); - el.addClass("jq_datepicker_already_applied"); -} - -function applyJQDatePickers() { - if (!bs4) { - $(".jq-datepicker").each(function(idx, ele) { - applyJQDatePickerSetup(ele); - if ($(this).attr("readonly") != undefined){ - $(ele).datepicker('disable'); - } - }); - } -} - -function applyMultiLanguageSelect() { - $('#broker_agency_language_select').multiselect({ - nonSelectedText: 'Select Language', - maxHeight: 300 - }); - $('#broker_agency_language_select').multiselect('select', 'en', true); - $('#broker_agency_language_select').on('selectric-init', function(element){ - $('.language_multi_select .selectric-interaction-field-control-broker-agency-languages-spoken').hide(); - }); -}; - -function applyMultiLanguageSelectForGA() { - $('#general_agency_language_select').multiselect({ - nonSelectedText: 'Select Language', - maxHeight: 300 - }); - $('#general_agency_language_select').multiselect('select', 'en', true); - $('#general_agency_language_select').on('selectric-init', function(element){ - $('.language_multi_select .selectric-interaction-field-control-general-agency-languages-spoken').hide(); - }); -}; - -function dchbx_enroll_date_of_record() { - return new Date($('#dchbx_enroll_date_of_record').text()); -}; - -function getCarrierPlans(ep, ci) { - - var params = 'carrier_id=' + ci; - $.ajax({ - url: "/employers/employer_profiles/"+ep+"/plan_years/reference_plans/", - data: params - }) -}; - -// modal input type file clicks -$(document).on('click', '#modal-wrapper div label', function(){ - $(this).closest('div').find('input[type=file]').on('change', function() { - var filename = $(this).closest('div').find('input[type=file]').val() - $(this).closest('div').find('.select').hide(); - $(this).closest('div').find('.upload-preview').html(filename + "").show(); - $(this).closest('div').find('input[type=submit]').css({"visibility": "visible", "display": "inline-block"}); - }); -}); -$(document).on('click', '.upload-preview .fa', function(){ - $(this).closest('#modal-wrapper').find('input[type=file]').val(""); - $(this).closest('#modal-wrapper').find('.upload-preview').hide(); - $(this).closest('#modal-wrapper').find('input[type=submit]').hide(); - $(this).closest('#modal-wrapper').find('.select').show(); -}); -$(document).on('click', '#modal-wrapper .modal-close', function(){ - $(this).closest('#modal-wrapper').remove(); -}); - - -$(document).on('turbolinks:load', function () { - - // ACTUALLY BELONGS IN APPLICATION.JS - $('.module a.view-more').on('click', function() { - event.preventDefault(); - if ( $(this).hasClass('view-less') ) { - $(this).html('View More'); - $(this).removeClass('view-less'); - $(this).closest('.section').find('.dn').slideUp(); - } else { - $(this).html('View Less'); - $(this).addClass('view-less'); - if ( $(this).closest('.module').hasClass('employer-welcome') ) { - $(this).closest('.section').find('.dn').slideDown(); - } - } - }); - - //warn user before exiting to gmail, ymail, or aol - - $('.email-alert').on('click', function() { - if ( !confirm("You are leaving the <%= EnrollRegistry[:enroll_app].setting(:short_name).item %> web site and entering a privately owned web site created, operated and maintained by a private business. The information that this private business collects and maintains as a result of your visit to its web site is different from the information that the <%= EnrollRegistry[:enroll_app].setting(:short_name).item %> collects and maintains. <%= EnrollRegistry[:enroll_app].setting(:short_name).item %> does not share information with this private company. <%= EnrollRegistry[:enroll_app].setting(:short_name).item %> cannot help you with any information regarding this website, including your username or password, or other technical issues. By linking to this private business, the <%= EnrollRegistry[:enroll_app].setting(:short_name).item %> is not endorsing its products, services, or privacy or security policies. We recommend you review the business's information collection policy or terms and conditions to fully understand what information is collected by this private business.") ) - { return false; } - }) - - if ( $('.plan-year').find('.fa-star.enrolling, .fa-star.published').length ) { - $('.plan-year').find('.fa-star.enrolling, .fa-star.published').closest('.plan-year').find('a.benefit-details').trigger('click'); - - } - - // mimic jquery toggle function - $.fn.toggleClick=function(){ - var functions=arguments, iteration=0 - return this.click(function(){ - functions[iteration].apply(this,arguments) - iteration= (iteration+1) %functions.length - }) - } - - //employees table table functions - $(document).on('click', '.table-functions i.fa-trash-o', function() { - $(this).closest("tr").next().show(); - $(this).closest("tr").hide(); - }); - $(document).on('click', 'a.terminate.cancel', function() { - $(this).closest('tr').prev().show(); - $(this).closest('tr').hide(); - }); - - // details toggler - $('.benefitgroup .details').toggleClick(function () { - $(this).closest('.referenceplan').find('.plan-details').slideDown(); - $(this).html('Hide Details '); - }, function () { - $(this).closest('.referenceplan').find('.plan-details').slideUp(); - $(this).html('View Details '); - }); - - // toggle filter options in employees list - $(document).on('click', '.filter-options label', function() { - $('.filter-options').hide(); - }); - $(document).on('mouseleave', '.filter-options', function() { - $('.filter-options').hide(); - }); - - $('a.back').off('click'); - $('a.back').on('click', function(){ - parent.history.back(); - return false; - }); - - semantic_class(); //Calls semantic class on all input fields & buttons (eg. interaction-click-control-continue) - - $(document).on("focus", "[class~='date-picker']", function(e){ - dateMin = $(this).attr("data-date-min"); - dateMax = $(this).attr("data-date-max"); - - if ($(this).hasClass('dob-picker') || $(this).hasClass('hire-picker')){ - $(this).datepicker({ - changeMonth: true, - changeYear: true, - dateFormat: 'mm/dd/yy', - maxDate: "+0d", - yearRange: dchbx_enroll_date_of_record().getFullYear()-110 + ":" + dchbx_enroll_date_of_record().getFullYear(), - onSelect: function(dateText, dpInstance) { - $(this).datepicker("hide"); - $(this).trigger('change'); - } - }); - }else{ - $(this).datepicker({ - changeMonth: true, - changeYear: true, - dateFormat: 'mm/dd/yy', - minDate: dateMin, - maxDate: dateMax, - yearRange: dchbx_enroll_date_of_record().getFullYear()-110 + ":" + (dchbx_enroll_date_of_record().getFullYear() + 10), - onSelect: function(dateText, dpInstance) { - $(this).datepicker("hide"); - $(this).trigger('change'); - } - }); - } - }); - - $(".address-li").on('click',function(){ - $(".address-span").html($(this).data("address-text")); - $(".address-row").hide(); - divtoshow = $(this).data("value") + "-div"; - $("."+divtoshow).show(); - }); - // Add something similar to jqueries deprecated .toggle() - $.fn.toggleClick=function(){ - var functions=arguments, iteration=0 - return this.click(function(){ - functions[iteration].apply(this,arguments) - iteration= (iteration+1) %functions.length - }) - } - - - // $('.alert').delay(7000).fadeOut(2000); //Fade Alert Box - // $('#plan_year input,select').click(function(){ - // $('#plan_year .alert-error').fadeOut(2000); - // }); - - // personal form js - - $( "#new_person" ).submit(function( event ) { - $('#person_first_name, #person_middle_name, #person_last_name').each(function() { - var name = $(this).val(); - var trimmed_name = $.trim(name) - $(this).val(trimmed_name); - }); - }); - - // personal-info-row focus fields - $(document).on('focusin', 'input.form-control', function() { - $(this).parents(".row-form-wrapper").addClass("active"); - $(this).prev().addClass("active"); - }); - - $(document).on('focusout', 'input.form-control', function() { - $(this).parents(".row-form-wrapper").removeClass("active"); - $(this).prev().removeClass("active"); - $("img.arrow_active").remove(); - }); - - // Employer Registration - $('.employer_step2').click(function() { - - // Display correct sidebar - $('.credential_info').addClass('hidden'); - $('.name_info').addClass('hidden'); - $('.tax_info').addClass('hidden'); - $('.emp_contact_info').removeClass('hidden'); - $('.coverage_info').removeClass('hidden'); - $('.plan_selection_info').removeClass('hidden'); - - // Display correct form fields - $('#credential_info').addClass('hidden'); - $('#name_info').addClass('hidden'); - $('#tax_info').addClass('hidden'); - - $('#emp_contact_info').removeClass('hidden'); - $('#coverage_info').removeClass('hidden'); - $('#plan_selection_info').removeClass('hidden'); - }); - - $('.employer_step3').click(function() { - - // Display correct sidebar - $('.emp_contact_info').addClass('hidden'); - $('.coverage_info').addClass('hidden'); - $('.plan_selection_info').addClass('hidden'); - - $('.emp_contributions_info').removeClass('hidden'); - $('.eligibility_rules_info').removeClass('hidden'); - $('.broker-info').removeClass('hidden'); - - // Display correct form fields - $('#emp_contact_info').addClass('hidden'); - $('#coverage_info').addClass('hidden'); - $('#plan_selection_info').addClass('hidden'); - - $('#emp_contributions_info').removeClass('hidden'); - $('#eligibility_rules_info').removeClass('hidden'); - $('#broker_info').removeClass('hidden'); - }); - - $(document).on('click', '.close-fail', function() { - $(".fail-search").addClass('hidden'); - $(".overlay-in").css("display", "none"); - }); - - // ----- Focus Effect & Progress ----- - $("body").click(function(e) { - update_progress(); - }); - - update_progress(); //Run on page load for dependent_details page. - function update_progress() { - var start_progress = $('#initial_progress').length ? parseInt($('#initial_progress').val()) : 0; - - if(start_progress == 0) { - var personal_entry = check_personal_entry_progress(); - var address_entry = check_address_entry_progress(); - var phone_entry = check_phone_entry_progress(); - var email_entry = check_email_entry_progress(); - } - - if(personal_entry) { - start_progress = 10; - $("a.one, a.two").css("color","#00b420"); - } - - if(address_entry) { - start_progress += 8; - $("a.three").css("color","#00b420"); - } - - if(phone_entry) { - start_progress += 10; - $("a.four").css("color","#00b420"); - } - - if(email_entry) { - start_progress += 12; - $("a.five").css("color","#00b420"); - } - - if($('.dependent_list').length) { - start_progress += 5; - $("a.six").css("color","#00b420"); - } - - if($('#family_member_ids_0').length) { - $("a.seven").css("color","#00b420"); - } - - if($('#all-plans').length) { - $("a.eight").css("color","#00b420"); - } - - if($('#confirm_plan').length) { - $("a.nine").css("color", "#00b420"); - } else { - // $("a.six").css("color","#999"); - } - - $('#top-pad').html(start_progress + '% Complete'); - $('.progress-top').css('height', start_progress + '%'); - - if(start_progress >= 40) { - $('#continue-employer').removeClass('disabled'); - } else { - $('#continue-employer').addClass('disabled'); - } - } - - function check_personal_entry_progress() { - gender_checked = $("#person_gender_male").prop("checked") || $("#person_gender_female").prop("checked"); - if(gender_checked==undefined) { - return true; - } - if(check_personal_info_exists().length==0 && gender_checked) { - return true; - } else { - $("a.one").css('color', '#999'); $("a.two").css('color', '#999'); - return false; - } - } - - function check_address_entry_progress() { - var empty_address = $('#address_info input.required').filter(function() { return $(this).val() === ""; }).length; - if(empty_address === 0) { return true; } - else { - $("a.three").css('color', '#999'); - return false; - } - } - - function check_phone_entry_progress() { - var empty_phone = $('#phone_info input.required').filter(function() { return ($(this).val() === "" || $(this).val() === "(___) ___-____"); }).length; - if(empty_phone === 0) { return true; } - else { - $("a.four").css('color', '#999'); - return false; - } - } - - function check_email_entry_progress() { - var empty_email = $('#email_info input.required').filter(function() { return $(this).val() === ""; }).length; - if(empty_email === 0) { return true; } - else { - $("a.five").css('color', '#999'); - return false; - } - } - // ----- Finish Focus Effect & Progress ----- - - //Employee Dependents Page - $('#dependents_info #top-pad15, #dependents_info #top-pad30, #dependents_info #top-pad80').hide(); - $("#dependents_info a.one, #dependents_info a.two, #dependents_info a.three, #dependents_info a.four, #dependents_info a.five").css("color","#00b420"); - - $('.add_member').click(function() { - $('.fail-search').addClass('hidden'); - $("#dependent_buttons").removeClass('hidden'); - $("#dependent_buttons div:first").addClass('hidden'); - $('#dependent_buttons div:last').removeClass('hidden'); - $('.add-member-buttons').removeClass('hidden'); - }); - - $(document).on('click', '#cancel_member', function() { - $("#dependent_buttons").removeClass('hidden'); - $(".dependent_list:last").addClass('hidden'); - }); - - $('#save_member').click(function() { - $('.new_family_member:last').submit(); - }); - - // Add new address - $('.btn-new-address').click(function(e){ - e.preventDefault(); - $(".new-address-flow").css("display", "block"); - }); - - $('.new-address-flow .cancel').click(function(){ - $(".new-address-flow").removeAttr("style"); - }); - - $('.new-address-flow .confirm').click(function(){ - $(".new-address-flow").removeAttr("style"); - var new_address = $("#add-address").val(); - $("ul.dropdown-menu li:first-child").clone().appendTo(".dropdown ul.dropdown-menu"); - $("ul.dropdown-menu li:last-child a:nth-child(2)").text(new_address); - $("ul.dropdown-menu li:last-child").data('value', new_address.substr(0, new_address.indexOf(' ')).toLowerCase()); //Get First word and lowercase - $("ul.dropdown-menu li:last-child").data('address-text', new_address.replace(/ /g,'')) // Remove Whitespace - - if (($("#add-address").val()) !== "") { - $("#dropdownMenu1 label").text($("#add-address").val()); - }else{} - - $('#address_info > .first').attr('id', ($("#add-address").val())); - $('#address_info input').val(""); - }); - - $('.dropdown-menu a.address-close').click(function() { - if($("ul.dropdown-menu li").length > 1) { - $(this).parent("ul.dropdown-menu li").remove(); - } else { - alert("You cannot remove all addresses."); - } - }); - - // Change Dropdown Address Text - $('.address-li').on('click', function(){ - $("#dropdownMenu1 label").text($(this).text()); - $('#address_info > .first').attr('id', ($(this).text())); - }); - - $(document).on('click', '.filter-btn-row a.all-filter', function(){ - $(".all-filters-row").toggle("fast"); - }); - - $(document).on('click', '.selected-plans-row .close', function(){ - $(".select-plan .tab-content").removeClass("selected"); - $(".selected-plans-row").hide(); - }); - - - - $(document).on('focusout', "#person_ssn, .mask-ssn", function(){ - var ssn_val = $(this).val(); - ssn_patt1=/^000/; - ssn_patt2=/^666/; - ssn_patt3=/^....00/; - ssn_patt4=/000$/; - - // Fix for #4041 - // if (ssn_val.match(ssn_patt1) || ssn_val.match(ssn_patt2) || ssn_val.match(ssn_patt3) || ssn_val.match(ssn_patt4) ) { - // $(this).val("SSN is INVALID"); - // } - }); - - - $("#person_ssn:not(.keep-label)").focusout(function( event ) { - if(!$.isNumeric($(this).val())) { - $("[for='person_ssn']").css('display', 'none'); - $("[for='person_ssn']").css('opacity', 0); - } else { - $("[for='person_ssn']").css('display', 'block'); - $("[for='person_ssn']").css('opacity', 1); - } - }); - - $('#employer .landing_personal_tab .first').focusin(function(){ - $(this).css('opacity', 1); - }); - - $(".floatlabel, .selectric-wrapper").focusin(function() { $(this).closest('.employee-info').css("opacity","1") }); - $(".floatlabel, .selectric-wrapper").blur(function() { $(this).closest('.employee-info').css("opacity","0.5") }); - - $(document).on('click', '.return_to_home', function() { - $('#add_home_action').html(''); - $('#main-home').show(); - }); - - $(document).on('click', '.return_to_employee_roster', function() { - $('#add_employee_action').html(''); - $('.employees-section').show(); - }); - - $(document).on('click', '.return_to_employer_broker_agenices', function() { - $('#show_broker_agency').html(''); - $('#broker_agencies_panel').show(); - }); - - $(document).on('click', '.return_to_broker_applicants', function() { - $('#edit_broker_applicant').html(''); - $('#broker_applicants_roster').show(); - }); - $("#contact > #address_info > div, #contact > #phone_info > div, #contact > #email_info > .email > div").click(function(){ - $("#contact > #address_info > div, #contact > #phone_info > div, #contact > #email_info > .email > div").addClass('focus_none'); - $("#contact > #address_info > div, #contact > #phone_info > div, #contact > #email_info > .email > div").removeClass('add_focus'); - $(this).removeClass('focus_none'); - $(this).addClass('add_focus'); - }); - - $('.member_address_links').click(function(){ - var member_id = $(this).data('id'); - $.ajax({ - url: '/people/'+member_id+'/get_member', - type: 'GET', - success: function(response){ - $('#member_address_area').html(response); - } - }); - $('#dLabel').html($(this).text()+""); - }); - - $(document).on('click', '.all-plans', function() { - $("#plan-summary").hide(); - $("#account-detail").show(); - $("#all-plans").show(); - }); -}); - -$(document).on('page:update', function() { - // Change Dropdown Address Text - $('.address-li').on('click', function(){ - $("#dropdownMenu1 label").text($(this).text()); - $('#address_info > .first').attr('id', ($(this).text())); - $('#employer_census_employee_family_census_employee_attributes_address_attributes_kind').val($(this).data('value')); - }); - - Freebies.selectric(); - $('#person_addresses_attributes_0_state').on('change', function () { - $('select').selectric('refresh'); - }); - $('select').attr('tabindex', '-1'); - - $('#plan-years-list li a').on('click', function(){ - var target = $(this).attr('href'); - $("span#current_plan_year").text($(this).text()); - $(".plan-years-content .plan-year").hide(); - $(target).show(); - }); - $("ul.bg-list li a").on('click', function(){ - var target = $(this).attr('href'); - $(target).parents('.plan-year').find(".bg-content .bg").hide(); - $(target).show(); - }); -}); - -$(document).on('click', ".interaction-click-control-add-plan-year", function() { - $(this).button('loading'); -}); - - -$(document).on('change', "#plan_year_start_on", function() { - if ($('.recommend #notice h4').text() == "Loading Suggested Dates...") { - return false; - } - - var start_on_date = $(this).val(); - if(start_on_date != "") { - $('.recommend #notice').html("

Loading Suggested Dates...

"); - var target_url = $("a#generate_recommend_dates").data("href"); - var employer_profile_id = $('#employerProfileId').data('value'); - var benefit_group_id = $('#benefitGroupId').data('value'); - var location_id = $('.health .nav li').closest('fieldset').attr('id'); - - $.ajax({ - type: "GET", - data:{ - start_on: start_on_date, - benefit_group_id: benefit_group_id, - location_id: location_id, - employer_profile_id: employer_profile_id - }, - url: target_url - }); - }; - - // get dental plan carrier names - var dental_target_url = $('a#generate-dental-carriers-and-plans').attr('href'); - var plan_year_id = $('a#generate-dental-carriers-and-plans').data('planYearId'); - // assign fake location_id that will be overridden by js - var location_id = $('.benefit-group-fields:last').attr('id'); - var active_year = $(this).val().substr(0,4); - if($.inArray(active_year, <%= EnrollRegistry[:enroll_app].setting(:dental_plan_years_available).item %>) !== -1){ - $(".show-dental-plans").show(); - }else{ - $(".show-dental-plans").hide(); - } - $.ajax({ - type: "GET", - data:{ - active_year: active_year, - plan_year_id: plan_year_id, - location_id: location_id - }, - url: dental_target_url - - }); -}); - -$(document).on('change', "input#jq_datepicker_ignore_plan_year_open_enrollment_start_on", function() { - var date = $(this).val(); - if(check_dateformat(date) != true) { - $('.recommend #notice').html("

Open Enrollment Start Date: Invalid date format!

"); - } else { - $('.recommend #notice').html(""); - } -}); - -$(document).on('change', "input#jq_datepicker_ignore_plan_year_open_enrollment_end_on", function() { - var date = $(this).val(); - if(check_dateformat(date) != true) { - $('.recommend #notice').html("

Open Enrollment End Date: Invalid date format!

"); - } else { - $('.recommend #notice').html(""); - } -}); - - -$(document).on('click', 'tr .show_msg', function() { - $(this).parent().parent().addClass('msg-inbox-read'); -}); -$(document).on('click', '.btn-danger', function() { - var unread = $('.message-badge').text(); - $('.message-unread').html(unread); -}); - -$(document).on('click', '#terms_check_thank_you', function() { - first_name_thank_you = $("#first_name_thank_you").val().toLowerCase().trim(); - last_name_thank_you = $("#last_name_thank_you").val().toLowerCase().trim(); - subscriber_first_name = $("#subscriber_first_name").val(); - subscriber_last_name = $("#subscriber_last_name").val(); - - // Appends a query parameter to the 'btn-continue' button's href attribute to indicate that the user has disagreed to the terms on the thank you page. - document.getElementById('btn-continue').href += "&thankyou_page_agreement_terms=disagreed"; - - if($(this).prop("checked") == true){ - if( first_name_thank_you == subscriber_first_name && last_name_thank_you == subscriber_last_name){ - - // Appends a query parameter to the 'btn-continue' button's href attribute to indicate that the user has agreed to the terms on the thank you page. - document.getElementById('btn-continue').href += "&thankyou_page_agreement_terms=agreed"; - - $('#btn-continue').removeClass('disabled'); - } else { - $('#btn-continue').addClass('disabled'); - } - }else if($(this).prop("checked") == false){ - $('#btn-continue').addClass('disabled'); - } -}); - -$(document).on('keydown', '#btn-continue', function() { - first_name_thank_you = $("#first_name_thank_you").val().toLowerCase().trim(); - last_name_thank_you = $("#last_name_thank_you").val().toLowerCase().trim(); - subscriber_first_name = $("#subscriber_first_name").val(); - subscriber_last_name = $("#subscriber_last_name").val(); - - if ((first_name_thank_you != subscriber_first_name || last_name_thank_you != subscriber_last_name) && event.code == 'Enter') { - event.preventDefault(); - } -}) - -$(document).on('blur keyup', 'input.thank_you_field', function() { - first_name_thank_you = $("#first_name_thank_you").val().toLowerCase().trim(); - last_name_thank_you = $("#last_name_thank_you").val().toLowerCase().trim(); - subscriber_first_name = $("#subscriber_first_name").val(); - subscriber_last_name = $("#subscriber_last_name").val(); - - // Appends a query parameter to the 'btn-continue' button's href attribute to indicate that the user has disagreed to the terms on the thank you page. - document.getElementById('btn-continue').href += "&thankyou_page_agreement_terms=disagreed"; - if ($("#terms_check_thank_you").length) { - if(last_name_thank_you == ""){ - $('#btn-continue').addClass('disabled'); - }else{ - if($("#terms_check_thank_you").prop("checked") == true){ - if( first_name_thank_you == subscriber_first_name && last_name_thank_you == subscriber_last_name){ - - // Appends a query parameter to the 'btn-continue' button's href attribute to indicate that the user has agreed to the terms on the thank you page. - document.getElementById('btn-continue').href += "&thankyou_page_agreement_terms=agreed"; - $('#btn-continue').removeAttr('disabled'); - $('#btn-continue').removeClass('disabled'); - } else { - $('#btn-continue').addClass('disabled'); - $('#btn-continue').attr('disabled', true) - } - } - } - } else { - if(last_name_thank_you == ""){ - $('#btn-continue').addClass('disabled'); - }else{ - if( first_name_thank_you == subscriber_first_name && last_name_thank_you == subscriber_last_name){ - - // Appends a query parameter to the 'btn-continue' button's href attribute to indicate that the user has agreed to the terms on the thank you page. - document.getElementById('btn-continue').href += "&thankyou_page_agreement_terms=agreed"; - $('#btn-continue').removeAttr('disabled'); - $('#btn-continue').removeClass('disabled'); - } else { - $('#btn-continue').addClass('disabled'); - $('#btn-continue').attr('disabled', true) - } - } - } -}); -$(document).on('keyup', ".new_person #person_ssn", function(){ - $(".new_person input#person_no_ssn").prop('checked', false); -}); -$(document).on('change', ".new_person #person_no_ssn", function(){ - if (this.checked) { $(".new_person #person_ssn").val(""); $(".new_person #person_ssn").trigger('change'); } -}); - -$(document).on('keyup', ".new_dependent #dependent_ssn", function(){ - $(".new_dependent input#dependent_no_ssn").prop('checked', false); -}); -$(document).on('change', ".new_dependent #dependent_no_ssn", function(){ - if (this.checked) { $(".new_dependent #dependent_ssn").val(""); $(".new_dependent #dependent_ssn").trigger('change'); } -}); - -$(document).on('click', '.interaction-click-control-cancel, .interaction-click-control-confirm-member, .fa-times', function(){ - $('.fa-pencil').show(); -}); - -Freebies.popover(); - -$(document).on('click', '#address_info + span.form-action', function(){ - if ($(this).text() == "Add Mailing Address"){ - $(this).text('Remove Mailing Address'); - if($(this).attr('id') == "add_dependent_mailing_address"){ - $(this).attr('id', 'remove_dependent_mailing_address'); - $(this).addClass('btn-error'); - $(this).removeClass('btn-secondary'); - } - $('.mailing-div').show(); - $("#person_addresses_attributes_1_zip, #person_addresses_attributes_1_address_1, #person_addresses_attributes_1_city, #dependent_addresses_1_address_1, #dependent_addresses_1_zip, #dependent_addresses_1_city").each(function() { - $(this).prop('required', true); - }) - }else if ($(this).text() == "Remove Mailing Address"){ - $(this).text('Add Mailing Address'); - if($(this).attr('id') == "remove_dependent_mailing_address"){ - $(this).attr('id', 'add_dependent_mailing_address'); - $(this).removeClass('btn-error'); - $(this).addClass('btn-secondary'); - } - $('.mailing-div').hide(); - $(".mailing-div input[type='text']").val(""); - $(".mailing-div #state_id_mailing").val("") - $('.mailing-div .label-floatlabel').hide(); - $("#person_addresses_attributes_1_zip, #person_addresses_attributes_1_address_1, #person_addresses_attributes_1_city, #dependent_addresses_1_address_1, #dependent_addresses_1_zip, #dependent_addresses_1_city").each(function() { - $(this).prop('required', false); - }) - // Mailing address form may appear before or after home address form - if ($("#person_addresses_attributes_1__destroy").siblings('#person_addresses_attributes_1_kind')[0].value == "mailing") { - $("#person_addresses_attributes_1__destroy").val(true); - } else { - $("#person_addresses_attributes_0__destroy").val(true); - } - } -}); - -const mailingAddressInputFieldIds = () => { - return [ - '#person_addresses_attributes_1_address_1', - '#person_addresses_attributes_1_city', - '#person_addresses_attributes_1_zip', - '#applicant_addresses_attributes_1_address_1', - '#applicant_addresses_attributes_1_city', - '#applicant_addresses_attributes_1_zip', - '#dependent_addresses_1_address_1', - '#dependent_addresses_1_city', - '#dependent_addresses_1_zip', - ].join(', '); -}; - -const mailingAddressDestroyFieldIds = () => { - return [ - '#person_addresses_attributes_1__destroy', - '#applicant_addresses_attributes_1__destroy', - '#dependent_addresses_1__destroy' - ].join(', '); -}; - -document.addEventListener('click', function(event) { - if (event.target.matches('button#add_mailing_address')) { - event.preventDefault(); - const addButton = event.target; - addButton.classList.add('d-none'); - const removeButton = addButton.cloneNode(true); - removeButton.textContent = 'Remove Mailing Address'; - removeButton.id = 'remove_mailing_address'; - removeButton.classList.add('interaction-click-control-remove-mailing-address', 'error'); - removeButton.classList.remove("d-none", "btn-secondary", "interaction-click-control-add-mailing-address"); - addButton.parentNode.insertBefore(removeButton, addButton); - document.querySelectorAll(".mailing-div").forEach(el => { - el.classList.remove('d-none'); - el.classList.add('d-block'); - }); - document.querySelectorAll(mailingAddressInputFieldIds()).forEach(function(element) { - element.required = true; - }); - } -}); - -document.addEventListener('click', function(event) { - if (event.target.matches('button#remove_mailing_address')) { - event.preventDefault(); - const removeButton = event.target; - removeButton.remove(); - const addButton = document.getElementById('add_mailing_address'); - addButton.classList.remove('d-none'); - document.querySelectorAll(".mailing-div").forEach(el => { - // Clear text input fields - el.querySelectorAll("input[type='text']").forEach(input => { - input.value = ''; - }); - - $(".mailing-div #state_id_mailing").val("") - - el.classList.add('d-none'); - el.classList.remove('d-block'); - }); - - // NOTE: not sure if this #state_id_mailing id will still be used after bs4 updates, keeping for now - stateIdMailing = document.querySelector(".mailing-div #state_id_mailing"); - stateIdMailing ? stateIdMailing.value = "" : null; - - document.querySelectorAll(mailingAddressInputFieldIds()).forEach(function(element) { - element.required = false; - }); - - // Mailing address form may appear before or after home address form - document.querySelectorAll(mailingAddressDestroyFieldIds()).forEach(function(element) { - let previous = element.previousElementSibling; - let next = element.nextElementSibling; - - if ((previous && previous.id && previous.id.includes('_1_kind') && previous.value == 'mailing') || - (next && next.id && next.id.includes('_1_kind') && next.value == 'mailing')) { - element.value = true; - } else { - // NOTE: this second condition may not be necessary, - // both family_member and applicant dependent controllers - // handle removing a dependent home address if the 'same_as_primary' param is true - let homeAddressId = element.id.replace('_1__', '_0__'); - let homeAddressElement = document.querySelector(homeAddressId); - if (homeAddressElement) homeAddressElement.value = true; - } - }); - } -}); - - - //toggling of divs that show APTC Enrollments - $('.nav-toggle').click(function(){ - - //get collapse content selector - var collapse_content_selector = $(this).attr('href'); - - //make the collapse content to be shown or hide - var toggle_switch = $(this); - $(collapse_content_selector).slideToggle('fast', function(){ - if($(this).css('display')=='none'){ - toggle_switch.html('View Enrollment(s) '); - //$(collapse_content_selector).animate({top: "0px"}, 500); - }else{ - toggle_switch.html('Hide Enrollment(s) '); - //$(collapse_content_selector).animate({top: "0px"}, 500); - } - }); - }); - -var submitInvisibleRecaptchaForm = function () { - document.getElementById("invisible-recaptcha-form").submit(); -}; - - $(document).on('ready turbolinks:load', function(){ - $("#person_first_name").change(function() { - var text = $("#person_first_name").val() == '' ? "this person" : $("#person_first_name").val() - $("#is_applying_coverage_value").text("Does "+ text +" need coverage? *"); - }); - - $('a.interaction-click-control-download-notices').click(function(e) { - e.preventDefault(); - var selected_notices = new Array(); - $("input:checkbox[name='bulk_actions_resources[]']:checked").each(function(){ - selected_notices.push($(this).val()); - }); - window.location=$(this).attr('href') + "?ids=" + selected_notices.toString(); - }); - - $('.interaction-choice-control-value-datatable-filter-bulk-actions').click(function(event) { - if(this.checked) { - // Iterate each checkbox - $("input:checkbox[name='bulk_actions_resources[]']").each(function() { - this.checked = true; - }); - } else { - $("input:checkbox[name='bulk_actions_resources[]']").each(function() { - this.checked = false; - }); - } - }); - }); - - - // Input Masks - jQuery.inputMasks = () => { - $(".phone_number").mask("(999) 999-9999"); - $(".zip").mask("99999"); - $("#person_ssn").mask("999-99-9999"); - $(".fien_field").mask("99-9999999"); - $(".person_ssn").mask("999999999"); - $(".npn_field").mask("9999999999"); - $(".address-state").mask("AA"); - $(".mask-ssn").mask("999-99-9999"); - $("#jq_datepicker_ignore_census_employee_dob, #jq_datepicker_ignore_person_dob, #family_member_dob_, #jq_datepicker_ignore_organization_dob,[name='jq_datepicker_ignore_dependent[dob]'], .date-field:not(#cancel-plan-date-picker)").mask("99/99/9999"); - $(".area_code").mask("999"); - $(".phone_number7").mask("999-9999"); - $("#tribal_id").mask("999999999"); - $(".mask-csl").mask("9999999999"); - }; - $.inputMasks(); - -// Store initial nonce -let currentNonce = (document.querySelector("meta[name='csp-nonce']") || {}).content; - - -// Function to get current nonce -function getCurrentNonce() { - const element = document.querySelector("meta[name='csp-nonce']"); - return element ? element.content : currentNonce; -} - -// Custom eval function that preserves nonce -function safeEval(text) { - const script = document.createElement('script'); - script.nonce = getCurrentNonce(); - script.text = text; - document.head.appendChild(script); - document.head.removeChild(script); -} - -// Override jQuery's globalEval -jQuery.globalEval = function(code, options) { - code = String(code); - if (code) { - safeEval(code); - } -}; - -// Set up jQuery ajax converter -jQuery.ajaxSetup({ - converters: { - "text script": function(text) { - if (text) { - safeEval(text); - } - return text; - } - } -}); - -// Update nonce before Turbolinks renders new content -document.addEventListener("turbolinks:before-render", function(event) { - const newNonce = getCurrentNonce(); - if (newNonce) { - currentNonce = newNonce; - const newBody = event.data.newBody; - if (newBody) { - newBody.querySelectorAll('script[nonce]').forEach(script => { - script.setAttribute('nonce', currentNonce); - }); - } - } -}); - -// Mutation observer setup -const observer = new MutationObserver(function(mutations) { - const nonce = getCurrentNonce(); - if (!nonce) return; - - mutations.forEach(function(mutation) { - mutation.addedNodes.forEach(function(node) { - if (node.nodeType === 1) { - if (node.nodeName === 'SCRIPT' && node.hasAttribute('nonce')) { - node.setAttribute('nonce', nonce); - } - node.querySelectorAll('script[nonce]').forEach(script => { - script.setAttribute('nonce', nonce); - }); - } - }); - }); -}); - -// Start observing when DOM is ready -document.addEventListener("DOMContentLoaded", function() { - observer.observe(document.body, { - childList: true, - subtree: true, - attributes: false, - characterData: false - }); -}); - -// Update after Turbolinks load -document.addEventListener("turbolinks:load", function() { - const nonce = getCurrentNonce(); - if (nonce) { - currentNonce = nonce; - document.querySelectorAll('script[nonce]').forEach(script => { - script.setAttribute('nonce', nonce); - }); - } -}); diff --git a/app/assets/javascripts/dynamic_nested_fields.js.coffee.erb b/app/assets/javascripts/dynamic_nested_fields.js.coffee.erb deleted file mode 100644 index c9e6abe72e5..00000000000 --- a/app/assets/javascripts/dynamic_nested_fields.js.coffee.erb +++ /dev/null @@ -1,169 +0,0 @@ -$(document).on 'click', 'form .add_fields', (event) -> - if $(this).closest('.census-employee').length || $(this).closest('.census-employee-add').length - $('.add-dependent-text').hide(); - event.preventDefault() - time = new Date().getTime() - regexp = new RegExp($(this).data('id'), 'g') - html = $(this).data('fields').replace(regexp, time) - target = $(this).closest('.form-inputs') - if $(target).children('fieldset:last').length > 0 - $(target).children('fieldset:last').after(html) - else - $(target).prepend(html) - $(target).children('fieldset:last').find('select').selectric() - $(target).children('fieldset:last').find("input.floatlabel").floatlabel slideInput: false - - update_delete_buttons() - applyJQDatePickers() - - if $('#plan_year_start_on').length - EmployerProfile.validatePlanYear - <% if EnrollRegistry.feature_enabled?(:dental_market) %> - $(".show-dental-plans").show(); - <% end %> - - - # get all dental plan options for all plans option or for elected dental plans - $('span:contains("Select Reference Plan"), label.elected_plan:contains("Custom")').on 'click', -> - `var url` - `var nav_option` - # $(this).closest('.reference-steps').find('div:first').hide(); - # $(this).closest('.nav-tabs').hide(); - if $(this).is(':contains("Custom")') - nav_option = 'custom' - url = $(this).closest('li').find('.dental-reference-plans-link').attr('href') - else - nav_option = 'all_plans' - url = $(this).closest('.reference-steps').find('.dental-reference-plans-link').attr('href') - plan_year_id = $('a#generate-dental-carriers-and-plans').data('plan-year-id') - location_id = $(this).closest('.benefit-group-fields').attr('id') - carrier_id = 'all_plans' - start_on = $('#plan_year_start_on').val().substr(0, 4) - $.ajax - type: 'GET' - data: - plan_year_id: plan_year_id - location_id: location_id - carrier_id: carrier_id - start_on: start_on - nav_option: nav_option - url: url - return - $('.benefit-group-fields:last').attr 'id', 'benefit-group-' + time - $('.benefit-group-fields:last').data 'time', time - $('.benefit-group-fields:last').attr 'data-benefit-group-index', $('.benefit-group-fields').length - 1 - $('.benefit-group-fields:last .dental-relationship-benefits-attributes-time').val time - - $('.benefit-group-fields:last .elected-plans-tab .reference-plan input[checkbox]').each -> - name = $(this).attr('name') - alert name - return - # get dental plan carrier namespace - dental_target_url = $('a#generate-dental-carriers-and-plans').attr('href') - plan_year_id = $('a#generate-dental-carriers-and-plans').data('planYearId') - location_id = $('.benefit-group-fields:last').attr('id') - if $('#plan_year_start_on').length - active_year = $('#plan_year_start_on').val().substr(0, 4) - $.ajax - type: 'GET' - data: - active_year: active_year - plan_year_id: plan_year_id - location_id: location_id - url: dental_target_url - - # match health with dental offering selections - $('.health .offerings input[type=checkbox]').on 'change', -> - checkedValue = $(this).closest('label').find('span').find('p').text() - if $(this).is(':checked') - $(this).closest('.benefit-group-fields').find('.dental-benefits-fields').find('label span p:contains(' + checkedValue + ')').closest('label').find('input[type=checkbox]').removeProp 'disabled', false - $(this).closest('.benefit-group-fields').find('.dental-benefits-fields').find('label span p:contains(' + checkedValue + ')').closest('label').find('input[type=checkbox]').trigger 'click' - else - $(this).closest('.benefit-group-fields').find('.dental-benefits-fields').find('label span p:contains(' + checkedValue + ')').closest('label').find('input[type=checkbox]').removeProp 'checked' - return - - if window.location.href.indexOf('edit') > -1 and window.location.href.indexOf('plan_years') > -1 - $('.benefit-group-fields:last .edit-add-dental').hide(); - $('.benefit-group-fields:last').attr 'custom', false - $('.benefit-group-fields:last').addClass 'edit-additional' - $('.benefit-group-fields:last .edit-offering, .benefit-group-fields:last .reference-steps .cancel-plan-change').remove() - $('.benefit-group-fields:last .reference-steps h1').html '

Select Your Plan Offering

' - $('.benefit-group-fields:last .reference-steps .currently-offering').html 'Let your plan participants choose any plan they want offered by a single carrier, from a given metal level, or offer just a single plan.' - $('.benefit-group-fields:last .health .col-md-12.top-pd').hide(); - $('.benefit-group-fields:last .health .col-xs-12:first').hide(); - else - - - $('.benefit-group-fields:last').find('.benefits-fields .slider, .dental-benefits-fields .slider').bootstrapSlider - formatter: (value) -> - return 'Contribution Percentage: ' + value + '%' - $('.benefit-group-fields:last').find('.benefits-fields .slider, .dental-benefits-fields .slider').on 'slideStop', (slideEvt) -> - $(this).closest('.form-group').find('.hidden-param').val(slideEvt.value).attr 'value', slideEvt.value - $(this).closest('.form-group').find('.slide-label').text slideEvt.value + '%' - return - $('.benefit-group-fields:last input[value="child_under_26"]').closest('.row-form-wrapper').attr('style','border-bottom: 0px;') - $('.benefit-group-fields:last input:first').focus() - $('.remove_fields:last').css('display', 'inline-block') - - $('.benefit-group-fields:last .contribution_slide_handler').each -> - $(this).on 'slideStop', (slideEvt) -> - if $(this).closest('.health').length > 0 - coverage_type = '.health' - else - coverage_type = '.dental' - location_id = $(this).parents('.benefit-group-fields').attr('id') - calcEmployerContributions $('a#calc_employer_contributions_link').data('href'), location_id, coverage_type - return - return - - - start_on = $('#plan_year_start_on').val() - if start_on - start_on = start_on.substr(0, 4) - - $('.plan-options a').each -> - url = $(this).attr('href') - $(this).attr 'href', url + '&start_on=' + start_on - return - -$(document).on 'click', 'form .remove_fields', (event) -> - if $('.dependent_info').length == 1 - $('.census-employee-dependents').prev().text('0 Dependents') - if $(this).closest('.module').closest('.row').find('.add-dependent-text').length - $('.census-employee-dependents').prev().find('.add-dependent-text').show() - $('.add-dependent-text').show() - else - if $('.add-dependent-text').length - else - $('.census-employee-dependents').prev().after('

Click "Add Dependent" to add a dependent

') - $(this).closest('.module').closest('.row').find('.add-dependent-text, .form-inputs:first').wrapAll('
'); - $(this).closest('fieldset').closest('.module').remove() - else - $(this).closest('.census-employee-dependents').remove() - $(this).closest('fieldset').remove() - event.preventDefault() - -$(document).on 'click', '.benefits-setup-tab .remove_fields', (event) -> - $('.benefit-group-fields:last').remove() - event.preventDefault() - if $('.benefit-group-fields').length == 1 || $('.benefit-group-fields').length == $('#plan_year').data('benefit-group-count') - $('.remove_fields').hide(); - if window.location.href.indexOf('edit') > -1 and window.location.href.indexOf('plan_years') > -1 - EmployerProfile.validateEditPlanYear - else - EmployerProfile.validatePlanYear - -@update_delete_buttons = -> - nested_fields = $('.form-inputs') - nested_fields.each -> - visible_fieldsets = $(this).find('fieldset:visible') - delete_button = visible_fieldsets.find('.remove_fields') - if visible_fieldsets.length == 1 - delete_button.hide() - else - delete_button.show() - -$(document).on 'click', 'form .add_fields', (event) -> - if $(this).closest('.census-employee').length || $(this).closest('.census-employee-add').length - $('.remove_fields').show(); - Freebies.floatlabels(); diff --git a/app/assets/javascripts/group_selection.js b/app/assets/javascripts/group_selection.js deleted file mode 100644 index e87ad36fe28..00000000000 --- a/app/assets/javascripts/group_selection.js +++ /dev/null @@ -1,267 +0,0 @@ -// Use turbolinks load for rails 5 instead of ready() -$(document).on('turbolinks:load', function() { - setGroupSelectionHandlers(); -}); - -$(document).on('change', '#market_kind_coverall', function() { - $("#WarningOnCoverAllSelection").modal(); -}); - -function setGroupSelectionHandlers(){ - var employers = $("[id^=census_employee_]"); - hideAllErrors(); - - if ($("#employer-selection .n-radio-group .n-radio-row").length) { - - var checked_er = $("#employer-selection .n-radio-group .n-radio-row input:checked:enabled"); - - if (checked_er.length) { - var employer_id = checked_er.val(); - if ($('#coverage_kind_health').is(':checked')) { - $(".health_errors_" + employer_id ).show(); - } - - if ($('#coverage_kind_dental').is(':checked')) { - $(".dental_errors_" + employer_id ).show(); - } - - setDentalBenefits(checked_er.attr('dental_benefits')); - errorsForChangeInCoverageKind(employer_id); - setPrimaryForShop(); - } - - } else { - - $('#dental-radio-button').show(); - $('.ivl_errors').show(); - disableIvlIneligible(); - setPrimaryForIvl(); - } - - if($('#market_kinds').length) { - var employer_id = "" - - if ( $('#market_kind_individual').is(':checked') ) { - $('#dental-radio-button').show(); - hideShopErrors(); - $('.ivl_errors').show(); - - disableEmployerSelection(); - disableIvlIneligible(); - setPrimaryForIvl(); - } - if ( $('#market_kind_coverall').is(':checked') ) { - - } - - $('#market_kind_individual').on('change', function() { - disableEmployerSelection(); - - $('#dental-radio-button').slideDown(); - hideShopErrors(); - $('.ivl_errors').show(); - - disableIvlIneligible(); - setPrimaryForIvl(); - - var ivl_effective_on = $('#ivl_effective_on').val(); - $("#effective_date_for_display").text(ivl_effective_on); - }); - - $('#market_kind_coverall').on('change', function() { - disableEmployerSelection(); - - $('#dental-radio-button').slideDown(); - hideShopErrors(); - //$('.ivl_errors').hide(); - - //disableIvlIneligible(); - //setPrimaryForIvl(); - enableIvlEligibleForCoverall(); - - var ivl_effective_on = $('#ivl_effective_on').val(); - $("#effective_date_for_display").text(ivl_effective_on); - }); - - - $('#market_kind_shop').on('change', function() { - employers.each( function() { - $(this).prop("disabled", false); - if($(this).hasClass('selected_employer')) { - employer_id = $(this).attr("value") - $(this).prop("checked", true); - $(this).removeClass('selected_employer'); - setDentalBenefits($(this).attr('dental_benefits')); - } - }); - - $("#coverage_kind_health").prop("checked", true); - hideAllErrors(); - disableShopHealthIneligible(employer_id) - $(".health_errors_" + employer_id ).show(); - setPrimaryForShop(); - - var shop_effective_on = $('#shop_effective_on').val(); - $("#effective_date_for_display").text(shop_effective_on); - }); - } - - employers.on("change", function(){ - errorsForChangeInEmployer(this); - }) -} - -function setPrimaryForIvl() { - $("tr.is_primary td:first-child input").attr("onclick", "return true;"); - $("tr.is_primary td:first-child input").prop("readonly", false); -} - -function setPrimaryForShop() { - $("tr.is_primary td:first-child input").attr("onclick", "return false;"); - $("tr.is_primary td:first-child input").prop("readonly", true); -} - - -function hideAllErrors(){ - hideShopErrors(); - hideIvlErrors(); -} - -function hideShopErrors() { - $("[class^=dental_errors_]").hide(); - $("[class^=health_errors_]").hide(); -} - -function hideIvlErrors() { - $('#coverage-household tr td div.ivl_errors').hide(); -} - -function showIvlErrors() { - $('#coverage-household tr td div.ivl_errors').show(); -} - - -function errorsForChangeInEmployer(element) { - var employer_id = $(element).attr("value") - - $("#coverage_kind_health").prop("checked", true); - - hideAllErrors(); - - $(".health_errors_" + $(element).attr("value") ).show(); - - if($(element).is(":checked")){ - setDentalBenefits($(element).attr('dental_benefits')); - } - errorsForChangeInCoverageKind(employer_id) -} - -function errorsForChangeInCoverageKind(employer_id){ - $(document).on('change', '#coverage_kind_health', function() { - hideAllErrors(); - if ($("#employer-selection .n-radio-group .n-radio-row input:checked:enabled").length) { - - $(".health_errors_" + employer_id ).show(); - disableShopHealthIneligible(employer_id); - - } else { - - $(".ivl_errors").show(); - disableIvlIneligible(); - - } - }); - - $(document).on('change', '#coverage_kind_dental', function() { - hideAllErrors(); - if ($("#employer-selection .n-radio-group .n-radio-row input:checked:enabled").length) { - - $(".dental_errors_" + employer_id ).show(); - disableShopDentalIneligible(employer_id); - - } else { - - $(".ivl_errors").show(); - disableIvlIneligible(); - } - }); -} - -function disableIvlIneligible() { - $('#coverage-household tr').filter("[class^=ineligible_]").not(".ineligible_ivl_row").find('input').prop({'checked': true, 'disabled': false}); - $('#coverage-household tr').filter(".ineligible_ivl_row").each(function() { - var error_element = $(this).find('div.ivl_errors').find('div'); - $(this).find('input').prop({'checked': false, 'disabled': true}); - - if (error_element.length && error_element.text() === "eligibility failed on active_individual_role") { - error_element.show(); - } - }) - -} - -function enableIvlEligibleForCoverall() { - //debugger; - $('#coverage-household tr').filter("[class^=ineligible_]").not(".ineligible_ivl_row").find('input').prop({'checked': true, 'disabled': false}); - //$('#coverage-household tr').filter(".ineligible_ivl_row").find('input').prop({'checked': true, 'disabled': false}); - - $('#coverage-household tr').filter(".ineligible_ivl_row").each(function() { - var error_element = $(this).find('div.ivl_errors').find('div'); - - if (error_element.length && error_element.text() === "eligibility failed on active_individual_role") { - $(this).find('input').prop({'checked': true, 'disabled': false}); - error_element.hide(); - - }else { - $(this).find('input').prop({'checked': false, 'disabled': true}); - } - }) -} - -function disableShopDentalIneligible(employer_id) { - $('#coverage-household tr').filter("[class^=ineligible_]").not(".ineligible_dental_row_" + employer_id).find('input').prop({'checked': true, 'disabled': false}); - $('#coverage-household tr').filter(".ineligible_dental_row_" + employer_id).find('input').prop({'checked': false, 'disabled': true}); -} - -function disableShopHealthIneligible(employer_id) { - $('#coverage-household tr').filter("[class^=ineligible_]").not(".ineligible_health_row_" + employer_id).find('input').prop({'checked': true, 'disabled': false}); - $('#coverage-household tr').filter(".ineligible_health_row_" + employer_id).find('input').prop({'checked': false, 'disabled': true}); -} - - -function disableEmployerSelection(){ - var employers = $("[id^=census_employee_]"); - employers.each( function() { - if($(this).is(":checked")) { - $(this).addClass('selected_employer'); - } - $(this).prop("disabled", true); - $(this).prop("checked", false); - }); -} - -function setDentalBenefits(dental_benefits){ - if(dental_benefits == 'true'){ - $('#dental-radio-button').slideDown(); - } else { - $('#dental-radio-button').slideUp(); - } -} - -$(document).on('change', '#waiver_reason_selection_dropdown', function() { - if($(this).val() == undefined || $(this).val() == ""){ - $('#waiver_reason_submit').attr("disabled",true); - }else{ - $('#waiver_reason_submit').attr("disabled",false); - } -}); - -$(function(){ - if ( $("#find_sep_link").length ) { - $("#find_sep_link").click(function() { - $(this).closest('form').attr('action', '/insured/families/find_sep'); - $(this).closest('form').attr('method', 'get'); - $(this).closest('form').submit(); - }); - } -}) diff --git a/app/assets/javascripts/ui-components/components.js b/app/assets/javascripts/ui-components/components.js deleted file mode 100644 index 2d0a684efa9..00000000000 --- a/app/assets/javascripts/ui-components/components.js +++ /dev/null @@ -1,14 +0,0 @@ -//= require jquery3 -//= require jquery_ujs -//= require jquery-ui -//= require bootstrap-treeview -//= require bowser.min -//= require ./sweetalerts -//= require ./tether -//= require ./sidebars/plan_filters -//= require ./services -//= require ./forms -//= require ./datepicker -//= require ./sliders -//= require ./validators -//= require ./mask_inputs diff --git a/app/assets/stylesheets/glyphicons.scss.erb b/app/assets/stylesheets/glyphicons.scss.erb deleted file mode 100644 index d23a8da66b0..00000000000 --- a/app/assets/stylesheets/glyphicons.scss.erb +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:'Glyphicons Halflings';src:url(<%= asset_path('glyphicons-halflings-regular.eot') %>);src:url(<%= asset_path('glyphicons-halflings-regular.eot') + '?#iefix' %>) format('embedded-opentype'),url(<%= asset_path('glyphicons-halflings-regular.woff2') %>) format('woff2'),url(<%= asset_path('glyphicons-halflings-regular.woff') %>) format('woff'),url(<%= asset_path('glyphicons-halflings-regular.ttf') %>) format('truetype'),url(<%= asset_path('glyphicons-halflings-regular.svg') + '#glyphicons_halflingsregular' %>) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} diff --git a/app/assets/stylesheets/sprites.scss.erb b/app/assets/stylesheets/sprites.scss.erb deleted file mode 100644 index 9e697877098..00000000000 --- a/app/assets/stylesheets/sprites.scss.erb +++ /dev/null @@ -1,161 +0,0 @@ -/* Icons from directory "" */ -.icon-add,.icon-add\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 0;background-repeat:no-repeat} -.icon-add-dims{width:22px;height:22px} -.icon-advice,.icon-advice\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -22px;background-repeat:no-repeat} -.icon-advice-dims{width:21px;height:21px} -.icon-arrow-1,.icon-arrow-1\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -43px;background-repeat:no-repeat} -.icon-arrow-1-dims{width:9px;height:14px} -.icon-broker-mail,.icon-broker-mail\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -57px;background-repeat:no-repeat} -.icon-broker-mail-dims{width:20px;height:20px} -.icon-broker-phone,.icon-broker-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -77px;background-repeat:no-repeat} -.icon-broker-phone-dims{width:20px;height:20px} -.icon-broker-web,.icon-broker-web\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -97px;background-repeat:no-repeat} -.icon-broker-web-dims{width:20px;height:20px} -.icon-browse-plans,.icon-browse-plans\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -117px;background-repeat:no-repeat} -.icon-browse-plans-dims{width:54px;height:47px} -.icon-bubble-heart,.icon-bubble-heart\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -164px;background-repeat:no-repeat} -.icon-bubble-heart-dims{width:49px;height:61px} -.icon-calc-household,.icon-calc-household\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -225px;background-repeat:no-repeat} -.icon-calc-household-dims{width:76px;height:71px} -.icon-calc-income,.icon-calc-income\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -296px;background-repeat:no-repeat} -.icon-calc-income-dims{width:60px;height:70px} -.icon-calendar-large,.icon-calendar-large\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -366px;background-repeat:no-repeat} -.icon-calendar-large-dims{width:62px;height:73px} -.icon-calendar-small,.icon-calendar-small\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -439px;background-repeat:no-repeat} -.icon-calendar-small-dims{width:24px;height:24px} -.icon-checkmark-large,.icon-checkmark-large\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -463px;background-repeat:no-repeat} -.icon-checkmark-large-dims{width:47px;height:47px} -.icon-checkmark,.icon-checkmark\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -510px;background-repeat:no-repeat} -.icon-checkmark-dims{width:15px;height:12px} -.icon-circle-dollar,.icon-circle-dollar\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -522px;background-repeat:no-repeat} -.icon-circle-dollar-dims{width:52px;height:52px} -.icon-clipboard,.icon-clipboard\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -574px;background-repeat:no-repeat} -.icon-clipboard-dims{width:99px;height:138px} -.icon-close,.icon-close\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -712px;background-repeat:no-repeat} -.icon-close-dims{width:19px;height:19px} -.icon-dental,.icon-dental\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -731px;background-repeat:no-repeat} -.icon-dental-dims{width:19px;height:31px} -.icon-doctors,.icon-doctors\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -762px;background-repeat:no-repeat} -.icon-doctors-dims{width:25px;height:27px} -.icon-download-2,.icon-download-2\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -789px;background-repeat:no-repeat} -.icon-download-2-dims{width:20px;height:24px} -.icon-download,.icon-download\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -813px;background-repeat:no-repeat} -.icon-download-dims{width:14px;height:16px} -.icon-drop-down,.icon-drop-down\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -829px;background-repeat:no-repeat} -.icon-drop-down-dims{width:17px;height:11px} -.icon-edit,.icon-edit\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -840px;background-repeat:no-repeat} -.icon-edit-dims{width:21px;height:21px} -.icon-email-notification,.icon-email-notification\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -861px;background-repeat:no-repeat} -.icon-email-notification-dims{width:64px;height:38px} -.icon-email,.icon-email\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -899px;background-repeat:no-repeat} -.icon-email-dims{width:28px;height:21px} -.icon-expand,.icon-expand\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -920px;background-repeat:no-repeat} -.icon-expand-dims{width:21px;height:21px} -.icon-financial-help,.icon-financial-help\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -941px;background-repeat:no-repeat} -.icon-financial-help-dims{width:64px;height:67px} -.icon-flag-red,.icon-flag-red\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1008px;background-repeat:no-repeat} -.icon-flag-red-dims{width:37px;height:37px} -.icon-flag-yellow,.icon-flag-yellow\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1045px;background-repeat:no-repeat} -.icon-flag-yellow-dims{width:37px;height:37px} -.icon-footer-email,.icon-footer-email\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1082px;background-repeat:no-repeat} -.icon-footer-email-dims{width:21px;height:16px} -.icon-footer-faq,.icon-footer-faq\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1098px;background-repeat:no-repeat} -.icon-footer-faq-dims{width:19px;height:20px} -.icon-footer-phone,.icon-footer-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1118px;background-repeat:no-repeat} -.icon-footer-phone-dims{width:16px;height:19px} -.icon-get-help,.icon-get-help\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1137px;background-repeat:no-repeat} -.icon-get-help-dims{width:33px;height:30px} -.icon-header-administrator,.icon-header-administrator\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1167px;background-repeat:no-repeat} -.icon-header-administrator-dims{width:38px;height:45px} -.icon-header-broker,.icon-header-broker\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1212px;background-repeat:no-repeat} -.icon-header-broker-dims{width:34px;height:37px} -.icon-header-employee,.icon-header-employee\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1249px;background-repeat:no-repeat} -.icon-header-employee-dims{width:42px;height:36px} -.icon-header-employer,.icon-header-employer\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1285px;background-repeat:no-repeat} -.icon-header-employer-dims{width:42px;height:35px} -.icon-header-personal,.icon-header-personal\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1320px;background-repeat:no-repeat} -.icon-header-personal-dims{width:48px;height:40px} -.icon-header-phone,.icon-header-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1360px;background-repeat:no-repeat} -.icon-header-phone-dims{width:15px;height:11px} -.icon-heart-empty,.icon-heart-empty\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1371px;background-repeat:no-repeat} -.icon-heart-empty-dims{width:21px;height:18px} -.icon-heart-full,.icon-heart-full\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1389px;background-repeat:no-repeat} -.icon-heart-full-dims{width:21px;height:18px} -.icon-home-broker,.icon-home-broker\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1407px;background-repeat:no-repeat} -.icon-home-broker-dims{width:41px;height:29px} -.icon-home-dental,.icon-home-dental\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1436px;background-repeat:no-repeat} -.icon-home-dental-dims{width:20px;height:33px} -.icon-home-news,.icon-home-news\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1469px;background-repeat:no-repeat} -.icon-home-news-dims{width:36px;height:32px} -.icon-home-vision,.icon-home-vision\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1501px;background-repeat:no-repeat} -.icon-home-vision-dims{width:37px;height:15px} -.icon-homne-w-o-insurance,.icon-homne-w-o-insurance\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1516px;background-repeat:no-repeat} -.icon-homne-w-o-insurance-dims{width:36px;height:32px} -.icon-hospitals,.icon-hospitals\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1548px;background-repeat:no-repeat} -.icon-hospitals-dims{width:26px;height:26px} -.icon-info,.icon-info\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1574px;background-repeat:no-repeat} -.icon-info-dims{width:17px;height:17px} -.icon-landing-about,.icon-landing-about\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1591px;background-repeat:no-repeat} -.icon-landing-about-dims{width:31px;height:31px} -.icon-landing-faqs,.icon-landing-faqs\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1622px;background-repeat:no-repeat} -.icon-landing-faqs-dims{width:31px;height:31px} -.icon-landing-life-changes,.icon-landing-life-changes\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1653px;background-repeat:no-repeat} -.icon-landing-life-changes-dims{width:34px;height:31px} -.icon-landing-professional,.icon-landing-professional\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1684px;background-repeat:no-repeat} -.icon-landing-professional-dims{width:28px;height:30px} -.icon-landing-requirements,.icon-landing-requirements\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1714px;background-repeat:no-repeat} -.icon-landing-requirements-dims{width:30px;height:30px} -.icon-landing-resources,.icon-landing-resources\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1744px;background-repeat:no-repeat} -.icon-landing-resources-dims{width:34px;height:22px} -.icon-landing-taxes,.icon-landing-taxes\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1766px;background-repeat:no-repeat} -.icon-landing-taxes-dims{width:26px;height:28px} -.icon-life-changes,.icon-life-changes\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1794px;background-repeat:no-repeat} -.icon-life-changes-dims{width:60px;height:55px} -.icon-medicaid,.icon-medicaid\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1849px;background-repeat:no-repeat} -.icon-medicaid-dims{width:47px;height:51px} -.icon-metal-bronze,.icon-metal-bronze\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1900px;background-repeat:no-repeat} -.icon-metal-bronze-dims{width:15px;height:15px} -.icon-metal-gold,.icon-metal-gold\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1915px;background-repeat:no-repeat} -.icon-metal-gold-dims{width:15px;height:15px} -.icon-metal-platinum,.icon-metal-platinum\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1930px;background-repeat:no-repeat} -.icon-metal-platinum-dims{width:15px;height:15px} -.icon-metal-silver,.icon-metal-silver\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1945px;background-repeat:no-repeat} -.icon-metal-silver-dims{width:15px;height:15px} -.icon-pay-by-mail,.icon-pay-by-mail\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1960px;background-repeat:no-repeat} -.icon-pay-by-mail-dims{width:28px;height:21px} -.icon-pay-by-phone,.icon-pay-by-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1981px;background-repeat:no-repeat} -.icon-pay-by-phone-dims{width:25px;height:25px} -.icon-pay-online,.icon-pay-online\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2006px;background-repeat:no-repeat} -.icon-pay-online-dims{width:25px;height:34px} -.icon-pdf-doc,.icon-pdf-doc\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2040px;background-repeat:no-repeat} -.icon-pdf-doc-dims{width:33px;height:28px} -.icon-pdf-print,.icon-pdf-print\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2068px;background-repeat:no-repeat} -.icon-pdf-print-dims{width:33px;height:39px} -.icon-phone,.icon-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2107px;background-repeat:no-repeat} -.icon-phone-dims{width:20px;height:20px} -.icon-print,.icon-print\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2127px;background-repeat:no-repeat} -.icon-print-dims{width:28px;height:29px} -.icon-progress-step-1,.icon-progress-step-1\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2156px;background-repeat:no-repeat} -.icon-progress-step-1-dims{width:31px;height:27px} -.icon-progress-step-2,.icon-progress-step-2\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2183px;background-repeat:no-repeat} -.icon-progress-step-2-dims{width:31px;height:27px} -.icon-progress-step-3,.icon-progress-step-3\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2210px;background-repeat:no-repeat} -.icon-progress-step-3-dims{width:31px;height:30px} -.icon-remove,.icon-remove\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2240px;background-repeat:no-repeat} -.icon-remove-dims{width:17px;height:17px} -.icon-search,.icon-search\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2257px;background-repeat:no-repeat} -.icon-search-dims{width:35px;height:35px} -.icon-slider,.icon-slider\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2292px;background-repeat:no-repeat} -.icon-slider-dims{width:15px;height:15px} -.icon-start-again,.icon-start-again\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2307px;background-repeat:no-repeat} -.icon-start-again-dims{width:20px;height:20px} -.icon-substract,.icon-substract\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2327px;background-repeat:no-repeat} -.icon-substract-dims{width:22px;height:22px} -.icon-tooltip,.icon-tooltip\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2349px;background-repeat:no-repeat} -.icon-tooltip-dims{width:17px;height:17px} -.icon-upload,.icon-upload\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2366px;background-repeat:no-repeat} -.icon-upload-dims{width:20px;height:24px} -.icon-video-tour,.icon-video-tour\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2390px;background-repeat:no-repeat} -.icon-video-tour-dims{width:20px;height:19px} -.icon-web,.icon-web\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2409px;background-repeat:no-repeat} -.icon-web-dims{width:24px;height:24px} diff --git a/app/assets/stylesheets/ui-components/sprites.scss.erb b/app/assets/stylesheets/ui-components/sprites.scss.erb deleted file mode 100644 index 9e697877098..00000000000 --- a/app/assets/stylesheets/ui-components/sprites.scss.erb +++ /dev/null @@ -1,161 +0,0 @@ -/* Icons from directory "" */ -.icon-add,.icon-add\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 0;background-repeat:no-repeat} -.icon-add-dims{width:22px;height:22px} -.icon-advice,.icon-advice\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -22px;background-repeat:no-repeat} -.icon-advice-dims{width:21px;height:21px} -.icon-arrow-1,.icon-arrow-1\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -43px;background-repeat:no-repeat} -.icon-arrow-1-dims{width:9px;height:14px} -.icon-broker-mail,.icon-broker-mail\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -57px;background-repeat:no-repeat} -.icon-broker-mail-dims{width:20px;height:20px} -.icon-broker-phone,.icon-broker-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -77px;background-repeat:no-repeat} -.icon-broker-phone-dims{width:20px;height:20px} -.icon-broker-web,.icon-broker-web\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -97px;background-repeat:no-repeat} -.icon-broker-web-dims{width:20px;height:20px} -.icon-browse-plans,.icon-browse-plans\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -117px;background-repeat:no-repeat} -.icon-browse-plans-dims{width:54px;height:47px} -.icon-bubble-heart,.icon-bubble-heart\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -164px;background-repeat:no-repeat} -.icon-bubble-heart-dims{width:49px;height:61px} -.icon-calc-household,.icon-calc-household\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -225px;background-repeat:no-repeat} -.icon-calc-household-dims{width:76px;height:71px} -.icon-calc-income,.icon-calc-income\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -296px;background-repeat:no-repeat} -.icon-calc-income-dims{width:60px;height:70px} -.icon-calendar-large,.icon-calendar-large\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -366px;background-repeat:no-repeat} -.icon-calendar-large-dims{width:62px;height:73px} -.icon-calendar-small,.icon-calendar-small\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -439px;background-repeat:no-repeat} -.icon-calendar-small-dims{width:24px;height:24px} -.icon-checkmark-large,.icon-checkmark-large\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -463px;background-repeat:no-repeat} -.icon-checkmark-large-dims{width:47px;height:47px} -.icon-checkmark,.icon-checkmark\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -510px;background-repeat:no-repeat} -.icon-checkmark-dims{width:15px;height:12px} -.icon-circle-dollar,.icon-circle-dollar\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -522px;background-repeat:no-repeat} -.icon-circle-dollar-dims{width:52px;height:52px} -.icon-clipboard,.icon-clipboard\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -574px;background-repeat:no-repeat} -.icon-clipboard-dims{width:99px;height:138px} -.icon-close,.icon-close\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -712px;background-repeat:no-repeat} -.icon-close-dims{width:19px;height:19px} -.icon-dental,.icon-dental\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -731px;background-repeat:no-repeat} -.icon-dental-dims{width:19px;height:31px} -.icon-doctors,.icon-doctors\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -762px;background-repeat:no-repeat} -.icon-doctors-dims{width:25px;height:27px} -.icon-download-2,.icon-download-2\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -789px;background-repeat:no-repeat} -.icon-download-2-dims{width:20px;height:24px} -.icon-download,.icon-download\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -813px;background-repeat:no-repeat} -.icon-download-dims{width:14px;height:16px} -.icon-drop-down,.icon-drop-down\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -829px;background-repeat:no-repeat} -.icon-drop-down-dims{width:17px;height:11px} -.icon-edit,.icon-edit\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -840px;background-repeat:no-repeat} -.icon-edit-dims{width:21px;height:21px} -.icon-email-notification,.icon-email-notification\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -861px;background-repeat:no-repeat} -.icon-email-notification-dims{width:64px;height:38px} -.icon-email,.icon-email\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -899px;background-repeat:no-repeat} -.icon-email-dims{width:28px;height:21px} -.icon-expand,.icon-expand\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -920px;background-repeat:no-repeat} -.icon-expand-dims{width:21px;height:21px} -.icon-financial-help,.icon-financial-help\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -941px;background-repeat:no-repeat} -.icon-financial-help-dims{width:64px;height:67px} -.icon-flag-red,.icon-flag-red\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1008px;background-repeat:no-repeat} -.icon-flag-red-dims{width:37px;height:37px} -.icon-flag-yellow,.icon-flag-yellow\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1045px;background-repeat:no-repeat} -.icon-flag-yellow-dims{width:37px;height:37px} -.icon-footer-email,.icon-footer-email\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1082px;background-repeat:no-repeat} -.icon-footer-email-dims{width:21px;height:16px} -.icon-footer-faq,.icon-footer-faq\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1098px;background-repeat:no-repeat} -.icon-footer-faq-dims{width:19px;height:20px} -.icon-footer-phone,.icon-footer-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1118px;background-repeat:no-repeat} -.icon-footer-phone-dims{width:16px;height:19px} -.icon-get-help,.icon-get-help\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1137px;background-repeat:no-repeat} -.icon-get-help-dims{width:33px;height:30px} -.icon-header-administrator,.icon-header-administrator\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1167px;background-repeat:no-repeat} -.icon-header-administrator-dims{width:38px;height:45px} -.icon-header-broker,.icon-header-broker\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1212px;background-repeat:no-repeat} -.icon-header-broker-dims{width:34px;height:37px} -.icon-header-employee,.icon-header-employee\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1249px;background-repeat:no-repeat} -.icon-header-employee-dims{width:42px;height:36px} -.icon-header-employer,.icon-header-employer\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1285px;background-repeat:no-repeat} -.icon-header-employer-dims{width:42px;height:35px} -.icon-header-personal,.icon-header-personal\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1320px;background-repeat:no-repeat} -.icon-header-personal-dims{width:48px;height:40px} -.icon-header-phone,.icon-header-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1360px;background-repeat:no-repeat} -.icon-header-phone-dims{width:15px;height:11px} -.icon-heart-empty,.icon-heart-empty\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1371px;background-repeat:no-repeat} -.icon-heart-empty-dims{width:21px;height:18px} -.icon-heart-full,.icon-heart-full\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1389px;background-repeat:no-repeat} -.icon-heart-full-dims{width:21px;height:18px} -.icon-home-broker,.icon-home-broker\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1407px;background-repeat:no-repeat} -.icon-home-broker-dims{width:41px;height:29px} -.icon-home-dental,.icon-home-dental\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1436px;background-repeat:no-repeat} -.icon-home-dental-dims{width:20px;height:33px} -.icon-home-news,.icon-home-news\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1469px;background-repeat:no-repeat} -.icon-home-news-dims{width:36px;height:32px} -.icon-home-vision,.icon-home-vision\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1501px;background-repeat:no-repeat} -.icon-home-vision-dims{width:37px;height:15px} -.icon-homne-w-o-insurance,.icon-homne-w-o-insurance\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1516px;background-repeat:no-repeat} -.icon-homne-w-o-insurance-dims{width:36px;height:32px} -.icon-hospitals,.icon-hospitals\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1548px;background-repeat:no-repeat} -.icon-hospitals-dims{width:26px;height:26px} -.icon-info,.icon-info\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1574px;background-repeat:no-repeat} -.icon-info-dims{width:17px;height:17px} -.icon-landing-about,.icon-landing-about\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1591px;background-repeat:no-repeat} -.icon-landing-about-dims{width:31px;height:31px} -.icon-landing-faqs,.icon-landing-faqs\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1622px;background-repeat:no-repeat} -.icon-landing-faqs-dims{width:31px;height:31px} -.icon-landing-life-changes,.icon-landing-life-changes\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1653px;background-repeat:no-repeat} -.icon-landing-life-changes-dims{width:34px;height:31px} -.icon-landing-professional,.icon-landing-professional\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1684px;background-repeat:no-repeat} -.icon-landing-professional-dims{width:28px;height:30px} -.icon-landing-requirements,.icon-landing-requirements\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1714px;background-repeat:no-repeat} -.icon-landing-requirements-dims{width:30px;height:30px} -.icon-landing-resources,.icon-landing-resources\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1744px;background-repeat:no-repeat} -.icon-landing-resources-dims{width:34px;height:22px} -.icon-landing-taxes,.icon-landing-taxes\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1766px;background-repeat:no-repeat} -.icon-landing-taxes-dims{width:26px;height:28px} -.icon-life-changes,.icon-life-changes\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1794px;background-repeat:no-repeat} -.icon-life-changes-dims{width:60px;height:55px} -.icon-medicaid,.icon-medicaid\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1849px;background-repeat:no-repeat} -.icon-medicaid-dims{width:47px;height:51px} -.icon-metal-bronze,.icon-metal-bronze\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1900px;background-repeat:no-repeat} -.icon-metal-bronze-dims{width:15px;height:15px} -.icon-metal-gold,.icon-metal-gold\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1915px;background-repeat:no-repeat} -.icon-metal-gold-dims{width:15px;height:15px} -.icon-metal-platinum,.icon-metal-platinum\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1930px;background-repeat:no-repeat} -.icon-metal-platinum-dims{width:15px;height:15px} -.icon-metal-silver,.icon-metal-silver\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1945px;background-repeat:no-repeat} -.icon-metal-silver-dims{width:15px;height:15px} -.icon-pay-by-mail,.icon-pay-by-mail\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1960px;background-repeat:no-repeat} -.icon-pay-by-mail-dims{width:28px;height:21px} -.icon-pay-by-phone,.icon-pay-by-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -1981px;background-repeat:no-repeat} -.icon-pay-by-phone-dims{width:25px;height:25px} -.icon-pay-online,.icon-pay-online\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2006px;background-repeat:no-repeat} -.icon-pay-online-dims{width:25px;height:34px} -.icon-pdf-doc,.icon-pdf-doc\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2040px;background-repeat:no-repeat} -.icon-pdf-doc-dims{width:33px;height:28px} -.icon-pdf-print,.icon-pdf-print\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2068px;background-repeat:no-repeat} -.icon-pdf-print-dims{width:33px;height:39px} -.icon-phone,.icon-phone\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2107px;background-repeat:no-repeat} -.icon-phone-dims{width:20px;height:20px} -.icon-print,.icon-print\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2127px;background-repeat:no-repeat} -.icon-print-dims{width:28px;height:29px} -.icon-progress-step-1,.icon-progress-step-1\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2156px;background-repeat:no-repeat} -.icon-progress-step-1-dims{width:31px;height:27px} -.icon-progress-step-2,.icon-progress-step-2\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2183px;background-repeat:no-repeat} -.icon-progress-step-2-dims{width:31px;height:27px} -.icon-progress-step-3,.icon-progress-step-3\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2210px;background-repeat:no-repeat} -.icon-progress-step-3-dims{width:31px;height:30px} -.icon-remove,.icon-remove\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2240px;background-repeat:no-repeat} -.icon-remove-dims{width:17px;height:17px} -.icon-search,.icon-search\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2257px;background-repeat:no-repeat} -.icon-search-dims{width:35px;height:35px} -.icon-slider,.icon-slider\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2292px;background-repeat:no-repeat} -.icon-slider-dims{width:15px;height:15px} -.icon-start-again,.icon-start-again\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2307px;background-repeat:no-repeat} -.icon-start-again-dims{width:20px;height:20px} -.icon-substract,.icon-substract\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2327px;background-repeat:no-repeat} -.icon-substract-dims{width:22px;height:22px} -.icon-tooltip,.icon-tooltip\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2349px;background-repeat:no-repeat} -.icon-tooltip-dims{width:17px;height:17px} -.icon-upload,.icon-upload\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2366px;background-repeat:no-repeat} -.icon-upload-dims{width:20px;height:24px} -.icon-video-tour,.icon-video-tour\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2390px;background-repeat:no-repeat} -.icon-video-tour-dims{width:20px;height:19px} -.icon-web,.icon-web\:regular{background-image:url('<%= asset_path("ui/sprites/icons.png") %>');background-position:0 -2409px;background-repeat:no-repeat} -.icon-web-dims{width:24px;height:24px} diff --git a/app/controllers/packs_static_controller.rb b/app/controllers/packs_static_controller.rb new file mode 100644 index 00000000000..a8bfa15560a --- /dev/null +++ b/app/controllers/packs_static_controller.rb @@ -0,0 +1,26 @@ +class PacksStaticController < ApplicationController + skip_before_action :redirect_to_login, if: -> { !authenticated? } + + def serve + path = params[:path].join('/') + file_path = Rails.root.join('public/packs/static', path) + + if File.exist?(file_path) && !File.directory?(file_path) + ext = File.extname(file_path) + content_type = case ext + when '.png' then 'image/png' + when '.jpg', '.jpeg' then 'image/jpeg' + when '.gif' then 'image/gif' + when '.svg' then 'image/svg+xml' + when '.ico' then 'image/x-icon' + when '.css' then 'text/css' + when '.js' then 'application/javascript' + else 'application/octet-stream' + end + + send_file file_path, type: content_type, disposition: 'inline' + else + head :not_found + end + end +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index f85ccabfda2..3a4477e7c71 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -6,6 +6,7 @@ module ApplicationHelper include HtmlScrubberUtil include DropdownHelper include L10nHelper + include WebpackAssetsHelper def add_external_links_enabled? EnrollRegistry.feature_enabled?(:add_external_links) @@ -510,15 +511,13 @@ def add_progress_class(element_number, step) end def user_full_name - if signed_in? - current_user.person.try(:full_name) ? current_user.person.full_name : current_user.oim_id - end + return unless signed_in? + current_user.person.try(:full_name) ? current_user.person.full_name : current_user.oim_id end def user_first_name_last_name_and_suffix - if signed_in? - current_user.person.try(:first_name_last_name_and_suffix) ? current_user.person.first_name_last_name_and_suffix : current_user.oim_id.downcase - end + return unless signed_in? + current_user.person.try(:first_name_last_name_and_suffix) ? current_user.person.first_name_last_name_and_suffix : current_user.oim_id.downcase end def retrieve_show_path(provider, message) @@ -538,7 +537,7 @@ def retrieve_show_path(provider, message) def retrieve_inbox_path(provider, folder: 'inbox') if provider.try(:broker_role) - broker_agency_mailbox = benefit_sponsors.inbox_profiles_broker_agencies_broker_agency_profile_path(id: provider.id.to_s, folder: folder) + broker_agency_mailbox = benefit_sponsors.inbox_profiles_broker_agencies_broker_agency_profile_path(id: provider.id.to_s, folder: folder) return broker_agency_mailbox end @@ -724,18 +723,17 @@ def may_update_census_employee?(census_employee) end def calculate_participation_minimum - if @current_plan_year.present? - if @current_plan_year.eligible_to_enroll_count == 0 - 0 - else - (@current_plan_year.eligible_to_enroll_count * @current_plan_year.employee_participation_ratio_minimum).ceil - end + return unless @current_plan_year.present? + if @current_plan_year.eligible_to_enroll_count == 0 + 0 + else + (@current_plan_year.eligible_to_enroll_count * @current_plan_year.employee_participation_ratio_minimum).ceil end end def notice_eligible_enrolles(notice) notice.enrollments.inject([]) do |enrollees, enrollment| - enrollees += enrollment.enrollees + enrollees + enrollment.enrollees end.uniq end @@ -840,7 +838,7 @@ def display_dental_metal_level(plan) def ivl_hsa_status(plan_hsa_status, plan) return unless plan_hsa_status.present? - (plan_hsa_status[plan.id.to_s]) if plan.benefit_market_kind == :aca_individual + plan_hsa_status[plan.id.to_s] if plan.benefit_market_kind == :aca_individual end def osse_status(plan) @@ -892,8 +890,8 @@ def eligibility_criteria(employer) return unless employer.respond_to?(:published_benefit_application) show_plan_year = employer.published_benefit_application if show_plan_year.present? - participation_rule_text = participation_rule_for_plan_year(show_plan_year) - non_owner_participation_rule_text = non_owner_participation_rule_for_plan_year(show_plan_year) + participation_rule_for_plan_year(show_plan_year) + non_owner_participation_rule_for_plan_year(show_plan_year) text = (@participation_count == 0 && @non_owner_participation_rule == true ? "Yes" : "No") # eligibility_text = sanitize_html("Criteria Met : #{text}" + "
" + participation_rule_text + "
" + non_owner_participation_rule_text) if text == "Yes" @@ -1195,7 +1193,7 @@ def insured_role_exists?(user) # @method ridp_step_2_disabled # Used to determine if the continue button should be disabled on ridp pages. def ridp_step_2_disabled(person, application_verified, identity_verified) - return !identity_verified unless current_user.has_hbx_staff_role? && (person.primary_family.application_type == "Phone" || person.primary_family.application_type == "Paper") + return !identity_verified unless current_user.has_hbx_staff_role? && ["Phone", "Paper"].include?(person.primary_family.application_type) (application_verified || identity_verified) ? false : true end diff --git a/app/helpers/webpack_assets_helper.rb b/app/helpers/webpack_assets_helper.rb new file mode 100644 index 00000000000..8ddbdbee514 --- /dev/null +++ b/app/helpers/webpack_assets_helper.rb @@ -0,0 +1,75 @@ +module WebpackAssetsHelper + def self.manifest + @manifest ||= begin + manifest_path = Rails.root.join("public/packs/manifest.json") + if File.exist?(manifest_path) + JSON.parse(File.read(manifest_path)) + else + {} + end + rescue JSON::ParserError + {} + end + end + + def self.clear_cache + @manifest = nil + end + + def webpack_asset_path(asset_name) + normalized = asset_name.to_s.gsub(%r{^/}, '') + return normalized if normalized.start_with?('http', '/packs', 'data:') + + WebpackAssetsHelper.manifest.each do |key, value| + next unless value.is_a?(String) + + key_basename = File.basename(key) + normalized_ext = File.extname(normalized) + + # Build basename without extension for matching + normalized_base = normalized.gsub(normalized_ext, '').gsub('.', '_') + + next unless key_basename == normalized || + key_basename.start_with?(normalized_base) || + key.include?(normalized_base) + + return value + end + + "/#{normalized}" + end + + def image_tag(source, options = {}) + source_str = source.to_s + + # Pass through for full URLs, data URIs, or paths already pointing to packs + return super if source_str.start_with?('http', '//', 'data:', '/packs/') + + # Try to resolve the path through webpack manifest + webpack_path = webpack_asset_path(source_str) + super(webpack_path, options) + end + + def image_pack_tag(name, **options) + resolved = resolve_path_to_image(name) + image_tag(resolved, options) + end + + private + + def resolve_path_to_image(name) + paths_to_try = [ + "static/images/#{name}", + "static/icons/#{name}", + "static/#{name}", + name + ] + + paths_to_try.each do |path| + result = Shakapacker.manifest.lookup(path) + return result if result + end + + raise Shakapacker::Manifest::MissingEntryError, "Shakapacker can't find #{name}" + end +end diff --git a/app/assets/images/CoverME_WebsiteHeader_01.jpg b/app/javascript/client_config/me/images/CoverME_WebsiteHeader_01.jpg similarity index 100% rename from app/assets/images/CoverME_WebsiteHeader_01.jpg rename to app/javascript/client_config/me/images/CoverME_WebsiteHeader_01.jpg diff --git a/app/assets/images/favicon_me.ico b/app/javascript/client_config/me/images/favicon_me.ico similarity index 100% rename from app/assets/images/favicon_me.ico rename to app/javascript/client_config/me/images/favicon_me.ico diff --git a/app/assets/images/logo/carrier/anthem_blue_cross_and_blue_shield.jpg b/app/javascript/client_config/me/images/logo/carrier/anthem_blue_cross_and_blue_shield.jpg similarity index 100% rename from app/assets/images/logo/carrier/anthem_blue_cross_and_blue_shield.jpg rename to app/javascript/client_config/me/images/logo/carrier/anthem_blue_cross_and_blue_shield.jpg diff --git a/app/assets/images/logo/carrier/bestlife.jpg b/app/javascript/client_config/me/images/logo/carrier/bestlife.jpg similarity index 100% rename from app/assets/images/logo/carrier/bestlife.jpg rename to app/javascript/client_config/me/images/logo/carrier/bestlife.jpg diff --git a/app/javascript/client_config/me/images/logo/carrier/community_health_options.jpg b/app/javascript/client_config/me/images/logo/carrier/community_health_options.jpg new file mode 100644 index 0000000000000000000000000000000000000000..625e775e20f725215c373f4d395ad0b8a1608719 GIT binary patch literal 677841 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
x{_-IdF8lCh)3*yohd$HmzxLIFmOINo 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
1#i{(5!d#c|f-?8uyaqu)ZjX;& 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

y+ z%g_xx;VCTQI9lcyTJb16>L^scqp(kbS_49LG3wm805t?r!x6e@_waN9eFQ6lQKk#Z z91e^Frl9PZurLp0FTxowL;0&v{#ul|0cCCjgFUE?BkPI^oMQ8SK5YgV=H)U0gp|{7utyNV*_|#=LM9#4j!@@ z|Ly{#BhUuU!)tD%#TfWh0H#Wy44|IGMD0dIc56Vl`{Ob=2$x0-X?t+o0c;t7DT)>5 z{O}88DWhyhl>L|fFbd_5N6(l78#7^J9&9W^dCO7mYIrN9h-^nIVGl^u>Qc1s612x+ zc>5ys=tb!Di_jYvVI*7(4*sxr*#?(oJDj^crZ>O_{JjpB;CBXN8aU93c-sokd_bG5 z1dq4i8!O=ScOa83cSAzeBQ*`prr!`6HEFz5R0vx zV8<19hQrPn*qI1B(_m*d?7RUxZ{n}j-73*cwB!u5$8_|VX;$9ERI3m$P6o6<4e%6r zfoJ((3Iv;baaq~ojPnOp0n6}u$q>x1@Yw3#^6BDdGi1F55#5ijnG1eNH zXV%%om_Zf5$HbU{-{ToV@PF9c>4G+JMco6-fyH=@Ef$bNg82ow%yjGzox_@#VTZL3 zHjczJ8)sq)a$_bB9z{&D8Ba{KnMzEsnN5tx^NhyXt{}$Rts}SlXx?#ExU|R)Z0bXOP31TKbn+`5h zov`Pk(*R-;w3tZ_cp9ZW_FlAiCC1qgC&oIAA;vgNB1R)OW|YGl#7M{G#BgXa!yI=I z?n4d}ZbL2*u1-FLixaZnoWwv5;WVTg_=IpC@*QyoHuk|Dm9GBIFw_CC2$+Z0Gr?sV zKAQ|K6M^wA{fV*8gP`BoK+AC;Mh$TyMj$t4IC5i#IZYtkou(6R&hv?(&|+Mj*Agx+ z+X!cugM^cd2jS%EML4>K07-;{tA=oJDJSe*KEx4mH*D;Ny^WaaP#VxuU;#jBFVn$g zGCrFCU^^6I^iZsOa2-I5a2Z4lbFm}bTpWp^E-r+t>u|!wbsXXBI+bu9I)`u?x`Y_w zwuW$Y+d??H?;{-C&k***ZWDIHScL7cc*4eAO$>H70gnh9x397HFG2;_qw;`O0*gnX z4se_aOaYgP_-q_78hl2$TM@(D`x9>N0|-}l?EmQQKsXI^CWZ`iCme@i{ljpqe;AJS z4i?JW=O4yAaLD-HS zN7#&+Mhr%xg7w&C#GtWji2-AG5dHC_?SA8~5LV*?aY8YeJj#J$6x;!PN$iIWYT3dX zOu^p-<^wYUO8=RF_s0UGz-2h#4jssKR6l4-Sbs6r8aj?0VLRTD7(CvE7&KuRF>nH& zgE3(;(Qo2x!fN7TRN`u!$X4JWa1rnaqVT>HFu=fl08j3NtqtQaCX7cr0CR!qz$Cmk z9$b+2gB&8*2VC*md0aojar^+nVWKrO9y?;t6s*CR;zabD3dfp?6QUA#rp*A}09FDU zQQ$t{9RBtJ!hv*ruLx+z$zmUA*n1a0qjHh3w5K}4)dXZph#Q}2&<(8%Ib#(90(m|Firw>@iy9I4eDYo{9-NYVl66fEq=Hb?XmVf z41oK93;0eDE(r1Xz81f01itCs4`>O_kIDn;)_`!n<6sx*Z^TeEsT1r{`VW??5(AdQ z_FKT)z#3pJc)SZ9>%oJ%;BP`*P#3VjXZi>dBsK#$< zpv!#Oy&up*%6$N&d39?*qZYsi@KZ|v!4g&E{~!ijP1yw20~>%%0IC>?rO-ssF7KmV zc7ewp@aWzv1p~_di2&+iABgYUjEnP806wvYkHJ}r3#A#re%cGs4mj7@uuEw`V{pz? z4v;f`X1^Nx%R1OWRd(CliX+?$(=?O=pnAI}eg|>wMUqj^lWo^KhIqq<_L5=R1fx*X;mhb1!fJ zI1C&EP5`J{OtO3Q2@f1Ep-!$0!sHk{ZVkaC-3=HIy#p0|2L<0oVYg1<<{{eSMhqsg zSC0^Wcx z5C8-ZfJR}9fB`&0hGF798GkQCEdMS7m_zvN29l|H&=u10T>~+1HQHbuu1Oow2ezU8 zcfBPb3$iQjtw*8uALD4W3m69DyYJ5e~IDlt_@ zIe-Wd18G18pa3!fEs&4;C_-N;90z@3K3=0Pa#6WDoRlUMK_;Fy4%^f^C@0vqzJT9Q z_3Hyrb~!*eK-r^gB?Euik>PJ8K-tO$a)3Ob5GV%BKqXKIA8E0}x)(Pbr$Pr=4jlyj zv>pvxi@Kkg=69Goe~bD1SKYJUxzInBK>t_;1z{cT+;2jj z#CB*OyP1Jm@JAT^SKqe+J6f+Yg}j;iU2) zDE;9F*!>cC3VaSc0Xh+L-$Pv0h&ZB=7>~$oI&92GDN9lIDwItx$Pv>>;iTzsm{i0yV*D!tn*^{IBF>D3T}p#s15_RaWxL02&la<#c&#S} zpnM1LcR~5oT9k<>eP_xrt^U18;ElK zaGpHai^snzG;KNTeht^^c?POCj?{BNI$`rapNKx#r5^7V0aRnB1C%2qqIQIceuaoS zg@|tApaeuCmWcqfP}EQehH)N-a1Mr2HX=?YhBF3+G8*FLU@!|r7xPC~_Qfl2bRSQ+ z)?L);9pVGLi&ebM++3gRC;^wjZXgA=&~Lj3yxTZl0??1T z2g(zui{prXv0ppj3XA~8!5^of?3pNg9{R~bl>H{kT!}K*!um$|?GD7A`{6ey@YiLq z@_~8~0$)l-tL37fJp_IQ@Kg?f8t4Ln8^Af>7;q5S2karNP@Xl)vj?1jp}h3$LX`a`%3BErYf&4U;3Yeu9vnt1ox?k~p&T&bJ#lEcOrRDMg70u7yFt}I z#;|VtN4o9yT)3zU^(J5g>Vi@v-g}u5u^v9U9z5O!k9FX&7ChcT{JjP|-Ug3V_#f*- z;IZ4_E&HGtoJ4C~#V3LArL55v}HfZ(vmh z`uQA;2Xml`%z;Kc7aVTF*6D$$du!Mq+%rj9jpGWueiQF61)n9Ti^cHIMQD>n@D1$m z4;${VF$y-u!^ULTn1S-&&OhbuN@$M8bn~d7Q+8K;>n}L1MZ%*SIH&JU0K!{$R2~+}K;PtP>dDuSyyIUPl z|BjeI0@O`RZ2E|-3(Pw4*>v!kW;1}8ItVKv24E+~{*J_CE9}N-HI$fWHJq4Wg%uI7 zHXdxop*F@^Eg{BOy-kd^!j6nq*pbod1aOTQVHJ!X9t$V{6YwGM19qbAnG|ls1Z1@n z>K~wjhdFpX16-y8lfY%7eSc!S-5_GTjSUnQdt&S$?8XR%X7oTeV${Hq#K?i;fGNa? zfwPF=0~Zp*2El6vtp|1zZq~<$q1IOjSL;B+#Trk97=$N63^Wif1MozM{@-+G2fYt_ z)D6qGaN(yiQRV@7APbZb*apVq^D&P7pn41>Mnat#X=h7}u*K6LkS#OJ#)WXV8AiC- zj3$QKOeBWdVn;?>?8s=loN%#&wrBS~;be~y#{LT7Xdehf6ApG#ppbB|y$3ua4x{{S zu(#F)e&C8a0A>Tz@Ol#79|s`VCPrel((oYz2zTt{>*i=f40W(0T_!UusFz!YEt-oqjoVk9ukxgS)Qflzs@q4GeD7=qOhj`pzSNH`90Asmn` z^^T}TYXZQB8En~45y`-y&T=Ljn|Zxj>?q#>lr2O2T0{esvD z8|z_n#W1u3FbkLhOu&1iff3;1j_jPFP=#Dv2SIT{HU{A6iWM0{Z3$a92dF$w#2|N9 zVxap7V!*I*ME_yahX8@|Mxh;mslWuhrWBzOz%YD1 zbXb4F1*()2vVuE2wFKBVgcw=E3zg71s;?tH55l@z!C3Z;UHl<0a4*ZtO}Vt0A*pIpAH^) z!V^;1P?4yMIdGsk_`w{s$K1KVa$o~q?*}dbLFoMP_`VjuLtD)FhFCow?SOLU0F){; z0k6lv)<|%{gTx3I{5=HkV-qPTQm{W2QTcQNW%R?3z+)bG%*TNL2I^uF>VlG;7o#o~ zqoBoTkHt%XwZJZXeiraWrN`p?S-2q7z=0;PEDSEC&xNQw6Jrx|cpuOAsl^hgvbT>TSrO+kg}J z4*JH52z+0O2B^kwzv|v0XdZ0*t12`CcB!l+h{1#d>|)_4F_5ym5P+Lu!hkY>w}4gP zvARE07weweAnU8xs7S5n=(vNo_6mLG#gbm z4fZC2%V-?k@fwRXdlVtq?T_lj<@lvd9M=GAf%U)!U=y$fJhq`ecGyBaK%4Bwz_uH8 zu?vM#k0#%RAMD%%_2dG+L&Ib(2^Z@E{O$wn42`A*)u}k&aX3;d(_B!`-HH(G_FIYa zR|9|9#Od@XGB~~upqVl8e5sJ2P7Z?ywM6+Oc$|WNo`OT2M8PLeX~(zWvy+&x_~3i+ zi9^|#I5ZN}4nZ^Lp$>4QR))DQMITrJMF>r3wGL%d=eY$y7soWU#~xf9lj?tFi=f!< ziTGI@J%Gyt5g6EEqUr>|KX0OOZ=f!2yo>h_KwUt4Tt<6b%s_UDk(dj+Q_#j^(8fbS z)e-efW#n|*rOuN&NBj&E`W}_y436i4i@;^zDsTh11;E`9(!5;B0$*i<2iF-9J=%ml z3$IbBbest795Nn)5KtuGyINuf++{pIqITvPf^!~>>O$brGr>QO<7t38w<`c;>kdHK z@dE;ZV1NOz0h}79t^ZU;65u0Zd#EDt4e-hh z0b~LiKnLgn17HFwfqI~IAhvvfZ?s|1YgqtQ1Seg845|oDu!=gNfB(;_|A2vm2HV)$ zIXDh+c5xl*K5Y2NQKQF<8$V&<6iSskD_fJJ%gxgl6c!bil$y+CmWs-% z>e{;c#-`?bt!?f1JG&k{di>;rk3Rn7v(KM?@%+oLzW(+f-~I68PcMG?^|#;uBzybc zzn?wY;r03d-_`zB{iqhVrd-}0KJP?1y&JrK1m*T)DZift$Dc-d{%p$i7r^%yQ_jDf z^8UBs{%a}!-+&IVh3WzCQ(a&$`oKY|6C9&@!D)1Z^He{$Om&1C=m~eIuHb{d5I}VX zI@KFE=nj0UKSWX;LVzBTKy?W*)hE)?DdbeI$V9i$QvD*I>KF#}3?tPw%Bj9lgU-=F z^^O**dvu_GJfu3vhv*@nQeEU3)knTTC;6W0B|lT$ ztJiH{==ENeF?6#Wh*t5VkA9y_~`MI zr_Y|haQW)>TX(#C{ex&s4lgu3GDaXw5GALirDM3HMoVoDoTA$&{=+4De4^VaD6fE9 zz%Sq!@C>*HeB;y4;2lrDfPXyy5+3sPH{W~ceht8OD-cXe3W671VYje_B&Dp7} zHgz()Qz_y+R3!2q%i{STN`+w`rwbxK`@49}p{EXC*Td_2_}9Ml+8=3_pvk~DfMtzATI z=`5wCa7%7+&bbmj#X;V~K?M$SF{>jZnf)M5#C{}Bsf5v* zmda>PPGNK;iW!}8;1LZT;Uey%zl+v-n-T5c(B5iyw5irM#!@mT)1ZG}pRc`O%mIf? zaFByTx`fdpPNTPpQt9nN@Q4AA2((LR66e9+MN7Ty@U|AaC9SP?#~NyF1g4VtS%vw# z^tswg#%#4;rAoo9l}Z_nsp<6QBniDG9z0^fBPxY)KTOQ*;E6e%e;4-}Y=^b9+AVHw zu{~K^XCo{rUZ}~>-&3H~TsEoIeiaIEkjUr_$x?b#LOSi9KtgMYN~5=ir!m?>Qkm_X z6!!hUi>5|f_vTi+r422%XDVv!LE%K-tuk6guMStzYxoLAEf-+RnRN^~tDYv~{B2Y<+l(r2 zvwf$u#rB5AGFF;iurV(s?|4yC&b1Pe#?O?HO)rbdqFW*|=@oo6qmrv;Rd3rQLH)A$$g=&i2*V|9 zM80=Hq>fe`n!_yRX<0_LhGk@G*e1G$W1?xereF=v9GD&QxADU0;!r#>f=+oTEO-OCQ)w`Os}+cViw z9cpG=r-~u!dR4sU&{KD>>)~}h{A(Y2?GLa0;eVb#456+U^SiGX`f1elLfL)2ko?>A zqVnbSqT%KBq9vQpZ_DC_-B+`tI&r<|QZhxaj2EUMZZAyk^M5WGx9gdHs&B1)t+FEH zu+A*GiffjCX%ThJ60xfC;#qY$0(PS&nsYBZlG~OU7II(B5A9TOBOfX`!behe;)7Sk zPbSBqFHCOpe=Z%n>si4RaCk>qAw861PQOxEk_HYbY>PgLRh^s2s@Do}4<^0GeGJgD%G+yGvR|Uo4C$ro97ZiuW$>6X?RUthH4wu2fue2zQZOIq2 zs&yh(gC>F1k|kufs|B1cWeoSBJc|EB8X57CBtrOsI5hF$tKvtq_Cn=0~{oNrG*k!d43A3CMTKIm@Q(pW+t#ZltO3_al9wexX_O%EkhhD{2(zZ z;nAz&2eZS_AIm5XqjxzZN=l^ILwdQs@s7=nrD(APLYx1o2TH3KA0@zbd|^I9Ocg{b(M! z^I7qDa9E|PQ0&by%fLbERaz*cmFG!Wbz0ohQl+xmWnxyRB#Hen1u=IbVt)a6L?wiM z5GfKoepP&Bv3LEx+-2Sm<`Lj9&bLPOma0Oz2OKUGl*sRv7AgWMJ*X}#opnzE4(W(7 zQxJ2Dl2{LfBG#j55$ADuBL8uyDC*Ix;#s-9>v!eO^S&<|zVlhh7~fj;a#e+DcaB-^ zQBb0~Sz4&}FQ+sJRXVd-3LPXBv2K!>(Gf3Zbj2n!A4H%|_({Bnyri&K#%JYruK%cT zp7)()*v@ChQNFcVZ>lQPJGExz*@DvSt0nnre@cU>S3n1mApTEA+?{~9TY&gK3h{p! z+J=|R?P4eMUl|`(*t&jO=`{D-3itP)nMU~5W-nG&W^LD&WgpiYw3kY?YX3?#;yNn+ zPeH7ki1^4Rk_m$CAW#jU^)?v=` z8s{C)D_wl+@@6Wk^4Db-<{c=^(p)nuz#&7)s1YmZb@4Je(`815?Uspi4Q8uZp&68>fy&+gV*LcH26d?7ZvC++{h1 z>vQG0lf@FvEmKN%Kv`0E{7WwXd@Q-3`5SYqsck1jC-{r-@R4N2PDr6Ns0cl;j<9#s4viuj+WVpMVv|FcxAYNnD^ z{Za#{fe!FWXsokwXu4-R9a_xJ@@89_qHK;VDSw|nA@_VyyzX|1P#aJx(9lg$*$i`7 z7NaaAi(%nrGRxVSta4^1yMnG}SJ2eliXb(w@>Nk+Z)0EEVmqg@)%Jk4!!9tXepY;( zX@@dae=a{J_qHKg=U)X;TEp9)`zmn9(MZdtJGwwW%!Wo9UDnpnykCbsg1k*m6H}Jh1a@(WkYhB&aLWoKcolj+zbc;_R+Gn$ zsLN$U)$3@njX6QWrkp@gvo;{DIon^-XT0XnQ)jR1;dMRyYyWxe5C7BrVazl#cgFe` z*^50M%hrTfCZ5n(60c*N^e-qCF^h}iIi?~3$5If*t;`P#smToqtvCe*O`1q< zOIBD&duB*zhl(5Z02;`{43?-Xl__o)GgDjpikBRwlKE5D|D;`T;gMn`I2`TaAoeUQ zNeTL=4w3*JB#zyj9m8qMjO2Bw!uSsq{K&_$koYI5Tv1mNN8FysNonmX{w#EMB#TB) zCG`}C`QY#tI2_SflCI>LQtou$!+5EK)IbMm)Wow|GUM3yRWaNLiYWeLSw!SVl5pV% zNqo_R_z>}ZAupw^ulTdb+40YA4pY|ulr#UrL* zvJ;^}#3K(v$bBs9)Uq81hI(^qoa~Lq9VoZeFZo;{9za| z_0NLI>wnVC?cpE>hm`Yqru6I3AiRx*Qs^KV&>$qp2T5h!mm>#4f|y^7{D=7XkPl-M zqCSjCNO%+}Na~1)5#R4Cem6Mva44Jv4s$L%R4t3F6d%%9($40ZGN8@LJ&lF(;PN~f zyDqy&gSemZG6y0-#C{wLJtiU{{7HmJ_$VwPsWVKNe7~=tIQ(uHKJ|~niSPcDJNv>z z_0p)yl!Kb`^i#QJIkXtnZDihJCtDa;NLbdWgcAd%38LPh*XAxY5> z`QoI`kfh}MeZ_CZP7c2n51aBw5jf<{y6`}~B&ss?fTmn}EZ3}t2BEq3pBhAK5@LQT z{~#Lq7-6UrUNY|iJ30ITTO8NHP7&SjD}F6@bojNzeai2K@$deWKl8$atVPjPl0BLV z<$hgR&awO=?Uil~LIn*XL&|6pLxV_=&|71nKScbO{=n&ArtmxHDN*<7se<;t;+GOf z`(H}kru|vd<(jVw)ytd%9@V20|s6OKdql5hmqwC~fO2@4Gsc_1LF74cynyl68s^XPd`FTeQ zGZFvG)d3ah$U#WPy?-I@{YOKC2*U!y)gG;kwAC1 zI5sDsBnGj6goa@X1$fy^GY9cMG=MT_0A-9UXaHGU3p4;r&@13x)nMzEM%yuMt#&KT zopz^`kDX`<4GV?QmR%VUCFioj3vcPd^Zg1Ua_I)-Ae4k?nWbDR4?)ZB&O=}z4}sp3 zhhPfQAP?ac&`>jYP(!or=!*NcYqFj>o)CRD+B3ZC4L0xImS|4xu|#&ol{9vlr;K6r zRnkfWG6Rc)vI7h>jh}(8^(|uN_!O~p-i2(PS0N|Yvw#PL!$9mP@iN90pExJ|Xmvo~#KzzL_DCJru zE%j<8Bkf8BGwpH(TXLzKn|`UB*JoH7tZnl%2qE@7_Ka_pagGvZ_mC-THS zUet+uA$ymHNPhD!qSFb-rI}O}?+RM&~2%6JB%Zsjt`d@VXxU zweS4T@P}bGq;?|4hxr&ERv!2=ZIf3=!lAgzm>ZgMflqE(98GT$a*Il1cqPRVA*Q0x z(6T~qczFRUvQkfvsm>3MtH}#YsLk_Fs>}6DtIP3~)@S+3YWo6GOL3Smmdu*BoK(DZ z;7iFy?~a6n!iw1IT1%W~u2~pFX|;wD0k_l;%`+E<^UDiDLM!vx5!HE&=-OPGpk5ag z-=GUfZp`tQG-mo`G${RKb$tP;b+;jNz#)6?a#Fbh95#60PdpG`A-Jlw2=Dah#fdCR z2Qe1Ka?1)Lc@_Dg{OUYzSe=d)*^onzZPEtCH){iv?_~z0-BSdlH)aG#>-z#ShvG0E z9Oi(-@&jL{zvtafafrLDwZz}bGbj2%i(wQOC$ddNah!5}G`A`*oL8$032n$>M>J~~ zF)i7&_}1)TahoD2wIw4cy(uk7THhCtIc|eV9XM#fLAC6_^YryT?TPynDufrcmPF|0 zBA0jZ-n zj01<+JsdLL^=T9BPpFLd&{`-h20BQoIJm@+3@s*+U6~ihuGK|z8a3g(maLG_b~Pue zQ^iVnkiksqOl73BB{3w;iHwYfzJSyXr8tb~=AeG_!1Hbn`w}Y?&S@zP!Ysa9Seg=8 zf_#uN1~0<5YH1XA(Q5ErBIz7P2xL`hso_xnswW z+F8p<^_vHuXRJd#fJ5RLEi{N+bIR?WyqGkWMgLbmh>+cq8O!NVMuj|-g-3pv78?H~ zDI}>Y9{PuXD`}49WHj^z|Kus4F&1+#bzOyB8Ib-q;tAxvqmrsvdH{A#+I&hvZ$N z%B17k^3?OW=5*vJWq6ksWzfp=k&BU&id+ma>pry}MS|Q1kudb*_ypkxF|mmcqN1QZ zM5MKZhov|61>GF-#(=|&9uBg1eA~qDiz<_kYRV<2bIsDr-FXm2@*oQ|h*}MDF_h3j z(xHP;YcQxBjL3wjCy|MX55wY;?}x^uw(z4QO?|4zS^%%vM~|ye|Cl9P)=FaseEJ3rQ*Cy-*Rd#2DJ_%4fp#K zkpmF}4T91ixX>S1$&p>`l*Ie&Y>T{c0MTev}|%spwy(B3qr zW%-whao=C4qE$sB{~%1!lYh{&{(xN{EaTP(%J>cbvWR+Ld2FBXdy%8{?*_L~e-@2< zlgyuS@Y~|ax1O{(G7C&I6^erGd6L{S2C?>5X_6+uoPgNBI|l(eME4qmm-z<_C7W7% zP!p&Osqt5a)%YqS`-FcK+YkDs#AW2KC8L)9UO468=MApst2*sC>asVaDf+#75poa` za=LR6jB)>#gTShtQpaK+oowsT_o$Y+hMl z7Qf6tE38lGG+Ph+q|$EqH&srHn!D`YE&Rgqe8%J9!Ewz?VAwYPkK1g`6o)&+hj*;L| z$4We3%MqQc3F#ARss>w`?^(NMer7XAM7phsAgAwO{krUM(Dxh8`hK%)BgUOZKeE-k37A5`|#&JcMg5#fA`>Lfu09GrFrfDl;OSq6SnuhPk26iKMwWn3rNN2fuv&E zFjBf?9+|ps)32hPXPya;`9F-h64e;#nO+eYtg}RN^2#DY^`_A9LL)cQP|AufE}_Sk zmIMop#eoT?V*ezQ!7s&Z@R67e-m)@-m%2>vm1XWNUUTTFtJn4LKdBx@z3dl@=aFet zzj*)57lNby527zeH%8vgD31)%S)$l^Ws!WnDJ-ne$cr$PvZG2$7_p_r!Eq)-V1n7; zpJYbAC@b=jSc<&mmO?MJCD$vnthXSQ;Gmp3jFc^!M@rUi`Xy<{nJ?mw1a!rC#MDRM zl9fmM>nt(MJabG)fhi)isFWXGT*8SgEoMfW3^YMmQBb_4&|g$u=$BGa=#ySi;H{|0 z^;T7Ayw#T8f>e$KhbhBIImO|fO}`{>Kl@a8IIt`BY;0Z3b$NM=ug(%n%Qp*ng~q55 z19Z~TVqUn(z=|p>q{o&+BdsV15LN2^QmXX68P&Poit211Wu?kTUEW)esu2T8)ns>4 zzHlCyzUC!|LqVN!r()}3uPVx8y>w-QpnOvtrx039aY+QLp$XLDkXYtl^pC|4M>Wn`ssExazDi_|;mBstzn-UmB$lWVN?jH1@kaB%U zSXCY?vQ|eEG$3EENgE((R{5tl%KW8uk^p&iN}#Huw;WxW3hTCpvr!hN}->T+BcgnCH z=r0W>0UC^uA+HfIl$E^&nK^7gHwV>A4yl{ZKTX*l)G6L2s7X4esz~rjM7JxRq{oJ8cI2-#`(1ni847`D77nyswtEqXXia3@vs z=8>|Mn}1H-bpC1T*1*ox9fDf%VK~;AoHEIkd}F$&!H^zo)=OAbIx(vuTf}Zt3b~Ic z4J08V;SuzY`_MmHB11A7BY3jfaIUhdw;(g!2as9dpr$yywfRNr#`8}ln*uu}TVrce z_bV$TCvq&(3;9O*ErUVsZ`R9LRXG`~Myv<9k35V=@yG>ee5kp+P`<5T>;9VkJ%7C}}-6LSEflkXdd6$n5d%WG2O7#pV~1 z_dLFkt@D4NTpL|4-y*M4@6N8sIhzQl&A*@;{Qa%{!!q8+=DhoYDjxmajhdJZpu|_A_JM|V z4^+;9zci}RR~FykD^IQWmC9;+3sUPcfXo@=MrvlvCDlu|{H|Gi@*l-BZ+uoiF0iU@ zLW0Kdu2z+|#YKd6mV@g8&FMtjap`uq(`3Ecot2^%iIR|xq^6)xeMNF-?BC*Cx zDd{!H9OnU~Zq!gRXX;!sYvGnZ3T7R7UNg?)-V^75g1Tvm(&8-|asJ5yk?wkNg4VY* z9`S!P_CmlKgzo$UrkYhrQ*o$#gDQVjXqB%jvdTv#sPa-LRrVHSu2X+9Z^TeCck&!k zH+$oE<>Pj@KXN%~dg2`03;o>E5?UC)Wo`{={-f{Q|RjA9=4LSQ2YfvM#f|H?fG)bLIInlQ7kCerMq zi81vSKNQ;a|D(vo<~dX8TaL+4Y-%JnYb5e9*{v(sfoSIe8g_T(Zue zT({MWe1FgN-}W84_~OX%Ge4X>ee%2W=Z<}Q`NENJu3tLz)$Pj%zw*3#;7gxt`=9$? z-}fx&#@=W28+*QB-Q4{J_tvhbp|^VrL-jyH`M_#$JZa}1Mvj=oAZN|-CzmbtB-gLL zMs9o0gWSFKBzbV>(LYb@J^1_C1N(owcxcZr*N*J|`PR{$FFcRE|H9|^j-UKbZ2vLn z!YyS zoX${xK{KC~S{K4sRB|IU7It)A86#G2rU?toK?wz>fTTi`UrLe5M^a?;mKGVk6b7Sb zronhuS7h+)9bR+jsi)WV@Uk9K;FD>y;FHVYlN;cZdw2aDb?W?=ksjV3M%?6fg!#rb zh0-N8p&{xDez?xUjmj@$#^}xTxB^p9LZK-@RAlrM8;m{@1AMaB=%p$)dS(|Fd*&GQ zy#(3KVWtzAvTO<|+OU$0+q3&c^a+pW(Pw==h`buo9^o0^5FVUS6~@W7goWjm@gnlg z?C1g$T~KHYjyD(sM8&0k;*wGyNlA&fthB^aU0Up^DbagsOLSg2#k~QUih7XD0Eaih z;k}il5FBEUdOVLgrI@fLL)QQP#P>OE)7U5 zDe)7R7W(t0<3TKr0Q&Glzv0n0S#zMpjI52`#R)I55#z>?bxEeA3MZFQvHv+NjPe z%arY%ZB+SaOL_xv=trhccOp}lP9c-QA%54M7s7)c&xJ>Qp9s!`w#Hl))kb?M%cG#z zMsxGc5upXfknnCzs+cY?QhHR8pBP$HhNaM3U9R)av}Ac_nN>d7Mwzdsv^O9nFFB+w z0f%>cIK=Psc%E>`_lfXiXsh62Qfjo_xLJk}SQ5F_6di~PL^ehH;X6)~eNRL)+$zqmTjS6-9pqo`8&swy)4)Rr{= zER)z@Q`#Gl>8OW{sY6J~;vNo(@9%w)w9Dgp(jK2DNeB6@38#~4gjZGNanPlN!QDAR zCD9?J2IL17up=vx7gU?;pMqQUMgfP?fe4r^DD zq8)o)B)@PxyJRvB{EDY9^_69v1rVJs|7fm5kz#(bdo}W{;o&Pd*hxZ3* zJ44!14vA`$&Z;Uz*L7t{(1eoc215e!QewE3xqN;@HZ!(W9xQH836?a8f@QVwG)0w= zrY;xIv&^ydY-4Zm?;PG)MJ8|A^K&*Jz`-_f)*-2Vz!oM?6!~EMQ9OVwj4mXqKuxij`Rw$;vkN2BZ{iA)7pe z%vd;uOa%w=rrp0tHl6)Sy2BS$I)*7+Q>=4L^O*3YO#E<`%=AfmDVWLUhYi;vukkjRV%Ubwu5 z7pkn}@zs`)kStSgK*~@La@2$LjVWXrI7rs-`c=N}^f&6Yw?EOm!+4-u7kw{xQ%Y_A zE@e&0F?DhN6}>jw*G%n&kcj*KeC!X(6bm|8NvSQYxb#L=jI5RwrKn;@sLR>mS?1oL zhr^_o99FL)GuH0>O}XaOx0<(aexAQF_;JaKuy)Ja@pa{!G7N?zT21cNA_evUOoJ8@ zE2TA1xd%binuqk{d%-E`jlqesI+{>XO^;PoFrqWddIM69dQgCaY{3*#^7blHw)*|w zv)(%KecrNb&q|m2eO$Ac)rxz*CFafY?1JODGTpV}v}}K~2s%V0bO^ST*$|k)N4`N^ zlb=k|;4hKY1|%!00~3@LL2+tJZ$K)Bfx|>_m_LO~U$qK(d)rCf(jz|=FTC))X2I=; zT{D6$4Q~pyrtM0p{#1U7?xq1b0H!$XK}fAXpkn_(c}ShFJgN>cf324?qsCjRsPau! zR{ABWExiG$aPLPdCpePwxl>5#TdT-yXb^?-4}4QK`{d)!X_spsPG#oRy_Fy{?N%li zoXtzfy=9>GA&9{`1U}XvAoi~aLfr4C3P;QzhnPRP@~&E1c~_yT@Jd%(dIM7F){j(; zcO;c_CX>n~E6BWg8@{(pfB%E_se9`_nRvaZYdTv|w&g3@y79dmowt zG@&Lc=J(dbn!Gd#CQogO@s>tv>J7+D7b`Mrj02fDeKM(^yx>{w$i+<`4O?6K?UXGCn&s?Cn~&|FDd8^$ZRJoQZv$l)J(y8m|@depE%7jeKTxB_KWeyQ=ZMb8S`XW zF#rA*KD+ry472V+0=@c{IIzM?;%D*8@HPj^@0w_e+eRjKv*9A&fS-A_Bs}X%Np#kw z5@FWG5^=9U<~UlBI(Pfu4Z}vZx7)dwedRP?`}>GZslQA)8vE74D=t&o=S;-#NT=Ds;(3EqPk*Q}YV^dF8 zCZ_cUKjhh3k$M-qwmMro%LCgH+TWcQrjcVd#Qr{ef5`VM&d|Tyc-8;&J$Jl6KJI(_ z$+@8Gk1o?MKe)lV(0PY*zQdb$_P!tgbbC#kgB}dNYk+YW5$mQ#N$qid?lRI}^`D5SybH5%reCox? zW5<6wck;*&7f&Dh{_2?n-`za7?;m&1@BN3j$DVKfF6{m$@Zzp-=ofc>&APPXYu@GU zUxi=k4JwQS30>0wtF({%*~XGi!+GTR$-(6OdEVsPOK*@HR$U;stvyZd-f)yWu;mbW zZ2Nxl^v*q`$L?L^dXZv8Fb(3W3mhd2MiJhJf@-q8&| zhac+=ax420k}kq3mKLVlH?Jpsw!BLQY+Xmvwyh;u+uk90+t-j0J9+~$ z0^>u>G&?e8#b`2W^E@)_z*;io^zPq6E}r_1d*k{uwy)pEOgigvFgL6#AS|}sFFK*c zJ1)7|GcmR4ZnC7|c523dJ`vrXH{J{WSMUk zXO`S5&id~_MuCF>9OA$s1{@*|tRo|i@A){rNFbK*vZC7<{KR{~ z5h;xUu^DxKLV2x^NLB5Xl38^(J-hObTvKsdt*yAF&8fIqkYm1Gm}3C+cm8{j(au(6 z95@KUAr>4W!6EYKo?jzRpZPZ8!mZE4ZU%i2>KD?}f zm|f{3*5ab3EBBP;TJB`#S#Im{On37040rSM@`0THhrRcVYAXBwxG#3cadgIU9DDBt z8=@l8doQ6wC`l+GlmH0{AtVr5=)L#edv8*u2%;#1C?KGqsHoWMevbZs>v<*m_IdHF zS)Vn_SLc&+6LQb@?!DvsYaj|a#Qo19M)4#>=t)DQ5$e^^kb&amowY7)}*Xo*5 zM$IpQXyg!&9OBVF#3-JENSri8>*GE~n-E__5u9fuY(2-rXu%^P9&tB<{L=gR!FfHt z;l*9N=!y<*e03W;rLN5_v%Zy)U*AeEt8a3xs;_ZH#mS7Sx)MfpZ6UL|=2t)ra!5Gv z8zdlyScOv%ttAbyy10+AhQt>!X3n$GR-WS#)R5sYxA?&jUPfO~V8QnU*C(pF-7Bv4 zdvg0NwPh4Ew$Q&PV-4ku%7$V_Reb@osxH^9y7pK6zYd8P|IZ;-LmJ|>wLd245njX_ zJI}^ic#cO?LWU#g@q=NU%-#_H!mgl@igy3V8kE-6U-3w8Y;ntKZebKR*P&#roKfCX z#H?t{bE~Y+cB`t(WL4Mx3W!Dfkcjpn@xnHUlRpJl7v(h&CluT<_j5Gj*l~RJ?^KO1db$I#ttSpX7t9Q2rA0EvMoHQzL_81 zQqN83tYPK#6tD`eX1W)*r?N}0BzcrKC2%Sl;<#1yvE1s~UjgxGAHF#xe{+yM4ao|U zkglllB~!)pRkphQT#mN;WVRlEG}Ao#W*RxIFUh5#E1px)7R#@13=V0l_KNE(L|t0x z9{D{hSKAOB&`}x~H<0Rux^j4Vz0v5c66syi z8sS~m9PVAw80KABALdRly43)ry)&79I|EAAYab-ZIJ@`S*fz?Oof`) zL?tfxP8B|8sLDEZpo*5$TEMCV2imE|EP#O}@ z649wA4LPJDhh)i9kcCo-0&!(16W9M(BSCo8ByB(6sX%`?pvf8=HutzTU=`ljX_r~h zK&y;LCvtv1zt1Bl={hGR_nK#1!BwxQq7Gg}Nvn5QS&L6dMU!uEWy7z4B;=6(%|U1z zq>7z{98pmyzN83MmvA4OL``3GNm|a_P_!K%SEcoj>iRYhnnxFR+GV9RGRmXSM1CJM z{m(5wve&gBx5o`70PMt~4o+N28#lW2if3ebvsZXUW1;h+-pmaNqr2mh*8NkmtmgkT0*kNV6Vlo#xv|Irb>ugo?)x@YaagBoaZ0C4 zQDLWRR&fV2wWN)eSbBvWSJvziUEcI7zB^>>Uk&NVA?w0%C>A;owPz$>x1Uj*9Xzjk zXZ(Ue-;AhT^Ly$w}%9!1?LXFs$Yzx23YQ2frgpknXrS$xyn zMW>Q+39qyvjj)(L)1*-JL_V;ES>)5et?;Pztz}jRHPEY~8eOVV8mX1JO?DOK&5niT z&CWUH&9sd2re6VR$RTU*YREjb4T?@2gu26m^W6u|jNUsS+&gI=lM$Jn?5uB{2-H^p0{fPbBHNbeVsdj*u}w>Mu~kcPF|nz(lvvmBOCSq5 ztr zk@NvtoKqhw(V>T%Lh1HRv$-0WVbv9$N$QNtB6OxAa$n8nS-{?Rz^5|yyoVYL_I)D`aUFd6;QAagQ6`f7p|;b zg?=q&Me~b4wv>F`d@>Cs0#R^UGvK|LiPuXdEBB{54)jNO+PBUK+eurt^#qkm8gu1Y z+;jIayX)zPANBP&z7rT=I1(PH|6gp7-f(h|?r>JH&h5fq0wrs)Z&fn=J*xzoM^>*c z{<3~s8f+7cg2Q3~Agt{9RYr&PLEXgVwLZb_CEnUR#|9d9{ZYsiEdn%T#IhoAXn9TC{6)!7SVFOoIU`+!n1&Z&lT$2iaZHt6m zNBJOlo(rN7iuwhx{E!1*QwV|$P#$Ea@io}W z6v|>WzJ?M_-Ui!}p9i?m z9{I94(>x!)agU&oyKWJYBd&3Aw_TDGhp3q;HyrZQ2kpu;1}XKK1GXJmUG^QBEe;)7 z^^P4`RfuwGN9NA}f8-E=90Je&4SeJfs&*D4b)+EDP~&TanaSHQEAo7>1MN|O8)wSb z%YV#^A9jZw7IT{!lQ=|AN*#30%((8DpFLn-k<)M2lzY{oEw|aRHLsT1npf%6npfi7 zmRsc9mh&@!j~oJ#LlANZkUanqs%KFSA_*~i>R+QxOx{KkZ05slX|o|TF3QIE_k8_O zJ{J-<aLLHIMlHzibErhQY)fH_Q*&XBb8}I-OLJi{t)(!Z)>4p5zmoqm zAOJZ8?OFlB$RSAP07R>tfjD&uh{vfxyn*q%SX1lgQC2RG!W}r1A#VJ80lbJ|pTPK= zoQSjmxA^RD*Y&)>MOFD_2n6E4P~irjio89rsAIgfyf~QIfNpIaH;(e zFMk@66vZG#RRvPD3_hglkzS_YsdI@$_vu)Bzk3nP@Zk_%!k}MJMjto2;Hq0%StqTu zsvhNlC5)QtTxM-`2CKF*l~q@f>|S4<$ZjZ0U^kZj3<&z4Ll|<1l-h^R|EC~T9#sS= zDM6;X-p5QF;Z>%A!;^F~w+AWK-sAC3q5nm(;|7EMGJ3ru3On3WD^Zmc%HXQ%vQhq( z=3Y~s#ICJEL%}QKJnAcAIrZf+oQATW@!cU5?ZY>R7|DH*By|$fQN>V}yaMDZ<38tU zn7zr@wVls1rqAYDa3?b<0mI3R=)Neg^eX|uMb%#M)y3@mhD=sPV=}v{KAuxk6U(iw zissf;MtRm(M0(bjM|d`r{R{|3`w)g4!jVIq#9l~|_}0ND0=Y7BP^h5wwOG~UO{tdE z({cmqg9d&`Y-Yt*G^&5mL|Zgxqt7q4fM|sJ$ri_KKLq(_T55>0xb|;XAr|R|ieVwcP}Eek(aRv7VY3 zT#3%T#opz#g2-C?g1mZa7W#-LRn;-$s%zY%YpU51b(J1r_2rz#+)mXt$5^Zl-6t z)_WD%)kaiU)#g@Pm)BO?=hRd?rPWr^66-2mlFcjj-% zI=Kx>PVW6uFL?Mx*XiTaw?vK&-xt5w_fTH>%A~4M#h8w5)`&4P_9oGfKR}6e@1dnQ zb$I32UI{C-Y)&g7HdmLBDjUkk1r23(Sq){5sg0#hNlhir@lC})10s<_?2hG-bm}k2 zJH8qH3c-#yZHM}|QL(GJZJAc&Fk26FLckQRg zJ9K-d*>nbHk=he-iS30sW^GOR7PTz}q|%l`>-?5N+pLxXO8S-jp8-+mycv%izEyq~ z9oqP*Veh|>`gd)*J+Xg#_oI`i8lPW~E`2JF%b1fT#5_`Q44B5bbMKk?FmBrhQ*Y3t z&=i7r%ie%wLU(kkS$9U7X?I1M@zwSWd~-*ZS#^6Bp|m}VSom`w200`mhwKAu(PXK0 z&$~9Q8y@@TkM75N_cXjZajxX`Ir;R3%X%>{Wr+b#)Eu}E^_a{Ff~V6c#g8&f3$hyW z2qz5sMVVd?k2M)ciZklZi#Hsoi_`D#jyLG+O*CriNiwPJN&XoS|2qaL+fj$@&Q?^NUbC$G(Z&t+ulF1*{&@UC`p0vM(I3V10^Z15c+P85n2(HHs1FEkl=~Ep)tHMn z0Zl_N9q|b;9u5gIxE&j!cPl+q_f~P3&aK8!om>5(I{i1ob-Qmw{0vB3gF(jjWl;6k z(px>hE$JRzv!d?xKbs0+?~yb(Arb}W6#_sK=lNb4&s@;4becDzkmm?g(yT4r{DCtQ zKgDu4n)LE8mo=f+MELWjzq%A3w*dJ!v$G2<`)e;>U%vC@*5Ki;sVji^tmnB_!-sC;0eP) zcaHO|3&L3o-E3*hMAOx0l3i6F<}g$qmM~QwG%%GPbp8~`T#1d;F2g!dXGYD?N`d@W zYu6;hmMsx*@Q^>85#oTD7y}gL96&?W8g#YHzZmP9d?FYce6TUmedl1R{g!5~`I<#g zf8|9~UEo_PzYMcddJ$`__#(wd;du^O{&}gb+)s;vlYocvdw zj@*|3J(-&0j#QZDVB3X0E>IFd`SrWwb~nY{l$V~ zTb)n_VFRK^%t8935h$J21;XM^@RAh+ zJ}O}k{np;0AOgvXB9Nita`00(C+uwxs3Ci|Lwunw_&YZ*;`O-!^~ zut;-!X`b!$+^oQ5-n5i9Z&F2nX42sL)VQ7T)Tod7#BhW;V?55BFqveGm`*cp|AhbV zIP6>o&ZpJ_RdO>ps~rSay)(ct6$84pA~-o}gCoo6lbw&nJ94n~YwJkLf@Ol^3u3DC zb3zvFnR&kJQ?pXW6VocUC-_FzoJoiKoN>SVtnnT9N&L9`sOf#y4f9F&>pubL=vp`< z2N&evB)J9XDhI($=Pa=B;=r_20=hl!s}s}YqoWt`tz97b6*{_Myk!dgDKU%j zgpltxXI|p|*sO~E$h67h5x$f2$YhW^g&*bIH5=#LG@sz~Sxj(y35x@+sG89QIna=U zGjd=mAN-z+ag4=*O;iS^oz7Pp9sj|ZOM2tLr@W+uQRm6Aw5Qg|j3<_vtjEMW_9KfD z&a8R0=ZsmC*No{^-b4HlZ_I3zH)Jv9b&YV3*G0U?>--78_*(#IJC*|dppv3)5pkpoL?3wX;P0KWPe2-FjY z0K78zS?Ye~*_pldaJ6~q=1F}<=QAEVg|lbu~2I9{{(PHd6e6>rN9zg3tpEtqYPp{M5vsCD6Pv7sjmp( zrnoO5R;F+H4k#OAI6v|5V$CoEy{25E{3aZegT^R1VRx;|BJWtXMBlO;h`CDck8QH; zkFB=rk1e(Dk1cc~Fc>r(JQ4*nPag-FT0s1`#I5|l+yJ%}tM=xIV6 z-uQhK$?9dO9rX#H;r7sr$NQGg-J``vjM!(#-6U5f4cK(2G~0EjR5)HuEu>ye&2jEd z$#CgOPNnrGCDZy6l4yPLivb*z1+kF>2RQ_u{}*D!_n>F*$00@G0;H-+Ln=<~bF!hq zn?!Tse2k6#qcCU2B;Uge4buv|?iLl*?UI_%@!i1#IdG9fi0~$K_TCLClE)xjRv0psB_UH&`CX=-?(+=1 z*=#C_d_UgN<#q&%+sF3~YWEC@Zg7iFMx_XurOvfEXyjQ=nrnM@5~Cw4p4piZ>(-SX z?RGUa(yb>slGT&67{EpQz(Ee4C;ou2bN@i%rCpFFegv|l&qA)E*vC9|g@t?_&AEJI zqp3U+>A!S)YG0fyw>6X-RO`o&Dd9$?=CabWGnnOh$;{TgI96+Jw0nDYB)cOsoZXob z#=e>s%I;1HW%nd626!R|E^^?VSPPLt|3LD^9gunX5addphC(@!wo1Pg-Ru{$8}n=lTAh{L)GS{ zT}9Ro4OxyJrAdsytSHZzgpi=L2!32npl@D*pKnW{pYN4?KcBW-KkxQzKkv>=KVDb5 zAFn$Vk+K-zg|Z+|3V9dyL5b+GcU6*So;4_3c-W?Sd9+PW`C7dx zzNOsKzM{a6otr@mNJ?bKgva=&`iDp7c!p#ZutVw#IYC$QxdCmtp8WP~FaOR=FTbvI zo^N+5B4sgvha9|+L%@;WArYN>v(9dT!gIU7R$M&vszLnt<97K|lYJV(H?Qg_bzU(s zuB|276_(k$r{+8HBQxEi_$fZgoP_W!Mr?Y%b8JlkJ*qX28P=A=3Te-B59-Wd2X>`- z@Virf26!U}9&!jiv<6a6{fRntHlZn@+dtHu+cV!LdSIqs?!et4Wud-n+6v8`Muuh0 z7PgtSHq6*^N8i9gMg%w4Gm)MdlHrh^l4F}*nQNEQmP3te&vuFG$fSpNrMre+O=AXk zr!a$ik{1Jfkc0Q;r4WYdQPKq0LBWZQP$jteb<62(kNYleo46yr{l=)`nU0&9ay5Mh z`gvVu)`?dvT|?{bc)V&_2&0@6YhMzSVpWusK`1KEB<6Q!+N5`8P?EaR9pbL0QKP$4 zoFjUYTq1fG1$>q!@`$i*2#hnYOH4AUFH1H?XKeH0?i5mXcZzjdPck{F zH_0x(FTpNualj8b_#=n-y(=LX)lpXM`Tb?buHWz9-naV3!Azq>42w|gMku%SQJr2JZ(S;4h9 zLUwtpu;nG>D z3z-iTQIdh`<-#h%n7x90)`XA*fR*3*AdqZCpCqyJpGY20m8P;XcwarOldH+s+al2r~|JlW7)9|Gqy*XFSGBYb=|maj(`}W9$}B zYjD(8yKBT>r{zDsUhQyze)Zx&Fv?+K(06CiMu9smtFdbXtFiVce=Mthv*XW#H^+9T zy%s(h{Yw0Dz$0?N&h?9iI_iwjC4Mw9GJQ)jGkk4N)OqP@rS;sCtUez|QGFU?ulyv# zQE{%6sxa3|m7g1-DosD2s*cP!sotJ-UJQu-4I3|9g7wue$C|FLz{*Ef3FN?Es}f=N zKjCmOW-k9a zks$jjn<%qTL6Tl*wUk=8Whpa1YbpEW(W1YAozC`4-Wjv zf>T=@;rt#exO~_YWCRUB`HVJb39Ey_MP)F(qyVJLvOp1+Mu#H_a6<)$Ug*I`psWZ) z$z4Rnpcf!V@jR3%3PZD!Ftja7O9h4%H)B|8KZb>mW0*gz72v{_<#gElI|YtxAi$~3 zMsR)y4#fAUgZu$yP&+ISxTDfwc>G)bAO@DFM1gWz1f0(NU-sa64m~Iq{+2tOMuozs zAoJo$C=odc<%?2Ui`Ku2VPPW}#(R!oEaYGhe=a4#<`pKe`!^jpyiOfXZ%~4Z|Hy*G zW=W9WDh8_CFM-y#{9)JsF*x;`2%P`@JY4=m2&C7Y z28Hz}LG{lQp!L@=(A#hXjQ>6i78?(O^*{T;e$zgnZ`uRwe|MuVqn!}4WhaC!3RrDk z0))NG057-#OvKlNh0+$V)ZPzP#)3eyyZ{8M1em+agQ>477>8Qv2xH;0S&NJeq-aPTH{&Uh|fDLjW?O6t9 zCsu-~*m|&*--;r?17K%(5^M<LOPp$46JhL7$oL`jh4wlHl964BA zUJtgiTfb*gRDJXoGZz6{vNTxJl);j#34{PWFpDtyf=@90WSnOH(J+_z!Jydky?&L| zJH1Bhx4K<6Z**>u7jTodPjzQ)ALu_O-!ptdzGd{(w%_>Kq5v6n*IMmf3Kqv#g5{<4 z;2^UVoK+71P4^Tyn~H#gwG2?4RKSL<4J1E zeXZX_d98QVZbA2!{k-m!{fz#M{g}~XyCLH_`+k!r4p;Gu1GdP)8aWV=1Nq{5aF*H% z4CMpB#GL|$@g;B}$$*1{Dp1^Xz{cC?GbzOEBO!+P&Md|1Ek2w4+PH}F%Ba$Q!Jx_U zrG5|fx!$PLBZFzDapM{4kjW#bKKvu+F4ITOt!9e@6!g7qvui1kkc0jC_1|+4cg6kS zp?M0}hL^z2LKbMYYT!uM{YvpP`D7Dl@tzcA^@fmS`^qfSegR+T_`A6vh%e-M9 zZO(9ve&2YSHiTLXd(9rYc9=hOZMJymT2ELUutN@H-?^q#j3De9B|ku0Jb}qf;DoWpIrxBltK8)>;t}vAo$}hg0Ha* zcoNlsWvBOr=4$$$%Cme!38uWXj-@^)rO}>R6rfzNn)TSEgFS09;xS@2!S1z~;ItCQ zxpkJ~+)Ar)ZmIPIr_g%BV==%HIZ%)T`RGb;JG~B-x%~@)QhOjo={SUForfS)pW|s>^?$IG)F^UAgz^IQy|qD;&l-N)GO zERbxBZrezc9$fpou7UI+YBal_lE&+?De~{MY6xhx8Vsx^-wrCK+z!gI9}diL7!F8r z9N{N9-tkYMj`}VJIH7%TK$)1!0aUMcY%MzfZ-hAU?T{#Y5R#NneNNI8d7Y>)^DNF( zZ6?x6eKdezeOS|HS}jl*>6H2iJWoz#pA^ql7j<;^nQ7igKxRg%j^G)PqyL| z87odCS!$yRGUk0ju6FI-o{R>MK+h^hw10_9T5vwKBs|-(H8Ra_?R zC?t}8J1Cq!92n+0!e0znV%9cH{kgIZLE>HW? zRGy*qe;F29*Wzu>+ag@->I2w}a&KR+e2*}GrdwiYvTJ^1Jgp%*hJHOdk}((=#=H?8 z!W;?>X5I=3V%`o4Wd0Yh7~dV7kb^rq;{+c@y<%t46rBs3Ap7#pclpu>=8F|iJS@`` zx>uqvaXr^evoqD&tRa?aR~E)(5K=$=0K6@~N z&%PPv&mIc#cfTFv=RO>;7(hd33uolO*|i+P4y}gdGiZ8@@W!wCB3oaTNbH%bls`08 zr+(sArH*({5niJ?%hI$m*`AUgLw8LJ<9Nme@&m$rqrw7s>Crx3<#AqUSS8PEAe!ej z7|HXz8P4Mlh4Q$!f_a?bz{LRiH-~R|)Q)8kd2kh^o?Z(%XE%H-KL79YD$#8-jk3G% zwJ0AOsM8i}FEduJ$tU8AGHq=$lAP&ru`F&_gb&|8Bs|PBFeTcZUlPj4B7Xl0$UeIIYss?QEP+6D{!d2tbomEXyszB9>dBQut0wzT zuDo?q`0wt1nS%}8Y8Oh{bQLq2@OrVeBw|nn#nG$8#f@3O_HxYi=i6jQhY+)J!p*ar z!Y$D77|W!gP@C9WA(W`wL3ZK8fexV~{KWt__GJ%ycPt&f zyKm{WJ3@b58IsypIiPYbw+APe*kOzdyFxJcX(UtJYMp4*Di+(O!q?lPEQ)VZniXhR z))-`1aytm0b34c)Z8(sW_+Nlk+z8($`i|dX01IV7T=YCC3VnCwY+v%Z>YpV~y4DMf z-d%_F-`~Hied64@+Pf0F3vVl(Nxh+k#@HHY`1hC_v%9P|2H<;{2O+o z|2M4f!Fqw#2m4pnObcx&niSuiF|HsOb64|nz<>HmoLi>4v>R4tlyF(fPj$^&qsO z8ic{sSo7n*mQ+68|6Bf}Gn-OpF7Jp7g|4h4K`M=4C}95 zfwiF;g!)^nv9jlXFU^_XzczXP%$CS!q6hg;WzV2r>AXyPf|IkIGgKwaS>TN4CJxjlD{~Hu0sd>S$EgC? zVA(RPwQ)IC)3X9A9$k%PzS*=q;myJI;cw1v^Lu;wpvPOe)3mp$BDQa}B?)g0!|Q!OXe%4U_dA2^aWW_iS%Bt6BhVMq z0aGb;u#!^-M@2a_iQ(G>262c~zYJ-bqEMdBT-u4ILmV&#g=6}lc1jC$gwWyh zyaEtK(BVT=0%&OT5Jy4;0;DcLtju{dj_Dkf%Lze;ybz2joP`$(!e8GnN>2fXRaatI zZYzc*T*t8B2?5L({uE%t_GK<`aE&bp{zU-ce~sYsb{&vG8HCb)CD1&CY9NkE0RH%8 zuoM&l`%~w^^~^c&JbMO$&Y{L+;ggVcUJ%MJo`5SNCtyhAI6OfGi9es;@}!xIJr&(gi!`@d6O)vfsg=YR0E;8{Q~IiJO}vQ zXVHQ66xjVQd*B>63W5L29ny~+grcJdpzhcK=sCU^`88;L)Qb`@gkkPe80G@YF>Cl; z01tnn3}Vw#b=bLF0S>H`h7+sB;M^J!5M3(_QtQru!k;HW?XMGn+i(mF|2_id|H~ez zoA!bm${l=A?hv+R2PAIY0a@s0!%ERlsQsA4E9mtPp!@~pKn`y(jEHg&16U!Tf$|sy z79H zdd+5_{=NxVYySbCwWw(N4^*VOZZW`U+Y-<{uoN^-uK?9ct3X#~Js7HP1|z*aU}$j^ z^zBcBF7rHSd!y|Sl>qfP8Bj}=1JxV_P$^ad4W+Ul}~DOYM<0+)jt1_?+$v%K@&M>TwDbPQtJV)vKjEYd%?u)C>T-BfIj0Q z=<>usJ6H-dW8^?RMFG^Zl|Z#f1ym~4K)C_ERogW{X+RScCp1A}PV0-}g4TPbw^}b% z-fKQl`>6R){iD{D#*YExtxG^3IcS|)0ooTwvVi-5kT zIOqh*fOeETXeKLxMwTk57pj3;g$AfLXo5ENoy|aFM*MVB8v=dc9D^ndb3N%5zLL1cTaiH3v11f{MpfaWRS^1gXTh#@w|iy0jS+H{H*%G@V(kIqZb+rhO^qQ4aaeBjBe|^H6GA= zXWX|4V2T`!_ALb+!R26jdKK7+tOtAPE#RQK7wmP91KI2xSlV6&3s)I1^-=<(U^Os^ z)dJmA9ni_s2kkOL(5g53s?lZgS$!D)L46j#pgE79#l6Ij=`NVw)O%&tr~k&h)9{UX z`yzlD$_9=1E(L?*%Yi7k>U$32EU_7AN_)XY`#3lnp95P+VU z{NQr1JF*fOr~d$tOPjz`b~kvc9R&|PA#gLj3@+AkVDGH@$%c!2PYOi48iRj@PqTPo zR6v?HsJ4Ep-(mAuZKHHnT1%HjkW= z$&Y^skTwZ`1#+OEx;?kO%fa`=8VEW67et^sr6|R{A0su6zY5bAei~#d@zB>=af0it zHOyoiUw8H+_S%Qpc9IhuTdlHPnn>lY^~5%24ROq^*lOA>$7b3so&12AZ2QnPf%1?Z zN13I?+ReKB2(bJ|00=0T`UZfV6K)X7}Xy+=sG}lscA*;xyft_!2(<9UNK0BE*=^k%C#fov5 zW=1(YU_>}Pq(?Z;{1CAEpToEFKNsyq@X=KeBlHI(UEcUUMS9!wRHgm1DVoP8k_?20 zqAX;4gKf3ieO*i%xNOTRH$VFldYDVTQzA3VA(x$IU(HRn@AXV@80SViPH-Zqlk703 zDORY{G&9)g0VCMyq3e%8j~fJlg!X`jp1bo*cI$)|t&m?^yOd9LW+GlkMy z#)_2o4Q6W#b)}d{H^z}PE5q%L3j^tvnZ6wRWKTXlmL2IH?v~08VixiEj4R%L%zHdv z=9s4sbAsc;ywCP#PO-ch(@by11ICX48{|Mn-&=0z^T9{=60rwR?fuDBZ*tH4{-pTA z`l$+uzlY1@_VyNNp1qQ3BvqYE&?t(vHOdNiCM5;A+eiEP&_cY!-1(k~p5B~%Z>~q9 z4~KKto5LCN;&_a6Iqdr$9QR3gj{CG5hxLH@BY^xZBSm|_Ms<`y$R%Ol(yv*^R=g|} zTs2#9cFkD*#r1<#vb#G=G)~v&8Az69n5*R^*%&6rQi;(KOuLW}FPdLKFw4^~j?41N z@n-nc`Otm;^LF(f^J039bD5s^J>0mH?kvu<8_Q#w`6Gb*EgM9Cr?}|^PY64^QPVCUJsZ*0&LORPAE6`M)_PM zdVi+x5O`CxYsqZw?j>XG2bK)BpIzJ0EV-kuPDQY|Lg#X3v59hg9#JAd=0fHq zv8jxBKL#}>l1+(D_q2|x;8{lZds#<}d)kIfaO?vo*$(_E7S(T>N%eie_z^%sYts;Z zC=-g^fI-e?f#((f2uxksh~4hpA<%R6^zY5>;@c{km5$}sYhOyPGE#^vwZQQU$#`xa z)ryhjW>3xVrjb*_+(;=Y9_A@!T+@_Zj(OsJ4`R$D+bUv;WfMB>W*hW?K?!{5`Xj&& zt^X|t2|_a%lGbA%3;)DM8`faAd)8q616u{!t_l8D(<8dMuv6i1+7-?7F^vYYLA7QY zUR73x%yI_;wS++?7kW7o3PNajRHbE@SHjZI?_n9_Ou3n)PP>^UOfxNF9xzCe59y@v znI8fU==F2Z**p9XY$0O}cBf)BcD;Eu)^}|+)-kjRtG{_{W$AU1f3mL09*FN&7Ygan zlkjfEtFW3ab(|XQO~`e0BB9okY*HQUpkI~bgsUoc(XQ@x(W;oG=@!h;3^HeEMyazd z_{3Rf)A&a}1gOZt=XdN=>}u>z-U@7>Y9-dyifRz9ug2={ZotY$4=>Ld5&kRjmh|rM z8!9J#2XL3%`;6tBdx+|`S1G#0PMV2H2iHQsJ=jXSJ&CN*UTmw@(M?fpdqz>OePXXw z`osZOFz29`{lq~(a#7NnswQ$rXK_T7$$zV0G1~1_AX!WDTsq z5+D4IMLplXH0b%UHQvuJY-Bx`*x~eC;h@dDx}f>Iu8`3@{-Vyjm6+zdqom4nmaM{a ze+AhW(MnP;vQ@-i)~Sju+*P~$;+?AG%qKOeu}>P(w?1phT>q^7BPLM>(wB{44e0z` z+#rCZcQ3(WZ!gC}->(z!f4^&)=lc_D7$1Z;ID8P>YV|>OkLgF1Lk1tUk86K4I;HlB zD5Ug>f(HB0MWjA^iHdy*6}$8$MdISu5~=ghB`pkdGUq;jkr7z{>C1D78Ib)EgDI#6 zqY$lMg<f8vB$%?;v^* ze?%HR5EKW;6X+r2sSDtDS_l;%o`Fo1K~xJ1!r=K6@Ei>Q0#pY97tVbCF|D~6R#Jx6 zZ^E!h)C=N^>LA=-t;A@^fdX4l2C;9s2^{}T56-RA1knx3AoGtrC~uYmEmQ|#u;UV# z?K+Ph(h30;)jzoJKLLD{Kg6N@A?Gj}x`VQZo5%LU^JDt}jxR=8F@|N-q4m2k%m-x< z3{(f<2&*tlScfu*jVOcIu~Y+{`<39tN?ADfn*@mdE(+3rTmYr@=Ro7H)2Q}A5bzt1 zp&PQp;JE1ku>Rc({#$lI?AD!-jdF*Y?c1Pt$2OSRxfNdgkW6$9qR=()LDzteG6?c( z3^RwNm_DpQ8N{Cgim+*kH0)d|1_zd1gyYN4!Pyn3;o`~@AinA-$gVmB%B%N-=ITA5 z|JyDwU$Y&^zi$EB+D*XwVRaggV z+M7VlbO)%|?gK@}5s>#j0kWZ|K|1~{NTmydWd3=OD7y&abs`|%dI`k(MB(zi%W(P8 zWe|OZ_#_7CUmy;bKT3h42dLTX z2Nn8JQ1lW6`QS4k8+#6<)6Rob-bIisy#$iAq9DwSuh&9rb?!XS5SEtqy>?^D$82 zoC3u_A&`$b53;EuAd`Cuq)RV@RIM0DwMu~GH3^UymjsC?QXu{Y@kI*IfA3{M@`XG| z%_)HNv?9p-2+%|hD#$_c^fFLCvjT7^i_u4Ukb%m-ps%+JbO;AQ%kemFH zya)=(q9B(o2C~HxAX6g=(yh`UeN6_WCS*YJ8Cvz7EJ%Hk{U8gnFBCxbu@cBlDTDl7 zl^=u3oR)yLeJroC6)M2xtb0fm*B-sHDq) za)CT3Rw;l&ixS9RL$7oaz0!G=&+;Es7nDA$%&LA-8&m(HepBLb z3aHkreNpLB|EO|D&3B1P7f%KsG%IB=UK%pkMxq_mci(7%cxmFIM@TPMX>q zT!F?bttzdTnyuQ;H3o4{G-h!#ns0SRwLj=x)A^|1uJ_5H(cqIojo~N#3Zowbdgx4{ zg)*^kS&St*|2rI60d%3Yz!cvIOvUZss&xRIj08X1k%Zq{Q^j5r*)lK9{1xX-B2=Fk zC22m=&&JK@mFhmwZPc66xu!p^^FV(@=e1!k%D=7{yf>*edT&x;{NAM4jXMtw2s!B2Yg2OpK)3tl=$pRi5NK4e&n-gkDE z8MXIN9$6BSzG{X>r{T*iT1{FA%_cXA_4ucxa?=G;f%yU{i?BdUBfcV} z5MNs)lHQpA2r&GX4Whph)@VOm(0hZ8azft|t58qMAD@CH|5^Bd*gEU5D7P+d?+H32 zrMo+3sG+;NySuwPL`o1rKv4k&MZv(r?)Iq1I3DBJ-5sdwTfFc0exGvu2Q;M*6OEre?hqZ&Dtc^#j+g7vxQ||Cvxfo4`;N8?@R5C*_E^^VMoIH z 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 OR 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

PuqeHN`2K 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

qPAR9xh%dGkX1Iu=BWMr`KYoa0AAFO2#8u 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/logo/carrier/dominion.jpg b/app/javascript/client_config/me/images/logo/carrier/dominion.jpg similarity index 100% rename from app/assets/images/logo/carrier/dominion.jpg rename to app/javascript/client_config/me/images/logo/carrier/dominion.jpg diff --git a/app/assets/images/logo/carrier/northeast_delta_dental.jpg b/app/javascript/client_config/me/images/logo/carrier/northeast_delta_dental.jpg similarity index 100% rename from app/assets/images/logo/carrier/northeast_delta_dental.jpg rename to app/javascript/client_config/me/images/logo/carrier/northeast_delta_dental.jpg diff --git a/app/assets/images/logo/carrier/renaissance_dental.jpg b/app/javascript/client_config/me/images/logo/carrier/renaissance_dental.jpg similarity index 100% rename from app/assets/images/logo/carrier/renaissance_dental.jpg rename to app/javascript/client_config/me/images/logo/carrier/renaissance_dental.jpg diff --git a/app/javascript/client_config/me/stylesheets/ui-components/benefit-applications.scss b/app/javascript/client_config/me/stylesheets/ui-components/benefit-applications.scss new file mode 100644 index 00000000000..d82fdbc9505 --- /dev/null +++ b/app/javascript/client_config/me/stylesheets/ui-components/benefit-applications.scss @@ -0,0 +1,47 @@ +#application-dates { + h3 { + font-weight: bold; + color: #454545; + font-size: 18px; + margin: 0; + } + h3.day { + padding-top: 15px; + display: block; + font-weight: 600; + font-size: 24px; + margin: 0; + } + span.month { + text-transform: uppercase; + font-size: 10px; + display: block; + position: relative; + top: -5px; + } + .panel:first-of-type, .panel:first-of-type { + margin-right: 1.25%; + width: 48.75% !important; + } + .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; + } + .panel { + border: solid 1px #d5d5d5; + margin-bottom: 20px; + box-shadow:0 1px 1px rgba(0,0,0,0.05); + } + .panel, .panel-heading { + text-transform: uppercase; + background-color:transparent; + } + .panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + } +} \ No newline at end of file diff --git a/app/javascript/client_config/me/stylesheets/ui-components/cards.scss b/app/javascript/client_config/me/stylesheets/ui-components/cards.scss new file mode 100644 index 00000000000..63f79b6457d --- /dev/null +++ b/app/javascript/client_config/me/stylesheets/ui-components/cards.scss @@ -0,0 +1,705 @@ +.plan-year-heading, .benefit-group-heading { + color:$primary-table-heading; + font-size: 12px; + text-transform: uppercase; + font-weight: 600; +} +.plan-year-status { + color:$primary-green; + font-weight: bold; + font-size: 14px; +} +.borderless td, .borderless th { + border: none !important; +} +.broker-icon { + color:$dark-blue; +} +.offered { + color:$primary-green; +} + +.my-account-widget { + .panel { + border-radius: 0; + background-image: none; + border-bottom: none; + font-size: 14px; + margin: 0; + } + .panel-default { + border-color: #ddd; + } + .panel-heading { + background-color: $primary-white; + background-image: none; + border-bottom: none; + padding: 0; + font-size: 12px; + text-align: center; + + h4 { + font-weight: 600; + font-size: 14px; + margin-bottom: 0; + max-width: 155px; + color:$headings-color; + } + } + .panel-body { + font-size: 14px; + text-align: center; + padding-top:0; + } + .ttc { + text-transform: capitalize; + } + .ttu { + text-transform: uppercase; + } + .dg { + color: #414141; + } + .lg { + color: var(--secondary-font-color, #7b7b7b); + } +} + +#shop-for-plans-widget { + .image-area { + float: left; + margin-right: 20px; + } +} + +.qles-panel { + .panel-heading { + background-image: none; + padding-bottom: 0; + border-bottom: 0; + background-color: transparent; + color: #333; + } + img { + vertical-align: middle; + } + h4 { + margin: 0; + line-height: 1.4em; + color: #454545; + font-size: 18px; + font-weight: 600; + } + #qle-header { + .panel-heading small { + padding-top: 5px !important; + line-height: 135% !important; + display: block !important; + } + } + +} + +#application-dates { + margin-left:5px; + .panel { + padding-bottom: 15px; + background-color: transparent; + } + .panel:first-of-type { + margin-right: 1.25%; + width: 48.75% !important; + } + .panel:last-of-type { + margin-left: 1.25%; + width: 48.75% !important; + } + .panel-heading { + background-color: transparent; + + h3 { + font-weight: bold; + color: #454545; + font-size: 18px; + margin: 0; + } + } + .fa-calendar { + color:$primary-green; + } + #calendar-stack { + position: relative; + display: inline-block; + width: (13em / 14); + height: 1em; + + .fa-calendar, + #benefit_application_latest_submitted_on_day, #benefit_application_latest_submitted_on_month, #binder_payment_deadline_day, #binder_payment_deadline_month { + position: absolute; + } + + #benefit_application_latest_submitted_on_day, #binder_payment_deadline_day { + top:42px; + left: (4em / 8); + width: (11em / 8); + height: (6em / 8); + font-family: sans-serif; + font-size: (8em / 22); + font-weight: 700; + line-height: (8em / 14); + text-align: center; + color:$orange; + } + + #benefit_application_latest_submitted_on_month, #binder_payment_deadline_month { + top:70px; + left: (18em / 8); + width: (11em / 8); + height: (6em / 8); + font-family: sans-serif; + font-size: (8em / 60); + font-weight: 700; + line-height: (8em / 14); + text-align: center; + color:$primary-black; + } + } +} + +#metal-level-select { + .fa-circle { + color:$light-gray; + } + .fa-dot-circle { + color:$primary-green; + } + #plan, #level, #carrier, #yourPlans, #sponsorContributions { + border:1px solid $light-gray; + } + .nav-tabs { + border-bottom:none; + } + .nav-tabs > li > a { + background-color:$dark-blue; + border-radius: 6px; + font-weight: bold; + font-size: 18px; + padding: 10px; + color:$primary-white; + text-transform: uppercase; + border:1px solid $light-gray; + } + .nav-tabs > li > a { + border:1px solid $light-gray; + } + .nav-tabs > li > a:hover { + background-color:$dark-blue; + color:$orange; + border-bottom: solid 3px $primary-botton-border-bottom; + } + .nav-tabs > li > a.active { + background-color:$primary-blue; + } + .tab-pane#carrier, .tab-pane#level, .tab-pane#plan, .tab-pane#multi_product, .tab-pane#single_issuer{ + background-color:$primary-white; + padding:20px; + min-height:370px; + } + .select_choice_reference_plan { + background-color:$primary-white; + padding:20px; + } + h5 { + font-weight: bold; + } + #refencePlans { + background-color:$primary-white; + padding:0px 20px 20px 20px; + } + p.reference-plan-title { + font-size:12px; + } + .rp-info { + min-height:140px; + } + #yourPlans { + padding-top:10px; + width:100%; + height:310px; + background-color:$primary-white; + overflow-y: scroll; + .col-xs-12 { + min-height:170px; + border-bottom:1px solid $primary-dark-gray; + } + .col-xs-12:hover { + border-bottom:1px solid $dark-blue; + } + .col-xs-12:hover .rp-view-summary { + display:block; + color:$blue; + font-size:12px; + font-weight:bold; + } + .rp-view-summary { + display:none; + } + + } +} + +.multiProductOptions { + /* Hide the browser's default checkbox */ + input { + position: absolute; + opacity: 0; + cursor: pointer; + } + + /* Create a custom checkbox */ + .checkmark { + position: absolute; + top: 0; + left: 0; + height: 25px; + width: 25px; + background-color: #eee; + } + + /* On mouse-over, add a grey background color */ + .sc-container:hover input ~ .checkmark { + background-color: #ccc; + } + + /* When the checkbox is checked, add a blue background */ + input:checked ~ .checkmark { + background-color: $dark-blue; + } + + /* Create the checkmark/indicator (hidden when not checked) */ + .checkmark:after { + content: ""; + position: absolute; + display: none; + } + + /* Show the checkmark when checked */ + input:checked ~ .checkmark:after { + display: block; + } + + /* Style the checkmark/indicator */ + .checkmark:after { + left: 9px; + top: 5px; + width: 6px; + height: 15px; + border: solid white; + border-width: 0 3px 3px 0; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } +} + +#sponsorContributions { + border:1px solid $light-gray; + background-color:$primary-white; + height:330px; + p { + width:190px; + font-size: 14px; + color:$heading-gray; + } + .offered-heading { + border-bottom: solid 1px #d5d5d5; + padding: 15px 0 15px; + font-size: 14px; + color:$heading-gray; + } + .ac-row { + padding: 15px 0; + } + .fa-check-square { + color:$primary-green; + } + hr { + border-top:1px solid $light-gray; + height:2px; + } + .sc-label { + font-size: 16px; + } + input { + &[type=number] { + margin-top: 7px !important; + } + &.contribution_handler { + height: 15px; + } + + border: 1px solid #b7b7b7; + border-radius: 0; + box-shadow: none; + display: inline-block; + font-weight: bold; + line-height: normal; + width:45px; + height:40px; + margin-top:10px; + text-align:center; + } + input[type=number]::-webkit-inner-spin-button, + input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + } + .slidecontainer { + width: 100%; + } + + .slider { + -webkit-appearance: none; + -moz-apperance:none; + width: 100%; + margin-top: 16px; + height: 0px; + border-radius: 5px; + background: #d3d3d3; + outline: none; + opacity: 0.7; + -webkit-transition: .2s; + transition: opacity .2s; + } + + .slider:hover { + opacity: 1; + } + + .slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 25px; + height: 25px; + border-radius: 50%; + background: $dark-blue; + cursor: pointer; + } + + .slider::-moz-range-thumb { + width: 25px; + height: 25px; + border-radius: 50%; + background: $dark-blue; + cursor: pointer; + } + + /* The container */ + .sc-container { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + font-size: 22px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + /* Hide the browser's default checkbox */ + .sc-container input { + position: absolute; + opacity: 0; + cursor: pointer; + } + + /* Create a custom checkbox */ + .checkmark { + position: absolute; + top: 0; + left: 0; + height: 25px; + width: 25px; + background-color: #eee; + } + + /* On mouse-over, add a grey background color */ + .sc-container:hover input ~ .checkmark { + background-color: #ccc; + } + + /* When the checkbox is checked, add a blue background */ + .sc-container input:checked ~ .checkmark { + background-color: $dark-blue; + } + + /* Create the checkmark/indicator (hidden when not checked) */ + .checkmark:after { + content: ""; + position: absolute; + display: none; + } + + /* Show the checkmark when checked */ + .sc-container input:checked ~ .checkmark:after { + display: block; + } + + /* Style the checkmark/indicator */ + .sc-container .checkmark:after { + left: 9px; + top: 5px; + width: 6px; + height: 15px; + border: solid white; + border-width: 0 3px 3px 0; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } + +} + + + +/* Hides number spinner for chrome */ + input[type=number]::-webkit-inner-spin-button, + input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0;} + + +/* Hides number spinner for mozilla */ + input[type=number] {-moz-appearance: textfield;} + + input[type=range] {border:none !important;} + +.reference-plans, .multiProductOptions { + min-height:200px; + .panel-heading { + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + position: relative; + padding: 0 0 5px 0; + color: #454545; + background-color: transparent; + + h3 { + font-size: 12px; + margin-bottom: 0; + color:$orange; + font-weight: 300; + line-height: 1.6em; + } + } + .plan-label { + color: #b7b7b7; + font-size: 10px; + text-transform: uppercase; + font-weight:bold; + } +} +#employee-enrollments, #employer-plan-year, #employer-benefit-groups { + .panel-heading { + font-weight: 600; + text-transform: uppercase; + font-size:18px; + color:$orange; + } +} + +#employer-broker-card { + .panel-heading { + font-weight: 600; + text-transform: uppercase; + font-size:18px; + color:$orange; + } +} + +.employer-broker-widget { + .panel-heading { + background-color:transparent; + font-size: 16px; + color:$dark-blue; + } +} + +#yourPlans { + /* The container */ + .container { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + /* Hide the browser's default radio button */ + .container input { + position: absolute; + opacity: 0; + cursor: pointer; + } + + /* Create a custom radio button */ + .checkmark { + position: absolute; + top: 0; + left: 0; + height: 25px; + width: 25px; + background-color: #eee; + border-radius: 50%; + } + + /* On mouse-over, add a grey background color */ + .container:hover input ~ .checkmark { + background-color: #ccc; + } + + /* When the radio button is checked, add a blue background */ + .container input:checked ~ .checkmark { + background-color: $dark-blue; + } + + /* Create the indicator (the dot/circle - hidden when not checked) */ + .checkmark:after { + content: ""; + position: absolute; + display: none; + } + + /* Show the indicator (dot/circle) when checked */ + .container input:checked ~ .checkmark:after { + display: block; + } + + /* Style the indicator (dot/circle) */ + .container .checkmark:after { + top: 9px; + left: 9px; + width: 8px; + height: 8px; + border-radius: 50%; + background: white; + } +} + +#plan, #level, #carrier, #single_issuer { + .col-xs-12 { + min-height:80px; + } + /* The container */ + .container { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + font-size: 16px; + color:$orange; + font-weight: bold; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + /* Hide the browser's default radio button */ + .container input { + position: absolute; + opacity: 0; + cursor: pointer; + } + + /* Create a custom radio button */ + .checkmark { + position: absolute; + top: 0; + left: 0; + height: 25px; + width: 25px; + background-color: #eee; + border-radius: 50%; + } + + /* On mouse-over, add a grey background color */ + .container:hover input ~ .checkmark { + background-color: #ccc; + } + + /* When the radio button is checked, add a blue background */ + .container input:checked ~ .checkmark { + background-color: $dark-blue; + } + + /* Create the indicator (the dot/circle - hidden when not checked) */ + .checkmark:after { + content: ""; + position: absolute; + display: none; + } + + /* Show the indicator (dot/circle) when checked */ + .container input:checked ~ .checkmark:after { + display: block; + } + + /* Style the indicator (dot/circle) */ + .container .checkmark:after { + top: 9px; + left: 9px; + width: 8px; + height: 8px; + border-radius: 50%; + background: white; + } +} +.default-orange { + color:$orange; +} +.open-enr-date-line-height { + line-height:1.1em; +} + +.agency-selected { + border: 2px solid $href; +} + +.broker-staff th { + text-align: center; +} + +.broker-staff td { + text-align: center; +} + +#submitBenefitPackage { + position: relative; + box-sizing: border-box; +} + +.benefit-properties { + .tool-tip { + display: inline-block; + } + + .tool-tip [disabled] { + pointer-events: none; + } +} + +.general-agency-staff th { + text-align: center; +} + +.general-agency-staff td { + text-align: center; +} diff --git a/app/javascript/client_config/me/stylesheets/ui-components/jquery-ui.scss.erb b/app/javascript/client_config/me/stylesheets/ui-components/jquery-ui.scss.erb new file mode 100644 index 00000000000..fbfccf1d043 --- /dev/null +++ b/app/javascript/client_config/me/stylesheets/ui-components/jquery-ui.scss.erb @@ -0,0 +1,1311 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #454545; +} +.ui-widget-content a { + color: #454545; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #454545; + font-weight: bold; +} +.ui-widget-header a { + color: #454545; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #454545; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #2b2b2b; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: var(--theme-primary-blue, #007fff); + font-weight: normal; + color: #ffffff; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #005e81; +} +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #005e81; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url('<%= image-url("ui-icons-main.png") %>'); +} +.ui-widget-header .ui-icon { + background-image: url('<%= image-url("ui-icons-main.png") %>'); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url('<%= image-url("ui-icons-second.png") %>'); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url('<%= image-url("ui-icons-light.png") %>'); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url('<%= image-url("ui-icons-dark.png") %>'); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url('<%= image-url("ui-icons-icons.png") %>'); +} +.ui-button .ui-icon { + background-image: url('<%= image-url("ui-icons-white.png") %>'); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; +} diff --git a/app/javascript/components/benefit_sponsors/application.js.erb b/app/javascript/components/benefit_sponsors/application.js.erb new file mode 100644 index 00000000000..a14b527bdb1 --- /dev/null +++ b/app/javascript/components/benefit_sponsors/application.js.erb @@ -0,0 +1,66 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require ui-components/components +//= require jquery-ui +//= require jquery.mask +//= require_tree . + +$(document).on('change', "input#jq_datepicker_ignore_benefit_application_open_enrollment_start_on", function() { + var date = $(this).val(); + if (check_dateformat(date) != true) { + $('.recommend #notice').html("

Open Enrollment Start Date: Invalid date format!

"); + } else { + $('.recommend #notice').html(""); + } +}); + +$(document).on('change', "input#jq_datepicker_ignore_benefit_application_open_enrollment_end_on", function() { + var date = $(this).val(); + if (check_dateformat(date) != true) { + $('.recommend #notice').html("

Open Enrollment End Date: Invalid date format!

"); + } else { + $('.recommend #notice').html(""); + } +}); + +$(document).on('change', "#benefit_application_start_on", function() { + if ($('.recommend #notice h4').text() == "Loading Suggested Dates...") { + return false; + } + + var start_on_date = $(this).val(); + if (start_on_date != "") { + $('.recommend #notice').html("

Loading Suggested Dates...

+ CKEditor Sample — clipboard plugin playground +

+
+

+ + +

+

+ + +

+

+ + +

+

+ + +

+

+ + +

+
+

Editor 6

+

Content content content.

+

Styled by .someClass.

+
+
+
+
+ + + diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/console.js b/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/console.js new file mode 100644 index 00000000000..6889bb01890 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/console.js @@ -0,0 +1,49 @@ +/** + * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/* global CKCONSOLE */ + +'use strict'; + +( function() { + var pasteType, pasteValue; + + CKCONSOLE.add( 'paste', { + panels: [ + { + type: 'box', + content: + '
    ' + + '
  • type:
  • ' + + '
  • value:
  • ' + + '
', + + refresh: function() { + return { + header: 'Paste', + type: pasteType, + value: pasteValue + }; + }, + + refreshOn: function( editor, refresh ) { + editor.on( 'paste', function( evt ) { + pasteType = evt.data.type; + pasteValue = CKEDITOR.tools.htmlEncode( evt.data.dataValue ); + refresh(); + } ); + } + }, + { + type: 'log', + on: function( editor, log, logFn ) { + editor.on( 'paste', function( evt ) { + logFn( 'paste; type:' + evt.data.type )(); + } ); + } + } + ] + } ); +} )(); diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/dnd.html b/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/dnd.html new file mode 100644 index 00000000000..281c03241a9 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/dnd.html @@ -0,0 +1,185 @@ + + + + + + Manual test for http://dev.ckeditor.com/ticket/11460 + + + + + + + +

+ Manual test for #11460 +

+

Description (hide/show)

+
+

Test internal D&D in the editor, dropping content from an external source (helpers, MS Word) and D&D between editors. Keep in mind that internal D&D is the most complex operation because editor have to handle two ranges at the same time.

+

Expected behavior:

+
    +
  • proper drop position,
  • +
  • in the internal and cross editor D&D: dragged content should be removed,
  • +
  • dropped content should be (more less) the same as dragged content,
  • +
  • paste event should be fired,
  • +
  • undo should work properly (one undo operation for one D&D),
  • +
  • no crashes, nor errors,
  • +
+

Drag scenarios:

+
    +
  • drag simple text,
  • +
  • drag table cell/cells,
  • +
  • drag link,
  • +
  • drag helpers textarea content,
  • +
  • drag helpers html content,
  • +
  • drag content from MS Word.
  • +
+

Drop scenarios:

+
    +
  • drop in the different paragraph (before and after),
  • +
  • drop in the same paragraph (before and after),
  • +
  • drop in the same text node (before and after),
  • +
  • drop between text lines,
  • +
  • drop on the whitespace next to the header,
  • +
  • drop on the whitespace on the left side from the quote,
  • +
  • drop into a cell.
  • +
+

Known issues (not part of this ticket):

+
    +
  • because of #11636 dragged content is not correct in some cases (e.g. when you drag part of the link),
  • +
  • drag position needs clean up after D&D (e.g. remove empty paragraphs, fix table),
  • +
  • drop position needs clean up after D&D (e.g. add spaces before/after dropped content, apply parents styles, break paragraph when one paragraph is dropped at the end to the other paragraph),
  • +
  • in the external D&D: Chrome add plenty of addition tags.
  • +
+
+
+

Helpers (hide/show)

+
+ +
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. In commodo vulputate tempor. Sed <b>at elit</b> vel ligula mollis aliquet a ac odio. +
+Aenean cursus egestas ipsum.
+				
+
+
+
+
+
+

Classic editor (hide/show)

+
+ +
+
+
+

Inline editor (hide/show)

+
+

Saturn V carrying Apollo 11 Apollo 11

+ +

Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

+ +

Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

+ +

Broadcasting and quotes

+ +

Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

+ +
+

One small step for [a] man, one giant leap for mankind.

+
+ +

Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

+ +
+

[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

+
+ +

Technical details

+ + + + + + + + + + + + + + + + + + + + + + + +
Mission crew
PositionAstronaut
CommanderNeil A. Armstrong
Command Module PilotMichael Collins
Lunar Module PilotEdwin "Buzz" E. Aldrin, Jr.
+ +

Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

+ +
    +
  1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
  2. +
  3. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
  4. +
  5. Lunar Module for landing on the Moon.
  6. +
+ +

After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

+ +
+

Source: Wikipedia.org

+
+
+ + + diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/copy-rtl.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/copy-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..ce94fc081658287b33b61c5f0b017d969554a104 GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CDO3=9p;3=BX21L>Cx45bDP46hOx7_4S6Fo@?*ia+WGRLhp+?e46e^9qTsrs68`&SvSdL02 zrX7)Z`8!T?>Gb4g)~Au5Hktb}D;O(3KRT1?w65p&k75T-|*?*`srJZ!XUJnj*or=eu^i%%n~7S(V#o3Ob#rQka)8@A=)5b+dkG zpM5iBcg~~zq5=n!g{-fJ7oSdlBKn8H_)TP2Q$jc|(9^0Vt`Q|Ei6yC4$wjF^iowXh z&`j6BT-VSt#L(Ev*ucufNZY{3%D_NkLU{#>hTQy=%(P0}8ZytGKLXUi;OXk;vd$@? F2>?2@w*~+J literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/copy.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..ce94fc081658287b33b61c5f0b017d969554a104 GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CDO3=9p;3=BX21L>Cx45bDP46hOx7_4S6Fo@?*ia+WGRLhp+?e46e^9qTsrs68`&SvSdL02 zrX7)Z`8!T?>Gb4g)~Au5Hktb}D;O(3KRT1?w65p&k75T-|*?*`srJZ!XUJnj*or=eu^i%%n~7S(V#o3Ob#rQka)8@A=)5b+dkG zpM5iBcg~~zq5=n!g{-fJ7oSdlBKn8H_)TP2Q$jc|(9^0Vt`Q|Ei6yC4$wjF^iowXh z&`j6BT-VSt#L(Ev*ucufNZY{3%D_NkLU{#>hTQy=%(P0}8ZytGKLXUi;OXk;vd$@? F2>?2@w*~+J literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/cut-rtl.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/cut-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae48d9a7ab05a4fc5d515ca50fd54ee14f59738 GIT binary patch literal 776 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CDO3=9p;3=BX21L>Cx45bDP46hOx7_4S6Fo@?*ia+WGRLhp+?e4T8vTzLJ%Nv2l=BK2BF^C}vL z_ZS^JVENotB|LP=l(^}_ii@Pr?X2g#`nohCyIhT_p`)Yt-L-!enoEDL`n6c7kc06I zPqGhd%FdX&`|l4|?fqACfmzUzV_}epVB^+r{+?zbqUS7Q*Iy59kWfzQ@z6}%8RHZx zZ~0u0v4TO~wI!*?#YO%0l$M$CXPy_Yc%^pi(2=OM-?$G{GlaXaWWSAmF4JR}VK$q8 z+mic9J^IqUZR^6c3lyze7((}6%i7A*P|Xn6D&WVpa`VkM!h*2^7vBmnF*@vx+rL>` z=yRI&Tt9mqF>ZzmKbP>Oh37-RW|&A#{Qggofv5d&@vHB@cMBPQF7$f2#Usf^E_nH6 z&He4%4CdQwD<=h2C7(82`AS?#NwD#|+}*tGpJsHt&^TXQ@qS_u6T=_Yj1G?CYb)%( z15<@+iEBhjN@7W>RdP`(kYX@0Ff`LOFxNG-3^6peGB&U>G14|LvNAA`m{4AUq9Hdw aB{QuOw}#BK=Z^q2FnGH9xvX!lvI6-E$sR$z z3=CDO3=9p;3=BX21L>Cx45bDP46hOx7_4S6Fo@?*ia+WGRLhp+?e4T8vTzLJ%Nv2l=BK2BF^C}vL z_ZS^JVENotB|LP=l(^}_ii@Pr?X2g#`nohCyIhT_p`)Yt-L-!enoEDL`n6c7kc06I zPqGhd%FdX&`|l4|?fqACfmzUzV_}epVB^+r{+?zbqUS7Q*Iy59kWfzQ@z6}%8RHZx zZ~0u0v4TO~wI!*?#YO%0l$M$CXPy_Yc%^pi(2=OM-?$G{GlaXaWWSAmF4JR}VK$q8 z+mic9J^IqUZR^6c3lyze7((}6%i7A*P|Xn6D&WVpa`VkM!h*2^7vBmnF*@vx+rL>` z=yRI&Tt9mqF>ZzmKbP>Oh37-RW|&A#{Qggofv5d&@vHB@cMBPQF7$f2#Usf^E_nH6 z&He4%4CdQwD<=h2C7(82`AS?#NwD#|+}*tGpJsHt&^TXQ@qS_u6T=_Yj1G?CYb)%( z15<@+iEBhjN@7W>RdP`(kYX@0Ff`LOFxNG-3^6peGB&U>G14|LvNAA`m{4AUq9Hdw aB{QuOw}#BK=Z^q2FnGH9xvXNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zUgGKN%Km_xiC2-KneQA20|Vo4PZ!6Kh{H$2&*mL6;Mq3!Q;J8&^qZ;2gED6?`*uw4 z_F;v%wQKh>droJ2&VTHir=Y;~lh5`0vJ3X#Z*FB^=-^Oz^l7I=^Ur0O^PW}y`}9`P zZ@KUj2PLL|1qHKzezxl@l(FwMe7|r$zy1yj##FxI_lrmgMFJGx5(0fAm zq=~Ps(l@hT*M8T@GuAiWNm9Bbcu_&=z!_b^uc~!{Oo^AKHq7KdHiMBNVczp;9d>u3 zmUcbJ+g|)>*Ya?kL#_gaim!59z8pHUe%5~ZDP`JWTp7+2G$vJ+u}Lli7Rt;dGls-?q!pcUY?=l+xGZk*azgR8^GN!x!c5v}-#qRVz8wt=ew>Vlx+(w09jVHml5=%#{(Uvn8{0rc$E$ zyX1eXRknC;yOZiNBc5e?NuUEp~Y?=Q#gQV(Mh^`PaTC zcD+~Q2I)&yOG2Jr=D054u-4@HGbd4}t^Z6ow=Vw0ruCoQchP}O?!c6xTH+c}l9E`G zYL#4+3Zxi}3=GY54Gnb-j6w{Jt&EMW3=Fgl41wfz#x-wIH00)|WTsW(*03x_BoL^9 N!PC{xWt~$(69A&kFRB0l literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/copy.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..74c676563721cae8a7d6d1b68ba4db0b43ae385e GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zUgGKN%Km_xiC2-KneQA20|Vo4PZ!6Kh{H$2&*mL6;Mq3!Q;J8&^qZ;2gED6?`*uw4 z_F;v%wQKh>droJ2&VTHir=Y;~lh5`0vJ3X#Z*FB^=-^Oz^l7I=^Ur0O^PW}y`}9`P zZ@KUj2PLL|1qHKzezxl@l(FwMe7|r$zy1yj##FxI_lrmgMFJGx5(0fAm zq=~Ps(l@hT*M8T@GuAiWNm9Bbcu_&=z!_b^uc~!{Oo^AKHq7KdHiMBNVczp;9d>u3 zmUcbJ+g|)>*Ya?kL#_gaim!59z8pHUe%5~ZDP`JWTp7+2G$vJ+u}Lli7Rt;dGls-?q!pcUY?=l+xGZk*azgR8^GN!x!c5v}-#qRVz8wt=ew>Vlx+(w09jVHml5=%#{(Uvn8{0rc$E$ zyX1eXRknC;yOZiNBc5e?NuUEp~Y?=Q#gQV(Mh^`PaTC zcD+~Q2I)&yOG2Jr=D054u-4@HGbd4}t^Z6ow=Vw0ruCoQchP}O?!c6xTH+c}l9E`G zYL#4+3Zxi}3=GY54Gnb-j6w{Jt&EMW3=Fgl41wfz#x-wIH00)|WTsW(*03x_BoL^9 N!PC{xWt~$(69A&kFRB0l literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/cut-rtl.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/cut-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a9b0da7954fed7d925972e54c43e87dac9e1f2 GIT binary patch literal 1576 zcmZ{kYgE#A9L9enUcxAtt7%w?nbQsOk9Z-qCI%BMO#fOkrDhS{n3obPR5r?6t&3$y znwPBQsEKplQbSClwW&mNUNNV(Ji0Qbo0=9nM=$qc=X<`-=bYy`&)es0NN^w;wGjmX zKrAg@tQ($pqPaqAfyt@jO{EEr36fjwI%Q5R!XgtVTtFr>YoWP_}!`Ye( z5&Poo_uH?^s%|U(Kc_-(Wf8b1k%?_^}(2(#?MCR^*iW+?kt< zzOPSWD>u*mB1^i6j-+DtbVqettfMQL&Sd3pWuohOt=?@SU;S&f`%0T=blNDsKW&Uz zt&3!{T{t$_BE6>>mKt=nxY$lnQ)32-?D%~CpkA+zh9odbTY7&VEoUn@`RAj+i}q>_ z0gv>1vip5{vuM^CRP?-vPEKAIe{Dk7CHdg>G4z@vv&zgj?%9|oxm=#J2@PB-F?8$$ zh-RBRI5ZT{^pq~+wQM3kA5mq1b{iX;JWj~?Dl5$|s>a7!RvF6i=BmQGTk%M3s>Z*- z>2_a&!cf@t7Gt)pD&8K`UG2e2O_RbqFwetX3&|-f|A>31=5gOF?S#y|c-qVc_)aDT zRlR(u`aniraejX9ue+fXO^1BYJPso>xa>WCjwlUAPt$2AP9Hb+hq7Yum|iXHWSg5y9RrbbJ^K zcMev62crpYZd}N=;{0*^L${zic6mAW4KOO;%+l?Mk<3>gkp?u+RWC#t^|z!m z;w@EGRhl&lg<@Re)K&Luu}*tC{G+PnFIS?-h{W#CCa;5&eK8e;gKy&eM1LQ}4;4_Q zlb+0iEr!)`{uo=ozoVXv{BPC3N6!}xbd)R|@S(IbHBdzha{s(FXwz!#(=_G_M zXxA>C*8bXSeoaE-+cs$(#uckx5Z{Wwmmmx%3BBypah*1I1R;UHo1r2=`Q&nzxwzJNn9{=_e?*77{mv!j9xl{+*ILZB%55?Aqzi*%8+KOR@(5E<0VB@)uv1+@oCl z%JXh&YHH2kSm~pF9io{FU+qd<{-W%R&XNj+-U%=7ORxYQ8!yayQGhKDXC~QcnBhA5 zczb&GIo$kgc02Y)&x=ec-(iiWbaQ>EyoXw^xA*J}Hfs*)_m;vlel-Giym3Fcidr+s zjhF&}Vf9y8PeBG1v)8OS+Sk)qq!Oe=*k3Tr8J7c#cTC%e@VNC#GluK@X++=Dd`MLv zhTa|WlORJi!o`A{E)NzLDcP7D?B|P)k&%&|lM-XoQ2*IIvHAwWjaDe?mFgd}AH!Q7 zOvpZFo2GP|fX)^iJuKk)aF6p$0PYaUi%237A@^_+*@sN_fuN5el1T>;3d4U2iOEOf YV?_U7_?Gj2sHp&$^kCZe0nw-b1?1(mwEzGB literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/cut.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/cut.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a9b0da7954fed7d925972e54c43e87dac9e1f2 GIT binary patch literal 1576 zcmZ{kYgE#A9L9enUcxAtt7%w?nbQsOk9Z-qCI%BMO#fOkrDhS{n3obPR5r?6t&3$y znwPBQsEKplQbSClwW&mNUNNV(Ji0Qbo0=9nM=$qc=X<`-=bYy`&)es0NN^w;wGjmX zKrAg@tQ($pqPaqAfyt@jO{EEr36fjwI%Q5R!XgtVTtFr>YoWP_}!`Ye( z5&Poo_uH?^s%|U(Kc_-(Wf8b1k%?_^}(2(#?MCR^*iW+?kt< zzOPSWD>u*mB1^i6j-+DtbVqettfMQL&Sd3pWuohOt=?@SU;S&f`%0T=blNDsKW&Uz zt&3!{T{t$_BE6>>mKt=nxY$lnQ)32-?D%~CpkA+zh9odbTY7&VEoUn@`RAj+i}q>_ z0gv>1vip5{vuM^CRP?-vPEKAIe{Dk7CHdg>G4z@vv&zgj?%9|oxm=#J2@PB-F?8$$ zh-RBRI5ZT{^pq~+wQM3kA5mq1b{iX;JWj~?Dl5$|s>a7!RvF6i=BmQGTk%M3s>Z*- z>2_a&!cf@t7Gt)pD&8K`UG2e2O_RbqFwetX3&|-f|A>31=5gOF?S#y|c-qVc_)aDT zRlR(u`aniraejX9ue+fXO^1BYJPso>xa>WCjwlUAPt$2AP9Hb+hq7Yum|iXHWSg5y9RrbbJ^K zcMev62crpYZd}N=;{0*^L${zic6mAW4KOO;%+l?Mk<3>gkp?u+RWC#t^|z!m z;w@EGRhl&lg<@Re)K&Luu}*tC{G+PnFIS?-h{W#CCa;5&eK8e;gKy&eM1LQ}4;4_Q zlb+0iEr!)`{uo=ozoVXv{BPC3N6!}xbd)R|@S(IbHBdzha{s(FXwz!#(=_G_M zXxA>C*8bXSeoaE-+cs$(#uckx5Z{Wwmmmx%3BBypah*1I1R;UHo1r2=`Q&nzxwzJNn9{=_e?*77{mv!j9xl{+*ILZB%55?Aqzi*%8+KOR@(5E<0VB@)uv1+@oCl z%JXh&YHH2kSm~pF9io{FU+qd<{-W%R&XNj+-U%=7ORxYQ8!yayQGhKDXC~QcnBhA5 zczb&GIo$kgc02Y)&x=ec-(iiWbaQ>EyoXw^xA*J}Hfs*)_m;vlel-Giym3Fcidr+s zjhF&}Vf9y8PeBG1v)8OS+Sk)qq!Oe=*k3Tr8J7c#cTC%e@VNC#GluK@X++=Dd`MLv zhTa|WlORJi!o`A{E)NzLDcP7D?B|P)k&%&|lM-XoQ2*IIvHAwWjaDe?mFgd}AH!Q7 zOvpZFo2GP|fX)^iJuKk)aF6p$0PYaUi%237A@^_+*@sN_fuN5el1T>;3d4U2iOEOf YV?_U7_?Gj2sHp&$^kCZe0nw-b1?1(mwEzGB literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/paste-rtl.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/paste-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..12cac92aab8bbe539077ea5aaec3442281e18a7a GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zUgGKN%Km_xiC2-KneQA20|Qf(r;B4q#NoB!2ea-N2-GTDe!KXu#p$JLKvj;y+d{=H zZ{BaSpWs}?y_dyn;TQfr=K9;xt2)vpPhVQMXE*bqO-m~MtBfb*+{)W7Ajr_rq2qO= zPUs>tgMsm!;`YLOzva*TiDl2S7S!$9CO+*2%f?&HVRMSv6&NIre~dn*+4^!urQ@F4 zZy6r2HfUHh*fXdsouVk9^eb0QgCS1s%*~3ldD;vNxwjW(N^M-_^G$B1nv%SU%jMt8 zcdc8R8@=kalu}VZ?m~ylCjMu5((2y+p4TU+*_d=>iCkMF!=5gVSG(#qtxiwd!SNzp zsj1`6y*qbqtgBaSeAZCRH@V;L|En2`Gz|J4uT5&NX`OmlZOV5$ncwHW9Y6E!Y|6Yc zuQS^_PEKQr%~s6oIlh*4XG+Zu38kvw2eT$`NOnFHao>|wFS7Q7U+~QNEtU?`pE;h2 zcR3gI;NRKsBX(N_0=MMdKDB92_=cq1NsJXCp=b8>uM)SOR5lNvJC#!q89?hzcGzblwS=GRPfnkz+RL)t!3rSrFolXFlC2syrFmXW@+q{19jK^-%g5L zBzC$nonghQSK-%7FKU~We!HE0?OJkIW@Jl(M4R>dy$nAhLZ_zsADyLBV6igzVWh@` zz1RI;KEHCXsCVvyuoe}UmPHy25A@1ZW^Y@4=8$IQx~Zu@O+%EvuAZiK=Figw4tg84 zu73afF!|9P|E)J8nHXlDP209;gWSJ@7R8-M{xSRK3tuwn5;+4*c&a6?5hW>!C8<`) zMX5lF!N|bSOxMs**T5*m(Adh@*vh~_+rSV=UT0kM7DYpDeoAIqC2kGNVnhOg8W=oX L{an^LB{Ts5yDewu literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/paste.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/hidpi/paste.png new file mode 100644 index 0000000000000000000000000000000000000000..12cac92aab8bbe539077ea5aaec3442281e18a7a GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zUgGKN%Km_xiC2-KneQA20|Qf(r;B4q#NoB!2ea-N2-GTDe!KXu#p$JLKvj;y+d{=H zZ{BaSpWs}?y_dyn;TQfr=K9;xt2)vpPhVQMXE*bqO-m~MtBfb*+{)W7Ajr_rq2qO= zPUs>tgMsm!;`YLOzva*TiDl2S7S!$9CO+*2%f?&HVRMSv6&NIre~dn*+4^!urQ@F4 zZy6r2HfUHh*fXdsouVk9^eb0QgCS1s%*~3ldD;vNxwjW(N^M-_^G$B1nv%SU%jMt8 zcdc8R8@=kalu}VZ?m~ylCjMu5((2y+p4TU+*_d=>iCkMF!=5gVSG(#qtxiwd!SNzp zsj1`6y*qbqtgBaSeAZCRH@V;L|En2`Gz|J4uT5&NX`OmlZOV5$ncwHW9Y6E!Y|6Yc zuQS^_PEKQr%~s6oIlh*4XG+Zu38kvw2eT$`NOnFHao>|wFS7Q7U+~QNEtU?`pE;h2 zcR3gI;NRKsBX(N_0=MMdKDB92_=cq1NsJXCp=b8>uM)SOR5lNvJC#!q89?hzcGzblwS=GRPfnkz+RL)t!3rSrFolXFlC2syrFmXW@+q{19jK^-%g5L zBzC$nonghQSK-%7FKU~We!HE0?OJkIW@Jl(M4R>dy$nAhLZ_zsADyLBV6igzVWh@` zz1RI;KEHCXsCVvyuoe}UmPHy25A@1ZW^Y@4=8$IQx~Zu@O+%EvuAZiK=Figw4tg84 zu73afF!|9P|E)J8nHXlDP209;gWSJ@7R8-M{xSRK3tuwn5;+4*c&a6?5hW>!C8<`) zMX5lF!N|bSOxMs**T5*m(Adh@*vh~_+rSV=UT0kM7DYpDeoAIqC2kGNVnhOg8W=oX L{an^LB{Ts5yDewu literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/paste-rtl.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/paste-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..7039251b8cb48e7e9538446e1dea78bed26f33cd GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CDO3=9p;3=BX21L>Cx45bDP46hOx7_4S6Fo@?*ia+WGRLhp+?e4GCT9}yJnT8 zQ{uWlGdgIhs+_#rzB5ngm_+{py_O3~N-YgbYI{D~2v#oK>2=7c_^9xKrCASyb#(t; zS2m(fiNCA#_<@1KpjzS@QIe8al4_M) zlnSI6j0_CTbPddP4J|_qjjfCgtW1ow4UDV|3?wF$SDcptHiA#^X&N}Kn)C@ Lu6{1-oD!M<`0Adx literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/paste.png b/app/javascript/components/notifier/ckeditor/plugins/clipboard/icons/paste.png new file mode 100644 index 0000000000000000000000000000000000000000..7039251b8cb48e7e9538446e1dea78bed26f33cd GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CDO3=9p;3=BX21L>Cx45bDP46hOx7_4S6Fo@?*ia+WGRLhp+?e4GCT9}yJnT8 zQ{uWlGdgIhs+_#rzB5ngm_+{py_O3~N-YgbYI{D~2v#oK>2=7c_^9xKrCASyb#(t; zS2m(fiNCA#_<@1KpjzS@QIe8al4_M) zlnSI6j0_CTbPddP4J|_qjjfCgtW1ow4UDV|3?wF$SDcptHiA#^X&N}Kn)C@ Lu6{1-oD!M<`0Adx literal 0 HcmV?d00001 diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/lang/en.js b/app/javascript/components/notifier/ckeditor/plugins/clipboard/lang/en.js new file mode 100644 index 00000000000..9ea48a4d6e9 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/clipboard/lang/en.js @@ -0,0 +1,12 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'clipboard', 'en', { + copy: 'Copy', + copyError: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).', + cut: 'Cut', + cutError: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).', + paste: 'Paste', + pasteNotification: 'Your browser doesn\'t allow you to paste this way. Press %1 to paste.' +} ); diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/plugin.js b/app/javascript/components/notifier/ckeditor/plugins/clipboard/plugin.js new file mode 100644 index 00000000000..65d4fea2142 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/clipboard/plugin.js @@ -0,0 +1,2780 @@ +/** + * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * @ignore + * File overview: Clipboard support. + */ + +// +// COPY & PASTE EXECUTION FLOWS: +// -- CTRL+C +// * if ( isCustomCopyCutSupported ) +// * dataTransfer.setData( 'text/html', getSelectedHtml ) +// * else +// * browser's default behavior +// -- CTRL+X +// * listen onKey (onkeydown) +// * fire 'saveSnapshot' on editor +// * if ( isCustomCopyCutSupported ) +// * dataTransfer.setData( 'text/html', getSelectedHtml ) +// * extractSelectedHtml // remove selected contents +// * else +// * browser's default behavior +// * deferred second 'saveSnapshot' event +// -- CTRL+V +// * listen onKey (onkeydown) +// * simulate 'beforepaste' for non-IEs on editable +// * listen 'onpaste' on editable ('onbeforepaste' for IE) +// * fire 'beforePaste' on editor +// * if ( !canceled && ( htmlInDataTransfer || !external paste) && dataTransfer is not empty ) getClipboardDataByPastebin +// * fire 'paste' on editor +// * !canceled && fire 'afterPaste' on editor +// -- Copy command +// * tryToCutCopy +// * execCommand +// * !success && notification +// -- Cut command +// * fixCut +// * tryToCutCopy +// * execCommand +// * !success && notification +// -- Paste command +// * fire 'paste' on editable ('beforepaste' for IE) +// * !canceled && execCommand 'paste' +// -- Paste from native context menu & menubar +// (Fx & Webkits are handled in 'paste' default listener. +// Opera cannot be handled at all because it doesn't fire any events +// Special treatment is needed for IE, for which is this part of doc) +// * listen 'onpaste' +// * cancel native event +// * fire 'beforePaste' on editor +// * if ( !canceled && ( htmlInDataTransfer || !external paste) && dataTransfer is not empty ) getClipboardDataByPastebin +// * execIECommand( 'paste' ) -> this fires another 'paste' event, so cancel it +// * fire 'paste' on editor +// * !canceled && fire 'afterPaste' on editor +// +// +// PASTE EVENT - PREPROCESSING: +// -- Possible dataValue types: auto, text, html. +// -- Possible dataValue contents: +// * text (possible \n\r) +// * htmlified text (text + br,div,p - no presentational markup & attrs - depends on browser) +// * html +// -- Possible flags: +// * htmlified - if true then content is a HTML even if no markup inside. This flag is set +// for content from editable pastebins, because they 'htmlify' pasted content. +// +// -- Type: auto: +// * content: htmlified text -> filter, unify text markup (brs, ps, divs), set type: text +// * content: html -> filter, set type: html +// -- Type: text: +// * content: htmlified text -> filter, unify text markup +// * content: html -> filter, strip presentational markup, unify text markup +// -- Type: html: +// * content: htmlified text -> filter, unify text markup +// * content: html -> filter +// +// -- Phases: +// * if dataValue is empty copy data from dataTransfer to dataValue (priority 1) +// * filtering (priorities 3-5) - e.g. pastefromword filters +// * content type sniffing (priority 6) +// * markup transformations for text (priority 6) +// +// DRAG & DROP EXECUTION FLOWS: +// -- Drag +// * save to the global object: +// * drag timestamp (with 'cke-' prefix), +// * selected html, +// * drag range, +// * editor instance. +// * put drag timestamp into event.dataTransfer.text +// -- Drop +// * if events text == saved timestamp && editor == saved editor +// internal drag & drop occurred +// * getRangeAtDropPosition +// * create bookmarks for drag and drop ranges starting from the end of the document +// * dragRange.deleteContents() +// * fire 'paste' with saved html and drop range +// * if events text == saved timestamp && editor != saved editor +// cross editor drag & drop occurred +// * getRangeAtDropPosition +// * fire 'paste' with saved html +// * dragRange.deleteContents() +// * FF: refreshCursor on afterPaste +// * if events text != saved timestamp +// drop form external source occurred +// * getRangeAtDropPosition +// * if event contains html data then fire 'paste' with html +// * else if event contains text data then fire 'paste' with encoded text +// * FF: refreshCursor on afterPaste + +'use strict'; + +( function() { + // Register the plugin. + CKEDITOR.plugins.add( 'clipboard', { + requires: 'notification', + // jscs:disable maximumLineLength + lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,oc,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% + // jscs:enable maximumLineLength + icons: 'copy,copy-rtl,cut,cut-rtl,paste,paste-rtl', // %REMOVE_LINE_CORE% + hidpi: true, // %REMOVE_LINE_CORE% + init: function( editor ) { + var filterType, + filtersFactory = filtersFactoryFactory(); + + if ( editor.config.forcePasteAsPlainText ) { + filterType = 'plain-text'; + } else if ( editor.config.pasteFilter ) { + filterType = editor.config.pasteFilter; + } + // On Webkit the pasteFilter defaults 'semantic-content' because pasted data is so terrible + // that it must be always filtered. + else if ( CKEDITOR.env.webkit && !( 'pasteFilter' in editor.config ) ) { + filterType = 'semantic-content'; + } + + editor.pasteFilter = filtersFactory.get( filterType ); + + initPasteClipboard( editor ); + initDragDrop( editor ); + + // Convert image file (if present) to base64 string for Firefox. Do it as the first + // step as the conversion is asynchronous and should hold all further paste processing. + if ( CKEDITOR.env.gecko ) { + var supportedImageTypes = [ 'image/png', 'image/jpeg', 'image/gif' ], + latestId; + + editor.on( 'paste', function( evt ) { + var dataObj = evt.data, + data = dataObj.dataValue, + dataTransfer = dataObj.dataTransfer; + + // If data empty check for image content inside data transfer. http://dev.ckeditor.com/ticket/16705 + if ( !data && dataObj.method == 'paste' && dataTransfer && dataTransfer.getFilesCount() == 1 && latestId != dataTransfer.id ) { + var file = dataTransfer.getFile( 0 ); + + if ( CKEDITOR.tools.indexOf( supportedImageTypes, file.type ) != -1 ) { + var fileReader = new FileReader(); + + // Convert image file to img tag with base64 image. + fileReader.addEventListener( 'load', function() { + evt.data.dataValue = ''; + editor.fire( 'paste', evt.data ); + }, false ); + + // Proceed with normal flow if reading file was aborted. + fileReader.addEventListener( 'abort', function() { + editor.fire( 'paste', evt.data ); + }, false ); + + // Proceed with normal flow if reading file failed. + fileReader.addEventListener( 'error', function() { + editor.fire( 'paste', evt.data ); + }, false ); + + fileReader.readAsDataURL( file ); + + latestId = dataObj.dataTransfer.id; + + evt.stop(); + } + } + }, null, null, 1 ); + } + + editor.on( 'paste', function( evt ) { + // Init `dataTransfer` if `paste` event was fired without it, so it will be always available. + if ( !evt.data.dataTransfer ) { + evt.data.dataTransfer = new CKEDITOR.plugins.clipboard.dataTransfer(); + } + + // If dataValue is already set (manually or by paste bin), so do not override it. + if ( evt.data.dataValue ) { + return; + } + + var dataTransfer = evt.data.dataTransfer, + // IE support only text data and throws exception if we try to get html data. + // This html data object may also be empty if we drag content of the textarea. + value = dataTransfer.getData( 'text/html' ); + + if ( value ) { + evt.data.dataValue = value; + evt.data.type = 'html'; + } else { + // Try to get text data otherwise. + value = dataTransfer.getData( 'text/plain' ); + + if ( value ) { + evt.data.dataValue = editor.editable().transformPlainTextToHtml( value ); + evt.data.type = 'text'; + } + } + }, null, null, 1 ); + + editor.on( 'paste', function( evt ) { + var data = evt.data.dataValue, + blockElements = CKEDITOR.dtd.$block; + + // Filter webkit garbage. + if ( data.indexOf( 'Apple-' ) > -1 ) { + // Replace special webkit's   with simple space, because webkit + // produces them even for normal spaces. + data = data.replace( / <\/span>/gi, ' ' ); + + // Strip around white-spaces when not in forced 'html' content type. + // This spans are created only when pasting plain text into Webkit, + // but for safety reasons remove them always. + if ( evt.data.type != 'html' ) { + data = data.replace( /]*>([^<]*)<\/span>/gi, function( all, spaces ) { + // Replace tabs with 4 spaces like Fx does. + return spaces.replace( /\t/g, '    ' ); + } ); + } + + // This br is produced only when copying & pasting HTML content. + if ( data.indexOf( '
' ) > -1 ) { + evt.data.startsWithEOL = 1; + evt.data.preSniffing = 'html'; // Mark as not text. + data = data.replace( /
/, '' ); + } + + // Remove all other classes. + data = data.replace( /(<[^>]+) class="Apple-[^"]*"/gi, '$1' ); + } + + // Strip editable that was copied from inside. (http://dev.ckeditor.com/ticket/9534) + if ( data.match( /^<[^<]+cke_(editable|contents)/i ) ) { + var tmp, + editable_wrapper, + wrapper = new CKEDITOR.dom.element( 'div' ); + + wrapper.setHtml( data ); + // Verify for sure and check for nested editor UI parts. (http://dev.ckeditor.com/ticket/9675) + while ( wrapper.getChildCount() == 1 && + ( tmp = wrapper.getFirst() ) && + tmp.type == CKEDITOR.NODE_ELEMENT && // Make sure first-child is element. + ( tmp.hasClass( 'cke_editable' ) || tmp.hasClass( 'cke_contents' ) ) ) { + wrapper = editable_wrapper = tmp; + } + + // If editable wrapper was found strip it and bogus
(added on FF). + if ( editable_wrapper ) + data = editable_wrapper.getHtml().replace( /
$/i, '' ); + } + + if ( CKEDITOR.env.ie ) { + //  

->

(br.cke-pasted-remove will be removed later) + data = data.replace( /^ (?: |\r\n)?<(\w+)/g, function( match, elementName ) { + if ( elementName.toLowerCase() in blockElements ) { + evt.data.preSniffing = 'html'; // Mark as not a text. + return '<' + elementName; + } + return match; + } ); + } else if ( CKEDITOR.env.webkit ) { + //


->


+ // We don't mark br, because this situation can happen for htmlified text too. + data = data.replace( /<\/(\w+)>

<\/div>$/, function( match, elementName ) { + if ( elementName in blockElements ) { + evt.data.endsWithEOL = 1; + return ''; + } + return match; + } ); + } else if ( CKEDITOR.env.gecko ) { + // Firefox adds bogus
when user pasted text followed by space(s). + data = data.replace( /(\s)
$/, '$1' ); + } + + evt.data.dataValue = data; + }, null, null, 3 ); + + editor.on( 'paste', function( evt ) { + var dataObj = evt.data, + type = editor._.nextPasteType || dataObj.type, + data = dataObj.dataValue, + trueType, + // Default is 'html'. + defaultType = editor.config.clipboard_defaultContentType || 'html', + transferType = dataObj.dataTransfer.getTransferType( editor ); + + // If forced type is 'html' we don't need to know true data type. + if ( type == 'html' || dataObj.preSniffing == 'html' ) { + trueType = 'html'; + } else { + trueType = recogniseContentType( data ); + } + + delete editor._.nextPasteType; + + // Unify text markup. + if ( trueType == 'htmlifiedtext' ) { + data = htmlifiedTextHtmlification( editor.config, data ); + } + + // Strip presentational markup & unify text markup. + // Forced plain text. + // Note: we do not check dontFilter option in this case, because forcePAPT was implemented + // before pasteFilter and pasteFilter is automatically used on Webkit&Blink since 4.5, so + // forcePAPT should have priority as it had before 4.5. + if ( type == 'text' && trueType == 'html' ) { + data = filterContent( editor, data, filtersFactory.get( 'plain-text' ) ); + } + // External paste and pasteFilter exists and filtering isn't disabled. + else if ( transferType == CKEDITOR.DATA_TRANSFER_EXTERNAL && editor.pasteFilter && !dataObj.dontFilter ) { + data = filterContent( editor, data, editor.pasteFilter ); + } + + if ( dataObj.startsWithEOL ) { + data = '
' + data; + } + if ( dataObj.endsWithEOL ) { + data += '
'; + } + + if ( type == 'auto' ) { + type = ( trueType == 'html' || defaultType == 'html' ) ? 'html' : 'text'; + } + + dataObj.type = type; + dataObj.dataValue = data; + delete dataObj.preSniffing; + delete dataObj.startsWithEOL; + delete dataObj.endsWithEOL; + }, null, null, 6 ); + + // Inserts processed data into the editor at the end of the + // events chain. + editor.on( 'paste', function( evt ) { + var data = evt.data; + + if ( data.dataValue ) { + editor.insertHtml( data.dataValue, data.type, data.range ); + + // Defer 'afterPaste' so all other listeners for 'paste' will be fired first. + // Fire afterPaste only if paste inserted some HTML. + setTimeout( function() { + editor.fire( 'afterPaste' ); + }, 0 ); + } + }, null, null, 1000 ); + } + } ); + + function firePasteEvents( editor, data, withBeforePaste ) { + if ( !data.type ) { + data.type = 'auto'; + } + + if ( withBeforePaste ) { + // Fire 'beforePaste' event so clipboard flavor get customized + // by other plugins. + if ( editor.fire( 'beforePaste', data ) === false ) + return false; // Event canceled + } + + // Do not fire paste if there is no data (dataValue and dataTranfser are empty). + // This check should be done after firing 'beforePaste' because for native paste + // 'beforePaste' is by default fired even for empty clipboard. + if ( !data.dataValue && data.dataTransfer.isEmpty() ) { + return false; + } + + if ( !data.dataValue ) { + data.dataValue = ''; + } + + // Because of FF bug we need to use this hack, otherwise cursor is hidden + // or it is not possible to move it (http://dev.ckeditor.com/ticket/12420). + // Also, check that editor.toolbox exists, because the toolbar plugin might not be loaded (http://dev.ckeditor.com/ticket/13305). + if ( CKEDITOR.env.gecko && data.method == 'drop' && editor.toolbox ) { + editor.once( 'afterPaste', function() { + editor.toolbox.focus(); + } ); + } + + return editor.fire( 'paste', data ); + } + + function initPasteClipboard( editor ) { + var clipboard = CKEDITOR.plugins.clipboard, + preventBeforePasteEvent = 0, + preventPasteEvent = 0, + inReadOnly = 0; + + addListeners(); + addButtonsCommands(); + + /** + * Gets clipboard data by directly accessing the clipboard (IE only). + * + * editor.getClipboardData( function( data ) { + * if ( data ) + * alert( data.type + ' ' + data.dataValue ); + * } ); + * + * @member CKEDITOR.editor + * @param {Function/Object} callbackOrOptions For function, see the `callback` parameter documentation. The object was used before 4.7.0 with the `title` property, to set the paste dialog's title. + * @param {Function} callback A function that will be executed with the `data` property of the + * {@link CKEDITOR.editor#event-paste paste event} or `null` if none of the capturing methods succeeded. + * Since 4.7.0 the `callback` should be provided as a first argument, just like in the example above. This parameter will be removed in + * an upcoming major release. + */ + editor.getClipboardData = function( callbackOrOptions, callback ) { + // Options are optional - args shift. + if ( !callback ) { + callback = callbackOrOptions; + callbackOrOptions = null; + } + + // Listen with maximum priority to handle content before everyone else. + // This callback will handle paste event that will be fired if direct + // access to the clipboard succeed in IE. + editor.on( 'paste', onPaste, null, null, 0 ); + + // If command didn't succeed (only IE allows to access clipboard and only if + // user agrees) invoke callback with null, meaning that paste is not blocked. + if ( getClipboardDataDirectly() === false ) { + // Direct access to the clipboard wasn't successful so remove listener. + editor.removeListener( 'paste', onPaste ); + + callback( null ); + } + + function onPaste( evt ) { + evt.removeListener(); + evt.cancel(); + callback( evt.data ); + } + }; + + function addButtonsCommands() { + addButtonCommand( 'Cut', 'cut', createCutCopyCmd( 'cut' ), 10, 1 ); + addButtonCommand( 'Copy', 'copy', createCutCopyCmd( 'copy' ), 20, 4 ); + addButtonCommand( 'Paste', 'paste', createPasteCmd(), 30, 8 ); + + function addButtonCommand( buttonName, commandName, command, toolbarOrder, ctxMenuOrder ) { + var lang = editor.lang.clipboard[ commandName ]; + + editor.addCommand( commandName, command ); + editor.ui.addButton && editor.ui.addButton( buttonName, { + label: lang, + command: commandName, + toolbar: 'clipboard,' + toolbarOrder + } ); + + // If the "menu" plugin is loaded, register the menu item. + if ( editor.addMenuItems ) { + editor.addMenuItem( commandName, { + label: lang, + command: commandName, + group: 'clipboard', + order: ctxMenuOrder + } ); + } + } + } + + function addListeners() { + editor.on( 'key', onKey ); + editor.on( 'contentDom', addPasteListenersToEditable ); + + // For improved performance, we're checking the readOnly state on selectionChange instead of hooking a key event for that. + editor.on( 'selectionChange', function( evt ) { + inReadOnly = evt.data.selection.getRanges()[ 0 ].checkReadOnly(); + setToolbarStates(); + } ); + + // If the "contextmenu" plugin is loaded, register the listeners. + if ( editor.contextMenu ) { + editor.contextMenu.addListener( function( element, selection ) { + inReadOnly = selection.getRanges()[ 0 ].checkReadOnly(); + return { + cut: stateFromNamedCommand( 'cut' ), + copy: stateFromNamedCommand( 'copy' ), + paste: stateFromNamedCommand( 'paste' ) + }; + } ); + } + } + + // Add events listeners to editable. + function addPasteListenersToEditable() { + var editable = editor.editable(); + + if ( CKEDITOR.plugins.clipboard.isCustomCopyCutSupported ) { + var initOnCopyCut = function( evt ) { + // If user tries to cut in read-only editor, we must prevent default action. (http://dev.ckeditor.com/ticket/13872) + if ( !editor.readOnly || evt.name != 'cut' ) { + clipboard.initPasteDataTransfer( evt, editor ); + } + evt.data.preventDefault(); + }; + + editable.on( 'copy', initOnCopyCut ); + editable.on( 'cut', initOnCopyCut ); + + // Delete content with the low priority so one can overwrite cut data. + editable.on( 'cut', function() { + // If user tries to cut in read-only editor, we must prevent default action. (http://dev.ckeditor.com/ticket/13872) + if ( !editor.readOnly ) { + editor.extractSelectedHtml(); + } + }, null, null, 999 ); + } + + // We'll be catching all pasted content in one line, regardless of whether + // it's introduced by a document command execution (e.g. toolbar buttons) or + // user paste behaviors (e.g. CTRL+V). + editable.on( clipboard.mainPasteEvent, function( evt ) { + if ( clipboard.mainPasteEvent == 'beforepaste' && preventBeforePasteEvent ) { + return; + } + + // If you've just asked yourself why preventPasteEventNow() is not here, but + // in listener for CTRL+V and exec method of 'paste' command + // you've asked the same question we did. + // + // THE ANSWER: + // + // First thing to notice - this answer makes sense only for IE, + // because other browsers don't listen for 'paste' event. + // + // What would happen if we move preventPasteEventNow() here? + // For: + // * CTRL+V - IE fires 'beforepaste', so we prevent 'paste' and pasteDataFromClipboard(). OK. + // * editor.execCommand( 'paste' ) - we fire 'beforepaste', so we prevent + // 'paste' and pasteDataFromClipboard() and doc.execCommand( 'Paste' ). OK. + // * native context menu - IE fires 'beforepaste', so we prevent 'paste', but unfortunately + // on IE we fail with pasteDataFromClipboard() here, because of... we don't know why, but + // we just fail, so... we paste nothing. FAIL. + // * native menu bar - the same as for native context menu. + // + // But don't you know any way to distinguish first two cases from last two? + // Only one - special flag set in CTRL+V handler and exec method of 'paste' + // command. And that's what we did using preventPasteEventNow(). + + pasteDataFromClipboard( evt ); + } ); + + // It's not possible to clearly handle all four paste methods (ctrl+v, native menu bar + // native context menu, editor's command) in one 'paste/beforepaste' event in IE. + // + // For ctrl+v & editor's command it's easy to handle pasting in 'beforepaste' listener, + // so we do this. For another two methods it's better to use 'paste' event. + // + // 'paste' is always being fired after 'beforepaste' (except of weird one on opening native + // context menu), so for two methods handled in 'beforepaste' we're canceling 'paste' + // using preventPasteEvent state. + // + // 'paste' event in IE is being fired before getClipboardDataByPastebin executes its callback. + // + // QUESTION: Why didn't you handle all 4 paste methods in handler for 'paste'? + // Wouldn't this just be simpler? + // ANSWER: Then we would have to evt.data.preventDefault() only for native + // context menu and menu bar pastes. The same with execIECommand(). + // That would force us to mark CTRL+V and editor's paste command with + // special flag, other than preventPasteEvent. But we still would have to + // have preventPasteEvent for the second event fired by execIECommand. + // Code would be longer and not cleaner. + if ( clipboard.mainPasteEvent == 'beforepaste' ) { + editable.on( 'paste', function( evt ) { + if ( preventPasteEvent ) { + return; + } + + // Cancel next 'paste' event fired by execIECommand( 'paste' ) + // at the end of this callback. + preventPasteEventNow(); + + // Prevent native paste. + evt.data.preventDefault(); + + pasteDataFromClipboard( evt ); + + // Force IE to paste content into pastebin so pasteDataFromClipboard will work. + execIECommand( 'paste' ); + } ); + + // If mainPasteEvent is 'beforePaste' (IE before Edge), + // dismiss the (wrong) 'beforepaste' event fired on context/toolbar menu open. (http://dev.ckeditor.com/ticket/7953) + editable.on( 'contextmenu', preventBeforePasteEventNow, null, null, 0 ); + + editable.on( 'beforepaste', function( evt ) { + // Do not prevent event on CTRL+V and SHIFT+INS because it blocks paste (http://dev.ckeditor.com/ticket/11970). + if ( evt.data && !evt.data.$.ctrlKey && !evt.data.$.shiftKey ) + preventBeforePasteEventNow(); + }, null, null, 0 ); + } + + editable.on( 'beforecut', function() { + !preventBeforePasteEvent && fixCut( editor ); + } ); + + var mouseupTimeout; + + // Use editor.document instead of editable in non-IEs for observing mouseup + // since editable won't fire the event if selection process started within + // iframe and ended out of the editor (http://dev.ckeditor.com/ticket/9851). + editable.attachListener( CKEDITOR.env.ie ? editable : editor.document.getDocumentElement(), 'mouseup', function() { + mouseupTimeout = setTimeout( function() { + setToolbarStates(); + }, 0 ); + } ); + + // Make sure that deferred mouseup callback isn't executed after editor instance + // had been destroyed. This may happen when editor.destroy() is called in parallel + // with mouseup event (i.e. a button with onclick callback) (http://dev.ckeditor.com/ticket/10219). + editor.on( 'destroy', function() { + clearTimeout( mouseupTimeout ); + } ); + + editable.on( 'keyup', setToolbarStates ); + } + + // Create object representing Cut or Copy commands. + function createCutCopyCmd( type ) { + return { + type: type, + canUndo: type == 'cut', // We can't undo copy to clipboard. + startDisabled: true, + fakeKeystroke: type == 'cut' ? CKEDITOR.CTRL + 88 /*X*/ : CKEDITOR.CTRL + 67 /*C*/, + exec: function() { + // Attempts to execute the Cut and Copy operations. + function tryToCutCopy( type ) { + if ( CKEDITOR.env.ie ) + return execIECommand( type ); + + // non-IEs part + try { + // Other browsers throw an error if the command is disabled. + return editor.document.$.execCommand( type, false, null ); + } catch ( e ) { + return false; + } + } + + this.type == 'cut' && fixCut(); + + var success = tryToCutCopy( this.type ); + + if ( !success ) { + // Show cutError or copyError. + editor.showNotification( editor.lang.clipboard[ this.type + 'Error' ] ); // jshint ignore:line + } + + return success; + } + }; + } + + function createPasteCmd() { + return { + // Snapshots are done manually by editable.insertXXX methods. + canUndo: false, + async: true, + fakeKeystroke: CKEDITOR.CTRL + 86 /*V*/, + + /** + * The default implementation of the paste command. + * + * @private + * @param {CKEDITOR.editor} editor An instance of the editor where the command is being executed. + * @param {Object/String} data If `data` is a string, then it is considered content that is being pasted. + * Otherwise it is treated as an object with options. + * @param {Boolean/String} [data.notification=true] Content for a notification shown after an unsuccessful + * paste attempt. If `false`, the notification will not be displayed. This parameter was added in 4.7.0. + * @param {String} [data.type='html'] The type of pasted content. There are two allowed values: + * * 'html' + * * 'text' + * @param {String/Object} data.dataValue Content being pasted. If this parameter is an object, it + * is supposed to be a `data` property of the {@link CKEDITOR.editor#paste} event. + * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer Data transfer instance connected + * with the current paste action. + * @member CKEDITOR.editor.commands.paste + */ + exec: function( editor, data ) { + data = typeof data !== 'undefined' && data !== null ? data : {}; + + var cmd = this, + notification = typeof data.notification !== 'undefined' ? data.notification : true, + forcedType = data.type, + keystroke = CKEDITOR.tools.keystrokeToString( editor.lang.common.keyboard, + editor.getCommandKeystroke( this ) ), + msg = typeof notification === 'string' ? notification : editor.lang.clipboard.pasteNotification + .replace( /%1/, '' + keystroke.display + '' ), + pastedContent = typeof data === 'string' ? data : data.dataValue; + + function callback( data, withBeforePaste ) { + withBeforePaste = typeof withBeforePaste !== 'undefined' ? withBeforePaste : true; + + if ( data ) { + data.method = 'paste'; + + if ( !data.dataTransfer ) { + data.dataTransfer = clipboard.initPasteDataTransfer(); + } + + firePasteEvents( editor, data, withBeforePaste ); + } else if ( notification ) { + editor.showNotification( msg, 'info', editor.config.clipboard_notificationDuration ); + } + + editor.fire( 'afterCommandExec', { + name: 'paste', + command: cmd, + returnValue: !!data + } ); + } + + // Force type for the next paste. + if ( forcedType ) { + editor._.nextPasteType = forcedType; + } else { + delete editor._.nextPasteType; + } + + if ( typeof pastedContent === 'string' ) { + callback( { + dataValue: pastedContent + } ); + } else { + editor.getClipboardData( callback ); + } + } + }; + } + + function preventPasteEventNow() { + preventPasteEvent = 1; + // For safety reason we should wait longer than 0/1ms. + // We don't know how long execution of quite complex getClipboardData will take + // and in for example 'paste' listener execCommand() (which fires 'paste') is called + // after getClipboardData finishes. + // Luckily, it's impossible to immediately fire another 'paste' event we want to handle, + // because we only handle there native context menu and menu bar. + setTimeout( function() { + preventPasteEvent = 0; + }, 100 ); + } + + function preventBeforePasteEventNow() { + preventBeforePasteEvent = 1; + setTimeout( function() { + preventBeforePasteEvent = 0; + }, 10 ); + } + + // Tries to execute any of the paste, cut or copy commands in IE. Returns a + // boolean indicating that the operation succeeded. + // @param {String} command *LOWER CASED* name of command ('paste', 'cut', 'copy'). + function execIECommand( command ) { + var doc = editor.document, + body = doc.getBody(), + enabled = false, + onExec = function() { + enabled = true; + }; + + // The following seems to be the only reliable way to detect that + // clipboard commands are enabled in IE. It will fire the + // onpaste/oncut/oncopy events only if the security settings allowed + // the command to execute. + body.on( command, onExec ); + + // IE7: document.execCommand has problem to paste into positioned element. + if ( CKEDITOR.env.version > 7 ) { + doc.$.execCommand( command ); + } else { + doc.$.selection.createRange().execCommand( command ); + } + + body.removeListener( command, onExec ); + + return enabled; + } + + // Cutting off control type element in IE standards breaks the selection entirely. (http://dev.ckeditor.com/ticket/4881) + function fixCut() { + if ( !CKEDITOR.env.ie || CKEDITOR.env.quirks ) + return; + + var sel = editor.getSelection(), + control, range, dummy; + + if ( ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && ( control = sel.getSelectedElement() ) ) { + range = sel.getRanges()[ 0 ]; + dummy = editor.document.createText( '' ); + dummy.insertBefore( control ); + range.setStartBefore( dummy ); + range.setEndAfter( control ); + sel.selectRanges( [ range ] ); + + // Clear up the fix if the paste wasn't succeeded. + setTimeout( function() { + // Element still online? + if ( control.getParent() ) { + dummy.remove(); + sel.selectElement( control ); + } + }, 0 ); + } + } + + // Allow to peek clipboard content by redirecting the + // pasting content into a temporary bin and grab the content of it. + function getClipboardDataByPastebin( evt, callback ) { + var doc = editor.document, + editable = editor.editable(), + cancel = function( evt ) { + evt.cancel(); + }, + blurListener; + + // Avoid recursions on 'paste' event or consequent paste too fast. (http://dev.ckeditor.com/ticket/5730) + if ( doc.getById( 'cke_pastebin' ) ) + return; + + var sel = editor.getSelection(); + var bms = sel.createBookmarks(); + + // http://dev.ckeditor.com/ticket/11384. On IE9+ we use native selectionchange (i.e. editor#selectionCheck) to cache the most + // recent selection which we then lock on editable blur. See selection.js for more info. + // selectionchange fired before getClipboardDataByPastebin() cached selection + // before creating bookmark (cached selection will be invalid, because bookmarks modified the DOM), + // so we need to fire selectionchange one more time, to store current seleciton. + // Selection will be locked when we focus pastebin. + if ( CKEDITOR.env.ie ) + sel.root.fire( 'selectionchange' ); + + // Create container to paste into. + // For rich content we prefer to use "body" since it holds + // the least possibility to be splitted by pasted content, while this may + // breaks the text selection on a frame-less editable, "div" would be + // the best one in that case. + // In another case on old IEs moving the selection into a "body" paste bin causes error panic. + // Body can't be also used for Opera which fills it with
+ // what is indistinguishable from pasted
(copying
in Opera isn't possible, + // but it can be copied from other browser). + var pastebin = new CKEDITOR.dom.element( + ( CKEDITOR.env.webkit || editable.is( 'body' ) ) && !CKEDITOR.env.ie ? 'body' : 'div', doc ); + + pastebin.setAttributes( { + id: 'cke_pastebin', + 'data-cke-temp': '1' + } ); + + var containerOffset = 0, + offsetParent, + win = doc.getWindow(); + + if ( CKEDITOR.env.webkit ) { + // It's better to paste close to the real paste destination, so inherited styles + // (which Webkits will try to compensate by styling span) differs less from the destination's one. + editable.append( pastebin ); + // Style pastebin like .cke_editable, to minimize differences between origin and destination. (http://dev.ckeditor.com/ticket/9754) + pastebin.addClass( 'cke_editable' ); + + // Compensate position of offsetParent. + if ( !editable.is( 'body' ) ) { + // We're not able to get offsetParent from pastebin (body element), so check whether + // its parent (editable) is positioned. + if ( editable.getComputedStyle( 'position' ) != 'static' ) + offsetParent = editable; + // And if not - safely get offsetParent from editable. + else + offsetParent = CKEDITOR.dom.element.get( editable.$.offsetParent ); + + containerOffset = offsetParent.getDocumentPosition().y; + } + } else { + // Opera and IE doesn't allow to append to html element. + editable.getAscendant( CKEDITOR.env.ie ? 'body' : 'html', 1 ).append( pastebin ); + } + + pastebin.setStyles( { + position: 'absolute', + // Position the bin at the top (+10 for safety) of viewport to avoid any subsequent document scroll. + top: ( win.getScrollPosition().y - containerOffset + 10 ) + 'px', + width: '1px', + // Caret has to fit in that height, otherwise browsers like Chrome & Opera will scroll window to show it. + // Set height equal to viewport's height - 20px (safety gaps), minimum 1px. + height: Math.max( 1, win.getViewPaneSize().height - 20 ) + 'px', + overflow: 'hidden', + // Reset styles that can mess up pastebin position. + margin: 0, + padding: 0 + } ); + + // Paste fails in Safari when the body tag has 'user-select: none'. (http://dev.ckeditor.com/ticket/12506) + if ( CKEDITOR.env.safari ) + pastebin.setStyles( CKEDITOR.tools.cssVendorPrefix( 'user-select', 'text' ) ); + + // Check if the paste bin now establishes new editing host. + var isEditingHost = pastebin.getParent().isReadOnly(); + + if ( isEditingHost ) { + // Hide the paste bin. + pastebin.setOpacity( 0 ); + // And make it editable. + pastebin.setAttribute( 'contenteditable', true ); + } + // Transparency is not enough since positioned non-editing host always shows + // resize handler, pull it off the screen instead. + else { + pastebin.setStyle( editor.config.contentsLangDirection == 'ltr' ? 'left' : 'right', '-10000px' ); + } + + editor.on( 'selectionChange', cancel, null, null, 0 ); + + // Webkit fill fire blur on editable when moving selection to + // pastebin (if body is used). Cancel it because it causes incorrect + // selection lock in case of inline editor (http://dev.ckeditor.com/ticket/10644). + // The same seems to apply to Firefox (http://dev.ckeditor.com/ticket/10787). + if ( CKEDITOR.env.webkit || CKEDITOR.env.gecko ) + blurListener = editable.once( 'blur', cancel, null, null, -100 ); + + // Temporarily move selection to the pastebin. + isEditingHost && pastebin.focus(); + var range = new CKEDITOR.dom.range( pastebin ); + range.selectNodeContents( pastebin ); + var selPastebin = range.select(); + + // If non-native paste is executed, IE will open security alert and blur editable. + // Editable will then lock selection inside itself and after accepting security alert + // this selection will be restored. We overwrite stored selection, so it's restored + // in pastebin. (http://dev.ckeditor.com/ticket/9552) + if ( CKEDITOR.env.ie ) { + blurListener = editable.once( 'blur', function() { + editor.lockSelection( selPastebin ); + } ); + } + + var scrollTop = CKEDITOR.document.getWindow().getScrollPosition().y; + + // Wait a while and grab the pasted contents. + setTimeout( function() { + // Restore main window's scroll position which could have been changed + // by browser in cases described in http://dev.ckeditor.com/ticket/9771. + if ( CKEDITOR.env.webkit ) + CKEDITOR.document.getBody().$.scrollTop = scrollTop; + + // Blur will be fired only on non-native paste. In other case manually remove listener. + blurListener && blurListener.removeListener(); + + // Restore properly the document focus. (http://dev.ckeditor.com/ticket/8849) + if ( CKEDITOR.env.ie ) + editable.focus(); + + // IE7: selection must go before removing pastebin. (http://dev.ckeditor.com/ticket/8691) + sel.selectBookmarks( bms ); + pastebin.remove(); + + // Grab the HTML contents. + // We need to look for a apple style wrapper on webkit it also adds + // a div wrapper if you copy/paste the body of the editor. + // Remove hidden div and restore selection. + var bogusSpan; + if ( CKEDITOR.env.webkit && ( bogusSpan = pastebin.getFirst() ) && ( bogusSpan.is && bogusSpan.hasClass( 'Apple-style-span' ) ) ) + pastebin = bogusSpan; + + editor.removeListener( 'selectionChange', cancel ); + callback( pastebin.getHtml() ); + }, 0 ); + } + + // Try to get content directly on IE from clipboard, without native event + // being fired before. In other words - synthetically get clipboard data, if it's possible. + // mainPasteEvent will be fired, so if forced native paste: + // * worked, getClipboardDataByPastebin will grab it, + // * didn't work, dataValue and dataTransfer will be empty and editor#paste won't be fired. + // Clipboard data can be accessed directly only on IEs older than Edge. + // On other browsers we should fire beforePaste event and return false. + function getClipboardDataDirectly() { + if ( clipboard.mainPasteEvent == 'paste' ) { + editor.fire( 'beforePaste', { type: 'auto', method: 'paste' } ); + return false; + } + + // Prevent IE from pasting at the begining of the document. + editor.focus(); + + // Command will be handled by 'beforepaste', but as + // execIECommand( 'paste' ) will fire also 'paste' event + // we're canceling it. + preventPasteEventNow(); + + // http://dev.ckeditor.com/ticket/9247: Lock focus to prevent IE from hiding toolbar for inline editor. + var focusManager = editor.focusManager; + focusManager.lock(); + + if ( editor.editable().fire( clipboard.mainPasteEvent ) && !execIECommand( 'paste' ) ) { + focusManager.unlock(); + return false; + } + focusManager.unlock(); + + return true; + } + + // Listens for some clipboard related keystrokes, so they get customized. + // Needs to be bind to keydown event. + function onKey( event ) { + if ( editor.mode != 'wysiwyg' ) + return; + + switch ( event.data.keyCode ) { + // Paste + case CKEDITOR.CTRL + 86: // CTRL+V + case CKEDITOR.SHIFT + 45: // SHIFT+INS + var editable = editor.editable(); + + // Cancel 'paste' event because ctrl+v is for IE handled + // by 'beforepaste'. + preventPasteEventNow(); + + // Simulate 'beforepaste' event for all browsers using 'paste' as main event. + if ( clipboard.mainPasteEvent == 'paste' ) { + editable.fire( 'beforepaste' ); + } + + return; + + // Cut + case CKEDITOR.CTRL + 88: // CTRL+X + case CKEDITOR.SHIFT + 46: // SHIFT+DEL + // Save Undo snapshot. + editor.fire( 'saveSnapshot' ); // Save before cut + setTimeout( function() { + editor.fire( 'saveSnapshot' ); // Save after cut + }, 50 ); // OSX is slow (http://dev.ckeditor.com/ticket/11416). + } + } + + function pasteDataFromClipboard( evt ) { + // Default type is 'auto', but can be changed by beforePaste listeners. + var eventData = { + type: 'auto', + method: 'paste', + dataTransfer: clipboard.initPasteDataTransfer( evt ) + }; + + eventData.dataTransfer.cacheData(); + + // Fire 'beforePaste' event so clipboard flavor get customized by other plugins. + // If 'beforePaste' is canceled continue executing getClipboardDataByPastebin and then do nothing + // (do not fire 'paste', 'afterPaste' events). This way we can grab all - synthetically + // and natively pasted content and prevent its insertion into editor + // after canceling 'beforePaste' event. + var beforePasteNotCanceled = editor.fire( 'beforePaste', eventData ) !== false; + + // Do not use paste bin if the browser let us get HTML or files from dataTranfer. + if ( beforePasteNotCanceled && clipboard.canClipboardApiBeTrusted( eventData.dataTransfer, editor ) ) { + evt.data.preventDefault(); + setTimeout( function() { + firePasteEvents( editor, eventData ); + }, 0 ); + } else { + getClipboardDataByPastebin( evt, function( data ) { + // Clean up. + eventData.dataValue = data.replace( /]+data-cke-bookmark[^<]*?<\/span>/ig, '' ); + + // Fire remaining events (without beforePaste) + beforePasteNotCanceled && firePasteEvents( editor, eventData ); + } ); + } + } + + function setToolbarStates() { + if ( editor.mode != 'wysiwyg' ) + return; + + var pasteState = stateFromNamedCommand( 'paste' ); + + editor.getCommand( 'cut' ).setState( stateFromNamedCommand( 'cut' ) ); + editor.getCommand( 'copy' ).setState( stateFromNamedCommand( 'copy' ) ); + editor.getCommand( 'paste' ).setState( pasteState ); + editor.fire( 'pasteState', pasteState ); + } + + function stateFromNamedCommand( command ) { + if ( inReadOnly && command in { paste: 1, cut: 1 } ) + return CKEDITOR.TRISTATE_DISABLED; + + if ( command == 'paste' ) + return CKEDITOR.TRISTATE_OFF; + + // Cut, copy - check if the selection is not empty. + var sel = editor.getSelection(), + ranges = sel.getRanges(), + selectionIsEmpty = sel.getType() == CKEDITOR.SELECTION_NONE || ( ranges.length == 1 && ranges[ 0 ].collapsed ); + + return selectionIsEmpty ? CKEDITOR.TRISTATE_DISABLED : CKEDITOR.TRISTATE_OFF; + } + } + + // Returns: + // * 'htmlifiedtext' if content looks like transformed by browser from plain text. + // See clipboard/paste.html TCs for more info. + // * 'html' if it is not 'htmlifiedtext'. + function recogniseContentType( data ) { + if ( CKEDITOR.env.webkit ) { + // Plain text or (

and text inside
). + if ( !data.match( /^[^<]*$/g ) && !data.match( /^(
<\/div>|
[^<]*<\/div>)*$/gi ) ) + return 'html'; + } else if ( CKEDITOR.env.ie ) { + // Text and
or ( text and
in

- paragraphs can be separated by new \r\n ). + if ( !data.match( /^([^<]|)*$/gi ) && !data.match( /^(

([^<]|)*<\/p>|(\r\n))*$/gi ) ) + return 'html'; + } else if ( CKEDITOR.env.gecko ) { + // Text or
. + if ( !data.match( /^([^<]|)*$/gi ) ) + return 'html'; + } else { + return 'html'; + } + + return 'htmlifiedtext'; + } + + // This function transforms what browsers produce when + // pasting plain text into editable element (see clipboard/paste.html TCs + // for more info) into correct HTML (similar to that produced by text2Html). + function htmlifiedTextHtmlification( config, data ) { + function repeatParagraphs( repeats ) { + // Repeat blocks floor((n+1)/2) times. + // Even number of repeats - add
at the beginning of last

. + return CKEDITOR.tools.repeat( '

', ~~( repeats / 2 ) ) + ( repeats % 2 == 1 ? '
' : '' ); + } + + // Replace adjacent white-spaces (EOLs too - Fx sometimes keeps them) with one space. + data = data.replace( /\s+/g, ' ' ) + // Remove spaces from between tags. + .replace( /> +<' ) + // Normalize XHTML syntax and upper cased
tags. + .replace( /
/gi, '
' ); + + // IE - lower cased tags. + data = data.replace( /<\/?[A-Z]+>/g, function( match ) { + return match.toLowerCase(); + } ); + + // Don't touch single lines (no ) - nothing to do here. + if ( data.match( /^[^<]$/ ) ) + return data; + + // Webkit. + if ( CKEDITOR.env.webkit && data.indexOf( '

' ) > -1 ) { + // One line break at the beginning - insert
+ data = data.replace( /^(
(
|)<\/div>)(?!$|(
(
|)<\/div>))/g, '
' ) + // Two or more - reduce number of new lines by one. + .replace( /^(
(
|)<\/div>){2}(?!$)/g, '
' ); + + // Two line breaks create one paragraph in Webkit. + if ( data.match( /
(
|)<\/div>/ ) ) { + data = '

' + data.replace( /(

(
|)<\/div>)+/g, function( match ) { + return repeatParagraphs( match.split( '
' ).length + 1 ); + } ) + '

'; + } + + // One line break create br. + data = data.replace( /<\/div>
/g, '
' ); + + // Remove remaining divs. + data = data.replace( /<\/?div>/g, '' ); + } + + // Opera and Firefox and enterMode != BR. + if ( CKEDITOR.env.gecko && config.enterMode != CKEDITOR.ENTER_BR ) { + // Remove bogus
- Fx generates two for one line break. + // For two line breaks it still produces two , but it's better to ignore this case than the first one. + if ( CKEDITOR.env.gecko ) + data = data.replace( /^

$/, '
' ); + + // This line satisfy edge case when for Opera we have two line breaks + //data = data.replace( /) + + if ( data.indexOf( '

' ) > -1 ) { + // Two line breaks create one paragraph, three - 2, four - 3, etc. + data = '

' + data.replace( /(
){2,}/g, function( match ) { + return repeatParagraphs( match.length / 4 ); + } ) + '

'; + } + } + + return switchEnterMode( config, data ); + } + + function filtersFactoryFactory() { + var filters = {}; + + function setUpTags() { + var tags = {}; + + for ( var tag in CKEDITOR.dtd ) { + if ( tag.charAt( 0 ) != '$' && tag != 'div' && tag != 'span' ) { + tags[ tag ] = 1; + } + } + + return tags; + } + + function createSemanticContentFilter() { + var filter = new CKEDITOR.filter(); + + filter.allow( { + $1: { + elements: setUpTags(), + attributes: true, + styles: false, + classes: false + } + } ); + + return filter; + } + + return { + get: function( type ) { + if ( type == 'plain-text' ) { + // Does this look confusing to you? Did we forget about enter mode? + // It is a trick that let's us creating one filter for edidtor, regardless of its + // activeEnterMode (which as the name indicates can change during runtime). + // + // How does it work? + // The active enter mode is passed to the filter.applyTo method. + // The filter first marks all elements except
as disallowed and then tries to remove + // them. However, it cannot remove e.g. a

element completely, because it's a basic structural element, + // so it tries to replace it with an element created based on the active enter mode, eventually doing nothing. + // + // Now you can sleep well. + return filters.plainText || ( filters.plainText = new CKEDITOR.filter( 'br' ) ); + } else if ( type == 'semantic-content' ) { + return filters.semanticContent || ( filters.semanticContent = createSemanticContentFilter() ); + } else if ( type ) { + // Create filter based on rules (string or object). + return new CKEDITOR.filter( type ); + } + + return null; + } + }; + } + + function filterContent( editor, data, filter ) { + var fragment = CKEDITOR.htmlParser.fragment.fromHtml( data ), + writer = new CKEDITOR.htmlParser.basicWriter(); + + filter.applyTo( fragment, true, false, editor.activeEnterMode ); + fragment.writeHtml( writer ); + + return writer.getHtml(); + } + + function switchEnterMode( config, data ) { + if ( config.enterMode == CKEDITOR.ENTER_BR ) { + data = data.replace( /(<\/p>

)+/g, function( match ) { + return CKEDITOR.tools.repeat( '
', match.length / 7 * 2 ); + } ).replace( /<\/?p>/g, '' ); + } else if ( config.enterMode == CKEDITOR.ENTER_DIV ) { + data = data.replace( /<(\/)?p>/g, '<$1div>' ); + } + + return data; + } + + function preventDefaultSetDropEffectToNone( evt ) { + evt.data.preventDefault(); + evt.data.$.dataTransfer.dropEffect = 'none'; + } + + function initDragDrop( editor ) { + var clipboard = CKEDITOR.plugins.clipboard; + + editor.on( 'contentDom', function() { + var editable = editor.editable(), + dropTarget = CKEDITOR.plugins.clipboard.getDropTarget( editor ), + top = editor.ui.space( 'top' ), + bottom = editor.ui.space( 'bottom' ); + + // -------------- DRAGOVER TOP & BOTTOM -------------- + + // Not allowing dragging on toolbar and bottom (http://dev.ckeditor.com/ticket/12613). + clipboard.preventDefaultDropOnElement( top ); + clipboard.preventDefaultDropOnElement( bottom ); + + // -------------- DRAGSTART -------------- + // Listed on dragstart to mark internal and cross-editor drag & drop + // and save range and selected HTML. + + editable.attachListener( dropTarget, 'dragstart', fireDragEvent ); + + // Make sure to reset data transfer (in case dragend was not called or was canceled). + editable.attachListener( editor, 'dragstart', clipboard.resetDragDataTransfer, clipboard, null, 1 ); + + // Create a dataTransfer object and save it globally. + editable.attachListener( editor, 'dragstart', function( evt ) { + clipboard.initDragDataTransfer( evt, editor ); + }, null, null, 2 ); + + editable.attachListener( editor, 'dragstart', function() { + // Save drag range globally for cross editor D&D. + var dragRange = clipboard.dragRange = editor.getSelection().getRanges()[ 0 ]; + + // Store number of children, so we can later tell if any text node was split on drop. (http://dev.ckeditor.com/ticket/13011, http://dev.ckeditor.com/ticket/13447) + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 10 ) { + clipboard.dragStartContainerChildCount = dragRange ? getContainerChildCount( dragRange.startContainer ) : null; + clipboard.dragEndContainerChildCount = dragRange ? getContainerChildCount( dragRange.endContainer ) : null; + } + }, null, null, 100 ); + + // -------------- DRAGEND -------------- + // Clean up on dragend. + + editable.attachListener( dropTarget, 'dragend', fireDragEvent ); + + // Init data transfer if someone wants to use it in dragend. + editable.attachListener( editor, 'dragend', clipboard.initDragDataTransfer, clipboard, null, 1 ); + + // When drag & drop is done we need to reset dataTransfer so the future + // external drop will be not recognize as internal. + editable.attachListener( editor, 'dragend', clipboard.resetDragDataTransfer, clipboard, null, 100 ); + + // -------------- DRAGOVER -------------- + // We need to call preventDefault on dragover because otherwise if + // we drop image it will overwrite document. + + editable.attachListener( dropTarget, 'dragover', function( evt ) { + // Edge requires this handler to have `preventDefault()` regardless of the situation. + if ( CKEDITOR.env.edge ) { + evt.data.preventDefault(); + return; + } + + var target = evt.data.getTarget(); + + // Prevent reloading page when dragging image on empty document (http://dev.ckeditor.com/ticket/12619). + if ( target && target.is && target.is( 'html' ) ) { + evt.data.preventDefault(); + return; + } + + // If we do not prevent default dragover on IE the file path + // will be loaded and we will lose content. On the other hand + // if we prevent it the cursor will not we shown, so we prevent + // dragover only on IE, on versions which support file API and only + // if the event contains files. + if ( CKEDITOR.env.ie && + CKEDITOR.plugins.clipboard.isFileApiSupported && + evt.data.$.dataTransfer.types.contains( 'Files' ) ) { + evt.data.preventDefault(); + } + } ); + + // -------------- DROP -------------- + + editable.attachListener( dropTarget, 'drop', function( evt ) { + // Do nothing if event was already prevented. (http://dev.ckeditor.com/ticket/13879) + if ( evt.data.$.defaultPrevented ) { + return; + } + + // Cancel native drop. + evt.data.preventDefault(); + + var target = evt.data.getTarget(), + readOnly = target.isReadOnly(); + + // Do nothing if drop on non editable element (http://dev.ckeditor.com/ticket/13015). + // The tag isn't editable (body is), but we want to allow drop on it + // (so it is possible to drop below editor contents). + if ( readOnly && !( target.type == CKEDITOR.NODE_ELEMENT && target.is( 'html' ) ) ) { + return; + } + + // Getting drop position is one of the most complex parts. + var dropRange = clipboard.getRangeAtDropPosition( evt, editor ), + dragRange = clipboard.dragRange; + + // Do nothing if it was not possible to get drop range. + if ( !dropRange ) { + return; + } + + // Fire drop. + fireDragEvent( evt, dragRange, dropRange ); + }, null, null, 9999 ); + + // Create dataTransfer or get it, if it was created before. + editable.attachListener( editor, 'drop', clipboard.initDragDataTransfer, clipboard, null, 1 ); + + // Execute drop action, fire paste. + editable.attachListener( editor, 'drop', function( evt ) { + var data = evt.data; + + if ( !data ) { + return; + } + + // Let user modify drag and drop range. + var dropRange = data.dropRange, + dragRange = data.dragRange, + dataTransfer = data.dataTransfer; + + if ( dataTransfer.getTransferType( editor ) == CKEDITOR.DATA_TRANSFER_INTERNAL ) { + // Execute drop with a timeout because otherwise selection, after drop, + // on IE is in the drag position, instead of drop position. + setTimeout( function() { + clipboard.internalDrop( dragRange, dropRange, dataTransfer, editor ); + }, 0 ); + } else if ( dataTransfer.getTransferType( editor ) == CKEDITOR.DATA_TRANSFER_CROSS_EDITORS ) { + crossEditorDrop( dragRange, dropRange, dataTransfer ); + } else { + externalDrop( dropRange, dataTransfer ); + } + }, null, null, 9999 ); + + // Cross editor drag and drop (drag in one Editor and drop in the other). + function crossEditorDrop( dragRange, dropRange, dataTransfer ) { + // Paste event should be fired before delete contents because otherwise + // Chrome have a problem with drop range (Chrome split the drop + // range container so the offset is bigger then container length). + dropRange.select(); + firePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop' }, 1 ); + + // Remove dragged content and make a snapshot. + dataTransfer.sourceEditor.fire( 'saveSnapshot' ); + + dataTransfer.sourceEditor.editable().extractHtmlFromRange( dragRange ); + + // Make some selection before saving snapshot, otherwise error will be thrown, because + // there will be no valid selection after content is removed. + dataTransfer.sourceEditor.getSelection().selectRanges( [ dragRange ] ); + dataTransfer.sourceEditor.fire( 'saveSnapshot' ); + } + + // Drop from external source. + function externalDrop( dropRange, dataTransfer ) { + // Paste content into the drop position. + dropRange.select(); + + firePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop' }, 1 ); + + // Usually we reset DataTranfer on dragend, + // but dragend is called on the same element as dragstart + // so it will not be called on on external drop. + clipboard.resetDragDataTransfer(); + } + + // Fire drag/drop events (dragstart, dragend, drop). + function fireDragEvent( evt, dragRange, dropRange ) { + var eventData = { + $: evt.data.$, + target: evt.data.getTarget() + }; + + if ( dragRange ) { + eventData.dragRange = dragRange; + } + if ( dropRange ) { + eventData.dropRange = dropRange; + } + + if ( editor.fire( evt.name, eventData ) === false ) { + evt.data.preventDefault(); + } + } + + function getContainerChildCount( container ) { + if ( container.type != CKEDITOR.NODE_ELEMENT ) { + container = container.getParent(); + } + + return container.getChildCount(); + } + } ); + } + + /** + * @singleton + * @class CKEDITOR.plugins.clipboard + */ + CKEDITOR.plugins.clipboard = { + /** + * True if the environment allows to set data on copy or cut manually. This value is false in IE, because this browser + * shows the security dialog window when the script tries to set clipboard data and on iOS, because custom data is + * not saved to clipboard there. + * + * @since 4.5 + * @readonly + * @property {Boolean} + */ + isCustomCopyCutSupported: !CKEDITOR.env.ie && !CKEDITOR.env.iOS, + + /** + * True if the environment supports MIME types and custom data types in dataTransfer/cliboardData getData/setData methods. + * + * @since 4.5 + * @readonly + * @property {Boolean} + */ + isCustomDataTypesSupported: !CKEDITOR.env.ie, + + /** + * True if the environment supports File API. + * + * @since 4.5 + * @readonly + * @property {Boolean} + */ + isFileApiSupported: !CKEDITOR.env.ie || CKEDITOR.env.version > 9, + + /** + * Main native paste event editable should listen to. + * + * **Note:** Safari does not like the {@link CKEDITOR.editor#beforePaste} event — it sometimes does not + * handle Ctrl+C properly. This is probably caused by some race condition between events. + * Chrome, Firefox and Edge work well with both events, so it is better to use {@link CKEDITOR.editor#paste} + * which will handle pasting from e.g. browsers' menu bars. + * IE7/8 does not like the {@link CKEDITOR.editor#paste} event for which it is throwing random errors. + * + * @since 4.5 + * @readonly + * @property {String} + */ + mainPasteEvent: ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) ? 'beforepaste' : 'paste', + + /** + * Returns `true` if it is expected that a browser provides HTML data through the Clipboard API. + * If not, this method returns `false` and as a result CKEditor will use the paste bin. Read more in + * the [Clipboard Integration](http://docs.ckeditor.com/#!/guide/dev_clipboard-section-clipboard-api) guide. + * + * @since 4.5.2 + * @returns {Boolean} + */ + canClipboardApiBeTrusted: function( dataTransfer, editor ) { + // If it's an internal or cross-editor data transfer, then it means that custom cut/copy/paste support works + // and that the data were put manually on the data transfer so we can be sure that it's available. + if ( dataTransfer.getTransferType( editor ) != CKEDITOR.DATA_TRANSFER_EXTERNAL ) { + return true; + } + + // In Chrome we can trust Clipboard API, with the exception of Chrome on Android (in both - mobile and desktop modes), where + // clipboard API is not available so we need to check it (http://dev.ckeditor.com/ticket/13187). + if ( CKEDITOR.env.chrome && !dataTransfer.isEmpty() ) { + return true; + } + + // Because of a Firefox bug HTML data are not available in some cases (e.g. paste from Word), in such cases we + // need to use the pastebin (http://dev.ckeditor.com/ticket/13528, https://bugzilla.mozilla.org/show_bug.cgi?id=1183686). + if ( CKEDITOR.env.gecko && ( dataTransfer.getData( 'text/html' ) || dataTransfer.getFilesCount() ) ) { + return true; + } + + // Safari fixed clipboard in 10.1 (https://bugs.webkit.org/show_bug.cgi?id=19893) (http://dev.ckeditor.com/ticket/16982). + // However iOS version still doesn't work well enough (https://bugs.webkit.org/show_bug.cgi?id=19893#c34). + if ( CKEDITOR.env.safari && CKEDITOR.env.version >= 603 && !CKEDITOR.env.iOS ) { + return true; + } + + // In older Safari and IE HTML data is not available though the Clipboard API. + // In Edge things are a bit messy at the moment - + // https://connect.microsoft.com/IE/feedback/details/1572456/edge-clipboard-api-text-html-content-messed-up-in-event-clipboarddata + // It is safer to use the paste bin in unknown cases. + return false; + }, + + /** + * Returns the element that should be used as the target for the drop event. + * + * @since 4.5 + * @param {CKEDITOR.editor} editor The editor instance. + * @returns {CKEDITOR.dom.domObject} the element that should be used as the target for the drop event. + */ + getDropTarget: function( editor ) { + var editable = editor.editable(); + + // http://dev.ckeditor.com/ticket/11123 Firefox needs to listen on document, because otherwise event won't be fired. + // http://dev.ckeditor.com/ticket/11086 IE8 cannot listen on document. + if ( ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) || editable.isInline() ) { + return editable; + } else { + return editor.document; + } + }, + + /** + * IE 8 & 9 split text node on drop so the first node contains the + * text before the drop position and the second contains the rest. If you + * drag the content from the same node you will be not be able to get + * it (the range becomes invalid), so you need to join them back. + * + * Note that the first node in IE 8 & 9 is the original node object + * but with shortened content. + * + * Before: + * --- Text Node A ---------------------------------- + * /\ + * Drag position + * + * After (IE 8 & 9): + * --- Text Node A ----- --- Text Node B ----------- + * /\ /\ + * Drop position Drag position + * (invalid) + * + * After (other browsers): + * --- Text Node A ---------------------------------- + * /\ /\ + * Drop position Drag position + * + * **Note:** This function is in the public scope for tests usage only. + * + * @since 4.5 + * @private + * @param {CKEDITOR.dom.range} dragRange The drag range. + * @param {CKEDITOR.dom.range} dropRange The drop range. + * @param {Number} preDragStartContainerChildCount The number of children of the drag range start container before the drop. + * @param {Number} preDragEndContainerChildCount The number of children of the drag range end container before the drop. + */ + fixSplitNodesAfterDrop: function( dragRange, dropRange, preDragStartContainerChildCount, preDragEndContainerChildCount ) { + var dropContainer = dropRange.startContainer; + + if ( + typeof preDragEndContainerChildCount != 'number' || + typeof preDragStartContainerChildCount != 'number' + ) { + return; + } + + // We are only concerned about ranges anchored in elements. + if ( dropContainer.type != CKEDITOR.NODE_ELEMENT ) { + return; + } + + if ( handleContainer( dragRange.startContainer, dropContainer, preDragStartContainerChildCount ) ) { + return; + } + + if ( handleContainer( dragRange.endContainer, dropContainer, preDragEndContainerChildCount ) ) { + return; + } + + function handleContainer( dragContainer, dropContainer, preChildCount ) { + var dragElement = dragContainer; + if ( dragElement.type == CKEDITOR.NODE_TEXT ) { + dragElement = dragContainer.getParent(); + } + + if ( dragElement.equals( dropContainer ) && preChildCount != dropContainer.getChildCount() ) { + applyFix( dropRange ); + return true; + } + } + + function applyFix( dropRange ) { + var nodeBefore = dropRange.startContainer.getChild( dropRange.startOffset - 1 ), + nodeAfter = dropRange.startContainer.getChild( dropRange.startOffset ); + + if ( + nodeBefore && nodeBefore.type == CKEDITOR.NODE_TEXT && + nodeAfter && nodeAfter.type == CKEDITOR.NODE_TEXT + ) { + var offset = nodeBefore.getLength(); + + nodeBefore.setText( nodeBefore.getText() + nodeAfter.getText() ); + nodeAfter.remove(); + + dropRange.setStart( nodeBefore, offset ); + dropRange.collapse( true ); + } + } + }, + + /** + * Checks whether turning the drag range into bookmarks will invalidate the drop range. + * This usually happens when the drop range shares the container with the drag range and is + * located after the drag range, but there are countless edge cases. + * + * This function is stricly related to {@link #internalDrop} which toggles + * order in which it creates bookmarks for both ranges based on a value returned + * by this method. In some cases this method returns a value which is not necessarily + * true in terms of what it was meant to check, but it is convenient, because + * we know how it is interpreted in {@link #internalDrop}, so the correct + * behavior of the entire algorithm is assured. + * + * **Note:** This function is in the public scope for tests usage only. + * + * @since 4.5 + * @private + * @param {CKEDITOR.dom.range} dragRange The first range to compare. + * @param {CKEDITOR.dom.range} dropRange The second range to compare. + * @returns {Boolean} `true` if the first range is before the second range. + */ + isDropRangeAffectedByDragRange: function( dragRange, dropRange ) { + var dropContainer = dropRange.startContainer, + dropOffset = dropRange.endOffset; + + // Both containers are the same and drop offset is at the same position or later. + // " A L] A " " M A " + // ^ ^ + if ( dragRange.endContainer.equals( dropContainer ) && dragRange.endOffset <= dropOffset ) { + return true; + } + + // Bookmark for drag start container will mess up with offsets. + // " O [L A " " M A " + // ^ ^ + if ( + dragRange.startContainer.getParent().equals( dropContainer ) && + dragRange.startContainer.getIndex() < dropOffset + ) { + return true; + } + + // Bookmark for drag end container will mess up with offsets. + // " O] L A " " M A " + // ^ ^ + if ( + dragRange.endContainer.getParent().equals( dropContainer ) && + dragRange.endContainer.getIndex() < dropOffset + ) { + return true; + } + + return false; + }, + + /** + * Internal drag and drop (drag and drop in the same editor instance). + * + * **Note:** This function is in the public scope for tests usage only. + * + * @since 4.5 + * @private + * @param {CKEDITOR.dom.range} dragRange The first range to compare. + * @param {CKEDITOR.dom.range} dropRange The second range to compare. + * @param {CKEDITOR.plugins.clipboard.dataTransfer} dataTransfer + * @param {CKEDITOR.editor} editor + */ + internalDrop: function( dragRange, dropRange, dataTransfer, editor ) { + var clipboard = CKEDITOR.plugins.clipboard, + editable = editor.editable(), + dragBookmark, dropBookmark, isDropRangeAffected; + + // Save and lock snapshot so there will be only + // one snapshot for both remove and insert content. + editor.fire( 'saveSnapshot' ); + editor.fire( 'lockSnapshot', { dontUpdate: 1 } ); + + if ( CKEDITOR.env.ie && CKEDITOR.env.version < 10 ) { + this.fixSplitNodesAfterDrop( + dragRange, + dropRange, + clipboard.dragStartContainerChildCount, + clipboard.dragEndContainerChildCount + ); + } + + // Because we manipulate multiple ranges we need to do it carefully, + // changing one range (event creating a bookmark) may make other invalid. + // We need to change ranges into bookmarks so we can manipulate them easily in the future. + // We can change the range which is later in the text before we change the preceding range. + // We call isDropRangeAffectedByDragRange to test the order of ranges. + isDropRangeAffected = this.isDropRangeAffectedByDragRange( dragRange, dropRange ); + if ( !isDropRangeAffected ) { + dragBookmark = dragRange.createBookmark( false ); + } + dropBookmark = dropRange.clone().createBookmark( false ); + if ( isDropRangeAffected ) { + dragBookmark = dragRange.createBookmark( false ); + } + + // Check if drop range is inside range. + // This is an edge case when we drop something on editable's margin/padding. + // That space is not treated as a part of the range we drag, so it is possible to drop there. + // When we drop, browser tries to find closest drop position and it finds it inside drag range. (http://dev.ckeditor.com/ticket/13453) + var startNode = dragBookmark.startNode, + endNode = dragBookmark.endNode, + dropNode = dropBookmark.startNode, + dropInsideDragRange = + // Must check endNode because dragRange could be collapsed in some edge cases (simulated DnD). + endNode && + ( startNode.getPosition( dropNode ) & CKEDITOR.POSITION_PRECEDING ) && + ( endNode.getPosition( dropNode ) & CKEDITOR.POSITION_FOLLOWING ); + + // If the drop range happens to be inside drag range change it's position to the beginning of the drag range. + if ( dropInsideDragRange ) { + // We only change position of bookmark span that is connected with dropBookmark. + // dropRange will be overwritten and set to the dropBookmark later. + dropNode.insertBefore( startNode ); + } + + // No we can safely delete content for the drag range... + dragRange = editor.createRange(); + dragRange.moveToBookmark( dragBookmark ); + editable.extractHtmlFromRange( dragRange, 1 ); + + // ...and paste content into the drop position. + dropRange = editor.createRange(); + dropRange.moveToBookmark( dropBookmark ); + + // We do not select drop range, because of may be in the place we can not set the selection + // (e.g. between blocks, in case of block widget D&D). We put range to the paste event instead. + firePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop', range: dropRange }, 1 ); + + editor.fire( 'unlockSnapshot' ); + }, + + /** + * Gets the range from the `drop` event. + * + * @since 4.5 + * @param {Object} domEvent A native DOM drop event object. + * @param {CKEDITOR.editor} editor The source editor instance. + * @returns {CKEDITOR.dom.range} range at drop position. + */ + getRangeAtDropPosition: function( dropEvt, editor ) { + var $evt = dropEvt.data.$, + x = $evt.clientX, + y = $evt.clientY, + $range, + defaultRange = editor.getSelection( true ).getRanges()[ 0 ], + range = editor.createRange(); + + // Make testing possible. + if ( dropEvt.data.testRange ) + return dropEvt.data.testRange; + + // Webkits. + if ( document.caretRangeFromPoint && editor.document.$.caretRangeFromPoint( x, y ) ) { + $range = editor.document.$.caretRangeFromPoint( x, y ); + range.setStart( CKEDITOR.dom.node( $range.startContainer ), $range.startOffset ); + range.collapse( true ); + } + // FF. + else if ( $evt.rangeParent ) { + range.setStart( CKEDITOR.dom.node( $evt.rangeParent ), $evt.rangeOffset ); + range.collapse( true ); + } + // IEs 9+. + // We check if editable is focused to make sure that it's an internal DnD. External DnD must use the second + // mechanism because of http://dev.ckeditor.com/ticket/13472#comment:6. + else if ( CKEDITOR.env.ie && CKEDITOR.env.version > 8 && defaultRange && editor.editable().hasFocus ) { + // On IE 9+ range by default is where we expected it. + // defaultRange may be undefined if dragover was canceled (file drop). + return defaultRange; + } + // IE 8 and all IEs if !defaultRange or external DnD. + else if ( document.body.createTextRange ) { + // To use this method we need a focus (which may be somewhere else in case of external drop). + editor.focus(); + + $range = editor.document.getBody().$.createTextRange(); + try { + var sucess = false; + + // If user drop between text line IEs moveToPoint throws exception: + // + // Lorem ipsum pulvinar purus et euismod + // + // dolor sit amet,| consectetur adipiscing + // * + // vestibulum tincidunt augue eget tempus. + // + // * - drop position + // | - expected cursor position + // + // So we try to call moveToPoint with +-1px up to +-20px above or + // below original drop position to find nearest good drop position. + for ( var i = 0; i < 20 && !sucess; i++ ) { + if ( !sucess ) { + try { + $range.moveToPoint( x, y - i ); + sucess = true; + } catch ( err ) { + } + } + if ( !sucess ) { + try { + $range.moveToPoint( x, y + i ); + sucess = true; + } catch ( err ) { + } + } + } + + if ( sucess ) { + var id = 'cke-temp-' + ( new Date() ).getTime(); + $range.pasteHTML( '\u200b' ); + + var span = editor.document.getById( id ); + range.moveToPosition( span, CKEDITOR.POSITION_BEFORE_START ); + span.remove(); + } else { + // If the fist method does not succeed we might be next to + // the short element (like header): + // + // Lorem ipsum pulvinar purus et euismod. + // + // + // SOME HEADER| * + // + // + // vestibulum tincidunt augue eget tempus. + // + // * - drop position + // | - expected cursor position + // + // In such situation elementFromPoint returns proper element. Using getClientRect + // it is possible to check if the cursor should be at the beginning or at the end + // of paragraph. + var $element = editor.document.$.elementFromPoint( x, y ), + element = new CKEDITOR.dom.element( $element ), + rect; + + if ( !element.equals( editor.editable() ) && element.getName() != 'html' ) { + rect = element.getClientRect(); + + if ( x < rect.left ) { + range.setStartAt( element, CKEDITOR.POSITION_AFTER_START ); + range.collapse( true ); + } else { + range.setStartAt( element, CKEDITOR.POSITION_BEFORE_END ); + range.collapse( true ); + } + } + // If drop happens on no element elementFromPoint returns html or body. + // + // * |Lorem ipsum pulvinar purus et euismod. + // + // vestibulum tincidunt augue eget tempus. + // + // * - drop position + // | - expected cursor position + // + // In such case we can try to use default selection. If startContainer is not + // 'editable' element it is probably proper selection. + else if ( defaultRange && defaultRange.startContainer && + !defaultRange.startContainer.equals( editor.editable() ) ) { + return defaultRange; + + // Otherwise we can not find any drop position and we have to return null + // and cancel drop event. + } else { + return null; + } + + } + } catch ( err ) { + return null; + } + } else { + return null; + } + + return range; + }, + + /** + * This function tries to link the `evt.data.dataTransfer` property of the {@link CKEDITOR.editor#dragstart}, + * {@link CKEDITOR.editor#dragend} and {@link CKEDITOR.editor#drop} events to a single + * {@link CKEDITOR.plugins.clipboard.dataTransfer} object. + * + * This method is automatically used by the core of the drag and drop functionality and + * usually does not have to be called manually when using the drag and drop events. + * + * This method behaves differently depending on whether the drag and drop events were fired + * artificially (to represent a non-native drag and drop) or whether they were caused by the native drag and drop. + * + * If the native event is not available, then it will create a new {@link CKEDITOR.plugins.clipboard.dataTransfer} + * instance (if it does not exist already) and will link it to this and all following event objects until + * the {@link #resetDragDataTransfer} method is called. It means that all three drag and drop events must be fired + * in order to ensure that the data transfer is bound correctly. + * + * If the native event is available, then the {@link CKEDITOR.plugins.clipboard.dataTransfer} is identified + * by its ID and a new instance is assigned to the `evt.data.dataTransfer` only if the ID changed or + * the {@link #resetDragDataTransfer} method was called. + * + * @since 4.5 + * @param {CKEDITOR.dom.event} [evt] A drop event object. + * @param {CKEDITOR.editor} [sourceEditor] The source editor instance. + */ + initDragDataTransfer: function( evt, sourceEditor ) { + // Create a new dataTransfer object based on the drop event. + // If this event was used on dragstart to create dataTransfer + // both dataTransfer objects will have the same id. + var nativeDataTransfer = evt.data.$ ? evt.data.$.dataTransfer : null, + dataTransfer = new this.dataTransfer( nativeDataTransfer, sourceEditor ); + + if ( !nativeDataTransfer ) { + // No native event. + if ( this.dragData ) { + dataTransfer = this.dragData; + } else { + this.dragData = dataTransfer; + } + } else { + // Native event. If there is the same id we will replace dataTransfer with the one + // created on drag, because it contains drag editor, drag content and so on. + // Otherwise (in case of drag from external source) we save new object to + // the global clipboard.dragData. + if ( this.dragData && dataTransfer.id == this.dragData.id ) { + dataTransfer = this.dragData; + } else { + this.dragData = dataTransfer; + } + } + + evt.data.dataTransfer = dataTransfer; + }, + + /** + * Removes the global {@link #dragData} so the next call to {@link #initDragDataTransfer} + * always creates a new instance of {@link CKEDITOR.plugins.clipboard.dataTransfer}. + * + * @since 4.5 + */ + resetDragDataTransfer: function() { + this.dragData = null; + }, + + /** + * Global object storing the data transfer of the current drag and drop operation. + * Do not use it directly, use {@link #initDragDataTransfer} and {@link #resetDragDataTransfer}. + * + * Note: This object is global (meaning that it is not related to a single editor instance) + * in order to handle drag and drop from one editor into another. + * + * @since 4.5 + * @private + * @property {CKEDITOR.plugins.clipboard.dataTransfer} dragData + */ + + /** + * Range object to save the drag range and remove its content after the drop. + * + * @since 4.5 + * @private + * @property {CKEDITOR.dom.range} dragRange + */ + + /** + * Initializes and links data transfer objects based on the paste event. If the data + * transfer object was already initialized on this event, the function will + * return that object. In IE it is not possible to link copy/cut and paste events + * so the method always returns a new object. The same happens if there is no paste event + * passed to the method. + * + * @since 4.5 + * @param {CKEDITOR.dom.event} [evt] A paste event object. + * @param {CKEDITOR.editor} [sourceEditor] The source editor instance. + * @returns {CKEDITOR.plugins.clipboard.dataTransfer} The data transfer object. + */ + initPasteDataTransfer: function( evt, sourceEditor ) { + if ( !this.isCustomCopyCutSupported ) { + // Edge does not support custom copy/cut, but it have some useful data in the clipboardData (http://dev.ckeditor.com/ticket/13755). + return new this.dataTransfer( ( CKEDITOR.env.edge && evt && evt.data.$ && evt.data.$.clipboardData ) || null, sourceEditor ); + } else if ( evt && evt.data && evt.data.$ ) { + var dataTransfer = new this.dataTransfer( evt.data.$.clipboardData, sourceEditor ); + + if ( this.copyCutData && dataTransfer.id == this.copyCutData.id ) { + dataTransfer = this.copyCutData; + dataTransfer.$ = evt.data.$.clipboardData; + } else { + this.copyCutData = dataTransfer; + } + + return dataTransfer; + } else { + return new this.dataTransfer( null, sourceEditor ); + } + }, + + /** + * Prevents dropping on the specified element. + * + * @since 4.5 + * @param {CKEDITOR.dom.element} element The element on which dropping should be disabled. + */ + preventDefaultDropOnElement: function( element ) { + element && element.on( 'dragover', preventDefaultSetDropEffectToNone ); + } + }; + + // Data type used to link drag and drop events. + // + // In IE URL data type is buggie and there is no way to mark drag & drop without + // modifying text data (which would be displayed if user drop content to the textarea) + // so we just read dragged text. + // + // In Chrome and Firefox we can use custom data types. + var clipboardIdDataType = CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ? 'cke/id' : 'Text'; + /** + * Facade for the native `dataTransfer`/`clipboadData` object to hide all differences + * between browsers. + * + * @since 4.5 + * @class CKEDITOR.plugins.clipboard.dataTransfer + * @constructor Creates a class instance. + * @param {Object} [nativeDataTransfer] A native data transfer object. + * @param {CKEDITOR.editor} [editor] The source editor instance. If the editor is defined, dataValue will + * be created based on the editor content and the type will be 'html'. + */ + CKEDITOR.plugins.clipboard.dataTransfer = function( nativeDataTransfer, editor ) { + if ( nativeDataTransfer ) { + this.$ = nativeDataTransfer; + } + + this._ = { + metaRegExp: /^/i, + bodyRegExp: /([\s\S]*)<\/body>/i, + fragmentRegExp: //g, + + data: {}, + files: [], + + normalizeType: function( type ) { + type = type.toLowerCase(); + + if ( type == 'text' || type == 'text/plain' ) { + return 'Text'; // IE support only Text and URL; + } else if ( type == 'url' ) { + return 'URL'; // IE support only Text and URL; + } else { + return type; + } + } + }; + + // Check if ID is already created. + this.id = this.getData( clipboardIdDataType ); + + // If there is no ID we need to create it. Different browsers needs different ID. + if ( !this.id ) { + if ( clipboardIdDataType == 'Text' ) { + // For IE10+ only Text data type is supported and we have to compare dragged + // and dropped text. If the ID is not set it means that empty string was dragged + // (ex. image with no alt). We change null to empty string. + this.id = ''; + } else { + // String for custom data type. + this.id = 'cke-' + CKEDITOR.tools.getUniqueId(); + } + } + + // In IE10+ we can not use any data type besides text, so we do not call setData. + if ( clipboardIdDataType != 'Text' ) { + // Try to set ID so it will be passed from the drag to the drop event. + // On some browsers with some event it is not possible to setData so we + // need to catch exceptions. + try { + this.$.setData( clipboardIdDataType, this.id ); + } catch ( err ) {} + } + + if ( editor ) { + this.sourceEditor = editor; + + this.setData( 'text/html', editor.getSelectedHtml( 1 ) ); + + // Without setData( 'text', ... ) on dragstart there is no drop event in Safari. + // Also 'text' data is empty as drop to the textarea does not work if we do not put there text. + if ( clipboardIdDataType != 'Text' && !this.getData( 'text/plain' ) ) { + this.setData( 'text/plain', editor.getSelection().getSelectedText() ); + } + } + + /** + * Data transfer ID used to bind all dataTransfer + * objects based on the same event (e.g. in drag and drop events). + * + * @readonly + * @property {String} id + */ + + /** + * A native DOM event object. + * + * @readonly + * @property {Object} $ + */ + + /** + * Source editor — the editor where the drag starts. + * Might be undefined if the drag starts outside the editor (e.g. when dropping files to the editor). + * + * @readonly + * @property {CKEDITOR.editor} sourceEditor + */ + + /** + * Private properties and methods. + * + * @private + * @property {Object} _ + */ + }; + + /** + * Data transfer operation (drag and drop or copy and paste) started and ended in the same + * editor instance. + * + * @since 4.5 + * @readonly + * @property {Number} [=1] + * @member CKEDITOR + */ + CKEDITOR.DATA_TRANSFER_INTERNAL = 1; + + /** + * Data transfer operation (drag and drop or copy and paste) started in one editor + * instance and ended in another. + * + * @since 4.5 + * @readonly + * @property {Number} [=2] + * @member CKEDITOR + */ + CKEDITOR.DATA_TRANSFER_CROSS_EDITORS = 2; + + /** + * Data transfer operation (drag and drop or copy and paste) started outside of the editor. + * The source of the data may be a textarea, HTML, another application, etc. + * + * @since 4.5 + * @readonly + * @property {Number} [=3] + * @member CKEDITOR + */ + CKEDITOR.DATA_TRANSFER_EXTERNAL = 3; + + CKEDITOR.plugins.clipboard.dataTransfer.prototype = { + /** + * Facade for the native `getData` method. + * + * @param {String} type The type of data to retrieve. + * @param {Boolean} [getNative=false] Indicates if the whole, original content of the dataTransfer should be returned. + * Introduced in CKEditor 4.7.0. + * @returns {String} type Stored data for the given type or an empty string if the data for that type does not exist. + */ + getData: function( type, getNative ) { + function isEmpty( data ) { + return data === undefined || data === null || data === ''; + } + + function filterUnwantedCharacters( data ) { + if ( typeof data !== 'string' ) { + return data; + } + + var htmlEnd = data.indexOf( '' ); + + if ( htmlEnd !== -1 ) { + // Just cut everything after ``, so everything after htmlEnd index + length of ``. + // Required to workaround bug: https://bugs.chromium.org/p/chromium/issues/detail?id=696978 + return data.substring( 0, htmlEnd + 7 ); + } + + return data; + } + + type = this._.normalizeType( type ); + + var data = this._.data[ type ], + result; + + if ( isEmpty( data ) ) { + try { + data = this.$.getData( type ); + } catch ( e ) {} + } + + if ( isEmpty( data ) ) { + data = ''; + } + + // Some browsers add at the begging of the HTML data + // or surround it with ...(some content) and (some content) + // This code removes meta tags and returns only the contents of the element if found. Note that + // some significant content may be placed outside Start/EndFragment comments so it's kept. + // + // See http://dev.ckeditor.com/ticket/13583 for more details. + // Additionally http://dev.ckeditor.com/ticket/16847 adds a flag allowing to get the whole, original content. + if ( type == 'text/html' && !getNative ) { + data = data.replace( this._.metaRegExp, '' ); + + // Keep only contents of the element + result = this._.bodyRegExp.exec( data ); + if ( result && result.length ) { + data = result[ 1 ]; + + // Remove also comments. + data = data.replace( this._.fragmentRegExp, '' ); + } + } + // Firefox on Linux put files paths as a text/plain data if there are files + // in the dataTransfer object. We need to hide it, because files should be + // handled on paste only if dataValue is empty. + else if ( type == 'Text' && CKEDITOR.env.gecko && this.getFilesCount() && + data.substring( 0, 7 ) == 'file://' ) { + data = ''; + } + + return filterUnwantedCharacters( data ); + }, + + /** + * Facade for the native `setData` method. + * + * @param {String} type The type of data to retrieve. + * @param {String} value The data to add. + */ + setData: function( type, value ) { + type = this._.normalizeType( type ); + + this._.data[ type ] = value; + + // There is "Unexpected call to method or property access." error if you try + // to set data of unsupported type on IE. + if ( !CKEDITOR.plugins.clipboard.isCustomDataTypesSupported && type != 'URL' && type != 'Text' ) { + return; + } + + // If we use the text type to bind the ID, then if someone tries to set the text, we must also + // update ID accordingly. http://dev.ckeditor.com/ticket/13468. + if ( clipboardIdDataType == 'Text' && type == 'Text' ) { + this.id = value; + } + + try { + this.$.setData( type, value ); + } catch ( e ) {} + }, + + /** + * Gets the data transfer type. + * + * @param {CKEDITOR.editor} targetEditor The drop/paste target editor instance. + * @returns {Number} Possible values: {@link CKEDITOR#DATA_TRANSFER_INTERNAL}, + * {@link CKEDITOR#DATA_TRANSFER_CROSS_EDITORS}, {@link CKEDITOR#DATA_TRANSFER_EXTERNAL}. + */ + getTransferType: function( targetEditor ) { + if ( !this.sourceEditor ) { + return CKEDITOR.DATA_TRANSFER_EXTERNAL; + } else if ( this.sourceEditor == targetEditor ) { + return CKEDITOR.DATA_TRANSFER_INTERNAL; + } else { + return CKEDITOR.DATA_TRANSFER_CROSS_EDITORS; + } + }, + + /** + * Copies the data from the native data transfer to a private cache. + * This function is needed because the data from the native data transfer + * is available only synchronously to the event listener. It is not possible + * to get the data asynchronously, after a timeout, and the {@link CKEDITOR.editor#paste} + * event is fired asynchronously — hence the need for caching the data. + */ + cacheData: function() { + if ( !this.$ ) { + return; + } + + var that = this, + i, file; + + function getAndSetData( type ) { + type = that._.normalizeType( type ); + + var data = that.getData( type, true ); + if ( data ) { + that._.data[ type ] = data; + } + } + + // Copy data. + if ( CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ) { + if ( this.$.types ) { + for ( i = 0; i < this.$.types.length; i++ ) { + getAndSetData( this.$.types[ i ] ); + } + } + } else { + getAndSetData( 'Text' ); + getAndSetData( 'URL' ); + } + + // Copy files references. + file = this._getImageFromClipboard(); + if ( ( this.$ && this.$.files ) || file ) { + this._.files = []; + + // Edge have empty files property with no length (http://dev.ckeditor.com/ticket/13755). + if ( this.$.files && this.$.files.length ) { + for ( i = 0; i < this.$.files.length; i++ ) { + this._.files.push( this.$.files[ i ] ); + } + } + + // Don't include $.items if both $.files and $.items contains files, because, + // according to spec and browsers behavior, they contain the same files. + if ( this._.files.length === 0 && file ) { + this._.files.push( file ); + } + } + }, + + /** + * Gets the number of files in the dataTransfer object. + * + * @returns {Number} The number of files. + */ + getFilesCount: function() { + if ( this._.files.length ) { + return this._.files.length; + } + + if ( this.$ && this.$.files && this.$.files.length ) { + return this.$.files.length; + } + + return this._getImageFromClipboard() ? 1 : 0; + }, + + /** + * Gets the file at the index given. + * + * @param {Number} i Index. + * @returns {File} File instance. + */ + getFile: function( i ) { + if ( this._.files.length ) { + return this._.files[ i ]; + } + + if ( this.$ && this.$.files && this.$.files.length ) { + return this.$.files[ i ]; + } + + // File or null if the file was not found. + return i === 0 ? this._getImageFromClipboard() : undefined; + }, + + /** + * Checks if the data transfer contains any data. + * + * @returns {Boolean} `true` if the object contains no data. + */ + isEmpty: function() { + var typesToCheck = {}, + type; + + // If dataTransfer contains files it is not empty. + if ( this.getFilesCount() ) { + return false; + } + + // Add custom types. + for ( type in this._.data ) { + typesToCheck[ type ] = 1; + } + + // Add native types. + if ( this.$ ) { + if ( CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ) { + if ( this.$.types ) { + for ( var i = 0; i < this.$.types.length; i++ ) { + typesToCheck[ this.$.types[ i ] ] = 1; + } + } + } else { + typesToCheck.Text = 1; + typesToCheck.URL = 1; + } + } + + // Remove ID. + if ( clipboardIdDataType != 'Text' ) { + typesToCheck[ clipboardIdDataType ] = 0; + } + + for ( type in typesToCheck ) { + if ( typesToCheck[ type ] && this.getData( type ) !== '' ) { + return false; + } + } + + return true; + }, + + /** + * When the content of the clipboard is pasted in Chrome, the clipboard data object has an empty `files` property, + * but it is possible to get the file as `items[0].getAsFile();` (http://dev.ckeditor.com/ticket/12961). + * + * @private + * @returns {File} File instance or `null` if not found. + */ + _getImageFromClipboard: function() { + var file; + + if ( this.$ && this.$.items && this.$.items[ 0 ] ) { + try { + file = this.$.items[ 0 ].getAsFile(); + // Duck typing + if ( file && file.type ) { + return file; + } + } catch ( err ) { + // noop + } + } + + return undefined; + } + }; +} )(); + +/** + * The default content type that is used when pasted data cannot be clearly recognized as HTML or text. + * + * For example: `'foo'` may come from a plain text editor or a website. It is not possible to recognize the content + * type in this case, so the default type will be used. At the same time it is clear that `'example text'` is + * HTML and its origin is a web page, email or another rich text editor. + * + * **Note:** If content type is text, then styles of the paste context are preserved. + * + * CKEDITOR.config.clipboard_defaultContentType = 'text'; + * + * See also the {@link CKEDITOR.editor#paste} event and read more about the integration with clipboard + * in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard). + * + * @since 4.0 + * @cfg {'html'/'text'} [clipboard_defaultContentType='html'] + * @member CKEDITOR.config + */ + +/** + * Fired after the user initiated a paste action, but before the data is inserted into the editor. + * The listeners to this event are able to process the content before its insertion into the document. + * + * Read more about the integration with clipboard in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard). + * + * See also: + * + * * the {@link CKEDITOR.config#pasteFilter} option, + * * the {@link CKEDITOR.editor#drop} event, + * * the {@link CKEDITOR.plugins.clipboard.dataTransfer} class. + * + * @since 3.1 + * @event paste + * @member CKEDITOR.editor + * @param {CKEDITOR.editor} editor This editor instance. + * @param data + * @param {String} data.type The type of data in `data.dataValue`. Usually `'html'` or `'text'`, but for listeners + * with a priority smaller than `6` it may also be `'auto'` which means that the content type has not been recognised yet + * (this will be done by the content type sniffer that listens with priority `6`). + * @param {String} data.dataValue HTML to be pasted. + * @param {String} data.method Indicates the data transfer method. It could be drag and drop or copy and paste. + * Possible values: `'drop'`, `'paste'`. Introduced in CKEditor 4.5. + * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer Facade for the native dataTransfer object + * which provides access to various data types and files, and passes some data between linked events + * (like drag and drop). Introduced in CKEditor 4.5. + * @param {Boolean} [data.dontFilter=false] Whether the {@link CKEDITOR.editor#pasteFilter paste filter} should not + * be applied to data. This option has no effect when `data.type` equals `'text'` which means that for instance + * {@link CKEDITOR.config#forcePasteAsPlainText} has a higher priority. Introduced in CKEditor 4.5. + */ + +/** + * Fired before the {@link #paste} event. Allows to preset data type. + * + * **Note:** This event is deprecated. Add a `0` priority listener for the + * {@link #paste} event instead. + * + * @deprecated + * @event beforePaste + * @member CKEDITOR.editor + */ + +/** + * Fired after the {@link #paste} event if content was modified. Note that if the paste + * event does not insert any data, the `afterPaste` event will not be fired. + * + * @event afterPaste + * @member CKEDITOR.editor + */ + +/** + * Facade for the native `drop` event. Fired when the native `drop` event occurs. + * + * **Note:** To manipulate dropped data, use the {@link CKEDITOR.editor#paste} event. + * Use the `drop` event only to control drag and drop operations (e.g. to prevent the ability to drop some content). + * + * Read more about integration with drag and drop in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard). + * + * See also: + * + * * The {@link CKEDITOR.editor#paste} event, + * * The {@link CKEDITOR.editor#dragstart} and {@link CKEDITOR.editor#dragend} events, + * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class. + * + * @since 4.5 + * @event drop + * @member CKEDITOR.editor + * @param {CKEDITOR.editor} editor This editor instance. + * @param data + * @param {Object} data.$ Native drop event. + * @param {CKEDITOR.dom.node} data.target Drop target. + * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade. + * @param {CKEDITOR.dom.range} data.dragRange Drag range, lets you manipulate the drag range. + * Note that dragged HTML is saved as `text/html` data on `dragstart` so if you change the drag range + * on drop, dropped HTML will not change. You need to change it manually using + * {@link CKEDITOR.plugins.clipboard.dataTransfer#setData dataTransfer.setData}. + * @param {CKEDITOR.dom.range} data.dropRange Drop range, lets you manipulate the drop range. + */ + +/** + * Facade for the native `dragstart` event. Fired when the native `dragstart` event occurs. + * + * This event can be canceled in order to block the drag start operation. It can also be fired to mimic the start of the drag and drop + * operation. For instance, the `widget` plugin uses this option to integrate its custom block widget drag and drop with + * the entire system. + * + * Read more about integration with drag and drop in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard). + * + * See also: + * + * * The {@link CKEDITOR.editor#paste} event, + * * The {@link CKEDITOR.editor#drop} and {@link CKEDITOR.editor#dragend} events, + * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class. + * + * @since 4.5 + * @event dragstart + * @member CKEDITOR.editor + * @param {CKEDITOR.editor} editor This editor instance. + * @param data + * @param {Object} data.$ Native dragstart event. + * @param {CKEDITOR.dom.node} data.target Drag target. + * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade. + */ + +/** + * Facade for the native `dragend` event. Fired when the native `dragend` event occurs. + * + * Read more about integration with drag and drop in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard). + * + * See also: + * + * * The {@link CKEDITOR.editor#paste} event, + * * The {@link CKEDITOR.editor#drop} and {@link CKEDITOR.editor#dragend} events, + * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class. + * + * @since 4.5 + * @event dragend + * @member CKEDITOR.editor + * @param {CKEDITOR.editor} editor This editor instance. + * @param data + * @param {Object} data.$ Native dragend event. + * @param {CKEDITOR.dom.node} data.target Drag target. + * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade. + */ + +/** + * Defines a filter which is applied to external data pasted or dropped into the editor. Possible values are: + * + * * `'plain-text'` – Content will be pasted as a plain text. + * * `'semantic-content'` – Known tags (except `div`, `span`) with all attributes (except + * `style` and `class`) will be kept. + * * `'h1 h2 p div'` – Custom rules compatible with {@link CKEDITOR.filter}. + * * `null` – Content will not be filtered by the paste filter (but it still may be filtered + * by [Advanced Content Filter](#!/guide/dev_advanced_content_filter)). This value can be used to + * disable the paste filter in Chrome and Safari, where this option defaults to `'semantic-content'`. + * + * Example: + * + * config.pasteFilter = 'plain-text'; + * + * Custom setting: + * + * config.pasteFilter = 'h1 h2 p ul ol li; img[!src, alt]; a[!href]'; + * + * Based on this configuration option, a proper {@link CKEDITOR.filter} instance will be defined and assigned to the editor + * as a {@link CKEDITOR.editor#pasteFilter}. You can tweak the paste filter settings on the fly on this object + * as well as delete or replace it. + * + * var editor = CKEDITOR.replace( 'editor', { + * pasteFilter: 'semantic-content' + * } ); + * + * editor.on( 'instanceReady', function() { + * // The result of this will be that all semantic content will be preserved + * // except tables. + * editor.pasteFilter.disallow( 'table' ); + * } ); + * + * Note that the paste filter is applied only to **external** data. There are three data sources: + * + * * copied and pasted in the same editor (internal), + * * copied from one editor and pasted into another (cross-editor), + * * coming from all other sources like websites, MS Word, etc. (external). + * + * If {@link CKEDITOR.config#allowedContent Advanced Content Filter} is not disabled, then + * it will also be applied to pasted and dropped data. The paste filter job is to "normalize" + * external data which often needs to be handled differently than content produced by the editor. + * + * This setting defaults to `'semantic-content'` in Chrome, Opera and Safari (all Blink and Webkit based browsers) + * due to messy HTML which these browsers keep in the clipboard. In other browsers it defaults to `null`. + * + * @since 4.5 + * @cfg {String} [pasteFilter='semantic-content' in Chrome and Safari and `null` in other browsers] + * @member CKEDITOR.config + */ + +/** + * {@link CKEDITOR.filter Content filter} which is used when external data is pasted or dropped into the editor + * or a forced paste as plain text occurs. + * + * This object might be used on the fly to define rules for pasted external content. + * This object is available and used if the {@link CKEDITOR.plugins.clipboard clipboard} plugin is enabled and + * {@link CKEDITOR.config#pasteFilter} or {@link CKEDITOR.config#forcePasteAsPlainText} was defined. + * + * To enable the filter: + * + * var editor = CKEDITOR.replace( 'editor', { + * pasteFilter: 'plain-text' + * } ); + * + * You can also modify the filter on the fly later on: + * + * editor.pasteFilter = new CKEDITOR.filter( 'p h1 h2; a[!href]' ); + * + * Note that the paste filter is only applied to **external** data. There are three data sources: + * + * * copied and pasted in the same editor (internal), + * * copied from one editor and pasted into another (cross-editor), + * * coming from all other sources like websites, MS Word, etc. (external). + * + * If {@link CKEDITOR.config#allowedContent Advanced Content Filter} is not disabled, then + * it will also be applied to pasted and dropped data. The paste filter job is to "normalize" + * external data which often needs to be handled differently than content produced by the editor. + * + * @since 4.5 + * @readonly + * @property {CKEDITOR.filter} [pasteFilter] + * @member CKEDITOR.editor + */ + +/** + * Duration of the notification displayed after pasting was blocked by the browser. + * + * @since 4.7.0 + * @cfg {Number} [clipboard_notificationDuration=10000] + * @member CKEDITOR.config + */ +CKEDITOR.config.clipboard_notificationDuration = 10000; diff --git a/app/javascript/components/notifier/ckeditor/plugins/colordialog/dialogs/colordialog.css b/app/javascript/components/notifier/ckeditor/plugins/colordialog/dialogs/colordialog.css new file mode 100644 index 00000000000..3ec0d2a913c --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/colordialog/dialogs/colordialog.css @@ -0,0 +1,20 @@ +/** + * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +.cke_colordialog_colorcell { + width: 12px; /* All cells have equal width which depends on parent width (in this case table parent). Width works more like max-width. */ + height: 14px; + padding: 1px; /* Padding is replaced by border for focused cells. Prevents 'jumping' when adding borders. */ +} + +.cke_colordialog_colorcell.cke_colordialog_focused_light, +.cke_colordialog_colorcell.cke_colordialog_focused_dark { + padding: 0; /* Shrink cell to allow 1px border indicating focus. */ + border: 1px dotted #000; +} + +.cke_colordialog_colorcell.cke_colordialog_focused_dark { + border-color: #FFF; +} diff --git a/app/javascript/components/notifier/ckeditor/plugins/colordialog/dialogs/colordialog.js b/app/javascript/components/notifier/ckeditor/plugins/colordialog/dialogs/colordialog.js new file mode 100644 index 00000000000..ae32c15522a --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/colordialog/dialogs/colordialog.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("colordialog",function(x){function m(){h.getById(n).removeStyle("background-color");p.getContentElement("picker","selectedColor").setValue("");y()}function z(a){a=a.data.getTarget();var c;"td"==a.getName()&&(c=a.getChild(0).getHtml())&&(y(),f=a,f.setAttribute("aria-selected",!0),f.addClass("cke_colordialog_selected"),p.getContentElement("picker","selectedColor").setValue(c))}function y(){f&&(f.removeClass("cke_colordialog_selected"),f.removeAttribute("aria-selected"),f=null)}function D(a){a= +a.replace(/^#/,"");for(var c=0,b=[];2>=c;c++)b[c]=parseInt(a.substr(2*c,2),16);return 165<=.2126*b[0]+.7152*b[1]+.0722*b[2]}function A(a){!a.name&&(a=new CKEDITOR.event(a));var c=!/mouse/.test(a.name),b=a.data.getTarget(),g;"td"==b.getName()&&(g=b.getChild(0).getHtml())&&(q(a),c?d=b:B=b,c&&b.addClass(D(g)?"cke_colordialog_focused_light":"cke_colordialog_focused_dark"),r(g))}function q(a){if(a=!/mouse/.test(a.name)&&d)a.removeClass("cke_colordialog_focused_light"),a.removeClass("cke_colordialog_focused_dark"); +d||B||r(!1)}function r(a){a?(h.getById(t).setStyle("background-color",a),h.getById(u).setHtml(a)):(h.getById(t).removeStyle("background-color"),h.getById(u).setHtml("\x26nbsp;"))}function E(a){var c=a.data,b=c.getTarget(),g=c.getKeystroke(),e="rtl"==x.lang.dir;switch(g){case 38:if(a=b.getParent().getPrevious())a=a.getChild([b.getIndex()]),a.focus();c.preventDefault();break;case 40:(a=b.getParent().getNext())&&(a=a.getChild([b.getIndex()]))&&1==a.type&&a.focus();c.preventDefault();break;case 32:case 13:z(a); +c.preventDefault();break;case e?37:39:(a=b.getNext())?1==a.type&&(a.focus(),c.preventDefault(!0)):(a=b.getParent().getNext())&&(a=a.getChild([0]))&&1==a.type&&(a.focus(),c.preventDefault(!0));break;case e?39:37:if(a=b.getPrevious())a.focus(),c.preventDefault(!0);else if(a=b.getParent().getPrevious())a=a.getLast(),a.focus(),c.preventDefault(!0)}}var v=CKEDITOR.dom.element,h=CKEDITOR.document,e=x.lang.colordialog,p,f,C={type:"html",html:"\x26nbsp;"},d,B,l=function(a){return CKEDITOR.tools.getNextId()+ +"_"+a},t=l("hicolor"),u=l("hicolortext"),n=l("selhicolor"),k;(function(){function a(a,d){for(var w=a;wg;g++)c(f.$,"#"+b[e]+b[g]+b[w])}}function c(a,c){var b=new v(a.insertCell(-1));b.setAttribute("class","ColorCell cke_colordialog_colorcell");b.setAttribute("tabIndex",-1);b.setAttribute("role","gridcell");b.on("keydown",E);b.on("click",z);b.on("focus",A);b.on("blur",q);b.setStyle("background-color", +c);var d=l("color_table_cell");b.setAttribute("aria-labelledby",d);b.append(CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+d+'" class\x3d"cke_voice_label"\x3e'+c+"\x3c/span\x3e",CKEDITOR.document))}k=CKEDITOR.dom.element.createFromHtml('\x3ctable tabIndex\x3d"-1" class\x3d"cke_colordialog_table" aria-label\x3d"'+e.options+'" role\x3d"grid" style\x3d"border-collapse:separate;" cellspacing\x3d"0"\x3e\x3ccaption class\x3d"cke_voice_label"\x3e'+e.options+'\x3c/caption\x3e\x3ctbody role\x3d"presentation"\x3e\x3c/tbody\x3e\x3c/table\x3e'); +k.on("mouseover",A);k.on("mouseout",q);var b="00 33 66 99 cc ff".split(" ");a(0,0);a(3,0);a(0,3);a(3,3);var g=new v(k.$.insertRow(-1));g.setAttribute("role","row");c(g.$,"#000000");for(var f=0;16>f;f++){var d=f.toString(16);c(g.$,"#"+d+d+d+d+d+d)}c(g.$,"#ffffff")})();CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(CKEDITOR.plugins.get("colordialog").path+"dialogs/colordialog.css"));return{title:e.title,minWidth:360,minHeight:220,onLoad:function(){p=this},onHide:function(){m();d.removeClass("cke_colordialog_focused_light"); +d.removeClass("cke_colordialog_focused_dark");r(!1);d=null},contents:[{id:"picker",label:e.title,accessKey:"I",elements:[{type:"hbox",padding:0,widths:["70%","10%","30%"],children:[{type:"html",html:"\x3cdiv\x3e\x3c/div\x3e",onLoad:function(){CKEDITOR.document.getById(this.domId).append(k)},focus:function(){(d||this.getElement().getElementsByTag("td").getItem(0)).focus()}},C,{type:"vbox",padding:0,widths:["70%","5%","25%"],children:[{type:"html",html:"\x3cspan\x3e"+e.highlight+'\x3c/span\x3e\x3cdiv id\x3d"'+ +t+'" style\x3d"border: 1px solid; height: 74px; width: 74px;"\x3e\x3c/div\x3e\x3cdiv id\x3d"'+u+'"\x3e\x26nbsp;\x3c/div\x3e\x3cspan\x3e'+e.selected+'\x3c/span\x3e\x3cdiv id\x3d"'+n+'" style\x3d"border: 1px solid; height: 20px; width: 74px;"\x3e\x3c/div\x3e'},{type:"text",label:e.selected,labelStyle:"display:none",id:"selectedColor",style:"width: 76px;margin-top:4px",onChange:function(){try{h.getById(n).setStyle("background-color",this.getValue())}catch(a){m()}}},C,{type:"button",id:"clear",label:e.clear, +onClick:m}]}]}]}]}}); \ No newline at end of file diff --git a/app/javascript/components/notifier/ckeditor/plugins/copyformatting/cursors/cursor-disabled.svg b/app/javascript/components/notifier/ckeditor/plugins/copyformatting/cursors/cursor-disabled.svg new file mode 100644 index 00000000000..9298aefd8ae --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/copyformatting/cursors/cursor-disabled.svg @@ -0,0 +1,25 @@ + + + + cursor_disabled + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/javascript/components/notifier/ckeditor/plugins/copyformatting/cursors/cursor.svg b/app/javascript/components/notifier/ckeditor/plugins/copyformatting/cursors/cursor.svg new file mode 100644 index 00000000000..95951478f01 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/copyformatting/cursors/cursor.svg @@ -0,0 +1,14 @@ + + + cursor + + + + + + + + + + + diff --git a/app/javascript/components/notifier/ckeditor/plugins/copyformatting/styles/copyformatting.css b/app/javascript/components/notifier/ckeditor/plugins/copyformatting/styles/copyformatting.css new file mode 100644 index 00000000000..4f87834e4dc --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/copyformatting/styles/copyformatting.css @@ -0,0 +1,45 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +html.cke_copyformatting_active { + min-height: 100%; +} + +/* There is no cursor in CUR format for IE/Edge as that browser + does not support custom cursor in [contenteditable] area. + Ticket for this issue: + https://connect.microsoft.com/IE/feedback/details/1070215/cant-change-cursor-in-contenteditable-using-css */ +.cke_copyformatting_disabled, +.cke_copyformatting_disabled a, +.cke_copyformatting_disabled .cke_editable { + cursor: url(../cursors/cursor-disabled.svg) 12 1, auto; +} + +.cke_copyformatting_disabled .cke_top a, +.cke_copyformatting_disabled .cke_bottom a { + cursor: default; +} + +/* Added `!important` rule as a fix for overriding the cursor by the Table Resize plugin. + The `!important` rule is used because the Table Resize plugin creates a `

` which changes the cursor using inlined styles. */ +.cke_copyformatting_active, +.cke_copyformatting_active.cke_editable, +.cke_copyformatting_active .cke_editable, +.cke_copyformatting_active a, +.cke_copyformatting_active table, +.cke_copyformatting_active div[data-cke-temp], +.cke_copyformatting_tableresize_cursor div[data-cke-temp] { + cursor: url(../cursors/cursor.svg) 12 1, auto !important; +} + +.cke_screen_reader_only { + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + padding: 0; + border: 0; + height: 1px; + width: 1px; + overflow: hidden; +} diff --git a/app/javascript/components/notifier/ckeditor/plugins/dialog/dialogDefinition.js b/app/javascript/components/notifier/ckeditor/plugins/dialog/dialogDefinition.js new file mode 100644 index 00000000000..5c35976dfa0 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/dialog/dialogDefinition.js @@ -0,0 +1,4 @@ +/* + Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ diff --git a/app/javascript/components/notifier/ckeditor/plugins/dialog/plugin.js b/app/javascript/components/notifier/ckeditor/plugins/dialog/plugin.js new file mode 100644 index 00000000000..fa9f8713ddc --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/dialog/plugin.js @@ -0,0 +1,3404 @@ +/** + * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * @fileOverview The floating dialog plugin. + */ + +/** + * No resize for this dialog. + * + * @readonly + * @property {Number} [=0] + * @member CKEDITOR + */ +CKEDITOR.DIALOG_RESIZE_NONE = 0; + +/** + * Only allow horizontal resizing for this dialog, disable vertical resizing. + * + * @readonly + * @property {Number} [=1] + * @member CKEDITOR + */ +CKEDITOR.DIALOG_RESIZE_WIDTH = 1; + +/** + * Only allow vertical resizing for this dialog, disable horizontal resizing. + * + * @readonly + * @property {Number} [=2] + * @member CKEDITOR + */ +CKEDITOR.DIALOG_RESIZE_HEIGHT = 2; + +/** + * Allow the dialog to be resized in both directions. + * + * @readonly + * @property {Number} [=3] + * @member CKEDITOR + */ +CKEDITOR.DIALOG_RESIZE_BOTH = 3; + +/** + * Dialog state when idle. + * + * @readonly + * @property {Number} [=1] + * @member CKEDITOR + */ +CKEDITOR.DIALOG_STATE_IDLE = 1; + +/** + * Dialog state when busy. + * + * @readonly + * @property {Number} [=2] + * @member CKEDITOR + */ +CKEDITOR.DIALOG_STATE_BUSY = 2; + +( function() { + var cssLength = CKEDITOR.tools.cssLength; + + function isTabVisible( tabId ) { + return !!this._.tabs[ tabId ][ 0 ].$.offsetHeight; + } + + function getPreviousVisibleTab() { + var tabId = this._.currentTabId, + length = this._.tabIdList.length, + tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ) + length; + + for ( var i = tabIndex - 1; i > tabIndex - length; i-- ) { + if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) ) + return this._.tabIdList[ i % length ]; + } + + return null; + } + + function getNextVisibleTab() { + var tabId = this._.currentTabId, + length = this._.tabIdList.length, + tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ); + + for ( var i = tabIndex + 1; i < tabIndex + length; i++ ) { + if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) ) + return this._.tabIdList[ i % length ]; + } + + return null; + } + + + function clearOrRecoverTextInputValue( container, isRecover ) { + var inputs = container.$.getElementsByTagName( 'input' ); + for ( var i = 0, length = inputs.length; i < length; i++ ) { + var item = new CKEDITOR.dom.element( inputs[ i ] ); + + if ( item.getAttribute( 'type' ).toLowerCase() == 'text' ) { + if ( isRecover ) { + item.setAttribute( 'value', item.getCustomData( 'fake_value' ) || '' ); + item.removeCustomData( 'fake_value' ); + } else { + item.setCustomData( 'fake_value', item.getAttribute( 'value' ) ); + item.setAttribute( 'value', '' ); + } + } + } + } + + // Handle dialog element validation state UI changes. + function handleFieldValidated( isValid, msg ) { + var input = this.getInputElement(); + if ( input ) + isValid ? input.removeAttribute( 'aria-invalid' ) : input.setAttribute( 'aria-invalid', true ); + + if ( !isValid ) { + if ( this.select ) + this.select(); + else + this.focus(); + } + + msg && alert( msg ); // jshint ignore:line + + this.fire( 'validated', { valid: isValid, msg: msg } ); + } + + function resetField() { + var input = this.getInputElement(); + input && input.removeAttribute( 'aria-invalid' ); + } + + var templateSource = ''; + + function buildDialog( editor ) { + var element = CKEDITOR.dom.element.createFromHtml( CKEDITOR.addTemplate( 'dialog', templateSource ).output( { + id: CKEDITOR.tools.getNextNumber(), + editorId: editor.id, + langDir: editor.lang.dir, + langCode: editor.langCode, + editorDialogClass: 'cke_editor_' + editor.name.replace( /\./g, '\\.' ) + '_dialog', + closeTitle: editor.lang.common.close, + hidpi: CKEDITOR.env.hidpi ? 'cke_hidpi' : '' + } ) ); + + // TODO: Change this to getById(), so it'll support custom templates. + var body = element.getChild( [ 0, 0, 0, 0, 0 ] ), + title = body.getChild( 0 ), + close = body.getChild( 1 ); + + // Don't allow dragging on dialog (http://dev.ckeditor.com/ticket/13184). + editor.plugins.clipboard && CKEDITOR.plugins.clipboard.preventDefaultDropOnElement( body ); + + // IFrame shim for dialog that masks activeX in IE. (http://dev.ckeditor.com/ticket/7619) + if ( CKEDITOR.env.ie && !CKEDITOR.env.quirks && !CKEDITOR.env.edge ) { + var src = 'javascript:void(function(){' + encodeURIComponent( 'document.open();(' + CKEDITOR.tools.fixDomain + ')();document.close();' ) + '}())', // jshint ignore:line + iframe = CKEDITOR.dom.element.createFromHtml( '' ); + iframe.appendTo( body.getParent() ); + } + + // Make the Title and Close Button unselectable. + title.unselectable(); + close.unselectable(); + + return { + element: element, + parts: { + dialog: element.getChild( 0 ), + title: title, + close: close, + tabs: body.getChild( 2 ), + contents: body.getChild( [ 3, 0, 0, 0 ] ), + footer: body.getChild( [ 3, 0, 1, 0 ] ) + } + }; + } + + /** + * This is the base class for runtime dialog objects. An instance of this + * class represents a single named dialog for a single editor instance. + * + * var dialogObj = new CKEDITOR.dialog( editor, 'smiley' ); + * + * @class + * @constructor Creates a dialog class instance. + * @param {Object} editor The editor which created the dialog. + * @param {String} dialogName The dialog's registered name. + */ + CKEDITOR.dialog = function( editor, dialogName ) { + // Load the dialog definition. + var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ], + defaultDefinition = CKEDITOR.tools.clone( defaultDialogDefinition ), + buttonsOrder = editor.config.dialog_buttonsOrder || 'OS', + dir = editor.lang.dir, + tabsToRemove = {}, + i, processed, stopPropagation; + + if ( ( buttonsOrder == 'OS' && CKEDITOR.env.mac ) || // The buttons in MacOS Apps are in reverse order (http://dev.ckeditor.com/ticket/4750) + ( buttonsOrder == 'rtl' && dir == 'ltr' ) || ( buttonsOrder == 'ltr' && dir == 'rtl' ) ) + defaultDefinition.buttons.reverse(); + + + // Completes the definition with the default values. + definition = CKEDITOR.tools.extend( definition( editor ), defaultDefinition ); + + // Clone a functionally independent copy for this dialog. + definition = CKEDITOR.tools.clone( definition ); + + // Create a complex definition object, extending it with the API + // functions. + definition = new definitionObject( this, definition ); + + var themeBuilt = buildDialog( editor ); + + // Initialize some basic parameters. + this._ = { + editor: editor, + element: themeBuilt.element, + name: dialogName, + contentSize: { width: 0, height: 0 }, + size: { width: 0, height: 0 }, + contents: {}, + buttons: {}, + accessKeyMap: {}, + + // Initialize the tab and page map. + tabs: {}, + tabIdList: [], + currentTabId: null, + currentTabIndex: null, + pageCount: 0, + lastTab: null, + tabBarMode: false, + + // Initialize the tab order array for input widgets. + focusList: [], + currentFocusIndex: 0, + hasFocus: false + }; + + this.parts = themeBuilt.parts; + + CKEDITOR.tools.setTimeout( function() { + editor.fire( 'ariaWidget', this.parts.contents ); + }, 0, this ); + + // Set the startup styles for the dialog, avoiding it enlarging the + // page size on the dialog creation. + var startStyles = { + position: CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed', + top: 0, + visibility: 'hidden' + }; + + startStyles[ dir == 'rtl' ? 'right' : 'left' ] = 0; + this.parts.dialog.setStyles( startStyles ); + + + // Call the CKEDITOR.event constructor to initialize this instance. + CKEDITOR.event.call( this ); + + // Fire the "dialogDefinition" event, making it possible to customize + // the dialog definition. + this.definition = definition = CKEDITOR.fire( 'dialogDefinition', { + name: dialogName, + definition: definition + }, editor ).definition; + + // Cache tabs that should be removed. + if ( !( 'removeDialogTabs' in editor._ ) && editor.config.removeDialogTabs ) { + var removeContents = editor.config.removeDialogTabs.split( ';' ); + + for ( i = 0; i < removeContents.length; i++ ) { + var parts = removeContents[ i ].split( ':' ); + if ( parts.length == 2 ) { + var removeDialogName = parts[ 0 ]; + if ( !tabsToRemove[ removeDialogName ] ) + tabsToRemove[ removeDialogName ] = []; + tabsToRemove[ removeDialogName ].push( parts[ 1 ] ); + } + } + editor._.removeDialogTabs = tabsToRemove; + } + + // Remove tabs of this dialog. + if ( editor._.removeDialogTabs && ( tabsToRemove = editor._.removeDialogTabs[ dialogName ] ) ) { + for ( i = 0; i < tabsToRemove.length; i++ ) + definition.removeContents( tabsToRemove[ i ] ); + } + + // Initialize load, show, hide, ok and cancel events. + if ( definition.onLoad ) + this.on( 'load', definition.onLoad ); + + if ( definition.onShow ) + this.on( 'show', definition.onShow ); + + if ( definition.onHide ) + this.on( 'hide', definition.onHide ); + + if ( definition.onOk ) { + this.on( 'ok', function( evt ) { + // Dialog confirm might probably introduce content changes (http://dev.ckeditor.com/ticket/5415). + editor.fire( 'saveSnapshot' ); + setTimeout( function() { + editor.fire( 'saveSnapshot' ); + }, 0 ); + if ( definition.onOk.call( this, evt ) === false ) + evt.data.hide = false; + } ); + } + + // Set default dialog state. + this.state = CKEDITOR.DIALOG_STATE_IDLE; + + if ( definition.onCancel ) { + this.on( 'cancel', function( evt ) { + if ( definition.onCancel.call( this, evt ) === false ) + evt.data.hide = false; + } ); + } + + var me = this; + + // Iterates over all items inside all content in the dialog, calling a + // function for each of them. + var iterContents = function( func ) { + var contents = me._.contents, + stop = false; + + for ( var i in contents ) { + for ( var j in contents[ i ] ) { + stop = func.call( this, contents[ i ][ j ] ); + if ( stop ) + return; + } + } + }; + + this.on( 'ok', function( evt ) { + iterContents( function( item ) { + if ( item.validate ) { + var retval = item.validate( this ), + invalid = ( typeof retval == 'string' ) || retval === false; + + if ( invalid ) { + evt.data.hide = false; + evt.stop(); + } + + handleFieldValidated.call( item, !invalid, typeof retval == 'string' ? retval : undefined ); + return invalid; + } + } ); + }, this, null, 0 ); + + this.on( 'cancel', function( evt ) { + iterContents( function( item ) { + if ( item.isChanged() ) { + if ( !editor.config.dialog_noConfirmCancel && !confirm( editor.lang.common.confirmCancel ) ) // jshint ignore:line + evt.data.hide = false; + return true; + } + } ); + }, this, null, 0 ); + + this.parts.close.on( 'click', function( evt ) { + if ( this.fire( 'cancel', { hide: true } ).hide !== false ) + this.hide(); + evt.data.preventDefault(); + }, this ); + + // Sort focus list according to tab order definitions. + function setupFocus() { + var focusList = me._.focusList; + focusList.sort( function( a, b ) { + // Mimics browser tab order logics; + if ( a.tabIndex != b.tabIndex ) + return b.tabIndex - a.tabIndex; + // Sort is not stable in some browsers, + // fall-back the comparator to 'focusIndex'; + else + return a.focusIndex - b.focusIndex; + } ); + + var size = focusList.length; + for ( var i = 0; i < size; i++ ) + focusList[ i ].focusIndex = i; + } + + // Expects 1 or -1 as an offset, meaning direction of the offset change. + function changeFocus( offset ) { + var focusList = me._.focusList; + offset = offset || 0; + + if ( focusList.length < 1 ) + return; + + var startIndex = me._.currentFocusIndex; + + if ( me._.tabBarMode && offset < 0 ) { + // If we are in tab mode, we need to mimic that we started tabbing back from the first + // focusList (so it will go to the last one). + startIndex = 0; + } + + // Trigger the 'blur' event of any input element before anything, + // since certain UI updates may depend on it. + try { + focusList[ startIndex ].getInputElement().$.blur(); + } catch ( e ) {} + + var currentIndex = startIndex, + hasTabs = me._.pageCount > 1; + + do { + currentIndex = currentIndex + offset; + + if ( hasTabs && !me._.tabBarMode && ( currentIndex == focusList.length || currentIndex == -1 ) ) { + // If the dialog was not in tab mode, then focus the first tab (http://dev.ckeditor.com/ticket/13027). + me._.tabBarMode = true; + me._.tabs[ me._.currentTabId ][ 0 ].focus(); + me._.currentFocusIndex = -1; + + // Early return, in order to avoid accessing focusList[ -1 ]. + return; + } + + currentIndex = ( currentIndex + focusList.length ) % focusList.length; + + if ( currentIndex == startIndex ) { + break; + } + } while ( offset && !focusList[ currentIndex ].isFocusable() ); + + focusList[ currentIndex ].focus(); + + // Select whole field content. + if ( focusList[ currentIndex ].type == 'text' ) + focusList[ currentIndex ].select(); + } + + this.changeFocus = changeFocus; + + + function keydownHandler( evt ) { + // If I'm not the top dialog, ignore. + if ( me != CKEDITOR.dialog._.currentTop ) + return; + + var keystroke = evt.data.getKeystroke(), + rtl = editor.lang.dir == 'rtl', + arrowKeys = [ 37, 38, 39, 40 ], + button; + + processed = stopPropagation = 0; + + if ( keystroke == 9 || keystroke == CKEDITOR.SHIFT + 9 ) { + var shiftPressed = ( keystroke == CKEDITOR.SHIFT + 9 ); + changeFocus( shiftPressed ? -1 : 1 ); + processed = 1; + } else if ( keystroke == CKEDITOR.ALT + 121 && !me._.tabBarMode && me.getPageCount() > 1 ) { + // Alt-F10 puts focus into the current tab item in the tab bar. + me._.tabBarMode = true; + me._.tabs[ me._.currentTabId ][ 0 ].focus(); + me._.currentFocusIndex = -1; + processed = 1; + } else if ( CKEDITOR.tools.indexOf( arrowKeys, keystroke ) != -1 && me._.tabBarMode ) { + // Array with key codes that activate previous tab. + var prevKeyCodes = [ + // Depending on the lang dir: right or left key + rtl ? 39 : 37, + // Top/bot arrow: actually for both cases it's the same. + 38 + ], + nextId = CKEDITOR.tools.indexOf( prevKeyCodes, keystroke ) != -1 ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ); + + me.selectPage( nextId ); + me._.tabs[ nextId ][ 0 ].focus(); + processed = 1; + } else if ( ( keystroke == 13 || keystroke == 32 ) && me._.tabBarMode ) { + this.selectPage( this._.currentTabId ); + this._.tabBarMode = false; + this._.currentFocusIndex = -1; + changeFocus( 1 ); + processed = 1; + } + // If user presses enter key in a text box, it implies clicking OK for the dialog. + else if ( keystroke == 13 /*ENTER*/ ) { + // Don't do that for a target that handles ENTER. + var target = evt.data.getTarget(); + if ( !target.is( 'a', 'button', 'select', 'textarea' ) && ( !target.is( 'input' ) || target.$.type != 'button' ) ) { + button = this.getButton( 'ok' ); + button && CKEDITOR.tools.setTimeout( button.click, 0, button ); + processed = 1; + } + stopPropagation = 1; // Always block the propagation (http://dev.ckeditor.com/ticket/4269) + } else if ( keystroke == 27 /*ESC*/ ) { + button = this.getButton( 'cancel' ); + + // If there's a Cancel button, click it, else just fire the cancel event and hide the dialog. + if ( button ) + CKEDITOR.tools.setTimeout( button.click, 0, button ); + else { + if ( this.fire( 'cancel', { hide: true } ).hide !== false ) + this.hide(); + } + stopPropagation = 1; // Always block the propagation (http://dev.ckeditor.com/ticket/4269) + } else { + return; + } + + keypressHandler( evt ); + } + + function keypressHandler( evt ) { + if ( processed ) + evt.data.preventDefault( 1 ); + else if ( stopPropagation ) + evt.data.stopPropagation(); + } + + var dialogElement = this._.element; + + editor.focusManager.add( dialogElement, 1 ); + + // Add the dialog keyboard handlers. + this.on( 'show', function() { + dialogElement.on( 'keydown', keydownHandler, this ); + + // Some browsers instead, don't cancel key events in the keydown, but in the + // keypress. So we must do a longer trip in those cases. (http://dev.ckeditor.com/ticket/4531,http://dev.ckeditor.com/ticket/8985) + if ( CKEDITOR.env.gecko ) + dialogElement.on( 'keypress', keypressHandler, this ); + + } ); + this.on( 'hide', function() { + dialogElement.removeListener( 'keydown', keydownHandler ); + if ( CKEDITOR.env.gecko ) + dialogElement.removeListener( 'keypress', keypressHandler ); + + // Reset fields state when closing dialog. + iterContents( function( item ) { + resetField.apply( item ); + } ); + } ); + this.on( 'iframeAdded', function( evt ) { + var doc = new CKEDITOR.dom.document( evt.data.iframe.$.contentWindow.document ); + doc.on( 'keydown', keydownHandler, this, null, 0 ); + } ); + + // Auto-focus logic in dialog. + this.on( 'show', function() { + // Setup tabIndex on showing the dialog instead of on loading + // to allow dynamic tab order happen in dialog definition. + setupFocus(); + + var hasTabs = me._.pageCount > 1; + + if ( editor.config.dialog_startupFocusTab && hasTabs ) { + me._.tabBarMode = true; + me._.tabs[ me._.currentTabId ][ 0 ].focus(); + me._.currentFocusIndex = -1; + } else if ( !this._.hasFocus ) { + // http://dev.ckeditor.com/ticket/13114#comment:4. + this._.currentFocusIndex = hasTabs ? -1 : this._.focusList.length - 1; + + // Decide where to put the initial focus. + if ( definition.onFocus ) { + var initialFocus = definition.onFocus.call( this ); + // Focus the field that the user specified. + initialFocus && initialFocus.focus(); + } + // Focus the first field in layout order. + else { + changeFocus( 1 ); + } + } + }, this, null, 0xffffffff ); + + // IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (http://dev.ckeditor.com/ticket/2661). + // This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken. + if ( CKEDITOR.env.ie6Compat ) { + this.on( 'load', function() { + var outer = this.getElement(), + inner = outer.getFirst(); + inner.remove(); + inner.appendTo( outer ); + }, this ); + } + + initDragAndDrop( this ); + initResizeHandles( this ); + + // Insert the title. + ( new CKEDITOR.dom.text( definition.title, CKEDITOR.document ) ).appendTo( this.parts.title ); + + // Insert the tabs and contents. + for ( i = 0; i < definition.contents.length; i++ ) { + var page = definition.contents[ i ]; + page && this.addPage( page ); + } + + this.parts.tabs.on( 'click', function( evt ) { + var target = evt.data.getTarget(); + // If we aren't inside a tab, bail out. + if ( target.hasClass( 'cke_dialog_tab' ) ) { + // Get the ID of the tab, without the 'cke_' prefix and the unique number suffix. + var id = target.$.id; + this.selectPage( id.substring( 4, id.lastIndexOf( '_' ) ) ); + + if ( this._.tabBarMode ) { + this._.tabBarMode = false; + this._.currentFocusIndex = -1; + changeFocus( 1 ); + } + evt.data.preventDefault(); + } + }, this ); + + // Insert buttons. + var buttonsHtml = [], + buttons = CKEDITOR.dialog._.uiElementBuilders.hbox.build( this, { + type: 'hbox', + className: 'cke_dialog_footer_buttons', + widths: [], + children: definition.buttons + }, buttonsHtml ).getChild(); + this.parts.footer.setHtml( buttonsHtml.join( '' ) ); + + for ( i = 0; i < buttons.length; i++ ) + this._.buttons[ buttons[ i ].id ] = buttons[ i ]; + + /** + * Current state of the dialog. Use the {@link #setState} method to update it. + * See the {@link #event-state} event to know more. + * + * @readonly + * @property {Number} [state=CKEDITOR.DIALOG_STATE_IDLE] + */ + }; + + // Focusable interface. Use it via dialog.addFocusable. + function Focusable( dialog, element, index ) { + this.element = element; + this.focusIndex = index; + // TODO: support tabIndex for focusables. + this.tabIndex = 0; + this.isFocusable = function() { + return !element.getAttribute( 'disabled' ) && element.isVisible(); + }; + this.focus = function() { + dialog._.currentFocusIndex = this.focusIndex; + this.element.focus(); + }; + // Bind events + element.on( 'keydown', function( e ) { + if ( e.data.getKeystroke() in { 32: 1, 13: 1 } ) + this.fire( 'click' ); + } ); + element.on( 'focus', function() { + this.fire( 'mouseover' ); + } ); + element.on( 'blur', function() { + this.fire( 'mouseout' ); + } ); + } + + // Re-layout the dialog on window resize. + function resizeWithWindow( dialog ) { + var win = CKEDITOR.document.getWindow(); + function resizeHandler() { + dialog.layout(); + } + win.on( 'resize', resizeHandler ); + dialog.on( 'hide', function() { + win.removeListener( 'resize', resizeHandler ); + } ); + } + + CKEDITOR.dialog.prototype = { + destroy: function() { + this.hide(); + this._.element.remove(); + }, + + /** + * Resizes the dialog. + * + * dialogObj.resize( 800, 640 ); + * + * @method + * @param {Number} width The width of the dialog in pixels. + * @param {Number} height The height of the dialog in pixels. + */ + resize: ( function() { + return function( width, height ) { + if ( this._.contentSize && this._.contentSize.width == width && this._.contentSize.height == height ) + return; + + CKEDITOR.dialog.fire( 'resize', { + dialog: this, + width: width, + height: height + }, this._.editor ); + + this.fire( 'resize', { + width: width, + height: height + }, this._.editor ); + + var contents = this.parts.contents; + contents.setStyles( { + width: width + 'px', + height: height + 'px' + } ); + + // Update dialog position when dimension get changed in RTL. + if ( this._.editor.lang.dir == 'rtl' && this._.position ) + this._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width - this._.contentSize.width - parseInt( this._.element.getFirst().getStyle( 'right' ), 10 ); + + this._.contentSize = { width: width, height: height }; + }; + } )(), + + /** + * Gets the current size of the dialog in pixels. + * + * var width = dialogObj.getSize().width; + * + * @returns {Object} + * @returns {Number} return.width + * @returns {Number} return.height + */ + getSize: function() { + var element = this._.element.getFirst(); + return { width: element.$.offsetWidth || 0, height: element.$.offsetHeight || 0 }; + }, + + /** + * Moves the dialog to an `(x, y)` coordinate relative to the window. + * + * dialogObj.move( 10, 40 ); + * + * @method + * @param {Number} x The target x-coordinate. + * @param {Number} y The target y-coordinate. + * @param {Boolean} save Flag indicate whether the dialog position should be remembered on next open up. + */ + move: function( x, y, save ) { + + // The dialog may be fixed positioned or absolute positioned. Ask the + // browser what is the current situation first. + var element = this._.element.getFirst(), rtl = this._.editor.lang.dir == 'rtl'; + var isFixed = element.getComputedStyle( 'position' ) == 'fixed'; + + // (http://dev.ckeditor.com/ticket/8888) In some cases of a very small viewport, dialog is incorrectly + // positioned in IE7. It also happens that it remains sticky and user cannot + // scroll down/up to reveal dialog's content below/above the viewport; this is + // cumbersome. + // The only way to fix this is to move mouse out of the browser and + // go back to see that dialog position is automagically fixed. No events, + // no style change - pure magic. This is a IE7 rendering issue, which can be + // fixed with dummy style redraw on each move. + if ( CKEDITOR.env.ie ) + element.setStyle( 'zoom', '100%' ); + + if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y ) + return; + + // Save the current position. + this._.position = { x: x, y: y }; + + // If not fixed positioned, add scroll position to the coordinates. + if ( !isFixed ) { + var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition(); + x += scrollPosition.x; + y += scrollPosition.y; + } + + // Translate coordinate for RTL. + if ( rtl ) { + var dialogSize = this.getSize(), viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(); + x = viewPaneSize.width - dialogSize.width - x; + } + + var styles = { 'top': ( y > 0 ? y : 0 ) + 'px' }; + styles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px'; + + element.setStyles( styles ); + + save && ( this._.moved = 1 ); + }, + + /** + * Gets the dialog's position in the window. + * + * var dialogX = dialogObj.getPosition().x; + * + * @returns {Object} + * @returns {Number} return.x + * @returns {Number} return.y + */ + getPosition: function() { + return CKEDITOR.tools.extend( {}, this._.position ); + }, + + /** + * Shows the dialog box. + * + * dialogObj.show(); + */ + show: function() { + // Insert the dialog's element to the root document. + var element = this._.element; + var definition = this.definition; + if ( !( element.getParent() && element.getParent().equals( CKEDITOR.document.getBody() ) ) ) + element.appendTo( CKEDITOR.document.getBody() ); + else + element.setStyle( 'display', 'block' ); + + // First, set the dialog to an appropriate size. + this.resize( + this._.contentSize && this._.contentSize.width || definition.width || definition.minWidth, + this._.contentSize && this._.contentSize.height || definition.height || definition.minHeight + ); + + // Reset all inputs back to their default value. + this.reset(); + + // Select the first tab by default. + this.selectPage( this.definition.contents[ 0 ].id ); + + // Set z-index. + if ( CKEDITOR.dialog._.currentZIndex === null ) + CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex; + this._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 ); + + // Maintain the dialog ordering and dialog cover. + if ( CKEDITOR.dialog._.currentTop === null ) { + CKEDITOR.dialog._.currentTop = this; + this._.parentDialog = null; + showCover( this._.editor ); + + } else { + this._.parentDialog = CKEDITOR.dialog._.currentTop; + var parentElement = this._.parentDialog.getElement().getFirst(); + parentElement.$.style.zIndex -= Math.floor( this._.editor.config.baseFloatZIndex / 2 ); + CKEDITOR.dialog._.currentTop = this; + } + + element.on( 'keydown', accessKeyDownHandler ); + element.on( 'keyup', accessKeyUpHandler ); + + // Reset the hasFocus state. + this._.hasFocus = false; + + for ( var i in definition.contents ) { + if ( !definition.contents[ i ] ) + continue; + + var content = definition.contents[ i ], + tab = this._.tabs[ content.id ], + requiredContent = content.requiredContent, + enableElements = 0; + + if ( !tab ) + continue; + + for ( var j in this._.contents[ content.id ] ) { + var elem = this._.contents[ content.id ][ j ]; + + if ( elem.type == 'hbox' || elem.type == 'vbox' || !elem.getInputElement() ) + continue; + + if ( elem.requiredContent && !this._.editor.activeFilter.check( elem.requiredContent ) ) + elem.disable(); + else { + elem.enable(); + enableElements++; + } + } + + if ( !enableElements || ( requiredContent && !this._.editor.activeFilter.check( requiredContent ) ) ) + tab[ 0 ].addClass( 'cke_dialog_tab_disabled' ); + else + tab[ 0 ].removeClass( 'cke_dialog_tab_disabled' ); + } + + CKEDITOR.tools.setTimeout( function() { + this.layout(); + resizeWithWindow( this ); + + this.parts.dialog.setStyle( 'visibility', '' ); + + // Execute onLoad for the first show. + this.fireOnce( 'load', {} ); + CKEDITOR.ui.fire( 'ready', this ); + + this.fire( 'show', {} ); + this._.editor.fire( 'dialogShow', this ); + + if ( !this._.parentDialog ) + this._.editor.focusManager.lock(); + + // Save the initial values of the dialog. + this.foreach( function( contentObj ) { + contentObj.setInitValue && contentObj.setInitValue(); + } ); + + }, 100, this ); + }, + + /** + * Rearrange the dialog to its previous position or the middle of the window. + * + * @since 3.5 + */ + layout: function() { + var el = this.parts.dialog; + var dialogSize = this.getSize(); + var win = CKEDITOR.document.getWindow(), + viewSize = win.getViewPaneSize(); + + var posX = ( viewSize.width - dialogSize.width ) / 2, + posY = ( viewSize.height - dialogSize.height ) / 2; + + // Switch to absolute position when viewport is smaller than dialog size. + if ( !CKEDITOR.env.ie6Compat ) { + if ( dialogSize.height + ( posY > 0 ? posY : 0 ) > viewSize.height || dialogSize.width + ( posX > 0 ? posX : 0 ) > viewSize.width ) { + el.setStyle( 'position', 'absolute' ); + } else { + el.setStyle( 'position', 'fixed' ); + } + } + + this.move( this._.moved ? this._.position.x : posX, this._.moved ? this._.position.y : posY ); + }, + + /** + * Executes a function for each UI element. + * + * @param {Function} fn Function to execute for each UI element. + * @returns {CKEDITOR.dialog} The current dialog object. + */ + foreach: function( fn ) { + for ( var i in this._.contents ) { + for ( var j in this._.contents[ i ] ) { + fn.call( this, this._.contents[i][j] ); + } + } + + return this; + }, + + /** + * Resets all input values in the dialog. + * + * dialogObj.reset(); + * + * @method + * @chainable + */ + reset: ( function() { + var fn = function( widget ) { + if ( widget.reset ) + widget.reset( 1 ); + }; + return function() { + this.foreach( fn ); + return this; + }; + } )(), + + + /** + * Calls the {@link CKEDITOR.dialog.definition.uiElement#setup} method of each + * of the UI elements, with the arguments passed through it. + * It is usually being called when the dialog is opened, to put the initial value inside the field. + * + * dialogObj.setupContent(); + * + * var timestamp = ( new Date() ).valueOf(); + * dialogObj.setupContent( timestamp ); + */ + setupContent: function() { + var args = arguments; + this.foreach( function( widget ) { + if ( widget.setup ) + widget.setup.apply( widget, args ); + } ); + }, + + /** + * Calls the {@link CKEDITOR.dialog.definition.uiElement#commit} method of each + * of the UI elements, with the arguments passed through it. + * It is usually being called when the user confirms the dialog, to process the values. + * + * dialogObj.commitContent(); + * + * var timestamp = ( new Date() ).valueOf(); + * dialogObj.commitContent( timestamp ); + */ + commitContent: function() { + var args = arguments; + this.foreach( function( widget ) { + // Make sure IE triggers "change" event on last focused input before closing the dialog. (http://dev.ckeditor.com/ticket/7915) + if ( CKEDITOR.env.ie && this._.currentFocusIndex == widget.focusIndex ) + widget.getInputElement().$.blur(); + + if ( widget.commit ) + widget.commit.apply( widget, args ); + } ); + }, + + /** + * Hides the dialog box. + * + * dialogObj.hide(); + */ + hide: function() { + if ( !this.parts.dialog.isVisible() ) + return; + + this.fire( 'hide', {} ); + this._.editor.fire( 'dialogHide', this ); + // Reset the tab page. + this.selectPage( this._.tabIdList[ 0 ] ); + var element = this._.element; + element.setStyle( 'display', 'none' ); + this.parts.dialog.setStyle( 'visibility', 'hidden' ); + // Unregister all access keys associated with this dialog. + unregisterAccessKey( this ); + + // Close any child(top) dialogs first. + while ( CKEDITOR.dialog._.currentTop != this ) + CKEDITOR.dialog._.currentTop.hide(); + + // Maintain dialog ordering and remove cover if needed. + if ( !this._.parentDialog ) + hideCover( this._.editor ); + else { + var parentElement = this._.parentDialog.getElement().getFirst(); + parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) ); + } + CKEDITOR.dialog._.currentTop = this._.parentDialog; + + // Deduct or clear the z-index. + if ( !this._.parentDialog ) { + CKEDITOR.dialog._.currentZIndex = null; + + // Remove access key handlers. + element.removeListener( 'keydown', accessKeyDownHandler ); + element.removeListener( 'keyup', accessKeyUpHandler ); + + var editor = this._.editor; + editor.focus(); + + // Give a while before unlock, waiting for focus to return to the editable. (http://dev.ckeditor.com/ticket/172) + setTimeout( function() { + editor.focusManager.unlock(); + + // Fixed iOS focus issue (http://dev.ckeditor.com/ticket/12381). + // Keep in mind that editor.focus() does not work in this case. + if ( CKEDITOR.env.iOS ) { + editor.window.focus(); + } + }, 0 ); + + } else { + CKEDITOR.dialog._.currentZIndex -= 10; + } + + delete this._.parentDialog; + // Reset the initial values of the dialog. + this.foreach( function( contentObj ) { + contentObj.resetInitValue && contentObj.resetInitValue(); + } ); + + // Reset dialog state back to IDLE, if busy (http://dev.ckeditor.com/ticket/13213). + this.setState( CKEDITOR.DIALOG_STATE_IDLE ); + }, + + /** + * Adds a tabbed page into the dialog. + * + * @param {Object} contents Content definition. + */ + addPage: function( contents ) { + if ( contents.requiredContent && !this._.editor.filter.check( contents.requiredContent ) ) + return; + + var pageHtml = [], + titleHtml = contents.label ? ' title="' + CKEDITOR.tools.htmlEncode( contents.label ) + '"' : '', + vbox = CKEDITOR.dialog._.uiElementBuilders.vbox.build( this, { + type: 'vbox', + className: 'cke_dialog_page_contents', + children: contents.elements, + expand: !!contents.expand, + padding: contents.padding, + style: contents.style || 'width: 100%;' + }, pageHtml ); + + var contentMap = this._.contents[ contents.id ] = {}, + cursor, + children = vbox.getChild(), + enabledFields = 0; + + while ( ( cursor = children.shift() ) ) { + // Count all allowed fields. + if ( !cursor.notAllowed && cursor.type != 'hbox' && cursor.type != 'vbox' ) + enabledFields++; + + contentMap[ cursor.id ] = cursor; + if ( typeof cursor.getChild == 'function' ) + children.push.apply( children, cursor.getChild() ); + } + + // If all fields are disabled (because they are not allowed) hide this tab. + if ( !enabledFields ) + contents.hidden = true; + + // Create the HTML for the tab and the content block. + var page = CKEDITOR.dom.element.createFromHtml( pageHtml.join( '' ) ); + page.setAttribute( 'role', 'tabpanel' ); + + var env = CKEDITOR.env; + var tabId = 'cke_' + contents.id + '_' + CKEDITOR.tools.getNextNumber(), + tab = CKEDITOR.dom.element.createFromHtml( [ + ' 0 ? ' cke_last' : 'cke_first' ), + titleHtml, + ( !!contents.hidden ? ' style="display:none"' : '' ), + ' id="', tabId, '"', + env.gecko && !env.hc ? '' : ' href="javascript:void(0)"', + ' tabIndex="-1"', + ' hidefocus="true"', + ' role="tab">', + contents.label, + '' + ].join( '' ) ); + + page.setAttribute( 'aria-labelledby', tabId ); + + // Take records for the tabs and elements created. + this._.tabs[ contents.id ] = [ tab, page ]; + this._.tabIdList.push( contents.id ); + !contents.hidden && this._.pageCount++; + this._.lastTab = tab; + this.updateStyle(); + + // Attach the DOM nodes. + + page.setAttribute( 'name', contents.id ); + page.appendTo( this.parts.contents ); + + tab.unselectable(); + this.parts.tabs.append( tab ); + + // Add access key handlers if access key is defined. + if ( contents.accessKey ) { + registerAccessKey( this, this, 'CTRL+' + contents.accessKey, tabAccessKeyDown, tabAccessKeyUp ); + this._.accessKeyMap[ 'CTRL+' + contents.accessKey ] = contents.id; + } + }, + + /** + * Activates a tab page in the dialog by its id. + * + * dialogObj.selectPage( 'tab_1' ); + * + * @param {String} id The id of the dialog tab to be activated. + */ + selectPage: function( id ) { + if ( this._.currentTabId == id ) + return; + + if ( this._.tabs[ id ][ 0 ].hasClass( 'cke_dialog_tab_disabled' ) ) + return; + + // If event was canceled - do nothing. + if ( this.fire( 'selectPage', { page: id, currentPage: this._.currentTabId } ) === false ) + return; + + // Hide the non-selected tabs and pages. + for ( var i in this._.tabs ) { + var tab = this._.tabs[ i ][ 0 ], + page = this._.tabs[ i ][ 1 ]; + if ( i != id ) { + tab.removeClass( 'cke_dialog_tab_selected' ); + page.hide(); + } + page.setAttribute( 'aria-hidden', i != id ); + } + + var selected = this._.tabs[ id ]; + selected[ 0 ].addClass( 'cke_dialog_tab_selected' ); + + // [IE] an invisible input[type='text'] will enlarge it's width + // if it's value is long when it shows, so we clear it's value + // before it shows and then recover it (http://dev.ckeditor.com/ticket/5649) + if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ) { + clearOrRecoverTextInputValue( selected[ 1 ] ); + selected[ 1 ].show(); + setTimeout( function() { + clearOrRecoverTextInputValue( selected[ 1 ], 1 ); + }, 0 ); + } else { + selected[ 1 ].show(); + } + + this._.currentTabId = id; + this._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id ); + }, + + /** + * Dialog state-specific style updates. + */ + updateStyle: function() { + // If only a single page shown, a different style is used in the central pane. + this.parts.dialog[ ( this._.pageCount === 1 ? 'add' : 'remove' ) + 'Class' ]( 'cke_single_page' ); + }, + + /** + * Hides a page's tab away from the dialog. + * + * dialog.hidePage( 'tab_3' ); + * + * @param {String} id The page's Id. + */ + hidePage: function( id ) { + var tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ]; + if ( !tab || this._.pageCount == 1 || !tab.isVisible() ) + return; + // Switch to other tab first when we're hiding the active tab. + else if ( id == this._.currentTabId ) + this.selectPage( getPreviousVisibleTab.call( this ) ); + + tab.hide(); + this._.pageCount--; + this.updateStyle(); + }, + + /** + * Unhides a page's tab. + * + * dialog.showPage( 'tab_2' ); + * + * @param {String} id The page's Id. + */ + showPage: function( id ) { + var tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ]; + if ( !tab ) + return; + tab.show(); + this._.pageCount++; + this.updateStyle(); + }, + + /** + * Gets the root DOM element of the dialog. + * + * var dialogElement = dialogObj.getElement().getFirst(); + * dialogElement.setStyle( 'padding', '5px' ); + * + * @returns {CKEDITOR.dom.element} The `` element containing this dialog. + */ + getElement: function() { + return this._.element; + }, + + /** + * Gets the name of the dialog. + * + * var dialogName = dialogObj.getName(); + * + * @returns {String} The name of this dialog. + */ + getName: function() { + return this._.name; + }, + + /** + * Gets a dialog UI element object from a dialog page. + * + * dialogObj.getContentElement( 'tabId', 'elementId' ).setValue( 'Example' ); + * + * @param {String} pageId id of dialog page. + * @param {String} elementId id of UI element. + * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element. + */ + getContentElement: function( pageId, elementId ) { + var page = this._.contents[ pageId ]; + return page && page[ elementId ]; + }, + + /** + * Gets the value of a dialog UI element. + * + * alert( dialogObj.getValueOf( 'tabId', 'elementId' ) ); + * + * @param {String} pageId id of dialog page. + * @param {String} elementId id of UI element. + * @returns {Object} The value of the UI element. + */ + getValueOf: function( pageId, elementId ) { + return this.getContentElement( pageId, elementId ).getValue(); + }, + + /** + * Sets the value of a dialog UI element. + * + * dialogObj.setValueOf( 'tabId', 'elementId', 'Example' ); + * + * @param {String} pageId id of the dialog page. + * @param {String} elementId id of the UI element. + * @param {Object} value The new value of the UI element. + */ + setValueOf: function( pageId, elementId, value ) { + return this.getContentElement( pageId, elementId ).setValue( value ); + }, + + /** + * Gets the UI element of a button in the dialog's button row. + * + * @returns {CKEDITOR.ui.dialog.button} The button object. + * + * @param {String} id The id of the button. + */ + getButton: function( id ) { + return this._.buttons[ id ]; + }, + + /** + * Simulates a click to a dialog button in the dialog's button row. + * + * @returns The return value of the dialog's `click` event. + * + * @param {String} id The id of the button. + */ + click: function( id ) { + return this._.buttons[ id ].click(); + }, + + /** + * Disables a dialog button. + * + * @param {String} id The id of the button. + */ + disableButton: function( id ) { + return this._.buttons[ id ].disable(); + }, + + /** + * Enables a dialog button. + * + * @param {String} id The id of the button. + */ + enableButton: function( id ) { + return this._.buttons[ id ].enable(); + }, + + /** + * Gets the number of pages in the dialog. + * + * @returns {Number} Page count. + */ + getPageCount: function() { + return this._.pageCount; + }, + + /** + * Gets the editor instance which opened this dialog. + * + * @returns {CKEDITOR.editor} Parent editor instances. + */ + getParentEditor: function() { + return this._.editor; + }, + + /** + * Gets the element that was selected when opening the dialog, if any. + * + * @returns {CKEDITOR.dom.element} The element that was selected, or `null`. + */ + getSelectedElement: function() { + return this.getParentEditor().getSelection().getSelectedElement(); + }, + + /** + * Adds element to dialog's focusable list. + * + * @param {CKEDITOR.dom.element} element + * @param {Number} [index] + */ + addFocusable: function( element, index ) { + if ( typeof index == 'undefined' ) { + index = this._.focusList.length; + this._.focusList.push( new Focusable( this, element, index ) ); + } else { + this._.focusList.splice( index, 0, new Focusable( this, element, index ) ); + for ( var i = index + 1; i < this._.focusList.length; i++ ) + this._.focusList[ i ].focusIndex++; + } + }, + + /** + * Sets the dialog {@link #property-state}. + * + * @since 4.5 + * @param {Number} state Either {@link CKEDITOR#DIALOG_STATE_IDLE} or {@link CKEDITOR#DIALOG_STATE_BUSY}. + */ + setState: function( state ) { + var oldState = this.state; + + if ( oldState == state ) { + return; + } + + this.state = state; + + if ( state == CKEDITOR.DIALOG_STATE_BUSY ) { + // Insert the spinner on demand. + if ( !this.parts.spinner ) { + var dir = this.getParentEditor().lang.dir, + spinnerDef = { + attributes: { + 'class': 'cke_dialog_spinner' + }, + styles: { + 'float': dir == 'rtl' ? 'right' : 'left' + } + }; + + spinnerDef.styles[ 'margin-' + ( dir == 'rtl' ? 'left' : 'right' ) ] = '8px'; + + this.parts.spinner = CKEDITOR.document.createElement( 'div', spinnerDef ); + + this.parts.spinner.setHtml( '⌛' ); + this.parts.spinner.appendTo( this.parts.title, 1 ); + } + + // Finally, show the spinner. + this.parts.spinner.show(); + + this.getButton( 'ok' ).disable(); + } else if ( state == CKEDITOR.DIALOG_STATE_IDLE ) { + // Hide the spinner. But don't do anything if there is no spinner yet. + this.parts.spinner && this.parts.spinner.hide(); + + this.getButton( 'ok' ).enable(); + } + + this.fire( 'state', state ); + } + }; + + CKEDITOR.tools.extend( CKEDITOR.dialog, { + /** + * Registers a dialog. + * + * // Full sample plugin, which does not only register a dialog window but also adds an item to the context menu. + * // To open the dialog window, choose "Open dialog" in the context menu. + * CKEDITOR.plugins.add( 'myplugin', { + * init: function( editor ) { + * editor.addCommand( 'mydialog',new CKEDITOR.dialogCommand( 'mydialog' ) ); + * + * if ( editor.contextMenu ) { + * editor.addMenuGroup( 'mygroup', 10 ); + * editor.addMenuItem( 'My Dialog', { + * label: 'Open dialog', + * command: 'mydialog', + * group: 'mygroup' + * } ); + * editor.contextMenu.addListener( function( element ) { + * return { 'My Dialog': CKEDITOR.TRISTATE_OFF }; + * } ); + * } + * + * CKEDITOR.dialog.add( 'mydialog', function( api ) { + * // CKEDITOR.dialog.definition + * var dialogDefinition = { + * title: 'Sample dialog', + * minWidth: 390, + * minHeight: 130, + * contents: [ + * { + * id: 'tab1', + * label: 'Label', + * title: 'Title', + * expand: true, + * padding: 0, + * elements: [ + * { + * type: 'html', + * html: '

This is some sample HTML content.

' + * }, + * { + * type: 'textarea', + * id: 'textareaId', + * rows: 4, + * cols: 40 + * } + * ] + * } + * ], + * buttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ], + * onOk: function() { + * // "this" is now a CKEDITOR.dialog object. + * // Accessing dialog elements: + * var textareaObj = this.getContentElement( 'tab1', 'textareaId' ); + * alert( "You have entered: " + textareaObj.getValue() ); + * } + * }; + * + * return dialogDefinition; + * } ); + * } + * } ); + * + * CKEDITOR.replace( 'editor1', { extraPlugins: 'myplugin' } ); + * + * @static + * @param {String} name The dialog's name. + * @param {Function/String} dialogDefinition + * A function returning the dialog's definition, or the URL to the `.js` file holding the function. + * The function should accept an argument `editor` which is the current editor instance, and + * return an object conforming to {@link CKEDITOR.dialog.definition}. + * @see CKEDITOR.dialog.definition + */ + add: function( name, dialogDefinition ) { + // Avoid path registration from multiple instances override definition. + if ( !this._.dialogDefinitions[ name ] || typeof dialogDefinition == 'function' ) + this._.dialogDefinitions[ name ] = dialogDefinition; + }, + + /** + * @static + * @todo + */ + exists: function( name ) { + return !!this._.dialogDefinitions[ name ]; + }, + + /** + * @static + * @todo + */ + getCurrent: function() { + return CKEDITOR.dialog._.currentTop; + }, + + /** + * Check whether tab wasn't removed by {@link CKEDITOR.config#removeDialogTabs}. + * + * @since 4.1 + * @static + * @param {CKEDITOR.editor} editor + * @param {String} dialogName + * @param {String} tabName + * @returns {Boolean} + */ + isTabEnabled: function( editor, dialogName, tabName ) { + var cfg = editor.config.removeDialogTabs; + + return !( cfg && cfg.match( new RegExp( '(?:^|;)' + dialogName + ':' + tabName + '(?:$|;)', 'i' ) ) ); + }, + + /** + * The default OK button for dialogs. Fires the `ok` event and closes the dialog if the event succeeds. + * + * @static + * @method + */ + okButton: ( function() { + var retval = function( editor, override ) { + override = override || {}; + return CKEDITOR.tools.extend( { + id: 'ok', + type: 'button', + label: editor.lang.common.ok, + 'class': 'cke_dialog_ui_button_ok', + onClick: function( evt ) { + var dialog = evt.data.dialog; + if ( dialog.fire( 'ok', { hide: true } ).hide !== false ) + dialog.hide(); + } + }, override, true ); + }; + retval.type = 'button'; + retval.override = function( override ) { + return CKEDITOR.tools.extend( function( editor ) { + return retval( editor, override ); + }, { type: 'button' }, true ); + }; + return retval; + } )(), + + /** + * The default cancel button for dialogs. Fires the `cancel` event and + * closes the dialog if no UI element value changed. + * + * @static + * @method + */ + cancelButton: ( function() { + var retval = function( editor, override ) { + override = override || {}; + return CKEDITOR.tools.extend( { + id: 'cancel', + type: 'button', + label: editor.lang.common.cancel, + 'class': 'cke_dialog_ui_button_cancel', + onClick: function( evt ) { + var dialog = evt.data.dialog; + if ( dialog.fire( 'cancel', { hide: true } ).hide !== false ) + dialog.hide(); + } + }, override, true ); + }; + retval.type = 'button'; + retval.override = function( override ) { + return CKEDITOR.tools.extend( function( editor ) { + return retval( editor, override ); + }, { type: 'button' }, true ); + }; + return retval; + } )(), + + /** + * Registers a dialog UI element. + * + * @static + * @param {String} typeName The name of the UI element. + * @param {Function} builder The function to build the UI element. + */ + addUIElement: function( typeName, builder ) { + this._.uiElementBuilders[ typeName ] = builder; + } + } ); + + CKEDITOR.dialog._ = { + uiElementBuilders: {}, + + dialogDefinitions: {}, + + currentTop: null, + + currentZIndex: null + }; + + // "Inherit" (copy actually) from CKEDITOR.event. + CKEDITOR.event.implementOn( CKEDITOR.dialog ); + CKEDITOR.event.implementOn( CKEDITOR.dialog.prototype ); + + var defaultDialogDefinition = { + resizable: CKEDITOR.DIALOG_RESIZE_BOTH, + minWidth: 600, + minHeight: 400, + buttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ] + }; + + // Tool function used to return an item from an array based on its id + // property. + var getById = function( array, id, recurse ) { + for ( var i = 0, item; + ( item = array[ i ] ); i++ ) { + if ( item.id == id ) + return item; + if ( recurse && item[ recurse ] ) { + var retval = getById( item[ recurse ], id, recurse ); + if ( retval ) + return retval; + } + } + return null; + }; + + // Tool function used to add an item into an array. + var addById = function( array, newItem, nextSiblingId, recurse, nullIfNotFound ) { + if ( nextSiblingId ) { + for ( var i = 0, item; + ( item = array[ i ] ); i++ ) { + if ( item.id == nextSiblingId ) { + array.splice( i, 0, newItem ); + return newItem; + } + + if ( recurse && item[ recurse ] ) { + var retval = addById( item[ recurse ], newItem, nextSiblingId, recurse, true ); + if ( retval ) + return retval; + } + } + + if ( nullIfNotFound ) + return null; + } + + array.push( newItem ); + return newItem; + }; + + // Tool function used to remove an item from an array based on its id. + var removeById = function( array, id, recurse ) { + for ( var i = 0, item; + ( item = array[ i ] ); i++ ) { + if ( item.id == id ) + return array.splice( i, 1 ); + if ( recurse && item[ recurse ] ) { + var retval = removeById( item[ recurse ], id, recurse ); + if ( retval ) + return retval; + } + } + return null; + }; + + /** + * This class is not really part of the API. It is the `definition` property value + * passed to `dialogDefinition` event handlers. + * + * CKEDITOR.on( 'dialogDefinition', function( evt ) { + * var definition = evt.data.definition; + * var content = definition.getContents( 'page1' ); + * // ... + * } ); + * + * @private + * @class CKEDITOR.dialog.definitionObject + * @extends CKEDITOR.dialog.definition + * @constructor Creates a definitionObject class instance. + */ + var definitionObject = function( dialog, dialogDefinition ) { + // TODO : Check if needed. + this.dialog = dialog; + + // Transform the contents entries in contentObjects. + var contents = dialogDefinition.contents; + for ( var i = 0, content; + ( content = contents[ i ] ); i++ ) + contents[ i ] = content && new contentObject( dialog, content ); + + CKEDITOR.tools.extend( this, dialogDefinition ); + }; + + definitionObject.prototype = { + /** + * Gets a content definition. + * + * @param {String} id The id of the content definition. + * @returns {CKEDITOR.dialog.definition.content} The content definition matching id. + */ + getContents: function( id ) { + return getById( this.contents, id ); + }, + + /** + * Gets a button definition. + * + * @param {String} id The id of the button definition. + * @returns {CKEDITOR.dialog.definition.button} The button definition matching id. + */ + getButton: function( id ) { + return getById( this.buttons, id ); + }, + + /** + * Adds a content definition object under this dialog definition. + * + * @param {CKEDITOR.dialog.definition.content} contentDefinition The + * content definition. + * @param {String} [nextSiblingId] The id of an existing content + * definition which the new content definition will be inserted + * before. Omit if the new content definition is to be inserted as + * the last item. + * @returns {CKEDITOR.dialog.definition.content} The inserted content definition. + */ + addContents: function( contentDefinition, nextSiblingId ) { + return addById( this.contents, contentDefinition, nextSiblingId ); + }, + + /** + * Adds a button definition object under this dialog definition. + * + * @param {CKEDITOR.dialog.definition.button} buttonDefinition The + * button definition. + * @param {String} [nextSiblingId] The id of an existing button + * definition which the new button definition will be inserted + * before. Omit if the new button definition is to be inserted as + * the last item. + * @returns {CKEDITOR.dialog.definition.button} The inserted button definition. + */ + addButton: function( buttonDefinition, nextSiblingId ) { + return addById( this.buttons, buttonDefinition, nextSiblingId ); + }, + + /** + * Removes a content definition from this dialog definition. + * + * @param {String} id The id of the content definition to be removed. + * @returns {CKEDITOR.dialog.definition.content} The removed content definition. + */ + removeContents: function( id ) { + removeById( this.contents, id ); + }, + + /** + * Removes a button definition from the dialog definition. + * + * @param {String} id The id of the button definition to be removed. + * @returns {CKEDITOR.dialog.definition.button} The removed button definition. + */ + removeButton: function( id ) { + removeById( this.buttons, id ); + } + }; + + /** + * This class is not really part of the API. It is the template of the + * objects representing content pages inside the + * CKEDITOR.dialog.definitionObject. + * + * CKEDITOR.on( 'dialogDefinition', function( evt ) { + * var definition = evt.data.definition; + * var content = definition.getContents( 'page1' ); + * content.remove( 'textInput1' ); + * // ... + * } ); + * + * @private + * @class CKEDITOR.dialog.definition.contentObject + * @constructor Creates a contentObject class instance. + */ + function contentObject( dialog, contentDefinition ) { + this._ = { + dialog: dialog + }; + + CKEDITOR.tools.extend( this, contentDefinition ); + } + + contentObject.prototype = { + /** + * Gets a UI element definition under the content definition. + * + * @param {String} id The id of the UI element definition. + * @returns {CKEDITOR.dialog.definition.uiElement} + */ + get: function( id ) { + return getById( this.elements, id, 'children' ); + }, + + /** + * Adds a UI element definition to the content definition. + * + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition The + * UI elemnet definition to be added. + * @param {String} nextSiblingId The id of an existing UI element + * definition which the new UI element definition will be inserted + * before. Omit if the new button definition is to be inserted as + * the last item. + * @returns {CKEDITOR.dialog.definition.uiElement} The element definition inserted. + */ + add: function( elementDefinition, nextSiblingId ) { + return addById( this.elements, elementDefinition, nextSiblingId, 'children' ); + }, + + /** + * Removes a UI element definition from the content definition. + * + * @param {String} id The id of the UI element definition to be removed. + * @returns {CKEDITOR.dialog.definition.uiElement} The element definition removed. + */ + remove: function( id ) { + removeById( this.elements, id, 'children' ); + } + }; + + function initDragAndDrop( dialog ) { + var lastCoords = null, + abstractDialogCoords = null, + editor = dialog.getParentEditor(), + magnetDistance = editor.config.dialog_magnetDistance, + margins = CKEDITOR.skin.margins || [ 0, 0, 0, 0 ]; + + if ( typeof magnetDistance == 'undefined' ) + magnetDistance = 20; + + function mouseMoveHandler( evt ) { + var dialogSize = dialog.getSize(), + viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(), + x = evt.data.$.screenX, + y = evt.data.$.screenY, + dx = x - lastCoords.x, + dy = y - lastCoords.y, + realX, realY; + + lastCoords = { x: x, y: y }; + abstractDialogCoords.x += dx; + abstractDialogCoords.y += dy; + + if ( abstractDialogCoords.x + margins[ 3 ] < magnetDistance ) + realX = -margins[ 3 ]; + else if ( abstractDialogCoords.x - margins[ 1 ] > viewPaneSize.width - dialogSize.width - magnetDistance ) + realX = viewPaneSize.width - dialogSize.width + ( editor.lang.dir == 'rtl' ? 0 : margins[ 1 ] ); + else + realX = abstractDialogCoords.x; + + if ( abstractDialogCoords.y + margins[ 0 ] < magnetDistance ) + realY = -margins[ 0 ]; + else if ( abstractDialogCoords.y - margins[ 2 ] > viewPaneSize.height - dialogSize.height - magnetDistance ) + realY = viewPaneSize.height - dialogSize.height + margins[ 2 ]; + else + realY = abstractDialogCoords.y; + + dialog.move( realX, realY, 1 ); + + evt.data.preventDefault(); + } + + function mouseUpHandler() { + CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); + CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); + + if ( CKEDITOR.env.ie6Compat ) { + var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); + coverDoc.removeListener( 'mousemove', mouseMoveHandler ); + coverDoc.removeListener( 'mouseup', mouseUpHandler ); + } + } + + dialog.parts.title.on( 'mousedown', function( evt ) { + lastCoords = { x: evt.data.$.screenX, y: evt.data.$.screenY }; + + CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); + CKEDITOR.document.on( 'mouseup', mouseUpHandler ); + abstractDialogCoords = dialog.getPosition(); + + if ( CKEDITOR.env.ie6Compat ) { + var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); + coverDoc.on( 'mousemove', mouseMoveHandler ); + coverDoc.on( 'mouseup', mouseUpHandler ); + } + + evt.data.preventDefault(); + }, dialog ); + } + + function initResizeHandles( dialog ) { + var def = dialog.definition, + resizable = def.resizable; + + if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ) + return; + + var editor = dialog.getParentEditor(); + var wrapperWidth, wrapperHeight, viewSize, origin, startSize, dialogCover; + + var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) { + startSize = dialog.getSize(); + + var content = dialog.parts.contents, + iframeDialog = content.$.getElementsByTagName( 'iframe' ).length; + + // Shim to help capturing "mousemove" over iframe. + if ( iframeDialog ) { + dialogCover = CKEDITOR.dom.element.createFromHtml( '
' ); + content.append( dialogCover ); + } + + // Calculate the offset between content and chrome size. + wrapperHeight = startSize.height - dialog.parts.contents.getSize( 'height', !( CKEDITOR.env.gecko || CKEDITOR.env.ie && CKEDITOR.env.quirks ) ); + wrapperWidth = startSize.width - dialog.parts.contents.getSize( 'width', 1 ); + + origin = { x: $event.screenX, y: $event.screenY }; + + viewSize = CKEDITOR.document.getWindow().getViewPaneSize(); + + CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); + CKEDITOR.document.on( 'mouseup', mouseUpHandler ); + + if ( CKEDITOR.env.ie6Compat ) { + var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); + coverDoc.on( 'mousemove', mouseMoveHandler ); + coverDoc.on( 'mouseup', mouseUpHandler ); + } + + $event.preventDefault && $event.preventDefault(); + } ); + + // Prepend the grip to the dialog. + dialog.on( 'load', function() { + var direction = ''; + if ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH ) + direction = ' cke_resizer_horizontal'; + else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT ) + direction = ' cke_resizer_vertical'; + var resizer = CKEDITOR.dom.element.createFromHtml( + '' + + // BLACK LOWER RIGHT TRIANGLE (ltr) + // BLACK LOWER LEFT TRIANGLE (rtl) + ( editor.lang.dir == 'ltr' ? '\u25E2' : '\u25E3' ) + + '
' ); + dialog.parts.footer.append( resizer, 1 ); + } ); + editor.on( 'destroy', function() { + CKEDITOR.tools.removeFunction( mouseDownFn ); + } ); + + function mouseMoveHandler( evt ) { + var rtl = editor.lang.dir == 'rtl', + dx = ( evt.data.$.screenX - origin.x ) * ( rtl ? -1 : 1 ), + dy = evt.data.$.screenY - origin.y, + width = startSize.width, + height = startSize.height, + internalWidth = width + dx * ( dialog._.moved ? 1 : 2 ), + internalHeight = height + dy * ( dialog._.moved ? 1 : 2 ), + element = dialog._.element.getFirst(), + right = rtl && element.getComputedStyle( 'right' ), + position = dialog.getPosition(); + + if ( position.y + internalHeight > viewSize.height ) + internalHeight = viewSize.height - position.y; + + if ( ( rtl ? right : position.x ) + internalWidth > viewSize.width ) + internalWidth = viewSize.width - ( rtl ? right : position.x ); + + // Make sure the dialog will not be resized to the wrong side when it's in the leftmost position for RTL. + if ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) ) + width = Math.max( def.minWidth || 0, internalWidth - wrapperWidth ); + + if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) + height = Math.max( def.minHeight || 0, internalHeight - wrapperHeight ); + + dialog.resize( width, height ); + + if ( !dialog._.moved ) + dialog.layout(); + + evt.data.preventDefault(); + } + + function mouseUpHandler() { + CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); + CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); + + if ( dialogCover ) { + dialogCover.remove(); + dialogCover = null; + } + + if ( CKEDITOR.env.ie6Compat ) { + var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); + coverDoc.removeListener( 'mouseup', mouseUpHandler ); + coverDoc.removeListener( 'mousemove', mouseMoveHandler ); + } + } + } + + var resizeCover; + // Caching resuable covers and allowing only one cover + // on screen. + var covers = {}, + currentCover; + + function cancelEvent( ev ) { + ev.data.preventDefault( 1 ); + } + + function showCover( editor ) { + var win = CKEDITOR.document.getWindow(), + config = editor.config, + skinName = ( CKEDITOR.skinName || editor.config.skin ), + backgroundColorStyle = config.dialog_backgroundCoverColor || ( skinName == 'moono-lisa' ? 'black' : 'white' ), + backgroundCoverOpacity = config.dialog_backgroundCoverOpacity, + baseFloatZIndex = config.baseFloatZIndex, + coverKey = CKEDITOR.tools.genKey( backgroundColorStyle, backgroundCoverOpacity, baseFloatZIndex ), + coverElement = covers[ coverKey ]; + + if ( !coverElement ) { + var html = [ + '
' + ]; + + if ( CKEDITOR.env.ie6Compat ) { + // Support for custom document.domain in IE. + var iframeHtml = ''; + + html.push( '' + + '' ); + } + + html.push( '
' ); + + coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) ); + coverElement.setOpacity( backgroundCoverOpacity !== undefined ? backgroundCoverOpacity : 0.5 ); + + coverElement.on( 'keydown', cancelEvent ); + coverElement.on( 'keypress', cancelEvent ); + coverElement.on( 'keyup', cancelEvent ); + + coverElement.appendTo( CKEDITOR.document.getBody() ); + covers[ coverKey ] = coverElement; + } else { + coverElement.show(); + } + + // Makes the dialog cover a focus holder as well. + editor.focusManager.add( coverElement ); + + currentCover = coverElement; + var resizeFunc = function() { + var size = win.getViewPaneSize(); + coverElement.setStyles( { + width: size.width + 'px', + height: size.height + 'px' + } ); + }; + + var scrollFunc = function() { + var pos = win.getScrollPosition(), + cursor = CKEDITOR.dialog._.currentTop; + coverElement.setStyles( { + left: pos.x + 'px', + top: pos.y + 'px' + } ); + + if ( cursor ) { + do { + var dialogPos = cursor.getPosition(); + cursor.move( dialogPos.x, dialogPos.y ); + } while ( ( cursor = cursor._.parentDialog ) ); + } + }; + + resizeCover = resizeFunc; + win.on( 'resize', resizeFunc ); + resizeFunc(); + // Using Safari/Mac, focus must be kept where it is (http://dev.ckeditor.com/ticket/7027) + if ( !( CKEDITOR.env.mac && CKEDITOR.env.webkit ) ) + coverElement.focus(); + + if ( CKEDITOR.env.ie6Compat ) { + // IE BUG: win.$.onscroll assignment doesn't work.. it must be window.onscroll. + // So we need to invent a really funny way to make it work. + var myScrollHandler = function() { + scrollFunc(); + arguments.callee.prevScrollHandler.apply( this, arguments ); + }; + win.$.setTimeout( function() { + myScrollHandler.prevScrollHandler = window.onscroll || + function() {}; + window.onscroll = myScrollHandler; + }, 0 ); + scrollFunc(); + } + } + + function hideCover( editor ) { + if ( !currentCover ) + return; + + editor.focusManager.remove( currentCover ); + var win = CKEDITOR.document.getWindow(); + // currentCover.hide(); + + $('.cke_dialog_background_cover').each(function() { + $( this ).hide(); + }); + + win.removeListener( 'resize', resizeCover ); + + if ( CKEDITOR.env.ie6Compat ) { + win.$.setTimeout( function() { + var prevScrollHandler = window.onscroll && window.onscroll.prevScrollHandler; + window.onscroll = prevScrollHandler || null; + }, 0 ); + } + resizeCover = null; + } + + function removeCovers() { + for ( var coverId in covers ) + covers[ coverId ].remove(); + covers = {}; + } + + var accessKeyProcessors = {}; + + var accessKeyDownHandler = function( evt ) { + var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, + alt = evt.data.$.altKey, + shift = evt.data.$.shiftKey, + key = String.fromCharCode( evt.data.$.keyCode ), + keyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ]; + + if ( !keyProcessor || !keyProcessor.length ) + return; + + keyProcessor = keyProcessor[ keyProcessor.length - 1 ]; + keyProcessor.keydown && keyProcessor.keydown.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); + evt.data.preventDefault(); + }; + + var accessKeyUpHandler = function( evt ) { + var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, + alt = evt.data.$.altKey, + shift = evt.data.$.shiftKey, + key = String.fromCharCode( evt.data.$.keyCode ), + keyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ]; + + if ( !keyProcessor || !keyProcessor.length ) + return; + + keyProcessor = keyProcessor[ keyProcessor.length - 1 ]; + if ( keyProcessor.keyup ) { + keyProcessor.keyup.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); + evt.data.preventDefault(); + } + }; + + var registerAccessKey = function( uiElement, dialog, key, downFunc, upFunc ) { + var procList = accessKeyProcessors[ key ] || ( accessKeyProcessors[ key ] = [] ); + procList.push( { + uiElement: uiElement, + dialog: dialog, + key: key, + keyup: upFunc || uiElement.accessKeyUp, + keydown: downFunc || uiElement.accessKeyDown + } ); + }; + + var unregisterAccessKey = function( obj ) { + for ( var i in accessKeyProcessors ) { + var list = accessKeyProcessors[ i ]; + for ( var j = list.length - 1; j >= 0; j-- ) { + if ( list[ j ].dialog == obj || list[ j ].uiElement == obj ) + list.splice( j, 1 ); + } + if ( list.length === 0 ) + delete accessKeyProcessors[ i ]; + } + }; + + var tabAccessKeyUp = function( dialog, key ) { + if ( dialog._.accessKeyMap[ key ] ) + dialog.selectPage( dialog._.accessKeyMap[ key ] ); + }; + + var tabAccessKeyDown = function() {}; + + ( function() { + CKEDITOR.ui.dialog = { + /** + * The base class of all dialog UI elements. + * + * @class CKEDITOR.ui.dialog.uiElement + * @constructor Creates a uiElement class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element + * definition. + * + * Accepted fields: + * + * * `id` (Required) The id of the UI element. See {@link CKEDITOR.dialog#getContentElement}. + * * `type` (Required) The type of the UI element. The + * value to this field specifies which UI element class will be used to + * generate the final widget. + * * `title` (Optional) The popup tooltip for the UI + * element. + * * `hidden` (Optional) A flag that tells if the element + * should be initially visible. + * * `className` (Optional) Additional CSS class names + * to add to the UI element. Separated by space. + * * `style` (Optional) Additional CSS inline styles + * to add to the UI element. A semicolon (;) is required after the last + * style declaration. + * * `accessKey` (Optional) The alphanumeric access key + * for this element. Access keys are automatically prefixed by CTRL. + * * `on*` (Optional) Any UI element definition field that + * starts with `on` followed immediately by a capital letter and + * probably more letters is an event handler. Event handlers may be further + * divided into registered event handlers and DOM event handlers. Please + * refer to {@link CKEDITOR.ui.dialog.uiElement#registerEvents} and + * {@link CKEDITOR.ui.dialog.uiElement#eventProcessors} for more information. + * + * @param {Array} htmlList + * List of HTML code to be added to the dialog's content area. + * @param {Function/String} [nodeNameArg='div'] + * A function returning a string, or a simple string for the node name for + * the root DOM node. + * @param {Function/Object} [stylesArg={}] + * A function returning an object, or a simple object for CSS styles applied + * to the DOM node. + * @param {Function/Object} [attributesArg={}] + * A fucntion returning an object, or a simple object for attributes applied + * to the DOM node. + * @param {Function/String} [contentsArg=''] + * A function returning a string, or a simple string for the HTML code inside + * the root DOM node. Default is empty string. + */ + uiElement: function( dialog, elementDefinition, htmlList, nodeNameArg, stylesArg, attributesArg, contentsArg ) { + if ( arguments.length < 4 ) + return; + + var nodeName = ( nodeNameArg.call ? nodeNameArg( elementDefinition ) : nodeNameArg ) || 'div', + html = [ '<', nodeName, ' ' ], + styles = ( stylesArg && stylesArg.call ? stylesArg( elementDefinition ) : stylesArg ) || {}, + attributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {}, + innerHTML = ( contentsArg && contentsArg.call ? contentsArg.call( this, dialog, elementDefinition ) : contentsArg ) || '', + domId = this.domId = attributes.id || CKEDITOR.tools.getNextId() + '_uiElement', + i; + + if ( elementDefinition.requiredContent && !dialog.getParentEditor().filter.check( elementDefinition.requiredContent ) ) { + styles.display = 'none'; + this.notAllowed = true; + } + + // Set the id, a unique id is required for getElement() to work. + attributes.id = domId; + + // Set the type and definition CSS class names. + var classes = {}; + if ( elementDefinition.type ) + classes[ 'cke_dialog_ui_' + elementDefinition.type ] = 1; + if ( elementDefinition.className ) + classes[ elementDefinition.className ] = 1; + if ( elementDefinition.disabled ) + classes.cke_disabled = 1; + + var attributeClasses = ( attributes[ 'class' ] && attributes[ 'class' ].split ) ? attributes[ 'class' ].split( ' ' ) : []; + for ( i = 0; i < attributeClasses.length; i++ ) { + if ( attributeClasses[ i ] ) + classes[ attributeClasses[ i ] ] = 1; + } + var finalClasses = []; + for ( i in classes ) + finalClasses.push( i ); + attributes[ 'class' ] = finalClasses.join( ' ' ); + + // Set the popup tooltop. + if ( elementDefinition.title ) + attributes.title = elementDefinition.title; + + // Write the inline CSS styles. + var styleStr = ( elementDefinition.style || '' ).split( ';' ); + + // Element alignment support. + if ( elementDefinition.align ) { + var align = elementDefinition.align; + styles[ 'margin-left' ] = align == 'left' ? 0 : 'auto'; + styles[ 'margin-right' ] = align == 'right' ? 0 : 'auto'; + } + + for ( i in styles ) + styleStr.push( i + ':' + styles[ i ] ); + if ( elementDefinition.hidden ) + styleStr.push( 'display:none' ); + for ( i = styleStr.length - 1; i >= 0; i-- ) { + if ( styleStr[ i ] === '' ) + styleStr.splice( i, 1 ); + } + if ( styleStr.length > 0 ) + attributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' ); + + // Write the attributes. + for ( i in attributes ) + html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[ i ] ) + '" ' ); + + // Write the content HTML. + html.push( '>', innerHTML, '' ); + + // Add contents to the parent HTML array. + htmlList.push( html.join( '' ) ); + + ( this._ || ( this._ = {} ) ).dialog = dialog; + + // Override isChanged if it is defined in element definition. + if ( typeof elementDefinition.isChanged == 'boolean' ) + this.isChanged = function() { + return elementDefinition.isChanged; + }; + if ( typeof elementDefinition.isChanged == 'function' ) + this.isChanged = elementDefinition.isChanged; + + // Overload 'get(set)Value' on definition. + if ( typeof elementDefinition.setValue == 'function' ) { + this.setValue = CKEDITOR.tools.override( this.setValue, function( org ) { + return function( val ) { + org.call( this, elementDefinition.setValue.call( this, val ) ); + }; + } ); + } + + if ( typeof elementDefinition.getValue == 'function' ) { + this.getValue = CKEDITOR.tools.override( this.getValue, function( org ) { + return function() { + return elementDefinition.getValue.call( this, org.call( this ) ); + }; + } ); + } + + // Add events. + CKEDITOR.event.implementOn( this ); + + this.registerEvents( elementDefinition ); + if ( this.accessKeyUp && this.accessKeyDown && elementDefinition.accessKey ) + registerAccessKey( this, dialog, 'CTRL+' + elementDefinition.accessKey ); + + var me = this; + dialog.on( 'load', function() { + var input = me.getInputElement(); + if ( input ) { + var focusClass = me.type in { 'checkbox': 1, 'ratio': 1 } && CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? 'cke_dialog_ui_focused' : ''; + input.on( 'focus', function() { + dialog._.tabBarMode = false; + dialog._.hasFocus = true; + me.fire( 'focus' ); + focusClass && this.addClass( focusClass ); + + } ); + + input.on( 'blur', function() { + me.fire( 'blur' ); + focusClass && this.removeClass( focusClass ); + } ); + } + } ); + + // Completes this object with everything we have in the + // definition. + CKEDITOR.tools.extend( this, elementDefinition ); + + // Register the object as a tab focus if it can be included. + if ( this.keyboardFocusable ) { + this.tabIndex = elementDefinition.tabIndex || 0; + + this.focusIndex = dialog._.focusList.push( this ) - 1; + this.on( 'focus', function() { + dialog._.currentFocusIndex = me.focusIndex; + } ); + } + }, + + /** + * Horizontal layout box for dialog UI elements, auto-expends to available width of container. + * + * @class CKEDITOR.ui.dialog.hbox + * @extends CKEDITOR.ui.dialog.uiElement + * @constructor Creates a hbox class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog object. + * @param {Array} childObjList + * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. + * @param {Array} childHtmlList + * Array of HTML code that correspond to the HTML output of all the + * objects in childObjList. + * @param {Array} htmlList + * Array of HTML code that this element will output to. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `widths` (Optional) The widths of child cells. + * * `height` (Optional) The height of the layout. + * * `padding` (Optional) The padding width inside child cells. + * * `align` (Optional) The alignment of the whole layout. + */ + hbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { + if ( arguments.length < 4 ) + return; + + this._ || ( this._ = {} ); + + var children = this._.children = childObjList, + widths = elementDefinition && elementDefinition.widths || null, + height = elementDefinition && elementDefinition.height || null, + styles = {}, + i; + /** @ignore */ + var innerHTML = function() { + var html = [ '' ]; + for ( i = 0; i < childHtmlList.length; i++ ) { + var className = 'cke_dialog_ui_hbox_child', + styles = []; + if ( i === 0 ) { + className = 'cke_dialog_ui_hbox_first'; + } + if ( i == childHtmlList.length - 1 ) { + className = 'cke_dialog_ui_hbox_last'; + } + + html.push( ' 0 ) { + html.push( 'style="' + styles.join( '; ' ) + '" ' ); + } + html.push( '>', childHtmlList[ i ], '' ); + } + html.push( '' ); + return html.join( '' ); + }; + + var attribs = { role: 'presentation' }; + elementDefinition && elementDefinition.align && ( attribs.align = elementDefinition.align ); + + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'hbox' }, htmlList, 'table', styles, attribs, innerHTML ); + }, + + /** + * Vertical layout box for dialog UI elements. + * + * @class CKEDITOR.ui.dialog.vbox + * @extends CKEDITOR.ui.dialog.hbox + * @constructor Creates a vbox class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog object. + * @param {Array} childObjList + * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. + * @param {Array} childHtmlList + * Array of HTML code that correspond to the HTML output of all the + * objects in childObjList. + * @param {Array} htmlList Array of HTML code that this element will output to. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `width` (Optional) The width of the layout. + * * `heights` (Optional) The heights of individual cells. + * * `align` (Optional) The alignment of the layout. + * * `padding` (Optional) The padding width inside child cells. + * * `expand` (Optional) Whether the layout should expand + * vertically to fill its container. + */ + vbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { + if ( arguments.length < 3 ) + return; + + this._ || ( this._ = {} ); + + var children = this._.children = childObjList, + width = elementDefinition && elementDefinition.width || null, + heights = elementDefinition && elementDefinition.heights || null; + /** @ignore */ + var innerHTML = function() { + var html = [ '' ); + for ( var i = 0; i < childHtmlList.length; i++ ) { + var styles = []; + html.push( '' ); + } + html.push( '
0 ) + html.push( 'style="', styles.join( '; ' ), '" ' ); + html.push( ' class="cke_dialog_ui_vbox_child">', childHtmlList[ i ], '
' ); + return html.join( '' ); + }; + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'vbox' }, htmlList, 'div', null, { role: 'presentation' }, innerHTML ); + } + }; + } )(); + + /** @class CKEDITOR.ui.dialog.uiElement */ + CKEDITOR.ui.dialog.uiElement.prototype = { + /** + * Gets the root DOM element of this dialog UI object. + * + * uiElement.getElement().hide(); + * + * @returns {CKEDITOR.dom.element} Root DOM element of UI object. + */ + getElement: function() { + return CKEDITOR.document.getById( this.domId ); + }, + + /** + * Gets the DOM element that the user inputs values. + * + * This function is used by {@link #setValue}, {@link #getValue} and {@link #focus}. It should + * be overrided in child classes where the input element isn't the root + * element. + * + * var rawValue = textInput.getInputElement().$.value; + * + * @returns {CKEDITOR.dom.element} The element where the user input values. + */ + getInputElement: function() { + return this.getElement(); + }, + + /** + * Gets the parent dialog object containing this UI element. + * + * var dialog = uiElement.getDialog(); + * + * @returns {CKEDITOR.dialog} Parent dialog object. + */ + getDialog: function() { + return this._.dialog; + }, + + /** + * Sets the value of this dialog UI object. + * + * uiElement.setValue( 'Dingo' ); + * + * @chainable + * @param {Object} value The new value. + * @param {Boolean} noChangeEvent Internal commit, to supress `change` event on this element. + */ + setValue: function( value, noChangeEvent ) { + this.getInputElement().setValue( value ); + !noChangeEvent && this.fire( 'change', { value: value } ); + return this; + }, + + /** + * Gets the current value of this dialog UI object. + * + * var myValue = uiElement.getValue(); + * + * @returns {Object} The current value. + */ + getValue: function() { + return this.getInputElement().getValue(); + }, + + /** + * Tells whether the UI object's value has changed. + * + * if ( uiElement.isChanged() ) + * confirm( 'Value changed! Continue?' ); + * + * @returns {Boolean} `true` if changed, `false` if not changed. + */ + isChanged: function() { + // Override in input classes. + return false; + }, + + /** + * Selects the parent tab of this element. Usually called by focus() or overridden focus() methods. + * + * focus : function() { + * this.selectParentTab(); + * // do something else. + * } + * + * @chainable + */ + selectParentTab: function() { + var element = this.getInputElement(), + cursor = element, + tabId; + while ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 ) { + + } + + // Some widgets don't have parent tabs (e.g. OK and Cancel buttons). + if ( !cursor ) + return this; + + tabId = cursor.getAttribute( 'name' ); + // Avoid duplicate select. + if ( this._.dialog._.currentTabId != tabId ) + this._.dialog.selectPage( tabId ); + return this; + }, + + /** + * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page. + * + * uiElement.focus(); + * + * @chainable + */ + focus: function() { + this.selectParentTab().getInputElement().focus(); + return this; + }, + + /** + * Registers the `on*` event handlers defined in the element definition. + * + * The default behavior of this function is: + * + * 1. If the on* event is defined in the class's eventProcesors list, + * then the registration is delegated to the corresponding function + * in the eventProcessors list. + * 2. If the on* event is not defined in the eventProcessors list, then + * register the event handler under the corresponding DOM event of + * the UI element's input DOM element (as defined by the return value + * of {@link #getInputElement}). + * + * This function is only called at UI element instantiation, but can + * be overridded in child classes if they require more flexibility. + * + * @chainable + * @param {CKEDITOR.dialog.definition.uiElement} definition The UI element + * definition. + */ + registerEvents: function( definition ) { + var regex = /^on([A-Z]\w+)/, + match; + + var registerDomEvent = function( uiElement, dialog, eventName, func ) { + dialog.on( 'load', function() { + uiElement.getInputElement().on( eventName, func, uiElement ); + } ); + }; + + for ( var i in definition ) { + if ( !( match = i.match( regex ) ) ) + continue; + if ( this.eventProcessors[ i ] ) + this.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] ); + else + registerDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] ); + } + + return this; + }, + + /** + * The event processor list used by + * {@link CKEDITOR.ui.dialog.uiElement#getInputElement} at UI element + * instantiation. The default list defines three `on*` events: + * + * 1. `onLoad` - Called when the element's parent dialog opens for the + * first time. + * 2. `onShow` - Called whenever the element's parent dialog opens. + * 3. `onHide` - Called whenever the element's parent dialog closes. + * + * // This connects the 'click' event in CKEDITOR.ui.dialog.button to onClick + * // handlers in the UI element's definitions. + * CKEDITOR.ui.dialog.button.eventProcessors = CKEDITOR.tools.extend( {}, + * CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, + * { onClick : function( dialog, func ) { this.on( 'click', func ); } }, + * true + * ); + * + * @property {Object} + */ + eventProcessors: { + onLoad: function( dialog, func ) { + dialog.on( 'load', func, this ); + }, + + onShow: function( dialog, func ) { + dialog.on( 'show', func, this ); + }, + + onHide: function( dialog, func ) { + dialog.on( 'hide', func, this ); + } + }, + + /** + * The default handler for a UI element's access key down event, which + * tries to put focus to the UI element. + * + * Can be overridded in child classes for more sophisticaed behavior. + * + * @param {CKEDITOR.dialog} dialog The parent dialog object. + * @param {String} key The key combination pressed. Since access keys + * are defined to always include the `CTRL` key, its value should always + * include a `'CTRL+'` prefix. + */ + accessKeyDown: function() { + this.focus(); + }, + + /** + * The default handler for a UI element's access key up event, which + * does nothing. + * + * Can be overridded in child classes for more sophisticated behavior. + * + * @param {CKEDITOR.dialog} dialog The parent dialog object. + * @param {String} key The key combination pressed. Since access keys + * are defined to always include the `CTRL` key, its value should always + * include a `'CTRL+'` prefix. + */ + accessKeyUp: function() {}, + + /** + * Disables a UI element. + */ + disable: function() { + var element = this.getElement(), + input = this.getInputElement(); + input.setAttribute( 'disabled', 'true' ); + element.addClass( 'cke_disabled' ); + }, + + /** + * Enables a UI element. + */ + enable: function() { + var element = this.getElement(), + input = this.getInputElement(); + input.removeAttribute( 'disabled' ); + element.removeClass( 'cke_disabled' ); + }, + + /** + * Determines whether an UI element is enabled or not. + * + * @returns {Boolean} Whether the UI element is enabled. + */ + isEnabled: function() { + return !this.getElement().hasClass( 'cke_disabled' ); + }, + + /** + * Determines whether an UI element is visible or not. + * + * @returns {Boolean} Whether the UI element is visible. + */ + isVisible: function() { + return this.getInputElement().isVisible(); + }, + + /** + * Determines whether an UI element is focus-able or not. + * Focus-able is defined as being both visible and enabled. + * + * @returns {Boolean} Whether the UI element can be focused. + */ + isFocusable: function() { + if ( !this.isEnabled() || !this.isVisible() ) + return false; + return true; + } + }; + + /** @class CKEDITOR.ui.dialog.hbox */ + CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { + /** + * Gets a child UI element inside this container. + * + * var checkbox = hbox.getChild( [0,1] ); + * checkbox.setValue( true ); + * + * @param {Array/Number} indices An array or a single number to indicate the child's + * position in the container's descendant tree. Omit to get all the children in an array. + * @returns {Array/CKEDITOR.ui.dialog.uiElement} Array of all UI elements in the container + * if no argument given, or the specified UI element if indices is given. + */ + getChild: function( indices ) { + // If no arguments, return a clone of the children array. + if ( arguments.length < 1 ) + return this._.children.concat(); + + // If indices isn't array, make it one. + if ( !indices.splice ) + indices = [ indices ]; + + // Retrieve the child element according to tree position. + if ( indices.length < 2 ) + return this._.children[ indices[ 0 ] ]; + else + return ( this._.children[ indices[ 0 ] ] && this._.children[ indices[ 0 ] ].getChild ) ? this._.children[ indices[ 0 ] ].getChild( indices.slice( 1, indices.length ) ) : null; + } + }, true ); + + CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox(); + + ( function() { + var commonBuilder = { + build: function( dialog, elementDefinition, output ) { + var children = elementDefinition.children, + child, + childHtmlList = [], + childObjList = []; + for ( var i = 0; + ( i < children.length && ( child = children[ i ] ) ); i++ ) { + var childHtml = []; + childHtmlList.push( childHtml ); + childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) ); + } + return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition ); + } + }; + + CKEDITOR.dialog.addUIElement( 'hbox', commonBuilder ); + CKEDITOR.dialog.addUIElement( 'vbox', commonBuilder ); + } )(); + + /** + * Generic dialog command. It opens a specific dialog when executed. + * + * // Register the "link" command, which opens the "link" dialog. + * editor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link' ) ); + * + * @class + * @constructor Creates a dialogCommand class instance. + * @extends CKEDITOR.commandDefinition + * @param {String} dialogName The name of the dialog to open when executing + * this command. + * @param {Object} [ext] Additional command definition's properties. + */ + CKEDITOR.dialogCommand = function( dialogName, ext ) { + this.dialogName = dialogName; + CKEDITOR.tools.extend( this, ext, true ); + }; + + CKEDITOR.dialogCommand.prototype = { + exec: function( editor ) { + editor.openDialog( this.dialogName ); + }, + + // Dialog commands just open a dialog ui, thus require no undo logic, + // undo support should dedicate to specific dialog implementation. + canUndo: false, + + editorFocus: 1 + }; + + ( function() { + var notEmptyRegex = /^([a]|[^a])+$/, + integerRegex = /^\d*$/, + numberRegex = /^\d*(?:\.\d+)?$/, + htmlLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/, + cssLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, + inlineStyleRegex = /^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/; + + CKEDITOR.VALIDATE_OR = 1; + CKEDITOR.VALIDATE_AND = 2; + + CKEDITOR.dialog.validate = { + functions: function() { + var args = arguments; + return function() { + /** + * It's important for validate functions to be able to accept the value + * as argument in addition to this.getValue(), so that it is possible to + * combine validate functions together to make more sophisticated + * validators. + */ + var value = this && this.getValue ? this.getValue() : args[ 0 ]; + + var msg, + relation = CKEDITOR.VALIDATE_AND, + functions = [], + i; + + for ( i = 0; i < args.length; i++ ) { + if ( typeof args[ i ] == 'function' ) + functions.push( args[ i ] ); + else + break; + } + + if ( i < args.length && typeof args[ i ] == 'string' ) { + msg = args[ i ]; + i++; + } + + if ( i < args.length && typeof args[ i ] == 'number' ) + relation = args[ i ]; + + var passed = ( relation == CKEDITOR.VALIDATE_AND ? true : false ); + for ( i = 0; i < functions.length; i++ ) { + if ( relation == CKEDITOR.VALIDATE_AND ) + passed = passed && functions[ i ]( value ); + else + passed = passed || functions[ i ]( value ); + } + + return !passed ? msg : true; + }; + }, + + regex: function( regex, msg ) { + /* + * Can be greatly shortened by deriving from functions validator if code size + * turns out to be more important than performance. + */ + return function() { + var value = this && this.getValue ? this.getValue() : arguments[ 0 ]; + return !regex.test( value ) ? msg : true; + }; + }, + + notEmpty: function( msg ) { + return this.regex( notEmptyRegex, msg ); + }, + + integer: function( msg ) { + return this.regex( integerRegex, msg ); + }, + + 'number': function( msg ) { + return this.regex( numberRegex, msg ); + }, + + 'cssLength': function( msg ) { + return this.functions( function( val ) { + return cssLengthRegex.test( CKEDITOR.tools.trim( val ) ); + }, msg ); + }, + + 'htmlLength': function( msg ) { + return this.functions( function( val ) { + return htmlLengthRegex.test( CKEDITOR.tools.trim( val ) ); + }, msg ); + }, + + 'inlineStyle': function( msg ) { + return this.functions( function( val ) { + return inlineStyleRegex.test( CKEDITOR.tools.trim( val ) ); + }, msg ); + }, + + equals: function( value, msg ) { + return this.functions( function( val ) { + return val == value; + }, msg ); + }, + + notEqual: function( value, msg ) { + return this.functions( function( val ) { + return val != value; + }, msg ); + } + }; + + CKEDITOR.on( 'instanceDestroyed', function( evt ) { + // Remove dialog cover on last instance destroy. + if ( CKEDITOR.tools.isEmpty( CKEDITOR.instances ) ) { + var currentTopDialog; + while ( ( currentTopDialog = CKEDITOR.dialog._.currentTop ) ) + currentTopDialog.hide(); + removeCovers(); + } + + var dialogs = evt.editor._.storedDialogs; + for ( var name in dialogs ) + dialogs[ name ].destroy(); + + } ); + + } )(); + + // Extend the CKEDITOR.editor class with dialog specific functions. + CKEDITOR.tools.extend( CKEDITOR.editor.prototype, { + /** + * Loads and opens a registered dialog. + * + * CKEDITOR.instances.editor1.openDialog( 'smiley' ); + * + * @member CKEDITOR.editor + * @param {String} dialogName The registered name of the dialog. + * @param {Function} callback The function to be invoked after dialog instance created. + * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed. + * `null` if the dialog name is not registered. + * @see CKEDITOR.dialog#add + */ + openDialog: function( dialogName, callback ) { + var dialog = null, dialogDefinitions = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; + + if ( CKEDITOR.dialog._.currentTop === null ) + showCover( this ); + + // If the dialogDefinition is already loaded, open it immediately. + if ( typeof dialogDefinitions == 'function' ) { + var storedDialogs = this._.storedDialogs || ( this._.storedDialogs = {} ); + + dialog = storedDialogs[ dialogName ] || ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) ); + + callback && callback.call( dialog, dialog ); + dialog.show(); + + } else if ( dialogDefinitions == 'failed' ) { + hideCover( this ); + throw new Error( '[CKEDITOR.dialog.openDialog] Dialog "' + dialogName + '" failed when loading definition.' ); + } else if ( typeof dialogDefinitions == 'string' ) { + + CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( dialogDefinitions ), + function() { + var dialogDefinition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; + // In case of plugin error, mark it as loading failed. + if ( typeof dialogDefinition != 'function' ) + CKEDITOR.dialog._.dialogDefinitions[ dialogName ] = 'failed'; + + this.openDialog( dialogName, callback ); + }, this, 0, 1 ); + } + + CKEDITOR.skin.loadPart( 'dialog' ); + + return dialog; + } + } ); +} )(); + +CKEDITOR.plugins.add( 'dialog', { + requires: 'dialogui', + init: function( editor ) { + editor.on( 'doubleclick', function( evt ) { + if ( evt.data.dialog ) + editor.openDialog( evt.data.dialog ); + }, null, null, 999 ); + } +} ); + +// Dialog related configurations. + +/** + * The color of the dialog background cover. It should be a valid CSS color string. + * + * config.dialog_backgroundCoverColor = 'rgb(255, 254, 253)'; + * + * @cfg {String} [dialog_backgroundCoverColor='white'] + * @member CKEDITOR.config + */ + +/** + * The opacity of the dialog background cover. It should be a number within the + * range `[0.0, 1.0]`. + * + * config.dialog_backgroundCoverOpacity = 0.7; + * + * @cfg {Number} [dialog_backgroundCoverOpacity=0.5] + * @member CKEDITOR.config + */ + +/** + * If the dialog has more than one tab, put focus into the first tab as soon as dialog is opened. + * + * config.dialog_startupFocusTab = true; + * + * @cfg {Boolean} [dialog_startupFocusTab=false] + * @member CKEDITOR.config + */ + +/** + * The distance of magnetic borders used in moving and resizing dialogs, + * measured in pixels. + * + * config.dialog_magnetDistance = 30; + * + * @cfg {Number} [dialog_magnetDistance=20] + * @member CKEDITOR.config + */ + +/** + * The guideline to follow when generating the dialog buttons. There are 3 possible options: + * + * * `'OS'` - the buttons will be displayed in the default order of the user's OS; + * * `'ltr'` - for Left-To-Right order; + * * `'rtl'` - for Right-To-Left order. + * + * Example: + * + * config.dialog_buttonsOrder = 'rtl'; + * + * @since 3.5 + * @cfg {String} [dialog_buttonsOrder='OS'] + * @member CKEDITOR.config + */ + +/** + * The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. + * + * Separate each pair with semicolon (see example). + * + * **Note:** All names are case-sensitive. + * + * **Note:** Be cautious when specifying dialog tabs that are mandatory, + * like `'info'`, dialog functionality might be broken because of this! + * + * config.removeDialogTabs = 'flash:advanced;image:Link'; + * + * @since 3.5 + * @cfg {String} [removeDialogTabs=''] + * @member CKEDITOR.config + */ + +/** + * Tells if user should not be asked to confirm close, if any dialog field was modified. + * By default it is set to `false` meaning that the confirmation dialog will be shown. + * + * config.dialog_noConfirmCancel = true; + * + * @since 4.3 + * @cfg {Boolean} [dialog_noConfirmCancel=false] + * @member CKEDITOR.config + */ + +/** + * Event fired when a dialog definition is about to be used to create a dialog into + * an editor instance. This event makes it possible to customize the definition + * before creating it. + * + * Note that this event is called only the first time a specific dialog is + * opened. Successive openings will use the cached dialog, and this event will + * not get fired. + * + * @event dialogDefinition + * @member CKEDITOR + * @param {CKEDITOR.dialog.definition} data The dialog defination that + * is being loaded. + * @param {CKEDITOR.editor} editor The editor instance that will use the dialog. + */ + +/** + * Event fired when a tab is going to be selected in a dialog. + * + * @event selectPage + * @member CKEDITOR.dialog + * @param data + * @param {String} data.page The id of the page that it's gonna be selected. + * @param {String} data.currentPage The id of the current page. + */ + +/** + * Event fired when the user tries to dismiss a dialog. + * + * @event cancel + * @member CKEDITOR.dialog + * @param data + * @param {Boolean} data.hide Whether the event should proceed or not. + */ + +/** + * Event fired when the user tries to confirm a dialog. + * + * @event ok + * @member CKEDITOR.dialog + * @param data + * @param {Boolean} data.hide Whether the event should proceed or not. + */ + +/** + * Event fired when a dialog is shown. + * + * @event show + * @member CKEDITOR.dialog + */ + +/** + * Event fired when a dialog is shown. + * + * @event dialogShow + * @member CKEDITOR.editor + * @param {CKEDITOR.editor} editor This editor instance. + * @param {CKEDITOR.dialog} data The opened dialog instance. + */ + +/** + * Event fired when a dialog is hidden. + * + * @event hide + * @member CKEDITOR.dialog + */ + +/** + * Event fired when a dialog is hidden. + * + * @event dialogHide + * @member CKEDITOR.editor + * @param {CKEDITOR.editor} editor This editor instance. + * @param {CKEDITOR.dialog} data The hidden dialog instance. + */ + +/** + * Event fired when a dialog is being resized. The event is fired on + * both the {@link CKEDITOR.dialog} object and the dialog instance + * since 3.5.3, previously it was only available in the global object. + * + * @static + * @event resize + * @member CKEDITOR.dialog + * @param data + * @param {CKEDITOR.dialog} data.dialog The dialog being resized (if + * it is fired on the dialog itself, this parameter is not sent). + * @param {String} data.skin The skin name. + * @param {Number} data.width The new width. + * @param {Number} data.height The new height. + */ + +/** + * Event fired when a dialog is being resized. The event is fired on + * both the {@link CKEDITOR.dialog} object and the dialog instance + * since 3.5.3, previously it was only available in the global object. + * + * @since 3.5 + * @event resize + * @member CKEDITOR.dialog + * @param data + * @param {Number} data.width The new width. + * @param {Number} data.height The new height. + */ + +/** + * Event fired when the dialog state changes, usually by {@link CKEDITOR.dialog#setState}. + * + * @since 4.5 + * @event state + * @member CKEDITOR.dialog + * @param data + * @param {Number} data The new state. Either {@link CKEDITOR#DIALOG_STATE_IDLE} or {@link CKEDITOR#DIALOG_STATE_BUSY}. + */ diff --git a/app/javascript/components/notifier/ckeditor/plugins/dialog/samples/assets/my_dialog.js b/app/javascript/components/notifier/ckeditor/plugins/dialog/samples/assets/my_dialog.js new file mode 100644 index 00000000000..24b90a69854 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/dialog/samples/assets/my_dialog.js @@ -0,0 +1,49 @@ +/** + * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.dialog.add( 'myDialog', function() { + return { + title: 'My Dialog', + minWidth: 400, + minHeight: 200, + contents: [ + { + id: 'tab1', + label: 'First Tab', + title: 'First Tab', + elements: [ + { + id: 'input1', + type: 'text', + label: 'Text Field' + }, + { + id: 'select1', + type: 'select', + label: 'Select Field', + items: [ + [ 'option1', 'value1' ], + [ 'option2', 'value2' ] + ] + } + ] + }, + { + id: 'tab2', + label: 'Second Tab', + title: 'Second Tab', + elements: [ + { + id: 'button1', + type: 'button', + label: 'Button Field' + } + ] + } + ] + }; +} ); + +// %LEAVE_UNMINIFIED% %REMOVE_LINE% diff --git a/app/javascript/components/notifier/ckeditor/plugins/dialog/samples/dialog.html b/app/javascript/components/notifier/ckeditor/plugins/dialog/samples/dialog.html new file mode 100644 index 00000000000..61654c61f8e --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/dialog/samples/dialog.html @@ -0,0 +1,190 @@ + + + + + + Using API to Customize Dialog Windows — CKEditor Sample + + + + + + + + + +

+ CKEditor Samples » Using CKEditor Dialog API +

+
+ This sample is not maintained anymore. Check out the brand new samples in CKEditor SDK. +
+
+

+ This sample shows how to use the + CKEditor Dialog API + to customize CKEditor dialog windows without changing the original editor code. + The following customizations are being done in the example below: +

+

+ For details on how to create this setup check the source code of this sample page. +

+
+

A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

+
    +
  1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
  2. +
  3. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.
  4. +
+ + +

The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

+
    +
  1. Adding dialog tab – Add new tab "My Tab" to dialog window.
  2. +
  3. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
  4. +
  5. Adding dialog window fields – Add "My Custom Field" to the dialog window.
  6. +
  7. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
  8. +
  9. Setting default values for dialog window fields – Set default value of "Text Field" text field.
  10. +
  11. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
  12. +
+ + + + + diff --git a/app/javascript/components/notifier/ckeditor/plugins/dialogui/plugin.js b/app/javascript/components/notifier/ckeditor/plugins/dialogui/plugin.js new file mode 100644 index 00000000000..7667538dcfd --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/dialogui/plugin.js @@ -0,0 +1,1530 @@ +/** + * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * @fileOverview The Dialog User Interface plugin. + */ + +CKEDITOR.plugins.add( 'dialogui', { + onLoad: function() { + + var initPrivateObject = function( elementDefinition ) { + this._ || ( this._ = {} ); + this._[ 'default' ] = this._.initValue = elementDefinition[ 'default' ] || ''; + this._.required = elementDefinition.required || false; + var args = [ this._ ]; + for ( var i = 1; i < arguments.length; i++ ) + args.push( arguments[ i ] ); + args.push( true ); + CKEDITOR.tools.extend.apply( CKEDITOR.tools, args ); + return this._; + }, + textBuilder = { + build: function( dialog, elementDefinition, output ) { + return new CKEDITOR.ui.dialog.textInput( dialog, elementDefinition, output ); + } + }, + commonBuilder = { + build: function( dialog, elementDefinition, output ) { + return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, elementDefinition, output ); + } + }, + containerBuilder = { + build: function( dialog, elementDefinition, output ) { + var children = elementDefinition.children, + child, + childHtmlList = [], + childObjList = []; + for ( var i = 0; + ( i < children.length && ( child = children[ i ] ) ); i++ ) { + var childHtml = []; + childHtmlList.push( childHtml ); + childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) ); + } + return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition ); + } + }, + commonPrototype = { + isChanged: function() { + return this.getValue() != this.getInitValue(); + }, + + reset: function( noChangeEvent ) { + this.setValue( this.getInitValue(), noChangeEvent ); + }, + + setInitValue: function() { + this._.initValue = this.getValue(); + }, + + resetInitValue: function() { + this._.initValue = this._[ 'default' ]; + }, + + getInitValue: function() { + return this._.initValue; + } + }, + commonEventProcessors = CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { + onChange: function( dialog, func ) { + if ( !this._.domOnChangeRegistered ) { + dialog.on( 'load', function() { + this.getInputElement().on( 'change', function() { + // Make sure 'onchange' doesn't get fired after dialog closed. (http://dev.ckeditor.com/ticket/5719) + if ( !dialog.parts.dialog.isVisible() ) + return; + + this.fire( 'change', { value: this.getValue() } ); + }, this ); + }, this ); + this._.domOnChangeRegistered = true; + } + + this.on( 'change', func ); + } + }, true ), + eventRegex = /^on([A-Z]\w+)/, + cleanInnerDefinition = function( def ) { + // An inner UI element should not have the parent's type, title or events. + for ( var i in def ) { + if ( eventRegex.test( i ) || i == 'title' || i == 'type' ) + delete def[ i ]; + } + return def; + }, + // @context {CKEDITOR.dialog.uiElement} UI element (textarea or textInput) + // @param {CKEDITOR.dom.event} evt + toggleBidiKeyUpHandler = function( evt ) { + var keystroke = evt.data.getKeystroke(); + + // ALT + SHIFT + Home for LTR direction. + if ( keystroke == CKEDITOR.SHIFT + CKEDITOR.ALT + 36 ) + this.setDirectionMarker( 'ltr' ); + + // ALT + SHIFT + End for RTL direction. + else if ( keystroke == CKEDITOR.SHIFT + CKEDITOR.ALT + 35 ) + this.setDirectionMarker( 'rtl' ); + }; + + CKEDITOR.tools.extend( CKEDITOR.ui.dialog, { + /** + * Base class for all dialog window elements with a textual label on the left. + * + * @class CKEDITOR.ui.dialog.labeledElement + * @extends CKEDITOR.ui.dialog.uiElement + * @constructor Creates a labeledElement class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `label` (Required) The label string. + * * `labelLayout` (Optional) Put 'horizontal' here if the + * label element is to be laid out horizontally. Otherwise a vertical + * layout will be used. + * * `widths` (Optional) This applies only to horizontal + * layouts — a two-element array of lengths to specify the widths of the + * label and the content element. + * * `role` (Optional) Value for the `role` attribute. + * * `includeLabel` (Optional) If set to `true`, the `aria-labelledby` attribute + * will be included. + * + * @param {Array} htmlList The list of HTML code to output to. + * @param {Function} contentHtml + * A function returning the HTML code string to be added inside the content + * cell. + */ + labeledElement: function( dialog, elementDefinition, htmlList, contentHtml ) { + if ( arguments.length < 4 ) + return; + + var _ = initPrivateObject.call( this, elementDefinition ); + _.labelId = CKEDITOR.tools.getNextId() + '_label'; + this._.children = []; + + var innerHTML = function() { + var html = [], + requiredClass = elementDefinition.required ? ' cke_required' : ''; + if ( elementDefinition.labelLayout != 'horizontal' ) { + html.push( + '', + '' ); + } else { + var hboxDefinition = { + type: 'hbox', + widths: elementDefinition.widths, + padding: 0, + children: [ { + type: 'html', + html: '' + }, + { + type: 'html', + html: '' + + contentHtml.call( this, dialog, elementDefinition ) + + '' + } ] + }; + CKEDITOR.dialog._.uiElementBuilders.hbox.build( dialog, hboxDefinition, html ); + } + return html.join( '' ); + }; + var attributes = { role: elementDefinition.role || 'presentation' }; + + if ( elementDefinition.includeLabel ) + attributes[ 'aria-labelledby' ] = _.labelId; + + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'div', null, attributes, innerHTML ); + }, + + /** + * A text input with a label. This UI element class represents both the + * single-line text inputs and password inputs in dialog boxes. + * + * @class CKEDITOR.ui.dialog.textInput + * @extends CKEDITOR.ui.dialog.labeledElement + * @constructor Creates a textInput class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `default` (Optional) The default value. + * * `validate` (Optional) The validation function. + * * `maxLength` (Optional) The maximum length of text box contents. + * * `size` (Optional) The size of the text box. This is + * usually overridden by the size defined by the skin, though. + * + * @param {Array} htmlList List of HTML code to output to. + */ + textInput: function( dialog, elementDefinition, htmlList ) { + if ( arguments.length < 3 ) + return; + + initPrivateObject.call( this, elementDefinition ); + var domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textInput', + attributes = { 'class': 'cke_dialog_ui_input_' + elementDefinition.type, id: domId, type: elementDefinition.type }; + + // Set the validator, if any. + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + // Set the max length and size. + if ( elementDefinition.maxLength ) + attributes.maxlength = elementDefinition.maxLength; + if ( elementDefinition.size ) + attributes.size = elementDefinition.size; + + if ( elementDefinition.inputStyle ) + attributes.style = elementDefinition.inputStyle; + + // If user presses Enter in a text box, it implies clicking OK for the dialog. + var me = this, + keyPressedOnMe = false; + dialog.on( 'load', function() { + me.getInputElement().on( 'keydown', function( evt ) { + if ( evt.data.getKeystroke() == 13 ) + keyPressedOnMe = true; + } ); + + // Lower the priority this 'keyup' since 'ok' will close the dialog.(http://dev.ckeditor.com/ticket/3749) + me.getInputElement().on( 'keyup', function( evt ) { + if ( evt.data.getKeystroke() == 13 && keyPressedOnMe ) { + dialog.getButton( 'ok' ) && setTimeout( function() { + dialog.getButton( 'ok' ).click(); + }, 0 ); + keyPressedOnMe = false; + } + + if ( me.bidi ) + toggleBidiKeyUpHandler.call( me, evt ); + }, null, null, 1000 ); + } ); + + var innerHTML = function() { + // IE BUG: Text input fields in IE at 100% would exceed a or inline + // container's width, so need to wrap it inside a
. + var html = [ '' ); + return html.join( '' ); + }; + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + }, + + /** + * A text area with a label at the top or on the left. + * + * @class CKEDITOR.ui.dialog.textarea + * @extends CKEDITOR.ui.dialog.labeledElement + * @constructor Creates a textarea class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * + * The element definition. Accepted fields: + * + * * `rows` (Optional) The number of rows displayed. + * Defaults to 5 if not defined. + * * `cols` (Optional) The number of cols displayed. + * Defaults to 20 if not defined. Usually overridden by skins. + * * `default` (Optional) The default value. + * * `validate` (Optional) The validation function. + * + * @param {Array} htmlList List of HTML code to output to. + */ + textarea: function( dialog, elementDefinition, htmlList ) { + if ( arguments.length < 3 ) + return; + + initPrivateObject.call( this, elementDefinition ); + var me = this, + domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textarea', + attributes = {}; + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + // Generates the essential attributes for the textarea tag. + attributes.rows = elementDefinition.rows || 5; + attributes.cols = elementDefinition.cols || 20; + + attributes[ 'class' ] = 'cke_dialog_ui_input_textarea ' + ( elementDefinition[ 'class' ] || '' ); + + if ( typeof elementDefinition.inputStyle != 'undefined' ) + attributes.style = elementDefinition.inputStyle; + + if ( elementDefinition.dir ) + attributes.dir = elementDefinition.dir; + + if ( me.bidi ) { + dialog.on( 'load', function() { + me.getInputElement().on( 'keyup', toggleBidiKeyUpHandler ); + }, me ); + } + + var innerHTML = function() { + attributes[ 'aria-labelledby' ] = this._.labelId; + this._.required && ( attributes[ 'aria-required' ] = this._.required ); + var html = [ '' ); + return html.join( '' ); + }; + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + }, + + /** + * A single checkbox with a label on the right. + * + * @class CKEDITOR.ui.dialog.checkbox + * @extends CKEDITOR.ui.dialog.uiElement + * @constructor Creates a checkbox class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `checked` (Optional) Whether the checkbox is checked + * on instantiation. Defaults to `false`. + * * `validate` (Optional) The validation function. + * * `label` (Optional) The checkbox label. + * + * @param {Array} htmlList List of HTML code to output to. + */ + checkbox: function( dialog, elementDefinition, htmlList ) { + if ( arguments.length < 3 ) + return; + + var _ = initPrivateObject.call( this, elementDefinition, { 'default': !!elementDefinition[ 'default' ] } ); + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + var innerHTML = function() { + var myDefinition = CKEDITOR.tools.extend( + {}, + elementDefinition, + { + id: elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextId() + '_checkbox' + }, + true + ), + html = []; + + var labelId = CKEDITOR.tools.getNextId() + '_label'; + var attributes = { 'class': 'cke_dialog_ui_checkbox_input', type: 'checkbox', 'aria-labelledby': labelId }; + cleanInnerDefinition( myDefinition ); + if ( elementDefinition[ 'default' ] ) + attributes.checked = 'checked'; + + if ( typeof myDefinition.inputStyle != 'undefined' ) + myDefinition.style = myDefinition.inputStyle; + + _.checkbox = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'input', null, attributes ); + html.push( + ' ' + ); + return html.join( '' ); + }; + + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'span', null, null, innerHTML ); + }, + + /** + * A group of radio buttons. + * + * @class CKEDITOR.ui.dialog.radio + * @extends CKEDITOR.ui.dialog.labeledElement + * @constructor Creates a radio class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `default` (Required) The default value. + * * `validate` (Optional) The validation function. + * * `items` (Required) An array of options. Each option + * is a one- or two-item array of format `[ 'Description', 'Value' ]`. If `'Value'` + * is missing, then the value would be assumed to be the same as the description. + * + * @param {Array} htmlList List of HTML code to output to. + */ + radio: function( dialog, elementDefinition, htmlList ) { + if ( arguments.length < 3 ) + return; + + initPrivateObject.call( this, elementDefinition ); + + if ( !this._[ 'default' ] ) + this._[ 'default' ] = this._.initValue = elementDefinition.items[ 0 ][ 1 ]; + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + var children = [], + me = this; + + var innerHTML = function() { + var inputHtmlList = [], + html = [], + commonName = ( elementDefinition.id ? elementDefinition.id : CKEDITOR.tools.getNextId() ) + '_radio'; + + for ( var i = 0; i < elementDefinition.items.length; i++ ) { + var item = elementDefinition.items[ i ], + title = item[ 2 ] !== undefined ? item[ 2 ] : item[ 0 ], + value = item[ 1 ] !== undefined ? item[ 1 ] : item[ 0 ], + inputId = CKEDITOR.tools.getNextId() + '_radio_input', + labelId = inputId + '_label', + + inputDefinition = CKEDITOR.tools.extend( {}, elementDefinition, { + id: inputId, + title: null, + type: null + }, true ), + + labelDefinition = CKEDITOR.tools.extend( {}, inputDefinition, { + title: title + }, true ), + + inputAttributes = { + type: 'radio', + 'class': 'cke_dialog_ui_radio_input', + name: commonName, + value: value, + 'aria-labelledby': labelId + }, + + inputHtml = []; + + if ( me._[ 'default' ] == value ) + inputAttributes.checked = 'checked'; + + cleanInnerDefinition( inputDefinition ); + cleanInnerDefinition( labelDefinition ); + + if ( typeof inputDefinition.inputStyle != 'undefined' ) + inputDefinition.style = inputDefinition.inputStyle; + + // Make inputs of radio type focusable (http://dev.ckeditor.com/ticket/10866). + inputDefinition.keyboardFocusable = true; + + children.push( new CKEDITOR.ui.dialog.uiElement( dialog, inputDefinition, inputHtml, 'input', null, inputAttributes ) ); + + inputHtml.push( ' ' ); + + new CKEDITOR.ui.dialog.uiElement( dialog, labelDefinition, inputHtml, 'label', null, { + id: labelId, + 'for': inputAttributes.id + }, item[ 0 ] ); + + inputHtmlList.push( inputHtml.join( '' ) ); + } + + new CKEDITOR.ui.dialog.hbox( dialog, children, inputHtmlList, html ); + + return html.join( '' ); + }; + + // Adding a role="radiogroup" to definition used for wrapper. + elementDefinition.role = 'radiogroup'; + elementDefinition.includeLabel = true; + + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + this._.children = children; + }, + + /** + * A button with a label inside. + * + * @class CKEDITOR.ui.dialog.button + * @extends CKEDITOR.ui.dialog.uiElement + * @constructor Creates a button class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `label` (Required) The button label. + * * `disabled` (Optional) Set to `true` if you want the + * button to appear in the disabled state. + * + * @param {Array} htmlList List of HTML code to output to. + */ + button: function( dialog, elementDefinition, htmlList ) { + if ( !arguments.length ) + return; + + if ( typeof elementDefinition == 'function' ) + elementDefinition = elementDefinition( dialog.getParentEditor() ); + + initPrivateObject.call( this, elementDefinition, { disabled: elementDefinition.disabled || false } ); + + // Add OnClick event to this input. + CKEDITOR.event.implementOn( this ); + + var me = this; + + // Register an event handler for processing button clicks. + dialog.on( 'load', function() { + var element = this.getElement(); + + ( function() { + element.on( 'click', function( evt ) { + me.click(); + // http://dev.ckeditor.com/ticket/9958 + evt.data.preventDefault(); + } ); + + element.on( 'keydown', function( evt ) { + if ( evt.data.getKeystroke() in { 32: 1 } ) { + me.click(); + evt.data.preventDefault(); + } + } ); + } )(); + + element.unselectable(); + }, this ); + + var outerDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); + delete outerDefinition.style; + + var labelId = CKEDITOR.tools.getNextId() + '_label'; + CKEDITOR.ui.dialog.uiElement.call( this, dialog, outerDefinition, htmlList, 'a', null, { + style: elementDefinition.style, + href: 'javascript:void(0)', // jshint ignore:line + title: elementDefinition.label, + hidefocus: 'true', + 'class': elementDefinition[ 'class' ], + role: 'button', + 'aria-labelledby': labelId + }, '' + + CKEDITOR.tools.htmlEncode( elementDefinition.label ) + + '' ); + }, + + /** + * A select box. + * + * @class CKEDITOR.ui.dialog.select + * @extends CKEDITOR.ui.dialog.uiElement + * @constructor Creates a button class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `default` (Required) The default value. + * * `validate` (Optional) The validation function. + * * `items` (Required) An array of options. Each option + * is a one- or two-item array of format `[ 'Description', 'Value' ]`. If `'Value'` + * is missing, then the value would be assumed to be the same as the + * description. + * * `multiple` (Optional) Set this to `true` if you would like + * to have a multiple-choice select box. + * * `size` (Optional) The number of items to display in + * the select box. + * + * @param {Array} htmlList List of HTML code to output to. + */ + select: function( dialog, elementDefinition, htmlList ) { + if ( arguments.length < 3 ) + return; + + var _ = initPrivateObject.call( this, elementDefinition ); + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + _.inputId = CKEDITOR.tools.getNextId() + '_select'; + + var innerHTML = function() { + var myDefinition = CKEDITOR.tools.extend( + {}, + elementDefinition, + { + id: ( elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextId() + '_select' ) + }, + true + ), + html = [], + innerHTML = [], + attributes = { 'id': _.inputId, 'class': 'cke_dialog_ui_input_select', 'aria-labelledby': this._.labelId }; + + html.push( '' ); + + return html.join( '' ); + }; + + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + }, + + /** + * A file upload input. + * + * @class CKEDITOR.ui.dialog.file + * @extends CKEDITOR.ui.dialog.labeledElement + * @constructor Creates a file class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `validate` (Optional) The validation function. + * + * @param {Array} htmlList List of HTML code to output to. + */ + file: function( dialog, elementDefinition, htmlList ) { + if ( arguments.length < 3 ) + return; + + if ( elementDefinition[ 'default' ] === undefined ) + elementDefinition[ 'default' ] = ''; + + var _ = CKEDITOR.tools.extend( initPrivateObject.call( this, elementDefinition ), { definition: elementDefinition, buttons: [] } ); + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + /** @ignore */ + var innerHTML = function() { + _.frameId = CKEDITOR.tools.getNextId() + '_fileInput'; + + var html = [ + '' ); + + return html.join( '' ); + }; + + // IE BUG: Parent container does not resize to contain the iframe automatically. + dialog.on( 'load', function() { + var iframe = CKEDITOR.document.getById( _.frameId ), + contentDiv = iframe.getParent(); + contentDiv.addClass( 'cke_dialog_ui_input_file' ); + } ); + + CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); + }, + + /** + * A button for submitting the file in a file upload input. + * + * @class CKEDITOR.ui.dialog.fileButton + * @extends CKEDITOR.ui.dialog.button + * @constructor Creates a fileButton class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `for` (Required) The file input's page and element ID + * to associate with, in a two-item array format: `[ 'page_id', 'element_id' ]`. + * * `validate` (Optional) The validation function. + * + * @param {Array} htmlList List of HTML code to output to. + */ + fileButton: function( dialog, elementDefinition, htmlList ) { + var me = this; + if ( arguments.length < 3 ) + return; + + initPrivateObject.call( this, elementDefinition ); + + if ( elementDefinition.validate ) + this.validate = elementDefinition.validate; + + var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); + var onClick = myDefinition.onClick; + myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button'; + myDefinition.onClick = function( evt ) { + var target = elementDefinition[ 'for' ]; // [ pageId, elementId ] + if ( !onClick || onClick.call( this, evt ) !== false ) { + dialog.getContentElement( target[ 0 ], target[ 1 ] ).submit(); + this.disable(); + } + }; + + dialog.on( 'load', function() { + dialog.getContentElement( elementDefinition[ 'for' ][ 0 ], elementDefinition[ 'for' ][ 1 ] )._.buttons.push( me ); + } ); + + CKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList ); + }, + + html: ( function() { + var myHtmlRe = /^\s*<[\w:]+\s+([^>]*)?>/, + theirHtmlRe = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/, + emptyTagRe = /\/$/; + /** + * A dialog window element made from raw HTML code. + * + * @class CKEDITOR.ui.dialog.html + * @extends CKEDITOR.ui.dialog.uiElement + * @constructor Creates a html class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition. + * Accepted fields: + * + * * `html` (Required) HTML code of this element. + * + * @param {Array} htmlList List of HTML code to be added to the dialog's content area. + */ + return function( dialog, elementDefinition, htmlList ) { + if ( arguments.length < 3 ) + return; + + var myHtmlList = [], + myHtml, + theirHtml = elementDefinition.html, + myMatch, theirMatch; + + // If the HTML input doesn't contain any tags at the beginning, add a tag around it. + if ( theirHtml.charAt( 0 ) != '<' ) + theirHtml = '' + theirHtml + ''; + + // Look for focus function in definition. + var focus = elementDefinition.focus; + if ( focus ) { + var oldFocus = this.focus; + this.focus = function() { + ( typeof focus == 'function' ? focus : oldFocus ).call( this ); + this.fire( 'focus' ); + }; + if ( elementDefinition.isFocusable ) { + var oldIsFocusable = this.isFocusable; + this.isFocusable = oldIsFocusable; + } + this.keyboardFocusable = true; + } + + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtmlList, 'span', null, null, '' ); + + // Append the attributes created by the uiElement call to the real HTML. + myHtml = myHtmlList.join( '' ); + myMatch = myHtml.match( myHtmlRe ); + theirMatch = theirHtml.match( theirHtmlRe ) || [ '', '', '' ]; + + if ( emptyTagRe.test( theirMatch[ 1 ] ) ) { + theirMatch[ 1 ] = theirMatch[ 1 ].slice( 0, -1 ); + theirMatch[ 2 ] = '/' + theirMatch[ 2 ]; + } + + htmlList.push( [ theirMatch[ 1 ], ' ', myMatch[ 1 ] || '', theirMatch[ 2 ] ].join( '' ) ); + }; + } )(), + + /** + * Form fieldset for grouping dialog UI elements. + * + * @class CKEDITOR.ui.dialog.fieldset + * @extends CKEDITOR.ui.dialog.uiElement + * @constructor Creates a fieldset class instance. + * @param {CKEDITOR.dialog} dialog Parent dialog window object. + * @param {Array} childObjList + * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. + * @param {Array} childHtmlList Array of HTML code that corresponds to the HTML output of all the + * objects in childObjList. + * @param {Array} htmlList Array of HTML code that this element will output to. + * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition + * The element definition. Accepted fields: + * + * * `label` (Optional) The legend of the this fieldset. + * * `children` (Required) An array of dialog window field definitions which will be grouped inside this fieldset. + * + */ + fieldset: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { + var legendLabel = elementDefinition.label; + /** @ignore */ + var innerHTML = function() { + var html = []; + legendLabel && html.push( '' + legendLabel + '' ); + for ( var i = 0; i < childHtmlList.length; i++ ) + html.push( childHtmlList[ i ] ); + return html.join( '' ); + }; + + this._ = { children: childObjList }; + CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'fieldset', null, null, innerHTML ); + } + + }, true ); + + CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement(); + + /** @class CKEDITOR.ui.dialog.labeledElement */ + CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { + /** + * Sets the label text of the element. + * + * @param {String} label The new label text. + * @returns {CKEDITOR.ui.dialog.labeledElement} The current labeled element. + */ + setLabel: function( label ) { + var node = CKEDITOR.document.getById( this._.labelId ); + if ( node.getChildCount() < 1 ) + ( new CKEDITOR.dom.text( label, CKEDITOR.document ) ).appendTo( node ); + else + node.getChild( 0 ).$.nodeValue = label; + return this; + }, + + /** + * Retrieves the current label text of the elment. + * + * @returns {String} The current label text. + */ + getLabel: function() { + var node = CKEDITOR.document.getById( this._.labelId ); + if ( !node || node.getChildCount() < 1 ) + return ''; + else + return node.getChild( 0 ).getText(); + }, + + /** + * Defines the `onChange` event for UI element definitions. + * @property {Object} + */ + eventProcessors: commonEventProcessors + }, true ); + + /** @class CKEDITOR.ui.dialog.button */ + CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { + /** + * Simulates a click to the button. + * + * @returns {Object} Return value of the `click` event. + */ + click: function() { + if ( !this._.disabled ) + return this.fire( 'click', { dialog: this._.dialog } ); + return false; + }, + + /** + * Enables the button. + */ + enable: function() { + this._.disabled = false; + var element = this.getElement(); + element && element.removeClass( 'cke_disabled' ); + }, + + /** + * Disables the button. + */ + disable: function() { + this._.disabled = true; + this.getElement().addClass( 'cke_disabled' ); + }, + + /** + * Checks whether a field is visible. + * + * @returns {Boolean} + */ + isVisible: function() { + return this.getElement().getFirst().isVisible(); + }, + + /** + * Checks whether a field is enabled. Fields can be disabled by using the + * {@link #disable} method and enabled by using the {@link #enable} method. + * + * @returns {Boolean} + */ + isEnabled: function() { + return !this._.disabled; + }, + + /** + * Defines the `onChange` event and `onClick` for button element definitions. + * + * @property {Object} + */ + eventProcessors: CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { + onClick: function( dialog, func ) { + this.on( 'click', function() { + func.apply( this, arguments ); + } ); + } + }, true ), + + /** + * Handler for the element's access key up event. Simulates a click to + * the button. + */ + accessKeyUp: function() { + this.click(); + }, + + /** + * Handler for the element's access key down event. Simulates a mouse + * down to the button. + */ + accessKeyDown: function() { + this.focus(); + }, + + keyboardFocusable: true + }, true ); + + /** @class CKEDITOR.ui.dialog.textInput */ + CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), { + /** + * Gets the text input DOM element under this UI object. + * + * @returns {CKEDITOR.dom.element} The DOM element of the text input. + */ + getInputElement: function() { + return CKEDITOR.document.getById( this._.inputId ); + }, + + /** + * Puts focus into the text input. + */ + focus: function() { + var me = this.selectParentTab(); + + // GECKO BUG: setTimeout() is needed to workaround invisible selections. + setTimeout( function() { + var element = me.getInputElement(); + element && element.$.focus(); + }, 0 ); + }, + + /** + * Selects all the text in the text input. + */ + select: function() { + var me = this.selectParentTab(); + + // GECKO BUG: setTimeout() is needed to workaround invisible selections. + setTimeout( function() { + var e = me.getInputElement(); + if ( e ) { + e.$.focus(); + e.$.select(); + } + }, 0 ); + }, + + /** + * Handler for the text input's access key up event. Makes a `select()` + * call to the text input. + */ + accessKeyUp: function() { + this.select(); + }, + + /** + * Sets the value of this text input object. + * + * uiElement.setValue( 'Blamo' ); + * + * @param {Object} value The new value. + * @returns {CKEDITOR.ui.dialog.textInput} The current UI element. + */ + setValue: function( value ) { + if ( this.bidi ) { + var marker = value && value.charAt( 0 ), + dir = ( marker == '\u202A' ? 'ltr' : marker == '\u202B' ? 'rtl' : null ); + + if ( dir ) { + value = value.slice( 1 ); + } + + // Set the marker or reset it (if dir==null). + this.setDirectionMarker( dir ); + } + + if ( !value ) { + value = ''; + } + + return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments ); + }, + + /** + * Gets the value of this text input object. + * + * @returns {String} The value. + */ + getValue: function() { + var value = CKEDITOR.ui.dialog.uiElement.prototype.getValue.call( this ); + + if ( this.bidi && value ) { + var dir = this.getDirectionMarker(); + if ( dir ) { + value = ( dir == 'ltr' ? '\u202A' : '\u202B' ) + value; + } + } + + return value; + }, + + /** + * Sets the text direction marker and the `dir` attribute of the input element. + * + * @since 4.5 + * @param {String} dir The text direction. Pass `null` to reset. + */ + setDirectionMarker: function( dir ) { + var inputElement = this.getInputElement(); + + if ( dir ) { + inputElement.setAttributes( { + dir: dir, + 'data-cke-dir-marker': dir + } ); + // Don't remove the dir attribute if this field hasn't got the marker, + // because the dir attribute could be set independently. + } else if ( this.getDirectionMarker() ) { + inputElement.removeAttributes( [ 'dir', 'data-cke-dir-marker' ] ); + } + }, + + /** + * Gets the value of the text direction marker. + * + * @since 4.5 + * @returns {String} `'ltr'`, `'rtl'` or `null` if the marker is not set. + */ + getDirectionMarker: function() { + return this.getInputElement().data( 'cke-dir-marker' ); + }, + + keyboardFocusable: true + }, commonPrototype, true ); + + CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput(); + + /** @class CKEDITOR.ui.dialog.select */ + CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), { + /** + * Gets the DOM element of the select box. + * + * @returns {CKEDITOR.dom.element} The `` element of this file input. + * + * @returns {CKEDITOR.dom.element} The file input element. + */ + getInputElement: function() { + var frameDocument = CKEDITOR.document.getById( this._.frameId ).getFrameDocument(); + return frameDocument.$.forms.length > 0 ? new CKEDITOR.dom.element( frameDocument.$.forms[ 0 ].elements[ 0 ] ) : this.getElement(); + }, + + /** + * Uploads the file in the file input. + * + * @returns {CKEDITOR.ui.dialog.file} This object. + */ + submit: function() { + this.getInputElement().getParent().$.submit(); + return this; + }, + + /** + * Gets the action assigned to the form. + * + * @returns {String} The value of the action. + */ + getAction: function() { + return this.getInputElement().getParent().$.action; + }, + + /** + * The events must be applied to the inner input element, and + * this must be done when the iframe and form have been loaded. + */ + registerEvents: function( definition ) { + var regex = /^on([A-Z]\w+)/, + match; + + var registerDomEvent = function( uiElement, dialog, eventName, func ) { + uiElement.on( 'formLoaded', function() { + uiElement.getInputElement().on( eventName, func, uiElement ); + } ); + }; + + for ( var i in definition ) { + if ( !( match = i.match( regex ) ) ) + continue; + + if ( this.eventProcessors[ i ] ) + this.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] ); + else + registerDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] ); + } + + return this; + }, + + /** + * Redraws the file input and resets the file path in the file input. + * The redrawing logic is necessary because non-IE browsers tend to clear + * the `

"); + var target_url = $("a#generate_recommend_dates").data("href"); + $.ajax({ + type: "GET", + data: { start_on: start_on_date }, + url: target_url + }); + }; +}); + +// Input Masks +jQuery.inputMasks = () => { + $(".phone_number").mask("(999) 999-9999"); +}; +$.inputMasks(); + +jQuery.ajaxSetup( { + converters: { + "text script": function( text ) { + jQuery.globalEval( text, {nonce: $("meta[name='csp-nonce']").prop('content')} ); + return text; + } + } +} ); diff --git a/app/javascript/components/benefit_sponsors/assister_agency_staff_roles.js b/app/javascript/components/benefit_sponsors/assister_agency_staff_roles.js new file mode 100644 index 00000000000..09875b7b49f --- /dev/null +++ b/app/javascript/components/benefit_sponsors/assister_agency_staff_roles.js @@ -0,0 +1,41 @@ +$(document).on('click', '.select-assister-agency', function(e) { + e.preventDefault() + selectAssisterAgency(this); +}) + +$(document).on('click', '.aa-search-btn', function(e) { + e.preventDefault() + assisterSearch(); + return false +}) + +function assisterSearch() { + var assister_agency_search = document.getElementById('staff_agency_search').value + var assister_registration_page = document.getElementById('staff_is_assister_registration_page').value + document.getElementById('assister-staff-btn').disabled = true; + if (assister_agency_search != undefined) { + $.ajax({ + url: '/benefit_sponsors/profiles/assister_agencies/assister_agency_staff_roles/search_assister_agency.js', + type: "GET", + data: {'q': assister_agency_search, "assister_registration_page": assister_registration_page}, + success: function() { + if ($('.table-responsive').length) { + $('.assister-agency-submit').removeClass('hidden'); + } + } + }); + }; +} + +function selectAssisterAgency(element) { + var result = document.querySelectorAll('.result'); + result.forEach(function (result) { + var element = result.querySelectorAll('.staff-select-assister') + element.forEach(function (ele) { + ele.classList.remove("agency-selected"); + }) + }); + document.getElementById('staff_profile_id').value = element.dataset.assister_agency_profile_id; + element.closest(".staff-select-assister").classList.add('agency-selected') + document.getElementById('assister-staff-btn').disabled = false; +} diff --git a/app/javascript/components/benefit_sponsors/benefit_package.js b/app/javascript/components/benefit_sponsors/benefit_package.js new file mode 100644 index 00000000000..dcab06aa182 --- /dev/null +++ b/app/javascript/components/benefit_sponsors/benefit_package.js @@ -0,0 +1,37 @@ +function initPlanOptions(plan_options, location_id) { + $('.reference-plans').html("


Select Your Reference Plan

Now select a reference plan. The reference plan is used to cap employer costs. You’ll choose a reference plan. Then, your contribution towards employee premiums will be applied to the reference plan you choose regardless of which plans your employees select. After you select your reference plan, scroll down to review your costs.Displaying: " + plan_options.length + "Plans


"); + + $.each(plan_options, function (index, product) { + + var productHtml = '
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +

' + product["title"] + '

\ +
\ +
\ + Type: ' + product["coverage_kind"] + '
\ + Carrier: ' + product["carrier_name"] + '
\ + Level: ' + product["metal_level_kind"] + '
\ +
\ +
\ +
\ +
\ +
' + + $('.reference-plans').append(productHtml); + }); + + $('.reference-plans').css({ "height": "450px", "y-overflow": "scroll" }); + $('.reference-plans').show(); +}; + + diff --git a/app/javascript/components/benefit_sponsors/benefit_package.js.erb b/app/javascript/components/benefit_sponsors/benefit_package.js.erb new file mode 100644 index 00000000000..3fe006e6b5a --- /dev/null +++ b/app/javascript/components/benefit_sponsors/benefit_package.js.erb @@ -0,0 +1,37 @@ +function initPlanOptions(plan_options, location_id) { + $('.reference-plans').html("


Select Your Reference Plan

Now select a reference plan. The reference plan is used to cap employer costs. You’ll choose a reference plan. Then, your contribution towards employee premiums will be applied to the reference plan you choose regardless of which plans your employees select. After you select your reference plan, scroll down to review your costs.Displaying: " + plan_options.length + "Plans


") + + $.each(plan_options, function (index, product) { + + var productHtml = '
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ +

' + product["title"] + '

\ +
\ +
\ + Type: ' + product["product_type"] + '
\ + Carrier: ' + product["carrier_name"] + '
\ + Level: ' + product["metal_level_kind"] + '
\ +
\ +
\ +
\ +
\ +
' + + $('.reference-plans').append(productHtml); + }); + + $('.reference-plans').css({ "height": "450px", "y-overflow": "scroll" }); + $('.reference-plans').show(); +}; + + diff --git a/app/javascript/components/benefit_sponsors/broker_agency_staff_roles.js b/app/javascript/components/benefit_sponsors/broker_agency_staff_roles.js new file mode 100644 index 00000000000..09a2d30f579 --- /dev/null +++ b/app/javascript/components/benefit_sponsors/broker_agency_staff_roles.js @@ -0,0 +1,42 @@ +$(document).on('click', '.select-broker-agency', function(e) { + e.preventDefault() + selectBrokereAgency(this); +}) + +$(document).on('click', '.ba-search-btn', function(e) { + e.preventDefault() + brokerSearch(); + return false +}) + +function brokerSearch() { + var broker_agency_search = document.getElementById('staff_agency_search').value + var broker_registration_page = document.getElementById('staff_is_broker_registration_page').value + document.getElementById('broker-staff-btn').disabled = true; + if (broker_agency_search != undefined) { + $.ajax({ + url: '/benefit_sponsors/profiles/broker_agencies/broker_agency_staff_roles/search_broker_agency.js', + type: "GET", + data: {'q': broker_agency_search, "broker_registration_page": broker_registration_page}, + success: function() { + if ($('.table-responsive').length) { + $('.broker-agency-submit').removeClass('hidden'); + } + } + }); + }; + +} + +function selectBrokereAgency(element) { + var result = document.querySelectorAll('.result'); + result.forEach(function (result) { + var element = result.querySelectorAll('.staff-select-broker') + element.forEach(function (ele) { + ele.classList.remove("agency-selected"); + }) + }); + document.getElementById('staff_profile_id').value = element.dataset.broker_agency_profile_id; + element.closest(".staff-select-broker").classList.add('agency-selected') + document.getElementById('broker-staff-btn').disabled = false; +} diff --git a/app/javascript/components/benefit_sponsors/date.js b/app/javascript/components/benefit_sponsors/date.js new file mode 100644 index 00000000000..de59582d88b --- /dev/null +++ b/app/javascript/components/benefit_sponsors/date.js @@ -0,0 +1,42 @@ +function check_dateformat(date) { + var dateformat = /^(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/\d{4}$/; + if(date.match(dateformat)){ + var splitdate= date.split('/'); + + var mm = parseInt(splitdate[0]); + var dd = parseInt(splitdate[1]); + var yy = parseInt(splitdate[2]); + var ListofDays = [31,28,31,30,31,30,31,31,30,31,30,31]; + if (mm>12) { + return false; + } + if (mm==1 || mm>2) { + if (dd>ListofDays[mm-1]) { + return false; + } + } + if (mm==2) { + var lyear = false; + if ( (!(yy % 4) && yy % 100) || !(yy % 400)) { + lyear = true; + } + if ((lyear==false) && (dd>=29)) { + return false; + } + if ((lyear==true) && (dd>29)) { + return false; + } + } + return true; + } else { + return false; + } +}; + +$(document).on('blur', 'input.jq-datepicker, input.date-picker', function(){ + var date = $(this).val(); + if(date != "" && !check_dateformat(date)){ + alert("invalid date format"); + $(this).val(""); + } +}); diff --git a/app/javascript/components/benefit_sponsors/general_agency_staff_roles.js b/app/javascript/components/benefit_sponsors/general_agency_staff_roles.js new file mode 100644 index 00000000000..3c3fb0f440d --- /dev/null +++ b/app/javascript/components/benefit_sponsors/general_agency_staff_roles.js @@ -0,0 +1,59 @@ +// components/benefit_sponsors/app/views/benefit_sponsors/profiles/general_agencies/general_agency_staff_roles/new.html.slim +$(document).on('click', '.ga-search-btn', function(e) { + console.log('search clicked') + e.preventDefault() + generalAgencySearch(); + return false +}) + +function generalAgencySearch() { + console.log('gaSearch') + var general_agency_search = document.getElementById('staff_agency_search').value + var general_agency_registration_page = document.getElementById('staff_is_general_agency_registration_page').value + document.getElementById('general-agency-staff-btn').disabled = true; + if (generalAgencySearch != undefined) { + $.ajax({ + url: '/benefit_sponsors/profiles/general_agencies/general_agency_staff_roles/search_general_agency.js', + type: "GET", + data: {'q': general_agency_search, "general_agency_registration_page": general_agency_registration_page}, + success: function() { console.log('gasearch success') }, + error: function() { console.log('gasearch error') } + }); + }; + +} + +function selectGeneralAgency(element) { + var result = document.querySelectorAll('.result'); + result.forEach(function (result) { + var element = result.querySelectorAll('.select-ga') + element.forEach(function (ele) { + ele.classList.remove("agency-selected"); + }) + }); + document.getElementById('staff_profile_id').value = element.dataset.general_agency_profile_id; + element.closest(".select-ga").classList.add('agency-selected') + document.getElementById('general-agency-staff-btn').disabled = false; +} + +// app/views/ui-components/v1/forms/general_agency_registration/_general_agency_staff_information.html.slim +$(document).on('blur', '#inputStaffDOB', function() { + validDob(this) +}) + +function validDob(element) { + if (element.value && element.value.length < 10) { + swal({ + title: "Invalid DOB Format", + text: "DOB must be entered as MM/DD/YYYY", + icon: "warning" + }), + element.value = '' + } +} + +// components/benefit_sponsors/app/views/benefit_sponsors/profiles/general_agencies/general_agency_staff_roles/_search_general_agency.html.erb +$(document).on('click', '.select-general-agency', function(e) { + e.preventDefault() + selectGeneralAgency(this) +}) diff --git a/app/javascript/components/benefit_sponsors/jq_datepicker.js b/app/javascript/components/benefit_sponsors/jq_datepicker.js new file mode 100644 index 00000000000..cec4ff8df12 --- /dev/null +++ b/app/javascript/components/benefit_sponsors/jq_datepicker.js @@ -0,0 +1,102 @@ +function applyJQDatePickerSetup(ele) { + + var el = $(ele); + + if (el.is(".jq_datepicker_already_applied")) { + return; + } + + var dobIdentifiers = ['#jq_datepicker_ignore_person_dob', '#family_member_dob_', '#jq_datepicker_ignore_organization_dob', '#jq_datepicker_ignore_census_employee_dob', '[name="jq_datepicker_ignore_dependent[dob]"]']; + var isElementDOBType = false; + + /* Checking If type of element is Date of Birth type. */ + $.each(dobIdentifiers, function(index, value){ + if(el.is(value)) { + isElementDOBType = true; + return; + } + }); + + var yearMax = dchbx_enroll_date_of_record().getFullYear() + 10; + var yearMin = dchbx_enroll_date_of_record().getFullYear() - 110; + var otherFieldSelector = el.attr("data-submission-field"); + var otherField = $(otherFieldSelector); + otherField.hide(); + el.show(); + var otherFieldId = otherField.attr("id"); + var labelFields = $("label[for='" + otherFieldId + "']"); + if (labelFields.length > 0) { + labelFields.hide(); + } + otherField.attr("class", ""); + + var ofParentControl = otherField.parent(); + var ofGrandparentControl = ofParentControl.parent(); + + var inErrorState = false; + + var dateMax = null; + var dateMin = null; + + if (ofParentControl.is(".floatlabel-wrapper")) { + if (ofGrandparentControl.is(".field_with_errors")) { + inErrorState = true; + } + } else if (ofParentControl.is(".field_with_errors")) { + inErrorState = true; + } + + if (inErrorState) { + var parentControl = el.parent(); + if (parentControl.is(".floatlabel-wrapper")) { + parentControl.wrap("
"); + } else { + el.wrap("
"); + } + } + + if (el.is("[data-year-max]")) { + yearMax = el.attr("data-year-max"); + } + + if (el.is("[data-year-min]")) { + yearMin = el.attr("data-year-min"); + } + + if (el.is("[data-date-max]")) { + dateMax = el.attr("data-date-max"); + } + + if (el.is("[data-date-min]")) { + dateMin = el.attr("data-date-min"); + } + + el.datepicker({ + changeMonth: true, + changeYear: true, + dateFormat: 'mm/dd/yy', + altFormat: 'yy-mm-dd', + altField: otherFieldSelector, + yearRange: yearMin + ":" + yearMax, + onSelect: function(dateText, dpInstance) { + $(this).datepicker("hide"); + $(this).trigger('change'); + + } + }); + if(!isElementDOBType && !el.is(".allow-future-date")) { + el.datepicker('option', 'minDate', dateMin); + el.datepicker('option', 'maxDate', dateMax); + } + el.datepicker("refresh"); + el.addClass("jq_datepicker_already_applied"); +} + +function applyJQDatePickers() { + $(".jq-datepicker").each(function(idx, ele) { + applyJQDatePickerSetup(ele); + if ($(this).attr("readonly") != undefined){ + $(ele).datepicker('disable'); + } + }); +} diff --git a/app/javascript/components/financial_assistance/address.js b/app/javascript/components/financial_assistance/address.js new file mode 100644 index 00000000000..42e64d132f5 --- /dev/null +++ b/app/javascript/components/financial_assistance/address.js @@ -0,0 +1,47 @@ +// Function to hide/show applicant mailing addresses and its related buttons('Add Mailing Address' button, 'Remove Mailing Address' button) +function hideOrShowApplicantMailingAddress() { + var displayMailingDivElement = document.querySelector('div.applicant-mailing-address:not(.dn)'); + var mailingDivElements = document.querySelectorAll('div.applicant-mailing-address'); + + if (displayMailingDivElement) { + mailingDivElements.forEach(function(mailingDivElement) { + mailingDivElement.addEventListener('click', function() { + var mailingDivs = document.querySelectorAll('.row-form-wrapper.mailing-div'); + var inputFields = document.querySelectorAll("#applicant_addresses_attributes_1_zip, #applicant_addresses_attributes_1_address_1, #applicant_addresses_attributes_1_city, #dependent_addresses_1_address_1, #dependent_addresses_1_zip, #dependent_addresses_1_city"); + var labelFloatlabels = document.querySelectorAll('.mailing-div .label-floatlabel'); + var destroyElement1 = document.querySelector("#applicant_addresses_attributes_1__destroy"); + var addMailingAddressElement = document.querySelector('#add_applicant_mailing_address'); + var removeMailingAddressElement = document.querySelector('#remove_applicant_mailing_address'); + + if (addMailingAddressElement.isSameNode(document.querySelector('div.applicant-mailing-address:not(.dn)'))) { + addMailingAddressElement.classList.add('dn'); + removeMailingAddressElement.classList.remove('dn'); + mailingDivs.forEach(function(div) { + div.style.display = 'block'; + }); + inputFields.forEach(function(input) { + input.required = true; + }); + } else if (removeMailingAddressElement.isSameNode(document.querySelector('div.applicant-mailing-address:not(.dn)'))) { + addMailingAddressElement.classList.remove('dn'); + removeMailingAddressElement.classList.add('dn'); + + document.querySelectorAll('.mailing-div').forEach(function(div) { + div.style.display = 'none'; + }); + labelFloatlabels.forEach(function(label) { + label.style.display = 'none'; + }); + inputFields.forEach(function(input) { + input.required = false; + }); + + var kindElement = document.querySelector('#applicant_addresses_attributes_1_kind'); + if (kindElement && kindElement.value === "mailing") { + destroyElement1.value = true; + } + } + }); + }); + } +}; diff --git a/app/javascript/components/financial_assistance/applicant.js b/app/javascript/components/financial_assistance/applicant.js new file mode 100644 index 00000000000..4e565fae9d5 --- /dev/null +++ b/app/javascript/components/financial_assistance/applicant.js @@ -0,0 +1,14 @@ +$(document).on('change', '#applicant_same_with_primary', function(){ + var target = $(this).parents('#applicant-address').find('#applicant-home-address-area'); + if ($(this).is(':checked')) { + $(target).hide(); + $(this).parents('#applicant-address').find('#home-info').hide(); + $(target).find("#address_info .address_required").removeAttr('required'); + } else { + $(target).show(); + $(this).parents('#applicant-address').find('#home-info').show(); + if (!$(target).find("#applicant_no_dc_address").is(':checked')){ + $(target).find("#address_info .address_required").attr('required', true); + }; + } +}); diff --git a/app/javascript/components/financial_assistance/application.js b/app/javascript/components/financial_assistance/application.js new file mode 100644 index 00000000000..e54c6461cc3 --- /dev/null +++ b/app/javascript/components/financial_assistance/application.js @@ -0,0 +1,13 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. JavaScript code in this file should be added after the last require_* statement. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require_tree . diff --git a/app/javascript/components/financial_assistance/benefit.js b/app/javascript/components/financial_assistance/benefit.js new file mode 100644 index 00000000000..3a75718b23c --- /dev/null +++ b/app/javascript/components/financial_assistance/benefit.js @@ -0,0 +1,810 @@ +function stopEditingBenefit() { + $('.driver-question, .instruction-row, .benefit-kind').removeClass('disabled'); + $('input.benefit-checkbox').prop('disabled', false); + $('a.benefit-edit').removeClass('disabled'); + // $('a.benefit-delete').removeClass('disabled'); + $('.col-md-3 > .interaction-click-control-continue').removeClass('disabled'); +}; + +function startEditingBenefit(benefit_kind) { + $('.driver-question, .instruction-row, .benefit-kind:not(#' + benefit_kind + ')').addClass('disabled'); + $('input.benefit-checkbox').prop('disabled', true); + $('a.benefit-edit').addClass('disabled'); + // $('a.benefit-delete').removeClass('disabled'); + $('.col-md-3 > .interaction-click-control-continue').addClass('disabled'); +}; + +function currentlyEditing() { + return $('.interaction-click-control-continue').hasClass('disabled') || $('#nav-buttons a').hasClass('disabled'); +}; + +function afterDestroyHide(selector_id, kind){ + $(".benefits #"+selector_id+" input[type='checkbox'][value='"+kind+"']").prop('checked', false); + $(".benefits #"+selector_id+" .add-more-link-"+kind).addClass('hidden'); +}; + +// bs4 code until stop ---------------------------------- +// disable and lower the opacity of the form except pertinent sections +function startEditing(parentContainer) { + $('#nav-buttons a').addClass('disabled'); + $('.driver-question, .instruction-row, .add_new_benefit_kind').addClass('disabled'); + $(parentContainer).removeClass("disabled"); + $(parentContainer).find('.benefit').addClass("disabled"); + $(parentContainer).find('.active').removeClass("disabled"); + $('.driver-question input:not(input[type=submit]), .disabled a').attr('disabled', true); + $(parentContainer).find('.active input:not([type=submit])').removeAttr('disabled'); + $('.disabled a').attr('tabindex', -1); + $('.disabled a').addClass('disabled'); +}; + +// re-enable and raise the opacity of the form post editing +function stopEditing() { + $('#nav-buttons a').removeClass('disabled'); + $('.driver-question, .instruction-row, .add_new_benefit_kind', '.benefit').removeClass('disabled'); + $('.disabled a').attr('tabindex', 0); + $('.disabled a').removeClass('disabled'); + $('.disabled input:not(input[type=submit]), .disabled a').removeAttr('disabled'); + $('.driver-question input:not(input[type=submit]), .disabled a').removeAttr('disabled'); + $('.driver-question, .instruction-row, .disabled a, .benefits-list, #nav-buttons a, .benefit, .add_new_benefit_kind').removeClass('disabled'); +}; + +function deleteAllBenefits(e, kind) { + benefitList = $('.benefits-list.is_' + kind + ' .benefit'); + if (benefitList.length) { + e.preventDefault(); + // prompt to delete all these benefits + $("#destroyAllBenefits").modal(); + + $("#destroyAllBenefits .modal-cancel-button").click(function(e) { + $("#destroyAllBenefits").modal('hide'); + $('#has_' + kind + '_health_coverage_true').prop('checked', true).trigger('change'); + }); + + $("#destroyAllBenefits .modal-continue-button").click(function(e) { + $("#destroyAllBenefits").modal('hide'); + + benefitList.each(function(i, benefit) { + var url = $(benefit).attr('id').replace('benefit_', 'benefits/'); + $(benefit).remove(); + $.ajax({ + type: 'DELETE', + url: url + }); + }); + + $('select#insurance_kind_is_' + kind).prop('selectedIndex', 0); + }); + } +} + +function handleEsiFields(form, isEsi, isHra, isMvsq) { + + // do all the esi specific hiding and showing + if (isEsi == "true") { + // show non-hra questions if non-hra is the selected insurance kind + // show hra questions if hra is the selected insurance kind + // make the inputs of the non-selected kind non-reqquired + // make the inputs of the selected kind required + if (isHra || isHra == "true") { + form.querySelector('.hra-questions').classList.remove('hidden'); + $(form).find('.non-hra-questions').remove(); + } else { + form.querySelector('.non-hra-questions').classList.remove('hidden'); + $(form).find('.hra-questions').remove(); + } + + // show mvsq if msqv is true + if (isMvsq == "true") { + form.querySelector('.mvsq-questions').classList.remove('hidden'); + } else { + $(form).find('.mvsq-questions').remove(); + } + } +} + +// in order to make sure the input ids/labels are unique, we need to add a random string to the end +// so we don't get WAVE errors +function makeInputIdsUnique(formId, clonedForm) { + const myArray = new Uint32Array(10) + let newFormId = window.crypto.getRandomValues(myArray)[0] + + clonedForm.querySelectorAll('label').forEach(function(label) { + var currentFor = label.getAttribute('for'); + if (currentFor === null) { + return; + } + var newFor = currentFor.split("-uniqId-")[0] + "-uniqId-"+ newFormId; + label.setAttribute('for', newFor); + }); + clonedForm.querySelectorAll('input, select').forEach(function(input) { + var currentId = input.getAttribute('id'); + if (currentId === null) { + return; + } + var newId = currentId.split("-uniqId-")[0] + "-uniqId-"+ newFormId; + input.setAttribute('id', newId); + }); +} + + +document.addEventListener("turbolinks:load", function() { + + // if benefits already exist, show them and default to yes + if ($("#enrolled-benefit-kinds .benefit").length > 0) { + $('#has_enrolled_health_coverage_true').prop('checked', true).trigger('change'); + } else { + $('#has_enrolled_health_coverage_true').removeAttr('checked') + } + + if ($("#eligible-benefit-kinds .benefit").length > 0) { + $('#has_eligible_health_coverage_true').prop('checked', true).trigger('change'); + } else { + $('#has_eligible_health_coverage_true').removeAttr('checked'); + } + + // add the new benefit form fields once the insurance kind is selected + $('.benefit-kinds').off('change', 'select.insurance-kind'); + $('.benefit-kinds').on('change', 'select.insurance-kind', function(event) { + // get the benefit form for the proper esi kind + // clone it and append it to the benefit list + // set the insurance_kind to the insuranceKind + // and display it + + var select = event.target; + var selected = select.options[select.selectedIndex]; + if (selected.value !== "") { + const kind = select.dataset.kind; + const esi = selected.dataset.esi; + const mvsq = selected.dataset.mvsq; + const benefitList = document.querySelector('.benefits-list.' + kind); + var benefitForm = esi == "true" ? document.getElementById('new-benefit-esi-form-' + kind) : document.getElementById('new-benefit-non-esi-form-' + kind); + var clonedForm = benefitForm.cloneNode(true); + document.getElementById('add_new_benefit_kind_' + kind).classList.add('hidden'); + var newLabelText = selected.innerText.split('$')[0] + var newLabel = document.createElement("h2") + newLabel.textContent = newLabelText + clonedForm.querySelector('.insurance-kind-label-container').prepend(newLabel); + //$(clonedForm.querySelector('.insurance-kind-label-container')).html($(document.createElement("h2")).text(selected.innerText.split('$')[0])); + clonedForm.querySelector('#benefit_insurance_kind').value = selected.value; + clonedForm.removeAttribute('id'); + clonedForm.classList.remove('hidden'); + clonedForm.classList.add(selected.value); + clonedForm.classList.add('benefit'); + clonedForm.classList.add('active'); + $(clonedForm).find('input').removeAttr('disabled'); + let formId = clonedForm.querySelector('.benefit-form-container').id + makeInputIdsUnique(formId, clonedForm) + handleEsiFields(clonedForm, esi, selected.value == 'health_reimbursement_arrangement', mvsq); + + select.closest(".new-benefit-form").classList.add('hidden'); + benefitList.appendChild(clonedForm); + startEditing(select.closest(".driver-question")); + } + }); + + // show the field to select the insurance kind when the add new benefit button is clicked + $('.benefit-kinds').off('click keydown', 'button.add_new_benefit_kind'); + $('.benefit-kinds').on('click keydown', 'button.add_new_benefit_kind', function(event) { + if (event.type === 'keydown' && event.key !== 'Enter') { + return; + } + var button = event.target; + var kind = button.dataset.kind; + button.classList.add('hidden'); + var newBenefitFormEl = document.getElementById('new-benefit-form-' + kind); + newBenefitFormEl.classList.remove('hidden'); + $(newBenefitFormEl).find('select').prop('selectedIndex', 0); + //document.getElementById('new-benefit-form-' + kind).querySelectorAll('.benefit-cancel-before-form').classList.remove('hidden') + }); + + // hide the select insurance kind field when the cancel button is clicked + $('.benefit-kinds').off('click keydown', '.benefit-cancel-before-form'); + $('.benefit-kinds').on('click keydown', '.benefit-cancel-before-form', function(event) { + if (event.type === 'keydown' && event.key !== 'Enter') { + return; + } + var button = event.target; + var kind = button.dataset.kind; + var container = document.getElementById('new-benefit-form-' + kind); + var benefitList = $(button).parents('.benefit-kinds').find('.benefits-list'); + container.classList.add('hidden'); + if ($(benefitList).find('.benefit').length > 0) { + document.getElementById('add_new_benefit_kind_' + kind).classList.remove('hidden'); + } else { + benefitList.hide(); + $('#has_' + (kind == 'is_enrolled' ? 'enrolled' : 'eligible') + '_health_coverage_true').prop('checked', false).trigger('change'); + } + stopEditing() + }); + + // remove the benefit form when the cancel button is clicked + $('.benefit-kinds').off('click keydown', 'a.benefit-form-cancel'); + $('.benefit-kinds').on('click keydown', 'a.benefit-form-cancel', function(event) { + if (event.type === 'keydown' && event.key !== 'Enter') { + return; + } + var button = event.target; + var kind = button.dataset.kind; + var container = button.closest('form').closest('div'); + var benefitList = container.closest('.benefits-list'); + container.remove(); + if (benefitList.querySelectorAll('.benefit').length == 0) { + document.getElementById('new-benefit-form-' + kind).classList.remove('hidden'); + $('select#insurance_kind_' + kind).prop('selectedIndex', 0); + } else { + document.getElementById('add_new_benefit_kind_' + kind).classList.remove('hidden'); + } + benefitList.querySelectorAll('.benefit.active').forEach(function(benefit) { + benefit.classList.remove('active'); + }); + stopEditing() + }); + + // remove the benefit form and replace with benefit show when the cancel button is clicked + // while the benefit is being edited + $('.benefit-kinds').off('click keydown', 'a.benefit-edit-cancel'); + $('.benefit-kinds').on('click keydown', 'a.benefit-edit-cancel', function(event) { + if (event.type === 'keydown' && event.key !== 'Enter') { + return; + } + var button = event.target; + var kind = button.dataset.kind; + var container = button.closest('.benefit'); + var benefitList = container.closest('.benefits-list'); + var show = container.querySelector('.benefit-show'); + var form = container.querySelector('.edit-benefit-form'); + show.classList.remove('hidden'); + form.classList.add('hidden'); + if (benefitList.querySelectorAll('.benefit').length == 0) { + document.getElementById('new-benefit-form-' + kind).classList.remove('hidden'); + } else { + document.getElementById('add_new_benefit_kind_' + kind).classList.remove('hidden'); + } + stopEditing() + }); + + // remove the benefit show and add the benefit form when the edit button is checked + $('.benefit-kinds').off('click keydown', 'a.edit-benefit'); + $('.benefit-kinds').on('click keydown', 'a.edit-benefit', function(event) { + if (event.type === 'keydown' && event.key !== 'Enter') { + return; + } + var button = event.target; + var kind = button.dataset.kind; + var container = button.closest('.benefit'); + var benefitList = container.closest('.benefits-list'); + var show = container.querySelector('.benefit-show'); + show.classList.add('hidden'); + var form = container.querySelector('.edit-benefit-form'); + handleEsiFields(form, show.dataset.esi, show.dataset.hra == "true", show.dataset.mvsq); + form.classList.remove('hidden'); + document.getElementById('new-benefit-form-' + kind).classList.add('hidden'); + document.getElementById('add_new_benefit_kind_' + kind).classList.add('hidden'); + stopEditing() + }); + + // remove the benefit entirely when the delete button is checked + $('.benefit-kinds').off('click keydown', 'a.delete-benefit'); + $('.benefit-kinds').on('click keydown', 'a.delete-benefit', function(event) { + if (event.type === 'keydown' && event.key !== 'Enter') { + return; + } + + event.preventDefault(); + var self = this; + $("#destroyBenefit").modal(); + + $("#destroyBenefit .modal-cancel-button").off('click'); + $("#destroyBenefit .modal-cancel-button").on('click', function() { + $("#destroyBenefit").modal('hide'); + }); + + $("#destroyBenefit .modal-continue-button").off('click'); + $("#destroyBenefit .modal-continue-button").on('click', function() { + $("#destroyBenefit").modal('hide'); + + var benefit = $(self).parents('.benefit'); + var url = $(benefit).attr('id').replace('benefit_', 'benefits/'); + $.ajax({ + type: 'DELETE', + url: url, + success: function() { + var benefitList = benefit.parents('.benefits-list')[0]; + var kind = $(self).data('kind') + + $(benefit).remove(); + + if (benefitList.querySelectorAll('.benefit').length == 0) { + document.getElementById('new-benefit-form-' + kind).classList.remove('hidden'); + $('select#insurance_kind_' + kind).prop('selectedIndex', 0); + document.getElementById('add_new_benefit_kind_' + kind).classList.add('hidden'); + } else { + document.getElementById('add_new_benefit_kind_' + kind).classList.remove('hidden'); + } + stopEditing() + } + }); + }); + }); + + /* DELETING all enrolled benefits on selcting 'no' on Driver Question */ + $(document).off('change', '#has_enrolled_health_coverage_false'); + $(document).on('change', '#has_enrolled_health_coverage_false', function(e) { + deleteAllBenefits(e, 'enrolled'); + }); + + /* DELETING all eligible benefits on selcting 'no' on Driver Question */ + $(document).off('change', '#has_eligible_health_coverage_false'); + $(document).on('change', '#has_eligible_health_coverage_false', function(e) { + deleteAllBenefits(e, 'eligible'); + }); + + // stop bs4 code ---------------------------------- + if ($('.benefit-kinds').length) { + $(window).bind('beforeunload', function(e) { + if (!currentlyEditing() || $('#unsavedBenefitChangesWarning:visible').length) + return undefined; + + (e || window.event).returnValue = 'You have an unsaved benefit, are you sure you want to proceed?'; //Gecko + IE + return 'You have an unsaved benefit, are you sure you want to proceed?'; + }); + + $(document).on('click', 'a[href]:not(.disabled):not(.benefit-support-modal):not([target="_blank"])', function(e) { + if (currentlyEditing()) { + e.preventDefault(); + var self = this; + + $('#unsavedBenefitChangesWarning').modal('show'); + $('.btn.btn-danger, #leave').click(function() { + window.location.href = $(self).attr('href'); + }); + + return false; + } else + return true; + }); + + $(document).on('click', '.benefit-kind input[type="checkbox"]', function(e) { + var value = e.target.checked, + self = this; + if (value) { + var newBenefitFormEl = $(this).parents('.benefit-kind').children('.new-benefit-form'), + benefitListEl = $(this).parents('.benefit-kind').find('.benefits-list'); + if (newBenefitFormEl.find('select').data('selectric')) newBenefitFormEl.find('select').selectric('destroy'); + var clonedForm = newBenefitFormEl.clone(true, true) + .removeClass('hidden') + .appendTo(benefitListEl); + startEditingBenefit($(this).parents('.benefit-kind').attr('id')); + $(clonedForm).find('select').selectric(); + $(clonedForm).find(".datepicker-js").datepicker({ dateFormat: 'mm/dd/yy', changeMonth: true, changeYear: true, yearRange: "-110:+110"}); + e.stopImmediatePropagation(); + } else { + // prompt to delete all these benefits + e.preventDefault(); + // prompt to delete all these dedcutions + $("#destroyAllBenefits").modal(); + + $("#destroyAllBenefits .modal-cancel-button").click(function(e) { + $("#destroyAllBenefits").modal('hide'); + }); + + $("#destroyAllBenefits .modal-continue-button").click(function(e) { + $("#destroyAllBenefits").modal('hide'); + $(self).prop('checked', false); + + $(self).parents('.benefit-kind').find('.benefits-list > .benefit').each(function(i, benefit) { + var url = $(benefit).attr('id').replace('benefit_', 'benefits/'); + $(benefit).remove(); + + $.ajax({ + type: 'DELETE', + url: url + }); + }); + }); + } + }); + + /* Add more benefits */ + $(document).on('click', "#add_new_insurance_kind", function(e){ + $(this).addClass("hidden"); + var newBenefitFormEl = $(this).closest('.benefit-kind').children('.new-benefit-form'), + benefitListEl = $(this).closest('.benefit-kind').find('.benefits-list'); + if (newBenefitFormEl.find('select').data('selectric')) newBenefitFormEl.find('select').selectric('destroy'); + var clonedForm = newBenefitFormEl.clone(true, true) + .removeClass('hidden') + .appendTo(benefitListEl); + startEditingBenefit($(this).parents('.benefit-kind').attr('id')); + $(clonedForm).find('select').selectric(); + $(clonedForm).find(".datepicker-js").datepicker({ dateFormat: 'mm/dd/yy', changeMonth: true, changeYear: true, yearRange: "-110:+110"}); + e.stopImmediatePropagation(); + }); + + /* edit existing benefits */ + $('.benefit-kinds').on('click', 'a.benefit-edit:not(.disabled)', function(e) { + e.preventDefault(); + var benefitEl = $(this).parents('.benefit'); + benefitEl.find('.benefit-show').addClass('hidden'); + benefitEl.find('.edit-benefit-form').removeClass('hidden'); + benefitEl.find('select').selectric(); + $(benefitEl).find(".datepicker-js").datepicker({ dateFormat: 'mm/dd/yy', changeMonth: true, changeYear: true, yearRange: "-110:+110"}); + startEditingBenefit($(this).parents('.benefit-kind').attr('id')); + }); + + + /* destroy existing benefits */ + $('.benefit-kinds').on('click', 'a.benefit-delete:not(.disabled)', function(e) { + var self = this; + e.preventDefault(); + $("#destroyBenefit").modal(); + + $("#destroyBenefit .modal-cancel-button").click(function(e) { + $("#destroyBenefit").modal('hide'); + }); + + $("#destroyBenefit .modal-continue-button").click(function(e) { + $("#destroyBenefit").modal('hide'); + $(self).parents('.benefit').remove(); + + var url = $(self).parents('.benefit').attr('id').replace('benefit_', 'benefits/') + + $.ajax({ + type: 'delete', + url: url + }) + }); + }); + + /* DELETING all enrolled benefits on selcting 'no' on Driver Question */ + $('#has_enrolled_health_coverage_false').on('change', function(e) { + self = this; + //$('#DestroyExistingJobIncomesWarning').modal('show'); + if ($('.benefits-list.is_enrolled .benefit').length) { + e.preventDefault(); + // prompt to delete all these dedcutions + $("#destroyAllBenefits").modal(); + + $("#destroyAllBenefits .modal-cancel-button").click(function(e) { + $("#destroyAllBenefits").modal('hide'); + $('#has_enrolled_health_coverage_true').prop('checked', true).trigger('change'); + }); + + $("#destroyAllBenefits .modal-continue-button").click(function(e) { + $("#destroyAllBenefits").modal('hide'); + //$(self).prop('checked', false); + + $('.benefits-list.is_enrolled .benefit').each(function(i, benefit) { + var url = $(benefit).attr('id').replace('benefit_', 'benefits/'); + $(benefit).remove(); + $.ajax({ + type: 'DELETE', + url: url + }); + }); + }); + } + }); + + /* DELETING all enrolled benefits on selcting 'no' on Driver Question */ + $('#has_eligible_health_coverage_false').on('change', function(e) { + self = this; + if ($('.benefits-list.is_eligible .benefit').length) { + e.preventDefault(); + // prompt to delete all these dedcutions + $("#destroyAllBenefits").modal(); + + $("#destroyAllBenefits .modal-cancel-button").click(function(e) { + $("#destroyAllBenefits").modal('hide'); + $('#has_eligible_health_coverage_true').prop('checked', true).trigger('change'); + }); + + $("#destroyAllBenefits .modal-continue-button").click(function(e) { + $("#destroyAllBenefits").modal('hide'); + //$(self).prop('checked', false); + + $('.benefits-list.is_eligible .benefit').each(function(i, benefit) { + var url = $(benefit).attr('id').replace('benefit_', 'benefits/'); + $(benefit).remove(); + $.ajax({ + type: 'DELETE', + url: url + }); + }); + }); + } + }); + /* cancel benefit edits */ + $('.benefit-kinds').on('click keydown', 'a.benefit-cancel', function(e) { + // if key pressed is anything but enter, ignore it + if (e.type === 'keydown' && e.key !== 'Enter') { + return; + } + + e.preventDefault(); + stopEditingBenefit(); + + var benefitEl = $(this).parents('.benefit'); + if (benefitEl.length) { + $(this).closest('.benefit-kind').find('a#add_new_insurance_kind').removeClass("hidden"); + benefitEl.find('.benefit-show').removeClass('hidden'); + benefitEl.find('.edit-benefit-form').addClass('hidden'); + } else { + if (!$(this).parents('.benefits-list').find('div.benefit').length) { + $(this).parents('.benefit-kind').find('input[type="checkbox"]').prop('checked', false); + $(this).closest('.benefit-kind').find('a#add_new_insurance_kind').addClass("hidden"); + }else{ + $(this).closest('.benefit-kind').find('a#add_new_insurance_kind').removeClass("hidden"); + } + $(this).parents('.new-benefit-form').remove(); + $(this).parents('.edit-benefit-form').remove(); + } + }); + + /* Conditional Display Enrolled Benefit Questions */ + if (!$("#has_enrolled_health_coverage_true").is(':checked')) $("#enrolled-benefit-kinds").addClass('hide'); + /* Conditional Display Eligible Benefit Questions */ + if (!$("#has_eligible_health_coverage_true").is(':checked')) $("#eligible-benefit-kinds").addClass('hide'); + + /* Conditional Display denied medicaid Question */ + if (!$("#has_eligible_medicaid_cubcare_true").is(':checked')) $("#denied-medicaid").addClass('hide'); + + /* Conditional Display eligibility changed Question */ + if (!$("#has_eligible_medicaid_cubcare_false").is(':checked')) $("#eligibility-change-question").addClass('hide'); + + /* Conditional Display household income or size changed Question */ + if (!$("#has_eligibility_changed_true").is(':checked')) $("#household-income-size-changed").addClass('hide'); + + /* Conditional Display on dependent income Question */ + if (!$("#has_dependent_with_coverage_true").is(':checked')) $("#denied-job-end-on").addClass('hide'); + + + $("body").on("change", "#has_eligible_medicaid_cubcare_true", function(){ + if ($('#has_eligible_medicaid_cubcare_true').is(':checked')) { + $("#denied-medicaid").removeClass('hide'); + $("#eligibility-change-question").addClass('hide'); + $("#household-income-size-changed").addClass('hide'); + $("#medicaid-chip-coverage-last-day").addClass('hide'); + } else{ + $("#denied-medicaid").addClass('hide'); + $("#eligibility-change-question").removeClass('hide'); + if ($('#has_eligibility_changed_true').is(':checked')) { + $("#medicaid-chip-coverage-last-day").removeClass('hide'); + } + } + }); + + $("body").on("change", "#has_eligible_medicaid_cubcare_false", function(){ + if ($('#has_eligible_medicaid_cubcare_false').is(':checked')) { + $("#eligibility-change-question").removeClass('hide'); + if ($('#has_eligibility_changed_true').is(':checked')) { + $("#medicaid-chip-coverage-last-day").removeClass('hide'); + } + $("#denied-medicaid").addClass('hide'); + } else{ + $("#eligibility-change-question").addClass('hide'); + $("#denied-medicaid").removeClass('hide'); + } + }); + + $("body").on("change", "#has_eligibility_changed_true", function(){ + if ($('#has_eligibility_changed_true').is(':checked')) { + $("#household-income-size-changed").removeClass('hide'); + $("#medicaid-chip-coverage-last-day").removeClass('hide'); + } else{ + $("#household-income-size-changed").addClass('hide'); + $("#medicaid-chip-coverage-last-day").addClass('hide'); + } + }); + + $("body").on("change", "#has_eligibility_changed_false", function(){ + if ($('#has_eligibility_changed_false').is(':checked')) { + $("#household-income-size-changed").addClass('hide'); + $("#medicaid-chip-coverage-last-day").addClass('hide'); + } else{ + $("#household-income-size-changed").removeClass('hide'); + $("#medicaid-chip-coverage-last-day").removeClass('hide'); + } + }); + + $("body").on("change", "#has_enrolled_health_coverage_true", function(){ + if ($('#has_enrolled_health_coverage_true').is(':checked')) { + $("#enrolled-benefit-kinds").removeClass('hide'); + $("#enrolled-benefit-kinds .benefits-list").show(); + if ($("#enrolled-benefit-kinds .benefit").length > 0) { + $('#add_new_benefit_kind_is_enrolled').removeClass('hidden'); + } else { + $('#add_new_benefit_kind_is_enrolled').addClass('hidden'); + $("#new-benefit-form-is_enrolled").removeClass('hidden'); + if ($("body").data('bs4')) { + startEditing($('#has_enrolled_health_coverage_true').closest(".driver-question")); + } + } + } else{ + $("#enrolled-benefit-kinds").addClass('hide'); + } + }); + + $("body").on("change", "#has_enrolled_health_coverage_false", function(){ + if ($('#has_enrolled_health_coverage_false').is(':checked')) { + $("#enrolled-benefit-kinds").addClass('hide'); + } else{ + $("#enrolled-benefit-kinds").removeClass('hide'); + } + }); + + $("body").on("change", "#has_eligible_health_coverage_true", function(){ + if ($('#has_eligible_health_coverage_true').is(':checked')) { + $("#eligible-benefit-kinds").removeClass('hide'); + $("#eligible-benefit-kinds .benefits-list").show(); + if ($("#eligible-benefit-kinds .benefit").length > 0) { + $('#add_new_benefit_kind_is_eligible').removeClass('hidden'); + } else { + $('#add_new_benefit_kind_is_eligible').addClass('hidden'); + $("#new-benefit-form-is_eligible").removeClass('hidden'); + if ($("body").data('bs4')) { + startEditing($('#has_eligible_health_coverage_true').closest(".driver-question")); + } + } + } else{ + $("#eligible-benefit-kinds").addClass('hide'); + } + }); + + $("body").on("change", "#has_eligible_health_coverage_false", function(){ + if ($('#has_eligible_health_coverage_false').is(':checked')) { + $("#eligible-benefit-kinds").addClass('hide'); + } else{ + $("#eligible-benefit-kinds").removeClass('hide'); + } + }); + + /* Condtional Display immigration status changed question */ + if (!$("#medicaid_chip_ineligible_true").is(':checked')) $("#immigration-status-changed-driver").addClass('hide'); + + $("body").on("change", "#medicaid_chip_ineligible_true", function(){ + if ($('#medicaid_chip_ineligible_true').is(':checked')) { + $("#immigration-status-changed-driver").removeClass('hide'); + } else{ + $("#immigration-status-changed-driver").addClass('hide'); + } + }); + + $("body").on("change", "#medicaid_chip_ineligible_false", function(){ + if ($('#medicaid_chip_ineligible_false').is(':checked')) { + $("#immigration-status-changed-driver").addClass('hide'); + } else{ + $("#immigration-status-changed-driver").removeClass('hide'); + } + }); + + $("body").on("change", "#has_dependent_with_coverage_true", function(){ + if ($('#has_dependent_with_coverage_true').is(':checked')) { + $("#denied-job-end-on").removeClass('hide'); + } else{ + $("#denied-job-end-on").addClass('hide'); + } + }); + + $("body").on("change", "#has_dependent_with_coverage_false", function(){ + if ($('#has_dependent_with_coverage_false').is(':checked')) { + $("#denied-job-end-on").addClass('hide'); + } else{ + $("#denied-job-end-on").removeClass('hide'); + } + }); + + /* Saving Responses to Income Driver Questions */ + $('#has_enrolled_health_coverage_false, #has_eligible_health_coverage_false, #has_enrolled_health_coverage_true, #has_eligible_health_coverage_true, #health_service_through_referral_true, #health_service_through_referral_false, #health_service_eligible_true, #health_service_eligible_false, #has_eligibility_changed_true, #has_eligibility_changed_false, #has_household_income_changed_true, #has_household_income_changed_false, #person_coverage_end_on, #medicaid_cubcare_due_on, #has_dependent_with_coverage_true, #has_dependent_with_coverage_false, #dependent_job_end_on, #medicaid_chip_ineligible_true, #medicaid_chip_ineligible_false, #immigration_status_changed_true, #immigration_status_changed_false').off('change'); + $('#has_enrolled_health_coverage_false, #has_eligible_health_coverage_false, #has_enrolled_health_coverage_true, #has_eligible_health_coverage_true, #health_service_through_referral_true, #health_service_through_referral_false, #health_service_eligible_true, #health_service_eligible_false, #has_eligibility_changed_true, #has_eligibility_changed_false, #has_household_income_changed_true, #has_household_income_changed_false, #person_coverage_end_on, #medicaid_cubcare_due_on, #has_dependent_with_coverage_true, #has_dependent_with_coverage_false, #dependent_job_end_on, #medicaid_chip_ineligible_true, #medicaid_chip_ineligible_false, #immigration_status_changed_true, #immigration_status_changed_false').on('change', function(e) { + var attributes = {}; + attributes[$(this).attr('name')] = $(this).val(); + $.ajax({ + type: 'POST', + url: window.location.pathname.replace('/benefits', ''), + data: { financial_assistance_applicant: attributes }, + success: function(response){ + } + }) + }); + + $('#has_eligible_medicaid_cubcare_true').on('change', function(e) { + var attributes = {}; + $("#has_eligibility_changed_true, #has_eligibility_changed_false, #has_household_income_changed_true, #has_household_income_changed_false, #person_coverage_end_on").each(function(i, ele) { + attributes[$(this).attr('name')] = " "; + }); + + attributes[$(this).attr('name')] = $(this).val(); + + $("#person_coverage_end_on").val(); + $.ajax({ + type: 'POST', + url: window.location.pathname.replace('/benefits', ''), + data: { financial_assistance_applicant: attributes }, + success: function(response){ + } + }) + }); + + $('#has_eligible_medicaid_cubcare_false').on('change', function(e) { + var attributes = {}; + $("#medicaid_cubcare_due_on").each(function(i, ele) { + attributes[$(this).attr('name')] = " "; + $(this).val(""); + }); + + attributes[$(this).attr('name')] = $(this).val(); + + $.ajax({ + type: 'POST', + url: window.location.pathname.replace('/benefits', ''), + data: { financial_assistance_applicant: attributes }, + success: function(Responsesponse){ + } + }) + }); + + $('#has_dependent_with_coverage_true').on('change', function(e) { + var attributes = {}; + $("#has_dependent_with_coverage_true, #has_dependent_with_coverage_false, #dependent_job_end_on").each(function(i, ele) { + attributes[$(this).attr('name')] = " "; + $(this).val(""); + }); + + $.ajax({ + type: 'POST', + url: window.location.pathname.replace('/benefits', ''), + data: { financial_assistance_applicant: attributes }, + success: function(response){ + } + }) + }); + } + + // masks from `application.js.erb` seem to be broken on the cloned forms, redefining the masks on the focus events seems to be the only reliable fix + $(document).on('focus', '.phone_number', function () { + $(this).mask('(000) 000-0000'); + }); + + $(document).on('focus', '.fien_field', function () { + $(this).mask('99-9999999'); + }); + + $(document).on('focus', '.zip', function () { + $(this).mask("99999"); + }); + + $('body').on('keyup keydown keypress', '#benefit_employer_phone_full_phone_number', function (e) { + $(this).mask('(000) 000-0000'); + return (key == 8 || + key == 9 || + key == 46 || + (key >= 37 && key <= 40) || + (key >= 48 && key <= 57) || + (key >= 96 && key <= 105) ); + + }); + + $('body').on('keyup keydown keypress', '#benefit_employer_address_zip', function (e) { + var key = e.which || e.keyCode || e.charCode; + $(this).attr('maxlength', '5'); + return (key == 8 || + key == 9 || + key == 46 || + (key >= 37 && key <= 40) || + (key >= 48 && key <= 57) || + (key >= 96 && key <= 105) ); + }); + + $('body').on('keyup keydown keypress', '#benefit_employer_id', function (e) { + var key = e.which || e.keyCode || e.charCode; + $(this).mask("00-0000000"); + return (key == 8 || + key == 9 || + key == 46 || + (key >= 37 && key <= 40) || + (key >= 48 && key <= 57) || + (key >= 96 && key <= 105) ); + + }); + +}); diff --git a/app/javascript/components/financial_assistance/deduction.js b/app/javascript/components/financial_assistance/deduction.js new file mode 100644 index 00000000000..cc3d6d83811 --- /dev/null +++ b/app/javascript/components/financial_assistance/deduction.js @@ -0,0 +1,273 @@ +function stopEditingDeduction() { + $('.driver-question, .driver-question a, .instruction-row, .deduction-kind').removeClass('disabled'); + $('a.deduction-edit, a.deduction-delete').removeClass('disabled'); + $('.add_new_deduction_kind').removeAttr('disabled'); + $('.col-md-3 > .interaction-click-control-continue').removeClass('disabled'); + $('#nav-buttons a').removeClass('disabled'); + $('.driver-question input, .instruction-row input, .deduction-kind input:not(":input[type=submit], .fake-disabled-input")').removeAttr('disabled'); +}; + +function startEditingDeduction(deduction_kind) { + $('.driver-question, .driver-question a, .instruction-row, .deduction-kind:not(#' + deduction_kind + ')').addClass('disabled'); + $('a.deduction-edit, a.deduction-delete').addClass('disabled'); + $('.add_new_deduction_kind').attr('disabled', true); + $('.col-md-3 > .interaction-click-control-continue').addClass('disabled'); + $('#nav-buttons a').addClass('disabled'); + $('.driver-question input, .instruction-row input, .deduction-kind:not(#' + deduction_kind + ') input:not(":input[type=submit]")').attr('disabled', true); +}; + +$(document).on('change', 'form[data-deduction-id] input[type="date"]', function () { + var form = $(this).parents('form'); + if (form.data('income-and-deduction-date-warning-flag')) { + validateDateWarnings(form.data('deduction-id')) + } +}); + +function currentlyEditing() { + return $('.interaction-click-control-continue').hasClass('disabled') || $('#nav-buttons a').hasClass('disabled'); +}; + +function deleteDeductions(kind) { + const requests = $(kind).find('.deductions-list > .deduction').map(function(_, deduction) { + return $.ajax({ + type: 'DELETE', + url: $(deduction).attr('id').replace('deduction_', 'deductions/'), + success: function() { + $(deduction).remove(); + } + }); + }); + + $.when.apply($, requests).done(function() { + const args = [].slice.apply(arguments); + const responses = requests.length == 1 ? [args] : args; + + if (responses.every(function(response) { return response[1] == 'success'; })) { + $(kind).find('input[type="checkbox"]').prop('checked', false); + $(kind).find('[class^="interaction-click-control-add-more"]').addClass('hidden'); + $(kind).find('.new-deduction-form').addClass('hidden'); + $(kind).find('.add-more-link').addClass('hidden'); + } + }); +}; + +function resetDeductionKind(el) { + $(el).parents('.deduction-kind').find('.add-more-link').addClass('hidden'); + $("a.interaction-click-control-add-more").addClass('hide'); + $(el).parents('.deduction-kind').find('input[type="checkbox"]').prop('checked', false); +}; + +/** + * Clone, strip of dummy attributes, unhide, and append a new deduction form to the deduction list. + * Each deduction type owns a permananently-hidden new deduction form which is used here to display the new deduction form. + * To prevent Multiple Form Label accessibility errors, the dummy form owns its own unique dummy id to tie to labels, + * which is processed here to remove the dummy suffix from all (defined & DOM-generated) attributes. + * @param {JQuery} newDeductionFormEl The dummy form to process. + * @param {JQuery} deductionListEl The deduction list to append the cloned form to. + * @return {JQuery} The processed new deduction form. + */ +function generateNewForm(newDeductionFormEl, deductionListEl) { + const clonedForm = newDeductionFormEl.clone(true, true); + const attrs = ['id', 'class', 'for']; + attrs.forEach(function(attr) { + const els = clonedForm.find('[' + attr + '*="dummy"]'); + $(els).each(function() { + const dummyAttr = $(this).attr(attr); + $(this).attr(attr, dummyAttr.replace('dummy', '')); + }); + }); + clonedForm + .removeClass('hidden') + .appendTo(deductionListEl); + + return clonedForm; +}; + +$(document).on('turbolinks:load', function () { + if ($('.deduction-kinds').length) { + $(window).bind('beforeunload', function(e) { + if (!currentlyEditing() || $('#unsavedDeductionChangesWarning:visible').length) + return undefined; + + (e || window.event).returnValue = 'You have an unsaved deduction, are you sure you want to proceed?'; //Gecko + IE + return 'You have an unsaved deduction, are you sure you want to proceed?'; + }); + + /* Saving Responses to Deduction Driver Questions */ + $('#has_deductions_true, #has_deductions_false').on('change', function(e) { + var attributes = {}; + attributes[$(this).attr('name')] = $(this).val(); + $.ajax({ + type: 'POST', + url: window.location.pathname.replace('/deductions', ''), + data: { financial_assistance_applicant: attributes }, + success: function(response){ + } + }) + }); + + $(document).on('click', 'a[href]:not(.disabled)', function(e) { + if (currentlyEditing()) { + e.preventDefault(); + var self = this; + + $('#unsavedDeductionChangesWarning').modal('show'); + $('button#leave').on('click', function() { + // these two lines are necessary to prevent the modal from showing again + $('.interaction-click-control-continue').removeClass('disabled'); + $('#nav-buttons a').removeClass('disabled'); + + // retriggering the click as navigating based on the href got flagged in security check + self.click(); + }); + + return false; + } else + return true; + }); + + if (!$('#has_deductions_true').is(':checked')) $('.deduction-kinds').addClass('hidden'); + + $("#has_deductions_true").change(function(e) { + if ($(this).is(':checked')) $('.deduction-kinds').removeClass('hidden'); + }); + + $("#has_deductions_false").change(function(e) { + if ($(this).is(':checked')) $('.deduction-kinds').addClass('hidden'); + }); + + $('.deduction-kinds').on('click', 'input[type="checkbox"]', function(e) { + var value = e.target.checked, + self = this; + if (value) { // checked deduction kind + var newDeductionFormEl = $(this).parents('.deduction-kind').children('.new-deduction-form'), + deductionListEl = $(this).parents('.deduction-kind').find('.deductions-list'); + if (newDeductionFormEl.find('select').data('selectric')) newDeductionFormEl.find('select').selectric('destroy'); + const clonedForm = generateNewForm(newDeductionFormEl, deductionListEl); + startEditingDeduction($(this).parents('.deduction-kind').attr('id')); + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + $(clonedForm).find(".datepicker-js").datepicker({ dateFormat: 'mm/dd/yy', changeMonth: true, changeYear: true, yearRange: "-110:+110"}); + e.stopImmediatePropagation(); + } else if (!$(self).parents('.deduction-kind').find('.deductions-list > .deduction').length) { // unchecking deduction kind with no created deductions + $(self).parents('.deduction-kind').find('.new-deduction-form').addClass('hidden'); + $(self).parents('.deduction-kind').find('.add-more-link').addClass('hidden'); + stopEditingDeduction(); + } else { // unchecking deduction kind with created deductions + e.preventDefault(); + // prompt to delete all these dedcutions + $("#destroyAllDeductions").modal(); + var deduction_kind_name = $(this).val().replace(/_/g, ' '); + deduction_kind_name = deduction_kind_name.charAt(0).toUpperCase() + deduction_kind_name.slice(1); + $('#deduction_kind_modal').text(deduction_kind_name); + $("#destroyAllDeductions .modal-cancel-button").click(function(e) { + $("#destroyAllDeductions").modal('hide'); + }); + + $("#destroyAllDeductions .modal-continue-button").click(function(e) { + $("#destroyAllDeductions").modal('hide'); + stopEditingDeduction(); + + deleteDeductions($(self).parents('.deduction-kind')); + }); + } + }); + + $(document).on('click', ".add_new_deduction_kind", function(e) { + var newDeductionFormEl = $(this).closest('.deduction-kind').children('.new-deduction-form'), + deductionListEl = $(this).closest('.deduction-kind').find('.deductions-list'); + if (newDeductionFormEl.find('select').data('selectric')) newDeductionFormEl.find('select').selectric('destroy'); + const clonedForm = generateNewForm(newDeductionFormEl, deductionListEl); + startEditingDeduction($(this).parents('.deduction-kind').attr('id')); + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + $(clonedForm).find(".datepicker-js").datepicker({ dateFormat: 'mm/dd/yy', changeMonth: true, changeYear: true, yearRange: "-110:+110"}); + e.stopImmediatePropagation(); + }); + + /* edit existing deductions */ + $('.deduction-kinds').on('click', 'a.deduction-edit:not(.disabled)', function(e) { + e.preventDefault(); + var deductionEl = $(this).parents('.deduction'); + deductionEl.find('.deduction-show').addClass('hidden'); + deductionEl.find('.edit-deduction-form').removeClass('hidden'); + startEditingDeduction($(this).parents('.deduction-kind').attr('id')); + + $(deductionEl).find(".datepicker-js").datepicker({ dateFormat: 'mm/dd/yy', changeMonth: true, changeYear: true, yearRange: "-110:+110"}); + }); + + /* destroy existing deducitons */ + $('.deduction-kinds').off('click', 'a.deduction-delete:not(.disabled)'); + $('.deduction-kinds').on('click', 'a.deduction-delete:not(.disabled)', function(e) { + var self = this; + e.preventDefault(); + $("#destroyDeduction").modal(); + + $("#destroyDeduction .modal-cancel-button").off('click'); + $("#destroyDeduction .modal-cancel-button").on('click', function(e) { + $("#destroyDeduction").modal('hide'); + }); + + $("#destroyDeduction .modal-continue-button").off('click'); + $("#destroyDeduction .modal-continue-button").on('click', function(e) { + $("#destroyDeduction").modal('hide'); + + var url = $(self).parents('.deduction').attr('id').replace('deduction_', 'deductions/'); + $.ajax({ + type: 'DELETE', + url: url, + success: function() { + if ($(self).parents('.deductions-list').find('.deduction').length == 1) { // reset kind if this is the last deduction for the kind + resetDeductionKind(self); + } + $(self).parents('.deduction').remove(); + } + }) + }); + }); + + /* DELETING all Deductions on selcting 'no' on Driver Question */ + $('#has_deductions_false').on('change', function(e) { + self = this; + //$('#DestroyExistingJobIncomesWarning').modal('show'); + if ($('.deductions-list .deduction').length) { + e.preventDefault(); + // prompt to delete all these dedcutions + $("#destroyAllDeductions").modal(); + + $("#destroyAllDeductions .modal-cancel-button").click(function(e) { + $("#destroyAllDeductions").modal('hide'); + $('#has_deductions_true').prop('checked', true).trigger('change'); + }); + + $("#destroyAllDeductions .modal-continue-button").click(function(e) { + $("#destroyAllDeductions").modal('hide'); + + $(".deduction-kinds > .deduction-kind").each(function(_, kind) { + deleteDeductions(kind); + }); + }); + } + }); + + /* cancel benefit edits */ + $('.deduction-kinds').off('click', 'a.deduction-cancel'); + $('.deduction-kinds').on('click', 'a.deduction-cancel', function(e) { + e.preventDefault(); + stopEditingDeduction(); + + var deductionEl = $(this).parents('.deduction'); + if (deductionEl.length) { // canceling edit of existing deduction + deductionEl.find('.deduction-show').removeClass('hidden'); + deductionEl.find('.edit-deduction-form').addClass('hidden'); + } else { // canceling edit of new deduction + if (!$(this).parents('.deductions-list').find('.deduction').length) { // the kind for the canceled new deduction has no existing deductions + resetDeductionKind(this); + } + $(this).parents('.new-deduction-form').remove(); + } + }); + } +}); diff --git a/app/javascript/components/financial_assistance/demographics_fields.js b/app/javascript/components/financial_assistance/demographics_fields.js new file mode 100644 index 00000000000..22132b87d4f --- /dev/null +++ b/app/javascript/components/financial_assistance/demographics_fields.js @@ -0,0 +1,627 @@ +function isApplyingCoverage(target){ + fields = "input[name='" + target + "[is_applying_coverage]']" + $("#employer-coverage-msg").hide(); + $("#ssn-coverage-msg").hide(); + if ($(fields).length > 0){ + addEventOnNoSsn(target); + addEventOnSsn(target); + if ($(fields).not(":checked").val() == "true"){ + $('.consumer_fields_for_applying_coverage').hide(); + $("#employer-coverage-msg").show(); + if ($("input[name='" + target + "[ssn]']").val() == '' && !$("input[name='" + target + "[no_ssn]']").is(":checked")){ + $("#ssn-coverage-msg").show(); + } + } + $(fields).change(function () { + resetFormFields(); + if ($(fields).not(":checked").val() == "true"){ + $('.consumer_fields_for_applying_coverage').hide(); + $("#employer-coverage-msg").show(); + if ($("input[name='" + target + "[ssn]']").val() == '' && !$("input[name='" + target + "[no_ssn]']").is(":checked")){ + $("#ssn-coverage-msg").show(); + } + } else { + $('.consumer_fields_for_applying_coverage').show(); + $("#employer-coverage-msg").hide(); + $("#ssn-coverage-msg").hide(); + } + }); + } +} + +function resetFormFields() { + // Set radio buttons to unchecked + $('#is_incarcerated_true').prop('checked', false); + $('#is_incarcerated_false').prop('checked', false); +} + +function addEventOnNoSsn(target){ + $("input[name='" + target + "[no_ssn]']").change(function() { + if ($(this).is(":checked")) { + $("#ssn-coverage-msg").hide(); + } else if ($("input[name='" + target + "[ssn]']").val() == '' && $("input[name='" + target + "[is_applying_coverage]']").not(":checked").val() == "true"){ + $("#ssn-coverage-msg").show(); + } + }); +} + +function addEventOnSsn(target){ + $("input[name='" + target + "[ssn]']").keyup(function() { + if ($(this).val() != '') { + $("#ssn-coverage-msg").hide(); + } else if ( !$("input[name='" + target + "[no_ssn]']").is(":checked") && $("input[name='" + target + "[is_applying_coverage]']").not(":checked").val() == "true"){ + $("#ssn-coverage-msg").show(); + } + }); +} + +function applyFaaListenersFor(target) { + // target is applicant or dependent + $("input[name='" + target + "[us_citizen]']").change(function() { + $('#vlp_documents_container').hide(); + $('#vlp_documents_container .vlp_doc_area').html(""); + $("input[name='" + target + "[naturalized_citizen]']").prop('checked', false); + $("input[name='" + target + "[eligible_immigration_status]']").prop('checked', false); + if ($(this).val() == 'true') { + $('#naturalized_citizen_container').show(); + $('#immigration_status_container').hide(); + $("#" + target + "_naturalized_citizen_true").prop('required'); + $("#" + target + "_naturalized_citizen_false").prop('required'); + } else { + $('#naturalized_citizen_container').hide(); + $('#immigration_status_container').show(); + $("#" + target + "_naturalized_citizen_true").removeAttr('required'); + $("#" + target + "_naturalized_citizen_false").removeAttr('required'); + } + }); + + $("input[name='" + target + "[naturalized_citizen]']").change(function() { + var selected_doc_type = $('#naturalization_doc_type').val(); + if ($(this).val() == 'true') { + $('#vlp_documents_container').show(); + $('#naturalization_doc_type_select').show(); + $('#immigration_doc_type_select').hide(); + showOnly(selected_doc_type); + } else { + $('#vlp_documents_container').hide(); + $('#naturalization_doc_type_select').hide(); + $('#immigration_doc_type_select').hide(); + $('#vlp_documents_container .vlp_doc_area').html(""); + } + }); + + $("input[name='" + target + "[eligible_immigration_status]']").change(function() { + var selected_doc_type = $('#immigration_doc_type').val(); + if ($(this).val() == 'true' && this.checked) { + $('#vlp_documents_container').show(); + $('#naturalization_doc_type_select').hide(); + $('#immigration_doc_type_select').show(); + showOnly(selected_doc_type); + } else { + $('#vlp_documents_container').hide(); + $('#naturalization_doc_type_select').hide(); + $('#immigration_doc_type_select').hide(); + $('#vlp_documents_container .vlp_doc_area').html(""); + } + }); + + //start tribe option controls + $("input[name='" + target + "[indian_tribe_member]']").change(function() { + if (this.value === 'true') { + $('.tribal-container').removeClass('hide'); + } else { + $('.tribal-container').addClass('hide'); + } + }); + + $('select#tribal-state').change(function() { + if ($('.featured_tribes_selection').length > 0 && this.value == $('#enroll_state_abbr').val()) { + $('.featured-tribe-container').removeClass('hide'); + var tribe_codes_array = $('.tribe_codes:checked').map(function(){ return $(this).val(); }).get(); + if (tribe_codes_array.includes("OT")){ + $('.tribal-name-container').removeClass('hide'); + } else { + $('.tribal-name-container').addClass('hide'); + } + } else { + $('.tribal-name-container').removeClass('hide'); + $('.featured-tribe-container').addClass('hide'); + } + }); + + $("input#" + target + "_tribe_codes_ot").change(function() { + if (this.checked){ + $('.tribal-name-container').removeClass('hide'); + } else { + $('.tribal-name-container').addClass('hide'); + } + }); + //end tribe option controls +} + +function showOnly(selected) { + if (selected == '' || selected == undefined) { + return false; + } + + var vlp_doc_map = { + "Certificate of Citizenship": "citizenship_cert_container", + "Naturalization Certificate": "naturalization_cert_container", + "I-327 (Reentry Permit)": "immigration_i_327_fields_container", + "I-551 (Permanent Resident Card)": "immigration_i_551_fields_container", + "I-571 (Refugee Travel Document)": "immigration_i_571_fields_container", + "I-766 (Employment Authorization Card)": "immigration_i_766_fields_container", + "Machine Readable Immigrant Visa (with Temporary I-551 Language)": "machine_readable_immigrant_visa_fields_container", + "Temporary I-551 Stamp (on passport or I-94)": "immigration_temporary_i_551_stamp_fields_container", + "I-94 (Arrival/Departure Record)": "immigration_i_94_fields_container", + "I-94 (Arrival/Departure Record) in Unexpired Foreign Passport": "immigration_i_94_2_fields_container", + "Unexpired Foreign Passport": "immigration_unexpired_foreign_passport_fields_container", + "I-20 (Certificate of Eligibility for Nonimmigrant (F-1) Student Status)": "immigration_temporary_i_20_stamp_fields_container", + "DS2019 (Certificate of Eligibility for Exchange Visitor (J-1) Status)": "immigration_DS_2019_fields_container", + "Other (With Alien Number)": "immigration_other_with_alien_number_fields_container", + "Other (With I-94 Number)": "immigration_other_with_i94_fields_container" + }; + + var vlp_doc_target = vlp_doc_map[selected]; + $(".vlp_doc_area").html("waiting..."); + var target_id = $('input#vlp_doc_target_id').val(); + var target_type = $('input#vlp_doc_target_type').val(); + var target_url = $('input#vlp_doc_target_url').val(); + var bs4 = document.documentElement.dataset.bs4; + $.ajax({ + type: "get", + url: target_url, + dataType: 'script', + data: { + 'target_id': target_id, + 'target_type': target_type, + 'vlp_doc_target': vlp_doc_target, + 'vlp_doc_subject': selected, + bs4: bs4, + }, + }); +} + +function changeApplyingCoverageText() { + $('#applicant_first_name').change(function() { + var text = $('#applicant_first_name').val() == '' ? 'this person' : $('#applicant_first_name').val() + $('#is_applying_coverage_value_dep').text('Does '+ text +' need coverage? *'); + }); +} + +function applyFaaListeners() { + if ($("form.new_applicant, form.edit_applicant").length > 0) { + applyFaaListenersFor("applicant"); + } + + $("#naturalization_doc_type").change(function() { + showOnly($(this).val()); + }); + + $("#immigration_doc_type").change(function() { + showOnly($(this).val()); + }); + + var immigrationDocType = $('#immigration_doc_type'); + if (immigrationDocType.length > 0 && immigrationDocType.is(':visible')) { + var selected_doc_type = $('#immigration_doc_type').val(); + showOnly(selected_doc_type); + } + + var is_featured_tribes_selection_enabled = $('#is_featured_tribes_selection_enabled').val() === 'true'; + var tribalState = $('#tribal-state'); + var enroll_state_abbr = $('#enroll_state_abbr').val(); + var tribe_codes_array = $('.tribe_codes:checked').map(function(){ return $(this).val(); }).get(); + var tribal_name_container_show_on_select = + typeof tribe_codes_array != 'undefined' && + tribe_codes_array.includes('OT'); + + if ( + is_featured_tribes_selection_enabled && + tribalState.val() != '' + ) { + if (tribalState.val() === enroll_state_abbr) { + $('.featured-tribe-container').removeClass('hide'); + if (tribal_name_container_show_on_select) { + $('.tribal-name-container').removeClass('hide'); + } else { + $('#tribal-name').val(''); + $('.tribal-name-container').addClass('hide'); + } + } else { + $('.tribe_codes:checked').removeAttr('checked'); + $('.tribal-name-container').removeClass('hide'); + $('.featured-tribe-container').addClass('hide'); + } + } +} + +var ApplicantValidations = (function(window, undefined) { + + function manageRequiredValidations(this_obj) { + var hidden_requireds = $('[required]').not(":visible"); + $('[required]').not(":visible").removeAttr('required'); + this_obj.closest('div').find('button[type="submit"]').trigger('click'); + } + + function resetConfirmButton() { + var btn = document.querySelector('.applicant-confirm-member'); + if (btn) { + btn.textContent = 'Confirm Member'; + btn.classList.remove('disabled'); + } + } + + function restoreRequiredAttributes(e) { + e.preventDefault && e.preventDefault(); + var hidden_requireds = $('[required]').not(":visible"); + hidden_requireds.each(function(index) { + $(this).prop('required', true); + }); + } + + function customValidityWithChangeEvent(element, message) { + // Set custom validity on all radio buttons in the group + element.each(function() { + this.setCustomValidity(message); + }); + + // One-time setup for the change event (if not already bound) + if (!element.data('validationBound')) { + element.data('validationBound', true); + element.on('change', function() { + // Clear the validity message on all radios in the group when any one changes + element.each(function() { + this.setCustomValidity(''); + }); + }); + } + } + + function reportValidityForRadioGroup(element) { + // Report validity on all radio buttons in the group + element.each(function() { + this.reportValidity(); + }); + } + + function validationForUsCitizenOrUsNational(e) { + if ($('input[name="applicant[is_applying_coverage]"]').length > 0 && $('input[name="applicant[is_applying_coverage]"]').not(":checked").val() == "true"){ + return true; + } + if ($('input[name="applicant[us_citizen]"]').not(":checked").length == 2) { + var usCitizenRadios = $('input[name="applicant[us_citizen]"]'); + customValidityWithChangeEvent(usCitizenRadios, "Please provide an answer for question: Are you a US Citizen or US National?") + ApplicantValidations.restoreRequiredAttributes(e); + reportValidityForRadioGroup(usCitizenRadios) + return false; + } + + return true; + } + + function validationForIndianTribeMember(e) { + if ($('#indian_tribe_area').length == 0){ + return false; + } + + $('.close').click(function() { + $('#tribal-id-alert').addClass('hide'); + $('#tribal-state-alert').addClass('hide'); + $('#tribal-name-alert').addClass('hide'); + }); + + if ($('input[name="applicant[is_applying_coverage]"]').length > 0 + && $('input[name="applicant[is_applying_coverage]"]').not(":checked").val() == "true"){ + return true; + } + + var tribe_member_yes = $("input#indian_tribe_member_yes").is(':checked'); + var tribe_member_no = $("input#indian_tribe_member_no").is(':checked'); + + if (!tribe_member_yes && !tribe_member_no){ + var indianTribeMemberRadios = $('input[name="applicant[indian_tribe_member]"]'); + customValidityWithChangeEvent(indianTribeMemberRadios, "Please select the option for 'Are you a member of an American Indian or Alaska Native Tribe?'") + ApplicantValidations.restoreRequiredAttributes(e); + reportValidityForRadioGroup(indianTribeMemberRadios) + return false; + } + + if (tribe_member_no){ + $('#tribal-state').val(""); + $('input#tribal-name').val(""); + $('#tribal-id').val(""); + $('.tribe_codes:checked').removeAttr('checked'); + } + + if (tribe_member_yes){ + if ($('#tribal-state').length > 0 && $('#tribal-state').val() == ""){ + resetConfirmButton(); + $('#tribal-state-alert').show(); + ApplicantValidations.restoreRequiredAttributes(e); + } + + if ($('.featured_tribes_selection').length > 0 && $('#tribal-state').val() == $('#enroll_state_abbr').val()){ + var tribe_codes_array = $('.tribe_codes:checked').map(function(){ return $(this).val(); }).get(); + if (tribe_codes_array.length < 1) { + var tribeCodesboxes = $('input[name="applicant[tribe_codes][]"]'); + customValidityWithChangeEvent(tribeCodesboxes, "At least one tribe must be selected.") + ApplicantValidations.restoreRequiredAttributes(e); + tribeCodesboxes[1].reportValidity(); + return false; + } + + if (tribe_codes_array.includes("OT") && $('input#tribal-name').val() == ""){ + var tribalNametext = $('input[name="applicant[tribal_name]"]'); + customValidityWithChangeEvent(tribalNametext, "Please provide an answer for 'Other' tribe name.") + ApplicantValidations.restoreRequiredAttributes(e); + tribalNametext[0].reportValidity(); + return false; + } + + if (!tribe_codes_array.includes("OT")){ + $('input#tribal-name').val(""); + } + } + else if ($('input#tribal-name').val() == ""){ + $('#tribal-name-alert').show(); + ApplicantValidations.restoreRequiredAttributes(e); + } + + if ($('#tribal-id').length > 0 && $('#tribal-id').val().length != 9){ + resetConfirmButton(); + $('#tribal-id-alert').show(); + ApplicantValidations.restoreRequiredAttributes(e); + } + } + } + + function validationForIncarcerated(e) { + if ($('input[name="applicant[is_applying_coverage]"]').length > 0 && $('input[name="applicant[is_applying_coverage]"]').not(":checked").val() == "true"){ + return true; + } + if ($('input[name="applicant[is_incarcerated]"]').not(":checked").length == 2) { + var incarceratedRadios = $('input[name="applicant[is_incarcerated]"]'); + customValidityWithChangeEvent(incarceratedRadios, 'Please provide an answer for question: Are you currently incarcerated?') + ApplicantValidations.restoreRequiredAttributes(e); + reportValidityForRadioGroup(incarceratedRadios) + return false; + } + return true; + } + + function validationForNaturalizedCitizen(e) { + if ($('input[name="applicant[is_applying_coverage]"]').length > 0 && $('input[name="applicant[is_applying_coverage]"]').not(":checked").val() == "true"){ + return true; + } + if ($('#naturalized_citizen_container').is(':visible') && $('input[name="applicant[naturalized_citizen]"]').not(":checked").length == 2) { + var naturalizedRadios = $('input[name="applicant[naturalized_citizen]"]'); + customValidityWithChangeEvent(naturalizedRadios, 'Please provide an answer for question: Are you a naturalized citizen?') + ApplicantValidations.restoreRequiredAttributes(e); + reportValidityForRadioGroup(naturalizedRadios) + return false; + } + return true; + } + + function validationForEligibleImmigrationStatuses(e) { + if ($('#immigration_status_container').is(':visible') && $('input[name="applicant[eligible_immigration_status]"]').not(":checked").length == 2 && !$('#immigration-checkbox').is(':visible')) { + resetConfirmButton(); + alert('Please provide an answer for question: Do you have eligible immigration status?'); + ApplicantValidations.restoreRequiredAttributes(e); + } + } + + function validationForPersonOrDependent() { + const immigration_field = + document.getElementById('immigration_doc_type').value == ''; + if (!document.getElementById('dependent_ul') && immigration_field) { + var us_citizen = document.getElementById('person_us_citizen_false') || document.getElementById('us_citizen_false'); + var naturalized_citizen = document.getElementById('person_naturalized_citizen_true') || document.getElementById('naturalized_citizen_true'); + return ( us_citizen.checked || naturalized_citizen.checked ); + } else if (immigration_field) { + var us_citizen = document.getElementById('dependent_us_citizen_false') || document.getElementById('us_citizen_false'); + var naturalized_citizen = document.getElementById('dependent_naturalized_citizen_true') || document.getElementById('naturalized_citizen_true'); + return ( us_citizen.checked || naturalized_citizen.checked ); + } + } + + function validationForDependentSSN(e) { + var noSSNCheckbox = $("#dependent_no_ssn"); + var ssnField = $("#dependent_ssn"); + + if (!noSSNCheckbox.length || !ssnField.length) { + return true; + } + + var dependentSSN = ssnField.val(); + var dependentNoSSN = noSSNCheckbox.is(':checked'); + + if (dependentSSN == '' && !dependentNoSSN) { + ssnField.off('change.validation'); + noSSNCheckbox.off('change.validation'); + + customValidityWithChangeEvent(noSSNCheckbox, 'SSN is required'); + + ssnField.on('change.validation', function() { + customValidityWithChangeEvent(noSSNCheckbox, ''); + }); + ApplicantValidations.restoreRequiredAttributes(e); + return false; + } + + return true; + } + + function validationForVlpDocuments(e) { + if ($('#is_applying_coverage_true').prop('checked') && validationForPersonOrDependent()) { + $('#showWarning').removeClass('hidden'); + } + if ($('#vlp_documents_container').is(':visible')) { + $('.vlp_doc_area input.doc_fields').each(function() { + if ($(this).attr('placeholder') == 'Certificate Number') { + if ($(this).val().length < 1) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + '.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + if ($('#immigration_doc_type').val() == 'Naturalization Certificate' || $('#immigration_doc_type').val() == 'Certificate of Citizenship') { + } else { + if ($(this).attr('placeholder') == 'Alien Number') { + if ($(this).val().length < 1) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + '.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + } + if ($(this).attr('placeholder') == 'Document Description') { + if ($(this).val().length < 1) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + '.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + if ($(this).attr('placeholder') == 'Card Number') { + if ($(this).val().length < 1) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + '.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + if ($(this).attr('placeholder') == 'Naturalization Number') { + if ($(this).val().length < 1) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + '.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + if ($('#immigration_doc_type').val() == 'I-20 (Certificate of Eligibility for Nonimmigrant (F-1) Student Status)' || $('#immigration_doc_type').val() == 'DS2019 (Certificate of Eligibility for Exchange Visitor (J-1) Status)' || $('#immigration_doc_type').val() == 'Temporary I-551 Stamp (on passport or I-94)' || $('#immigration_doc_type').val() == 'Other (With Alien Number)' || $('#immigration_doc_type').val() == 'Other (With I-94 Number)') { + + } else { + if ($(this).attr('placeholder') == 'Passport Number') { + if ($(this).val().length < 1) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + '.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + } + if ($(this).attr('placeholder') == 'I-766 Expiration Date') { + if ($(this).val().length != 10) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + ' with a MM/DD/YYYY format.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } +// if ($(this).attr('placeholder') == 'I-94 Expiration Date') { +// if ($(this).val().length != 10) { +// alert('Please fill in your information for ' + $(this).attr('placeholder') + ' with a MM/DD/YYYY format.'); +// ApplicantValidations.restoreRequiredAttributes(e); +// +// } +// } + if ($('#immigration_doc_type').val() == 'Unexpired Foreign Passport' || $('#immigration_doc_type').val() == 'I-94 (Arrival/Departure Record) in Unexpired Foreign Passport') { + if ($(this).attr('placeholder') == 'Passport Expiration Date') { + if ($(this).val().length != 10) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + ' with a MM/DD/YYYY format.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + } + if ($('#immigration_doc_type').val() == 'Unexpired Foreign Passport' || $('#immigration_doc_type').val() == 'I-20 (Certificate of Eligibility for Nonimmigrant (F-1) Student Status)' || $('#immigration_doc_type').val() == 'DS2019 (Certificate of Eligibility for Exchange Visitor (J-1) Status)') { + } else { + if ($(this).attr('placeholder') == 'I 94 Number') { + if ($(this).val().length < 1) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + '.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + } + + if ($('#immigration_doc_type').val() == 'I-20 (Certificate of Eligibility for Nonimmigrant (F-1) Student Status)' || $('#immigration_doc_type').val() == 'DS2019 (Certificate of Eligibility for Exchange Visitor (J-1) Status)') { + if ($(this).attr('placeholder') == 'SEVIS ID') { + if ($(this).val().length < 1) { + if (!$('#showWarning').length) { + alert('Please fill in your information for ' + $(this).attr('placeholder') + '.'); + ApplicantValidations.restoreRequiredAttributes(e); + } else { + $('#showWarning').removeClass('hidden'); + } + } + } + } + }); + } + } + + // explicitly return public methods when this object is instantiated + return { + manageRequiredValidations: manageRequiredValidations, + validationForUsCitizenOrUsNational: validationForUsCitizenOrUsNational, + validationForNaturalizedCitizen: validationForNaturalizedCitizen, + validationForEligibleImmigrationStatuses: validationForEligibleImmigrationStatuses, + validationForVlpDocuments: validationForVlpDocuments, + validationForIncarcerated: validationForIncarcerated, + validationForIndianTribeMember: validationForIndianTribeMember, + validationForDependentSSN: validationForDependentSSN, + restoreRequiredAttributes: restoreRequiredAttributes + }; + +})(window); + +function applicantDemographicValidations() { + applyFaaListeners(); + + $('form.new_applicant, form.edit_applicant').submit(function(e) { + ApplicantValidations.validationForUsCitizenOrUsNational(e); + ApplicantValidations.validationForNaturalizedCitizen(e); + ApplicantValidations.validationForEligibleImmigrationStatuses(e); + ApplicantValidations.validationForIndianTribeMember(e); + ApplicantValidations.validationForIncarcerated(e); + ApplicantValidations.validationForDependentSSN(e); + ApplicantValidations.validationForVlpDocuments(e); + if ($('#showWarning').length && !$('#showWarning').hasClass('hidden') && !$('#showWarning').hasClass('shown')) { + var btn = document.querySelector('.applicant-confirm-member'); + if (btn) { + btn.textContent = 'Confirm Member'; + btn.classList.remove('disabled'); + } + $('#showWarning').addClass('shown'); + e.preventDefault(); + return false; + } + }); + + isApplyingCoverage("applicant"); +}; diff --git a/app/javascript/components/financial_assistance/fa_integration.js b/app/javascript/components/financial_assistance/fa_integration.js new file mode 100644 index 00000000000..baf81d13a15 --- /dev/null +++ b/app/javascript/components/financial_assistance/fa_integration.js @@ -0,0 +1,58 @@ +document.addEventListener("turbolinks:load", function() { + if ($("#origin_source").val() == "fa_application_edit_add_member") { + $('#household_info_add_member').click(); + } + + $("body").on("click", ".close_member_form", function () { + $(".append_consumer_info").html(""); + $(".faa-row").removeClass('hide'); + }); + + // Check for Eligibility Result response every "interval_time" seconds a total of "number_of_times" times. + if (/wait_for_eligibility_response/.test(window.location.href)) { + var i = 1; + var number_of_times = 50; + var interval_time = 2000; + var repeater = setInterval(function () { + if ( i < number_of_times) { + $.ajax({ + type: "GET", + data:{}, + url: window.location.href.replace(/wait_for_eligibility_response/, "check_eligibility_results_received"), + success: function (response_received_flag) { + if (response_received_flag == "true"){ + clearInterval(repeater); + // redirect to the existing eligibility_results page + window.location = window.location.href.replace(/wait_for_eligibility_response/, "eligibility_results?cur=1") + } + } + }); + i += 1; + } else { + clearInterval(repeater); + // redirect to the Eligibility Response Error Page + if ( i > ( number_of_times - 1 ) ){ + window.location = window.location.href.replace(/wait_for_eligibility_response/, "eligibility_response_error") + } + } + }, interval_time); + } +}); +// Provides functionality to display modal then navigate to household income on confirming +var toLocation = ''; + +function notifyUserPrompt(element) { + toLocation = element.dataset.path; + $('#backModal').modal('show'); +} + +$(document).on('click', '.back-to-household-link', function(e) { + e.preventDefault() + notifyUserPrompt(this) +}) + +function backToHouseHolds() { + $('#backModal').modal('hide'); + window.location = toLocation; + toLocation = ''; +} diff --git a/app/javascript/components/financial_assistance/glossary.js b/app/javascript/components/financial_assistance/glossary.js new file mode 100644 index 00000000000..3d56276b7c2 --- /dev/null +++ b/app/javascript/components/financial_assistance/glossary.js @@ -0,0 +1,1140 @@ +// page:change accounts for turbolinks affecting JS on document ready +// ajax:success accounts for glossary terms in consumer forms after document ready +// Rails 5 event: 'turbolinks:load' instead of 'page:change' +$(document).on("turbolinks:load ajax:success", function() { + runGlossary(); + + // Added for partials loaded after turbolinks load + $('.close-2').click(function(e){ + $(document).ajaxComplete(function() { + runGlossary(); + }); + }); +}); + +function runGlossary() { + if ($('.run-glossary').length) { + // Certain glossary terms have been rearranged to avoid a smaller word being given a popover instead of the + // full glossary term (e.g. Premium/ Premium Tax Credit) + var terms = [ + { + "term": "ACA", + "description": "The acronym for the
Affordable Care Act<\/a>." + }, + { + "term": "Accreditation", + "description": "All health plans available through DC Health Link have been reviewed by an independent, third-party organization to validate (accredit) that the plans meet quality standards required by the Affordable Care Act<\/a> and the District of Columbia." + }, + { + "term": "Actuarial Value", + "description": "A measurement of the average amount each plan will pay for all people enrolled in a plan (not just you) towards out-of-pocket costs for covered services<\/a>. Since it\u2019s an average for all people, your out-of-pocket costs could be higher or lower depending on your health care usage; how other costs like your premium<\/a>, deductible<\/a>, copayments<\/a>, coinsurance<\/a> and out-of-pocket limit<\/a> are structured in your plan; and other terms of your insurance policy. Bronze<\/a> means the plan is expected to pay 60 percent of in-network expenses for an average population of consumers, Silver<\/a> 70 percent, Gold<\/a> 80 percent and Platinum<\/a> 90 percent." + }, + { + "term": "Advance Premium Tax Credit", + "description": "The federal government offers a tax credit to help pay for private health insurance<\/a> for individuals and families within certain income limits who also meet certain other requirements. The tax credit can either be automatically applied towards your insurance premiums<\/a> to lower your monthly payment, or you can claim it when you file your federal tax return. You must apply for financial assistance<\/a> to confirm eligibility and to receive the tax credit." + }, + { + "term": "Affordable Care Act", + "description": "The name used to refer to the federal health laws that require most Americans to have health insurance<\/a> that provides Minimum Essential Coverage<\/a>. The name refers to two distinct pieces of legislation \u2014 the Patient Protection and Affordable Care Act (P.L. 111-148) and the Health Care and Education Reconciliation Act of 2010 (P.L. 111-152)." + }, + { + "term": "Affordable Coverage", + "description": "A standard applied to employer-sponsored health plans<\/a>. If you and any members of your household<\/a> are eligible to sign up for employer-sponsored coverage that meets the federal government's affordability and minimum value<\/a> standards, you won't be eligible for an advance premium tax credit<\/a> to help pay for private health insurance<\/a> if you decide to enroll through DC Health Link's Individual & Family marketplace instead. If the annual premium<\/a> to only cover you on a plan offered by your employer is less than approximately 10 percent of your household income, the plan is considered affordable. If you're not sure, you should apply for financial assistance<\/a> through DC Health Link to get a decision before declining employer coverage, and to find out if you have other options." + }, + { + "term": "Age", + "description": "Your age is used to determine monthly premiums<\/a> for insurance." + }, + { + "term": "Aged, Blind and Disabled Program", + "description": "Learn more about DC Medicaid eligibility for the aged, blind or disabled<\/a>." + }, + { + "term": "Agent", + "description": "Another word for a Broker<\/a>." + }, + { + "term": "Allowed Amount", + "description": "The maximum amount your health insurance<\/a> company will pay service providers for covered services<\/a>. Sometimes this is called an eligible expense, a payment allowance or negotiated rate. Service providers<\/a> that are in-network<\/a> with your insurance company have generally agreed to accept the allowed amount for covered services." + }, + { + "term": "Ambulatory Patient Services", + "description": "Care you get without being admitted to a hospital. Examples include but aren't limited to: outpatient care<\/a>, home health care<\/a>, care in an emergency room and pre-admission testing." + }, + { + "term": "American Indian/Alaska Native income", + "description": "American Indian/Alaska Native income includes any income you receive from per capita payments from the tribe that come from natural resources, usage rights, leases or royalties; payments from natural resources, farming, ranching, fishing, leases, or royalties from land designated as Indian land by the Development of Interior (including reservations and former reservations); or money from selling things that have cultural significance." + }, + { + "term": "Alimony received", + "description": "Alimony received is the money this person gets from a spouse they no longer live with, or a former spouse, if paid to them as part of a divorce agreement, separation agreement, or court order. Only enter alimony received if the agreement or court order was finalized before January 1, 2019." + }, + { + "term": "Annual Limit", + "description": "Some covered services<\/a> in your health plan may have a cost limit on what your insurance company will pay annually for certain benefits or the number of visits for a particular service. If you reach the annual limit, you\u2019ll have to pay for any additional services or visits that apply to the limit. You can find information on annual limits in your plan documents<\/a>." + }, + { + "term": "Appeal", + "description": "If you don\u2019t agree with a decision about your eligibility for enrollment in coverage, or assistance in paying for coverage, you have a right to appeal the decision and receive a hearing before an independent administrative law judge. Go to the DC Health Link Help page and select 'file an appeal'<\/a> to learn more about your rights." + }, + { + "term": "Application ID", + "description": "If you apply for financial assistance<\/a>, you'll be assigned an Application ID when you submit your application. Once you find out if you o\ufb03cially qualify for financial assistance, you'll need your Application ID to continue and complete your enrollment. If you're getting help with your application through DC Health Link's Call Center or an Enrollment Center, you'll also need your Application ID." + }, + { + "term": "APTC", + "description": "The acronym for Advance Premium Tax Credit<\/a>." + }, + { + "term": "Assister", + "description": "Assisters provide in-person help to individuals, families, and small businesses shopping for health plans through DC Health Link. Assisters have been trained by DC Health Link and are required to provide fair and impartial information to help with eligibility, and facilitate enrollment in health plans. There is no cost to use an Assister." + }, + { + "term": "Attestation", + "description": "When you submit an application through DC Health Link, you acknowledge (attest) with an electronic signature that the information you provided is the truth, and that you are authorized to act on behalf of everyone listed on the application." + }, + { + "term": "Authorized Representative", + "description": "Someone you choose to act on your behalf. The person could be a family member, a Broker<\/a> or other person you trust, or someone who has legal authority to act on your behalf." + }, + { + "term": "Balance Billing", + "description": "If your plan allows you to use out-of-network<\/a> service providers<\/a>, the plan may choose to only pay the allowed amount<\/a> they pay in-network<\/a> service providers. This might be much less than the provider actually charges. You could be responsible for paying the difference between the allowed amount and actual charges even when it exceeds your out-of-pocket limit<\/a>. This is called balance billing. If you're having a procedure that involves multiple providers, confirm with your primary doctor and hospital whether or not all the services will be provided by in-network providers. If you know you plan to use an out-of-network service provider, you may want to confirm costs in advance of the visit or procedure so you'll understand how much you'll have to pay, or have the opportunity to negotiate costs." + }, + { + "term": "Benefit Year", + "description": "If you sign up for Individual & Family health insurance<\/a> through DC Health Link, the benefit year is the year when coverage is active. It begins on January 1 and ends on December 31, even if your coverage starts after January 1. Changes to covered services<\/a> or what you pay for health insurance are made at the beginning of the calendar year. If you sign up for employer-sponsored coverage<\/a> through DC Health Link, the benefit year begins when your coverage goes into effect and ends when your entire group\u2019s benefit year ends, even if you started after your group started. Changes to covered services or what you pay for health insurance are made at the beginning of the calendar year." + }, + { + "term": "Benefits", + "description": "Another word for covered services<\/a>." + }, + { + "term": "Brand Name Drug", + "description": "A prescription drug<\/a> or over-the-counter medicine that is protected by a patent and is sold by one company under a specific name or trademark." + }, + { + "term": "Breast and Cervical Cancer Program", + "description": "District of Columbia Medicaid<\/a> may cover individuals diagnosed with breast or cervical cancers who are in need of treatment. Learn more about Breast and Cervical Cancer Programs in the District<\/a>." + }, + { + "term": "Broker", + "description": "Brokers are licensed under District law to sell health insurance<\/a> through DC Health Link to individuals, families, small businesses and their employees. Brokers have been trained by DC Health Link, can recommend plans or plan types<\/a>, and perform activities on behalf of their clients as part of their professional licensing and training. There is no cost to use a Broker." + }, + { + "term": "Bronze Health Plan", + "description": "Bronze Health Plans pay about 60 percent of in-network<\/a> expenses for an average population of consumers. The premiums<\/a> are typically among the lowest but the deductible<\/a> and out-of-pocket limit<\/a> of what you'll pay before the plan starts paying are among the highest. Metal levels<\/a> only focus on what the plan is expected to pay, and do NOT reflect the quality of health care or service providers<\/a> available through the health insurance<\/a> plan. Once you meet your in-network out-of-pocket limit for the plan year<\/a>, plans pay 100 percent of the allowed amount<\/a> for covered services<\/a>." + }, + { + "term": "Carrier", + "description": "An insurance company." + }, + { + "term": "Catastrophic Health Plan", + "description": "A health plan with low monthly premiums<\/a> and high annual deductibles<\/a> designed to protect consumers from worst case situations like a serious illness or an accident. Catastrophic plans are only available to people under 30 or people with a hardship exemption<\/a>. Catastrophic plans provide essential health benefits<\/a> and count as having coverage for tax purposes. Plans cover at least 3 primary care<\/a> visits during the plan year<\/a> and certain preventive services<\/a> at no cost. Consumers pay all other medical costs until the annual deductible is met. Then the plan pays 100 percent for covered services<\/a> for the rest of the plan year. Advance premium tax credits<\/a> and cost-sharing reductions<\/a> can\u2019t be used with this plan type<\/a>." + }, + { + "term": "Center for Medicare and Medicaid Services", + "description": "An operating division of the U.S. Department of Health and Human Services<\/a> that administers Medicare<\/a>, Medicaid<\/a>, the Children's Health Insurance Program<\/a>, and parts of the Affordable Care Act<\/a>." + }, + { + "term": "Children\u2019s Health Insurance Program", + "description": "An insurance program that provides no cost or low cost health coverage to children in families that earn too much money to qualify for Medicaid but not enough to buy private health insurance. In the District of Columbia, you can apply for CHIP coverage any time of the year through the Medicaid<\/a> program." + }, + { + "term": "CHIP", + "description": "The acronym for the Children\u2019s Health Insurance Program<\/a>." + }, + { + "term": "Claim", + "description": "A request for payment submitted by you or your service provider<\/a> to your insurance company for covered services<\/a> received or rendered." + }, + { + "term": "CMS", + "description": "The acronym for the Center for Medicare & Medicaid Services<\/a>." + }, + { + "term": "COBRA", + "description": "The acronym for the Consolidated Omnibus Budget Reconciliation Act \u2014 a federal law that may allow you to keep employer-sponsored health insurance<\/a> if you lose your job. In most cases, you'll pay the full costs every month plus a small administrative fee if you elect to continue the coverage. COBRA coverage is typically available up to 18 months (longer only in special circumstances). You may want to compare the cost of continuing your COBRA coverage with private health plans<\/a> available through DC Health Link. If you live in the District and leave your job for any reason, you have 60 days from the date you lost coverage to either enroll in COBRA (if eligible) or sign up for a private plan through DC Health Link. However, if you enroll in a COBRA plan, and then voluntarily drop it, or stop paying the premiums<\/a>, you can\u2019t enroll in a private plan through DC Health Link until the next annual open enrollment<\/a>." + }, + { + "term": "Coinsurance", + "description": "Your share of the costs for covered services<\/a> that you pay when you receive them. Coinsurance is calculated as a percent of the total fee. For example, if your health insurance<\/a> plan\u2019s allowed amount<\/a> to visit your doctor is $100, a coinsurance payment of 20 percent would be $20. Some plans require that you pay up to the plan's deductible<\/a> amount before coinsurance begins. Once you reach your out-of-pocket limit<\/a>, you no longer have to pay coinsurance for the rest of the plan year<\/a>." + }, + { + "term": "Complaint", + "description": "If you have a complaint about your insurance company, or were denied services that you believe qualify as a covered service<\/a>, you have the right to file a complaint with the Department of Insurance, Securities and Banking<\/a>. Learn how to file a complaint<\/a>." + }, + { + "term": "Consolidated Omnibus Budget Reconciliation Act", + "description": "A federal law more commonly referred to as COBRA<\/a>." + }, + { + "term": "Consumers' CHECKBOOK", + "description": "An independent, non-profit consumer authority that powers DC Health Link's Plan Match<\/a> comparison tool, Prescription Drug search tool, and Doctor Directory." + }, + { + "term": "Copayment", + "description": "A fixed dollar amount you pay for a covered service<\/a>, usually when you receive the service. The amount can vary depending on the type of service. (For example, $25 to visit your doctor, $10 for prescription drugs<\/a>). Once you reach your out-of-pocket limit<\/a>, you no longer have copays for the rest of the plan year<\/a>." + }, + { + "term": "Cosmetic Surgery", + "description": "Another way of saying Plastic Surgery<\/a>." + }, + { + "term": "Cost-Sharing Reduction", + "description": "A discount that lowers your costs for deductibles<\/a>, coinsurance<\/a>, copayments<\/a>, and also lowers what you have to pay to reach your out-of-pocket limit<\/a>. To get these savings, you must apply for financial assistance<\/a>. DC Health Link will help you determine if you qualify as part of the application process. Then you can enroll. Most customers must enroll in a Silver Health Plan<\/a> to receive cost-sharing reductions. Native Americans<\/a> receive additional cost-sharing reductions regardless of a plan's metal level<\/a>." + }, + { + "term": "Cover All DC", + "description": "A health insurance<\/a> program available to District residents who don't meet eligibility requirements for DC Health Link (including private coverage or Medicaid<\/a>) or for the DC Healthcare Alliance Program<\/a>. District residents who are not incarcerated are eligible to enroll. Learn more about eligibility for Cover All DC<\/a>." + }, + { + "term": "Coverage", + "description": "Another word for health insurance<\/a>, Medicaid<\/a> or a dental plan<\/a>." + }, + { + "term": "Covered Services", + "description": "The health care services you\u2019re entitled to receive based on the terms of your health insurance<\/a> plan. All plans available through DC Health Link cover essential health benefits<\/a>. Other covered services or excluded services<\/a> will vary among plans. Each plan available through DC Health Link includes a Summary of Benefits and Coverage<\/a>, but it's only a summary. You'll need to see your plan documents<\/a> for all benefits information. You can also call the insurance company directly if you have questions." + }, + { + "term": "DC Health Benefit Exchange Authority", + "description": "An independent government authority established by the District of Columbia to implement and operate DC Health Link - the District\u2019s health insurance marketplace. The Authority ensures access to quality, affordable health care for residents, small businesses and their employees in the District of Columbia. For more information, visit the DCHBX website<\/a>." + }, + { + "term": "DC Health Link", + "description": "The District of Columbia's system for individuals, families, small businesses and their employees as well as members of Congress and their staff to access health and dental coverage through private health companies or Medicaid<\/a>." + }, + { + "term": "DC Healthcare Alliance Program", + "description": "A managed care health plan that provides medical assistance to District of Columbia residents who are not eligible for Medicaid<\/a>. The Alliance serves low-income District residents who have no other health insurance<\/a> and are not eligible for either Medicaid or Medicare<\/a>. The program is sponsored and paid for by the District government. Learn more about eligibility for the DC Healthcare Alliance Program<\/a>." + }, + { + "term": "DC-Metro Network", + "description": "A designation that indicates the plan's network<\/a> of doctors, specialists, other providers, facilities and suppliers that plan members can access is limited to the DC metropolitan area." + }, + { + "term": "DCHBX", + "description": "The acronym for DC Health Benefit Exchange Authority<\/a>." + }, + { + "term": "DDS", + "description": "The acronym for the District\u2019s Department of Disability Services<\/a>." + }, + { + "term": "Deductible", + "description": "The amount you must pay during the plan year<\/a> for covered services<\/a> you use before your insurance company begins to contribute towards costs. For example, if your annual in-network<\/a> deductible is $1000, your health insurance company may not pay anything for covered services until you reach this amount. The deductible may not apply to all services. For example, most plans include certain preventive services<\/a> at no cost even before you meet your deductible. Some plans also have separate deductibles for specific benefits like prescription drugs<\/a>." + }, + { + "term": "Dental Plan", + "description": "Health insurance<\/a> for routine, or preventive dental services such as teeth cleaning, fillings or x-rays. Dental coverage is considered an essential health benefit<\/a> for children 18 years old or younger, and must be o\ufb00ered either as part of a health plan or as a stand-alone plan. Dental coverage is considered optional for adults and children under the Affordable Care Act<\/a>, and you aren't required to buy it. You can purchase a dental plan through DC Health Link without purchasing private health coverage." + }, + { + "term": "Department of Disability Services", + "description": "Provides District residents with information, oversight and coordination of services for people with disabilities and those who support them, such as service providers and employers. Learn more about DDS assistance programs<\/a>." + }, + { + "term": "Department of Health Care Finance", + "description": "The District of Columbia's state Medicaid<\/a> agency charged with improving health outcomes for District residents by providing access to comprehensive, cost-effective and quality healthcare services. DHCF also administers insurance programs for immigrant children, the State Child Health Insurance Program, and Medical Charities (a locally funded program). Learn more about DHCF assistance programs<\/a>." + }, + { + "term": "Department of Human Services", + "description": "This agency, in collaboration with the community, provides financial assistance and helps low-income individuals and families maximize their potential for economic security and self-sufficiency. Learn more about DHS assistance programs<\/a>." + }, + { + "term": "Department of Insurance, Securities and Banking", + "description": "This agency regulates financial-service businesses in the District of Columbia by administering DC's insurance, securities and banking laws, rules and regulations. The agency's primary goal is to ensure residents of the District of Columbia have access to a wide choice of insurance, securities and banking products and services, and that they are treated fairly by the companies and individuals that provide these services. For more information, visit the DISB website<\/a>." + }, + { + "term": "Dependent", + "description": "Also referred to as tax dependent<\/a>." + }, + { + "term": "DHCF", + "description": "The acronym for the District\u2019s Department of Health Care Finance<\/a>." + }, + { + "term": "DHS", + "description": "The acronym for the District\u2019s Department of Human Services<\/a>." + }, + { + "term": "Disability", + "description": "A physical or mental impairment that restricts a person's ability to participate in everyday activities. For more information, refer to the legal definition of disability<\/a>." + }, + { + "term": "DISB", + "description": "The acronym for the District\u2019s Department of Insurance, Securities and Banking<\/a>." + }, + { + "term": "Doctor Directory", + "description": "A feature of DC Health Link's Plan Match<\/a> tool that allows you to filter plans and see the ones where your doctors are in-network<\/a>." + }, + { + "term": "Domestic Partnership", + "description": "A legal classification that provides rights for two unmarried persons, 18 years old or older, living together, whether of the same gender or different genders, who are also the sole domestic partner of the other person. Domestic partnerships must be registered to gain access to rights provided by applicable laws. Learn more about domestic partnerships in the District of Columbia<\/a>." + }, + { + "term": "Drug Formulary", + "description": "A more descriptive phrase for formulary<\/a>." + }, + { + "term": "Durable Medical Equipment", + "description": "Equipment and other goods prescribed by a service provider<\/a> to support patient care, often in home. Examples include but aren't limited to: wheelchairs, walkers, crutches, blood testing strips for diabetics or oxygen equipment." + }, + { + "term": "Early and Periodic Screening, Diagnostic, and Treatment Services", + "description": "An umbrella term used to describe a comprehensive and preventive set of health care services for children under the age of 21 who are enrolled in Medicaid<\/a>." + }, + { + "term": "ECN", + "description": "The acronym for Exemption Certificate Number<\/a>." + }, + { + "term": "EHB", + "description": "The acronym for Essential Health Benefits<\/a>." + }, + { + "term": "Eligible Expense", + "description": "Also known as Allowed Amount<\/a>." + }, + { + "term": "Employer Shared Responsibility Provision", + "description": "The Affordable Care Act<\/a> requires employers with 50 or more full-time equivalent employees<\/a> to offer health insurance<\/a> to their employees (and their tax dependents<\/a>) that provides, minimum value<\/a> and is considered affordable coverage<\/a> or pay a penalty (called the employer shared responsibility payment). Learn more about the provision<\/a>." + }, + { + "term": "Employer-Sponsored Health Insurance", + "description": "Coverage offered to an employee by an employer (also called job-based coverage). At the employer's option, it may include family coverage. Typically, employers make a contribution towards the costs of your premiums<\/a>, and usually you'll have a choice of plans. You pay your share of the premium costs directly to your employer - typically through payroll deductions." + }, + { + "term": "EPO", + "description": "The acronym for Exclusive Provider Organization<\/a>, a type of health insurance<\/a> plan." + }, + { + "term": "EPSDT", + "description": "The acronym for Early and Periodic Screening, Diagnostic, and Treatment Services<\/a>." + }, + { + "term": "Essential Health Benefits", + "description": "All health insurance<\/a> plans available through DC Health Link are required by federal law to include what are called essential health benefits. These include: ambulatory patient services<\/a>; emergency services; hospitalization; maternity and newborn care; mental health and substance use disorder services including behavioral health treatment; prescription drugs<\/a>; rehabilitation services and habilitative services<\/a> and devices; laboratory services; preventive services<\/a> and chronic disease management; and pediatric services, including dental and vision care for children. This doesn\u2019t mean that all plans are the same. Some plans may o\ufb00er a higher level of service or additional services beyond the minimum required, or exclude other optional services that may be important to you. It\u2019s important to understand these di\ufb00erences when comparing and choosing a plan to meet your needs and budget." + }, + { + "term": "Exchange", + "description": "Another word for a Health Insurance Marketplace<\/a>." + }, + { + "term": "Excluded Services", + "description": "Health care services that your health insurance<\/a> doesn't pay for or cover such as plastic surgery<\/a> for non-medical reasons. Some services also require pre-authorization<\/a> from your health insurance company or a referral from your primary care physician<\/a> in order to be considered covered services<\/a>. Excluded services don't count towards your annual deductible<\/a> or out-of-pocket limit<\/a>." + }, + { + "term": "Exclusive Provider Organization", + "description": "A type of health insurance<\/a> plan where you can only use in-network<\/a> doctors, hospitals, specialists and other service providers<\/a> except in an emergency." + }, + // Rearranged so RegExp searches for larger terms first + { + "term": "Exemption Certificate Number", + "description": "If you qualify for an exemption<\/a>, you'll receive an exemption certificate number (ECN), a unique identification number that you'll need when you file your federal tax return. This number is used to complete IRS Form 8965<\/a> for the year or time period when you didn't have health insurance<\/a>. If more than one person in your household qualifies for an exemption, each person will be assigned their own ECN." + }, + { + "term": "Exemption", + "description": "If you don't want to or forgot to buy health insurance<\/a>, or don't believe you can afford it, you must get a formal exemption or you may have to pay a penalty when you file your taxes (the Individual Shared Responsibility Payment<\/a>). Some exemptions can be claimed when you file your tax return, but others must be granted in advance by the U.S. Department of Health and Human Services<\/a>. If you're not required to file a federal tax return because your gross income is below the filing threshold, you automatically have an exemption and don't need to do anything. See exemptions and who grants them<\/a> to find out whether you need to apply for an exemption<\/a> in advance. Exemptions are claimed on IRS Form 8965<\/a> when you file your taxes." + }, + { + "term": "Family", + "description": "You, your spouse, and other tax dependents<\/a> as defined by the IRS. Eligibility for Medicaid<\/a>, help paying for private health insurance<\/a> and other financial assistance<\/a> programs is based on the income of all household<\/a> members even if all members don't need coverage." + }, + { + "term": "Federal Poverty Level", + "description": "A measure of income used to determine eligibility for certain financial assistance<\/a> programs. The guidelines are issued each year by the US Department of Health and Human Services<\/a>. Learn more about this year's FPL guidelines<\/a>." + }, + { + "term": "Federally Qualified Health Center", + "description": "Nonprofit health centers or clinics that receive federal funding to serve medically underserved areas and populations. The centers provide low cost to no cost primary care<\/a> services on a sliding scale fee, based on your ability to pay. There are several federally qualified health centers in the District of Columbia<\/a>. " + }, + { + "term": "Federally Recognized Tribe", + "description": "An American Indian<\/a> or Alaska Native<\/a> tribal entity that is recognized as having a government-to-government relationship with the United States. Members are eligible for enhanced savings, benefits and protections through DC Health Link, and should apply for financial assistance<\/a> prior to choosing a health plan to determine eligibility and the savings, benefits and protections available." + }, + { + "term": "Financial Assistance", + "description": "An umbrella terms used by DC Health Link to describe Medicaid<\/a>, and federal programs that help you pay for private health insurance<\/a> like advance premium tax credits<\/a> and cost-sharing reductions<\/a>. In the District of Columbia, there are many other financial assistance programs for health care and other services. You can learn more about these programs from the District's Department of Health Care Finance<\/a> and the Department of Human Services<\/a>." + }, + { + "term": "Food Stamps", + "description": "The informal name for the Supplemental Nutrition Assistance Program<\/a>." + }, + { + "term": "Formulary", + "description": "A list of prescription drugs<\/a> that are covered by your health insurance<\/a> plan. Formularies often divide drugs into 'tiers' or categories, which determine your share of the costs. Prescription drugs are considered an essential health benefit<\/a> under the Affordable Care Act<\/a>. " + }, + { + "term": "FPL", + "description": "The acronym for the Federal Poverty Level<\/a>." + }, + { + "term": "FQHC", + "description": "The acronym for Federally Qualified Health Center<\/a>." + }, + { + "term": "Full-time Equivalent Employee", + "description": "Small businesses must have at least 1 full-time equivalent employee to purchase health insurance<\/a> through DC Health Link\u2019s Small Business Marketplace. All employees (not including owners, partners or family members) who work on average, at least 30 hours a week are considered full-time employees. Part-time employees can count towards calculating the number of full-time equivalent employees. For example, 2 part-time employees who each work 15 hours a week - half the hours of a full-time employee - equal 1 full-time equivalent employee. (2x.50=1)" + }, + { + "term": "Generic Drugs", + "description": "A prescription drug<\/a> that has the same active-ingredient formula as a brand-name drug<\/a>. Generic drugs usually cost less than brand name drugs. The Food and Drug Administration (FDA) rates these drugs to be as safe and effective as brand name drugs." + }, + { + "term": "Gold Health Plan", + "description": "Gold Health Plans pay 80 percent of in-network<\/a> expenses for an average population of consumers. The premiums<\/a> are typically higher but the deductible<\/a> and out-of-pocket limit<\/a> of what you'll pay before the plan starts paying are lower. Metal levels<\/a> only focus on what the plan is expected to pay, and do NOT reflect the quality of health care or service providers<\/a> available through the health insurance<\/a> plan. Once you meet your in-network out-of-pocket limit for the plan year<\/a>, plans pay 100 percent of the allowed amount<\/a> for covered services<\/a>. " + }, + { + "term": "Grandfathered Plan", + "description": "A health plan that's exempt from some provisions of the Affordable Care Act<\/a>. Grandfathered plans count as having minimum essential coverage<\/a>. Health insurance companies are required to disclose if a plan is grandfathered in plan documents<\/a>." + }, + { + "term": "Group Health Plan", + "description": "An umbrella term generally used to describe a health plan offered by either an employer or an employee organization (such as a union) that provides medical coverage to plan participants<\/a>. " + }, + { + "term": "Guaranteed Issue", + "description": "A health plan that must let you enroll regardless of age<\/a>, income, health status<\/a> or potential use of covered services<\/a> as long as you pay your monthly premiums<\/a>. " + }, + { + "term": "Guaranteed Renewal", + "description": "A health plan that must let you renew the policy (if it's still available) as long as you pay your monthly premiums<\/a>. " + }, + { + "term": "Guardianship", + "description": "A person with the legal authority and obligation to make financial as well as personal care decisions on behalf of another person. In the District of Columbia, legal guardianship<\/a> for minors and \u201cincapacitated adults\u201d is implemented through the Superior Court of DC Probate Division Court. " + }, + { + "term": "Habilitative Services", + "description": "Health care services such as occupational, physical, speech and psychiatric therapy that focus on helping develop new skills that improve daily living. Examples include therapy for a child who isn't walking or talking at the expected age. " + }, + { + "term": "Hardship Exemption", + "description": "One kind of exemption from the health care law\u2019s requirement that most Americans have health insurance<\/a> or pay a penalty. See the definition of exemption<\/a> for more information." + }, + { + "term": "HCBS", + "description": "The acronym for Home and Community-Based Services<\/a>." + }, + { + "term": "HDHP", + "description": "The acronym for a High Deductible Health Plan<\/a>." + }, + { + "term": "Health Care and Education Reconciliation Act", + "description": "One of the health care laws commonly referred to as the Affordable Care Act<\/a>." + }, + // Rearranged so RegExp searches for larger terms first + { + "term": "Health Insurance Marketplace Statement", + "description": "Another name for IRS Form 1095-A<\/a>." + }, + { + "term": "Health Insurance Marketplace", + "description": "A state-based or federally-facilitated exchange where individuals, families, small businesses and their employees can get quality, affordable health insurance<\/a>. The District of Columbia's health insurance marketplace is available at dchealthlink.com<\/a>. " + }, + { + "term": "Health Insurance", + "description": "A contract (also called a plan or policy) that requires the health insurance company that issues the plan to pay some of your health care costs in exchange for the premium<\/a> payment you make. If you don't make your premium payments on time, your health insurance company can cancel your plan. " + }, + { + "term": "Health Insurance Plan", + "description": "Another name for health insurance<\/a>." + }, + { + "term": "Health Insurance Portability and Accountability Act", + "description": "A federal law that sets rules about who can see, use or share your health information and provides other protections to consumers. Commonly referred to as HIPAA, the law gives you rights over your health information, and requires doctors, pharmacists, other health care providers, and your health plan to explain your rights. The law has specific privacy and security requirements to safeguard your electronic health information, and to notify you if there's ever a breach. " + }, + { + "term": "Health Maintenance Organization", + "description": "An HMO (Health Maintenance Organization) is a type of health plan that usually only covers care from in-network<\/a> service providers<\/a>. It generally won't cover out-of-network<\/a> care except in an emergency, and may require you to live or work in its service area<\/a> to be eligible for coverage. You may be required to choose a primary care physician<\/a>." + }, + { + "term": "Health Reimbursement Account", + "description": "An optional, employer-sponsored<\/a> benefit funded by the employer that reimburses plan participants<\/a> for qualified medical expenses<\/a> up to a fixed amount. The reimbursements are tax free, and any unused funds can be rolled over for use in future years. These types of accounts are not health insurance<\/a>." + }, + { + "term": "Health Savings Account", + "description": "If you have a High Deductible Health Plan<\/a>, you may be eligible for a Health Savings Account (HSA) where you (and if applicable, your employer) can deposit pre-tax dollars to pay for qualified medical expenses<\/a> like your deductible<\/a>, copayments<\/a> and coinsurance<\/a>. There's an annual limit on contributions established by the IRS, but any funds deposited can be used in future years. If you have an HSA through your employer, the funds belong to you and can rollover into another qualifying account if you ever leave. " + }, + { + "term": "Health Status", + "description": "Medical conditions and health history. Under the Affordable Care Act<\/a>, your health status has no impact on your ability to get health insurance<\/a> or the cost of it. In the District of Columbia, smoking also doesn't factor into the cost of your health insurance, and premiums<\/a> are based solely on your age." + }, + { + "term": "Healthcare.gov", + "description": "The website for the federally-facilitated health insurance marketplace<\/a> used by many states to help meet the provisions of the Affordable Care Act<\/a>. The District of Columbia operates its own health insurance marketplace accessible through DC Health Link<\/a>; however, District residents who need an exemption<\/a> from having health insurance<\/a> apply for it through healthcare.gov<\/a>" + }, + { + "term": "HHS", + "description": "The acronym for the US Department of Health and Human Services<\/a>." + }, + { + "term": "High Deductible Health Plan", + "description": "A feature of some health plans. HDHPs have a higher annual deductible<\/a> and typically lower monthly premiums<\/a>. You pay more for health care up front before your insurance company starts to pay. With an HDHP, you're eligible to open a tax deductible Health Savings Account<\/a> or Health Reimbursement Account<\/a> to pay for qualified medical expenses<\/a> like your annual deductible, copayments<\/a> or coinsurance<\/a>. The IRS defines the limits for plans that qualify as HDHPs and the deductible and out-of-pocket limit<\/a> may be adjusted annually for inflation. " + }, + { + "term": "HIPAA", + "description": "The acronym for a federal law known as the Health Insurance Portability and Accountability Act<\/a>." + }, + { + "term": "HMO", + "description": "The acronym for Health Maintenance Organization<\/a> \u2013 a type of health insurance<\/a> plan." + }, + { + "term": "Home and Community-Based Services", + "description": "An alternative to institutional residential services that offers a wide range of daily living, respite, vocational, employment, retirement, social, clinical, therapy and adaptive services and supports in the home and community in a variety of settings. " + }, + { + "term": "Home Health Care", + "description": "Health services you receive at home, such as but not limited to: skilled nursing, physical therapy, occupational therapy, or medical supplies and equipment. These services are typically prescribed by your doctor and provided by a home health agency approved by your health insurance<\/a> company." + }, + { + "term": "Hospice Services", + "description": "Medical care, comfort and support services for patients in the late stages of a terminal illness. Care can typically be provided in the patient's home or in a medical facility. " + }, + { + "term": "Hospital Readmissions", + "description": "When you're released from the hospital, but have to go back for the same or a related medical condition. Readmission rates are considered a measure of the quality of care patients receive. One goal of the Affordable Care Act<\/a> is to lower excessive readmission rates. " + }, + { + "term": "Hospitalization", + "description": "Another word for Inpatient Care<\/a>." + }, + { + "term": "Household", + "description": "You, your spouse, and other tax dependents<\/a> as defined by the IRS. Eligibility for Medicaid<\/a>, help paying for private health insurance<\/a> and other financial assistance<\/a> programs is based on the income of all household members even if all members don't need coverage<\/a>. " + }, + { + "term": "HRA", + "description": "The acronym for Health Reimbursement Account<\/a>." + }, + { + "term": "HSA", + "description": "The acronym for Health Savings Account<\/a>." + }, + { + "term": "I\/T\/U", + "description": "An acronym that encompasses Indian Health Service<\/a> Providers, Tribal Health Providers, and Urban Indian Health Providers." + }, + { + "term": "ICP", + "description": "The acronym for the District's Immigrant Children's Program<\/a>." + }, + { + "term": "IDA", + "description": "The acronym for the District\u2019s Interim Disability Assistance Program<\/a>." + }, + { + "term": "Immigrant Children's Program", + "description": "A health coverage program available to children under the age of 21 who aren't eligible for Medicaid<\/a> due to citizenship or immigration status. Learn more about the District's Immigrant Children's Program<\/a>." + }, + { + "term": "Indian Health Service", + "description": "An agency within the US Department of Health and Human Services<\/a> that administers the federal health program for American Indians<\/a> and Alaska Natives<\/a>." + }, + { + "term": "Individual & Family Health Insurance", + "description": "Private health insurance<\/a> available through DC Health Link. Advance premium tax credits<\/a> and cost-sharing reductions<\/a> can be used to help pay for private coverage for eligible customers." + }, + { + "term": "Individual Shared Responsibility Payment", + "description": "If you don't have health insurance<\/a> that provides minimum essential coverage<\/a>, or you don't qualify for an exemption<\/a>, you may have to pay a penalty when you file your federal tax return. This is called the individual shared responsibility payment. The penalty will never be higher than the national average premium<\/a> for a bronze health plan<\/a> (the least expensive type of comprehensive plan). Learn more about the penalty<\/a>. " + }, + { + "term": "Individual Shared Responsibility Provision", + "description": "The Affordable Care Act<\/a> requires most people to either have health insurance<\/a> that provides minimum essential coverage<\/a>, get an exemption<\/a>, or pay a penalty which is called the individual shared responsibility payment<\/a>." + }, + { + "term": "In-Network", + "description": "The service providers<\/a> and suppliers your health insurance<\/a> company has contracted with to provide health care services. Some health insurance plans will only let you use in-network (sometimes called \u201cpreferred\u201d) service providers, and only cover out-of-network<\/a> providers on a limited basis. It also costs less to use in-network service providers. If you have a doctor or other service provider that you want to keep using, make sure they are in-network for the health insurance plan you choose." + }, + { + "term": "Inpatient Care", + "description": "Medical care received after formally being admitted to a hospital or medical facility on a doctor's order. Inpatient care includes services like room, board and nursing care and typically requires an overnight stay. Inpatient care is usually more expensive than outpatient care<\/a>, and may require pre-authorization<\/a> from your insurance company unless it's an emergency." + }, + { + "term": "Interim Disability Assistance Program", + "description": "Provides temporary financial assistance to those who are unable to work due to a disability and have a high probability of receiving federal Supplemental Security Income (SSI)<\/a>. IDA payments are issued until SSI eligibility is approved or denied. Learn more about IDA<\/a>." + }, + { + "term": "IRS Form 1095-A", + "description": "A federal tax form, also called the Health Insurance Marketplace Statement, that shows how long you had individual (or family) health insurance<\/a> through a health insurance marketplace during the tax year. If you received an advance premium tax credit<\/a> to help pay for your insurance, Form 1095-A will also show how much premium assistance you received each month. If you received premium<\/a> assistance, you\u2019ll need the information on Form 1095-A to complete the Premium Tax Credit IRS Form 8962<\/a>. DC Health Link will mail your Form 1095-A at the end of January. You can also Download Form 1095-A<\/a> in early February." + }, + { + "term": "IRS Form 1095-B", + "description": "A federal tax form sent to the IRS and to taxpayers who either had Medicaid<\/a>, CHIP<\/a> or employer-sponsored coverage<\/a>. Medicaid and CHIP beneficiaries in the District of Columbia receive the form from DC Health Link by the end of January. Employees receive the form directly from their insurance company. The form shows how long you had minimum essential coverage<\/a> during the tax year." + }, + { + "term": "IRS Form 8962", + "description": "If you were eligible for and want to claim a premium tax credit, or received an advance premium tax credit<\/a> to lower your monthly premium<\/a>, you must file Form 8962<\/a> with your federal tax return. The form is used to reconcile your tax credit, comparing the amount you received in advance, and the amount for which you\u2019re actually eligible. This may result in an additional credit, or you may have to repay some or all of the tax credit you received. Form 1095-A<\/a> provides the information needed to complete this form. " + }, + { + "term": "IRS Form 8965", + "description": "A federal tax form that must be filed with your tax return if you received a health coverage exemption<\/a> or if you're claiming a coverage exemption on your return. Form 8965<\/a> is also used to calculate the penalty for not having coverage (known as the Individual Shared Responsibility Payment<\/a>) that you must pay if you don't qualify for an exemption." + }, + { + "term": "Job-based Health Plan", + "description": "Another name for Employer-Sponsored Health Insurance<\/a>." + }, + { + "term": "Katie Beckett Program", + "description": "An eligibility pathway for the District\u2019s Medicaid<\/a> Program for certain children who have long-term disabilities or complex medical needs and live at home. Also known as the Tax Equity Fiscal Responsibility Act (TEFRA). Learn more about eligibility for the Katie Beckett Program<\/a>." + }, + { + "term": "Large Group Health Plan", + "description": "A health benefits program offered by employers with 51 or more employees. In the District of Columbia, large group health plans are purchased directly from insurance companies. " + }, + { + "term": "Life Changes", + "description": "Also called a Qualifying Life Event<\/a>, certain life changes may make you eligible to enroll in health insurance<\/a> coverage outside of the annual open enrollment<\/a> period in what's called a special enrollment period<\/a>, or make changes to your plan during the year." + }, + { + "term": "Life Event", + "description": "Also called a Qualifying Life Event<\/a>, certain life events may make you eligible to enroll in health insurance<\/a> coverage outside of the annual open enrollment<\/a> period in what's called a special enrollment period<\/a>, or make changes to your plan during the year." + }, + { + "term": "Lifetime Limit", + "description": "The most your insurance company will pay for benefits in your lifetime, how many times you can receive a service in your lifetime, or how much your insurance company will spend on a particular service in your lifetime. Under the Affordable Care Act<\/a>, most health plans (including all plans available through health insurance marketplaces<\/a>) don\u2019t have lifetime limits." + }, + { + "term": "Limited Cost-Sharing Plan", + "description": "Members of federally recognized Tribes<\/a> and Alaska Native<\/a> Claims Settlement Act (ANCSA) Corporation shareholders are eligible for this type of plan regardless of income or eligibility for advance premium tax credits<\/a>. With this plan, there aren\u2019t any deductibles<\/a>, copayments<\/a>, or coinsurance<\/a> when getting care through the Indian Health Service<\/a>, Tribal Health Providers, or Urban Indian Health Providers. Plan participants<\/a> must have a referral from an I\/T\/U<\/a> provider to receive covered services<\/a> from an in-network<\/a> service provider<\/a> at no cost. " + }, + { + "term": "Limited Enrollment Period", + "description": "Small businesses that can't meet minimum participation and\/or matching contribution requirements to create a health benefits program that begins on the month of their choice may still be eligible to do so during an annual limited enrollment period. This typically takes place towards the end of the year for coverage that's effective January 1." + }, + { + "term": "Long-Term Care", + "description": "Medical and non-medical services provided to people who are unable to perform basic activities most people do every day without assistance, such as walking, dressing or bathing. Long-term care insurance is typically purchased as a stand-alone plan. Medicare<\/a> and most health insurance<\/a> plans don\u2019t pay for long-term care. The District of Columbia does offer some long-term care programs for eligible District residents<\/a>. " + }, + { + "term": "MAGI", + "description": "The acronym for Modified Adjusted Gross Income<\/a>." + }, + { + "term": "MEC", + "description": "The acronym for Minimum Essential Coverage<\/a>." + }, + { + "term": "Medicaid", + "description": "Medicaid is a joint federal-state health program that provides health care coverage to low-income and disabled adults, children and families. To be eligible for DC Medicaid, you must be a District resident and must meet non-financial and financial eligibility requirements. Medicaid covers many services, including doctor visits, hospital care, prescription drugs<\/a>, mental health services, transportation and many other services at little or no cost to the individual. Currently, 1 out of every 3 District residents receives quality health care coverage through the Medicaid program. Learn more about DC Medicaid<\/a>. " + }, + { + "term": "Medical Coverage", + "description": "Health Insurance<\/a>" + }, + { + "term": "Medical Loss Ratio", + "description": "Federal law requires health insurance<\/a> companies to use at least 80 percent of premium<\/a> dollars for health care expenses (85 percent for large group health plans). If an insurance company spends less, they must pay a rebate to employers or consumers. Rebates are based on the insurance company's health care spending across all health plans in the state. Employers are required to share the rebates with their employees based on the percentage of premiums paid. " + }, + { + "term": "Medically Necessary", + "description": "Health care services or supplies that meet accepted standards of medicine that are needed to diagnose or treat an illness, injury, condition, disease, or its symptoms." + }, + { + "term": "Medicare", + "description": "A federal health insurance<\/a> program for people who are 65 or older, certain younger people with disabilities, and people with end-stage renal disease (permanent kidney failure requiring dialysis or a transplant, sometimes called ESRD). The program helps with the cost of health care, but it doesn't cover all medical expenses or the cost of most long-term care<\/a>. The program is administered through the Social Security Administration<\/a>, not through DC Health Link. Learn more about when and how to apply for Medicare<\/a>. " + }, + { + "term": "Metal Level", + "description": "Plans are assigned metal levels to indicate how generous they are in paying expenses. Metal levels only focus on what the plan is expected to pay, and do NOT reflect the quality of health care or service providers<\/a> available through the health insurance<\/a> plan. Bronze Health Plans<\/a> pay 60 percent of medical expenses for the average population of consumers, Silver Health Plans<\/a> 70 percent, Gold Health Plans<\/a> 80 percent, and Platinum Health Plans<\/a> 90 percent. Bronze and Silver plans generally have lower premiums<\/a>, but you pay more when you get covered services<\/a>. Gold and Platinum plans generally have higher premiums, but you pay less when you get covered services. " + }, + { + "term": "Mini Cobra", + "description": "Also known as State Continuation Coverage<\/a>." + }, + { + "term": "Minimum Essential Coverage", + "description": "Health coverage that meets the requirement of the Affordable Care Act<\/a> that most Americans have health insurance and certain other standards. All private health plans available through DC Health Link meet or exceed this standard. Medicaid<\/a> and Medicare<\/a> also qualify. If you get your medical coverage outside of DC Health Link or through another government program, find out what kind of health coverage qualifies as minimum essential coverage<\/a>." + }, + { + "term": "Minimum Value", + "description": "A standard applied to employer-sponsored health insurance<\/a>. A plan meets the standard if it pays at least 60 percent of the total cost of medical services for a standard population of consumers and o\ufb00ers substantial coverage of hospital and doctor services. If your employer\u2019s plan meets this standard and is considered a\ufb00ordable, you won\u2019t be eligible for an advance premium tax credit<\/a> if you buy a private plan through DC Health Link's Individual & Family marketplace<\/a> instead." + }, + { + "term": "Modified Adjusted Gross Income", + "description": "The way your income is calculated to see whether or not you qualify for Medicaid<\/a> or an advance premium tax credit<\/a>. MAGI is your household's<\/a> Adjusted Gross Income (as calculated when you file your taxes) plus any non-taxable Social Security<\/a> benefits, tax-exempt interest, and foreign income." + }, + { + "term": "Nationwide Network", + "description": "A designation that indicates the plan's network<\/a> of doctors, specialists, other service providers<\/a>, facilities and suppliers that plan members can access is national." + }, + { + "term": "Native American", + "description": "If you're a Native American, member of a federally recognized Tribe<\/a>, Alaska Native<\/a> Claims Settlement Act (ANCSA) corporation shareholder or otherwise eligible for services from the Indian Health Service<\/a>, Tribal Program, or Urban Indian Health Program, enhanced savings, benefits and protections are likely available to you through DC Health Link. You should apply for financial assistance<\/a> prior to choosing a health plan to determine the savings, benefits and protections available to you. " + }, + { + "term": "Navigator", + "description": "The DC Health Link Navigator Program is a partnership with community organizations that have experience successfully reaching, educating, and enrolling the District\u2019s diverse uninsured and hard-to-reach populations into Qualified Health Plans<\/a> (QHPs) and insurance affordability programs. The program also provides effective post-enrollment and renewal support services to consumers, as appropriate. " + }, + { + "term": "Negotiated Rate", + "description": "Also referred to as an Allowed Amount<\/a>." + }, + { + "term": "Network", + "description": "Doctors, specialists, other service providers<\/a>, facilities and suppliers that a health insurance<\/a> company contracts with to provide health care services to plan members." + }, + { + "term": "Non-Preferred Provider", + "description": "Also referred to as an out-of-network<\/a> provider." + }, + { + "term": "Notice", + "description": "Once you sign up for health insurance<\/a>, from time to time, you may receive important information about your health insurance in the mail or an alert by email that a new notice is available when you login to your DC Health Link account. Notices are time sensitive and may impact your health insurance, so it\u2019s important that you read them and take action, if required. " + }, + { + "term": "Obamacare", + "description": "The healthcare laws officially known as the Affordable Care Act<\/a>." + }, + { + "term": "Open Enrollment", + "description": "A limited period of time every year when people can enroll in a health insurance<\/a> plan for the next plan year. For individuals and families, the annual open enrollment season is every fall and usually lasts 3 months. If your employer offers health insurance, the open enrollment time will be shorter and at a different time, so you should check with your employer on when you can enroll. You can apply for and enroll in Medicaid<\/a> any time of the year." + }, + { + "term": "Out-of-Network", + "description": "Some plans allow you to use out-of-network service providers<\/a> (sometimes called \u201cnon-preferred providers\u201d or a \u201ctiered network\u201d), but you have to pay more to use them. If your plan allows you to go out-of-network, there may be an additional deductible<\/a>, copayments<\/a> and coinsurance<\/a> and an out-of-pocket limit<\/a> that apply to any out-of-network services you use. If an out-of-network provider charges more than the allowed amount<\/a> for covered services<\/a>, you may be responsible for paying the difference (balance billing<\/a>). It also may not count towards your out-of-network deductible or out-of-pocket limit." + }, + { + "term": "Out-of-Pocket Costs", + "description": "Expenses you incur for medical services that your insurance company doesn't pay including deductibles<\/a>, copayments<\/a>, coinsurance<\/a>, balance billing<\/a> along with any costs you incur for excluded services<\/a>." + }, + { + "term": "Out-of-Pocket Limit", + "description": "The most you'll have to pay in a plan year<\/a> for covered services<\/a> before your health insurance<\/a> company pays 100 percent. After you spend this amount on deductibles<\/a>, copayments<\/a>, and coinsurance<\/a>, your health insurance pays 100 percent of the allowed amount<\/a> for covered services. Premiums<\/a> don't count towards your out-of-pocket limit." + }, + { + "term": "Out-of-Pocket Maximum", + "description": "Also known as out-of-pocket limit<\/a>." + }, + { + "term": "Outpatient Care", + "description": "Diagnosis or treatment in a hospital or medical facility that typically doesn't include an overnight stay. Examples include but aren't limited to emergency room services; lab tests or x-rays. " + }, + { + "term": "Part-time Employee", + "description": "An employee who works on average, less than 30 hours a week." + }, + { + "term": "Patient Protection and Affordable Care Act", + "description": "One of the health care laws commonly referred to as the Affordable Care Act<\/a>." + }, + { + "term": "Payment Allowance", + "description": "Also referred to as the allowed amount<\/a>." + }, + { + "term": "Payment Bundling", + "description": "A payment structure where different health care providers who are treating you for the same or related conditions are paid an overall sum for taking care of your condition rather than being paid for each individual treatment, test, or procedure. Providers are rewarded for coordinating care, preventing complications and errors, and reducing unnecessary or duplicative tests and treatments." + }, + // { + // "term": "Penalty", + // "description": "Formally known as the Individual Shared Responsibility Payment<\/a>." + // }, + { + "term": "Physician Services", + "description": "Health care services a licensed medical physician (M.D. \u2013 Medical Doctor or D.O. \u2013 Doctor of Osteopathic Medicine) provides or coordinates." + }, + { + "term": "Plan Documents", + "description": "An umbrella term that applies to documents like the Summary of Benefits and Coverage<\/a> and the more detailed policy (also called a contract) with your insurance company. These documents describe covered services<\/a>, excluded services<\/a>, out-of-pocket costs<\/a> you must pay, and describe your obligations and the insurance company's. You can find a link to the full insurance policy at the top of the first page of the Summary of Benefits and Coverage document. " + }, + { + "term": "Plan Match", + "description": "DC Health Link's health plan comparison tool powered by Consumers' CHECKBOOK<\/a>. Plan match helps you compare and choose a plan based on the features that are most important to you. See Plan Match for Individuals & Families<\/a> or Plan Match for Small Businesses & Employees<\/a>. " + }, + { + "term": "Plan Participants", + "description": "An umbrella term that refers to employees as well as their spouses, domestic partners<\/a> or dependents who may receive coverage through an employer-sponsored health plan<\/a>." + }, + { + "term": "Plan Type", + "description": "Plan type impacts which doctors you can see, whether or not you can use out-of-network<\/a> providers or providers outside of your service area<\/a>, and how much you'll pay. Plan types available through DC Health Link include: Health Maintenance Organizations<\/a>; Exclusive Provider Organizations<\/a>; Preferred Provider Organizations<\/a>; and Point of Service Plans<\/a>. " + }, + { + "term": "Plan Year", + "description": "A 12-month period during which the benefits and premium<\/a> rates for insurance plans stay the same. The plan year for the Individual & Family marketplace<\/a> is the same as the calendar year, even if you\u2019re not enrolled for the whole calendar year. If you\u2019re enrolled in a group health plan<\/a> through an employer, your plan year may not be on a calendar year basis. " + }, + { + "term": "Plastic Surgery", + "description": "An elective medical procedure to improve your appearance that usually isn't covered by health insurance<\/a> such as a face lift or rhinoplasty. There are some exceptions for surgeries that are considered medically necessary<\/a> or classified as reconstructive surgery<\/a>." + }, + { + "term": "Platinum Health Plan", + "description": "Platinum Health Plans pay 90 percent of in-network<\/a> expenses for an average population of consumers. The premiums<\/a> are typically among the highest, but the out-of-pocket limit<\/a> of what you'll pay before the plan starts paying is usually the lowest and the plan may not have a deductible<\/a> at all. Metal levels<\/a> only focus on what the plan is expected to pay, and do NOT reflect the quality of health care or service providers<\/a> available through the health insurance plan. Once you meet your in-network out-of-pocket limit for the plan year<\/a>, plans pay 100 percent of the allowed amount<\/a> for covered services<\/a>. " + }, + { + "term": "Point-of-Service Plan", + "description": "A type of health plan that's a combination of a Health Maintenance Organization<\/a> and a Preferred Provider Organization Plan<\/a>. Typically, it has a network that functions like a HMO \u2013 you pick a primary care physician<\/a>, who manages and coordinates your care in-network<\/a>. Similar to a PPO, you can use an out-of-network<\/a> service provider<\/a> with a referral<\/a>." + }, + { + "term": "POS", + "description": "The acronym for Point-of-Service Plan<\/a> \u2013 a health insurance<\/a> plan type<\/a>." + }, + { + "term": "PPACA", + "description": "The acronym for the federal health laws more commonly called the Affordable Care Act<\/a>." + }, + { + "term": "PPO", + "description": "The acronym for Preferred Provider Organization<\/a> \u2013 a health insurance<\/a> plan type<\/a>." + }, + { + "term": "Pre-Authorization", + "description": "Approvals required by your insurance company prior to receiving some services. Your plan documents<\/a> spell out which services require pre-authorization. Failure to obtain it may mean your insurance company won't help pay for the service or procedure. For in-network<\/a> care, your doctor will typically obtain any required approvals. For out-of-network<\/a> care, you may have to obtain the approvals yourself. " + }, + { + "term": "Pre-Existing Condition", + "description": "A health problem you had before your health coverage begins. Under the Affordable Care Act<\/a>, health insurance companies can\u2019t refuse to cover you or charge you more just because you have a pre-existing condition." + }, + { + "term": "Preferred Broker", + "description": "Preferred Brokers are trusted partners of DC Health Link that complete additional training to expand their expertise, and have committed to meet responsive service requirements. Preferred Brokers are licensed under District law to sell health insurance<\/a> through DC Health Link to individuals, families, small businesses and their employees. They can recommend plans or plan types<\/a>, and perform activities on behalf of their clients as part of their professional licensing and training. There is no cost to use a Preferred Broker." + }, + // Rearranged so RegExp searches for larger terms first + { + "term": "Preferred Provider Organization", + "description": "A PPO (Preferred Provider Organization) plan covers care from in-network<\/a> and out-of-network<\/a> providers. You pay less if you use providers that belong to the plan\u2019s network. You can use providers outside of the network for an additional cost. " + }, + { + "term": "Preferred Provider", + "description": "Another way of saying a provider is in-network<\/a>." + }, + // Rearranged so RegExp searches for larger terms first + { + "term": "Premium Tax Credit", + "description": "A less formal way of saying Advance Premium Tax Credit<\/a>." + }, + { + "term": "Premium", + "description": "The amount you must pay to have a health insurance<\/a> contract or plan. You and\/or your employer pay it monthly. Premium costs are calculated based on your age, not on your health status<\/a>. " + }, + { + "term": "Prescription Drug Coverage", + "description": "All plans available through DC Health Link include prescription drug coverage, but that doesn't mean that all plans cover your prescriptions. When you use DC Health Link's Plan Match<\/a> tool, you'll have the opportunity to enter the names of your prescription drugs<\/a> and see which plans provide coverage. You should also check the insurance company's formulary<\/a>." + }, + { + "term": "Prescription Drugs", + "description": "A medication that legally requires your doctor to write an authorization for you to use it before a pharmacy can sell it to you. Most health insurance<\/a> plans cover some prescription drug costs. If you take medications that require a prescription from your doctor, you'll want to make sure that the health plan you choose covers your specific medications by checking DC Health Link's Plan Match<\/a> tool and the insurance company's formulary<\/a>." + }, + { + "term": "Preventive Services", + "description": "Health care to prevent or detect illness or other health problems at an early stage, when treatment is likely to work best. All health plans available through DC Health Link include certain preventive services at no cost to you. When you use DC Health Link's Plan Match<\/a> tool, you'll find information on preventive services included in your plan when you select the 'Plan Details' page." + }, + // Rearranged so RegExp searches for larger terms first + { + "term": "Primary Care Physician", + "description": "A physician (M.D. \u2013 Medical Doctor or D.O. \u2013 Doctor of Osteopathic Medicine) who directly provides or coordinates a range of health care services for a patient. Some health plans require that you select an in-network<\/a> primary care physician for routine care and coordination of any specialized care. " + }, + { + "term": "Primary Care Provider", + "description": "Doctors, nurses, nurse practitioners, and physician assistants. " + }, + { + "term": "Primary Care", + "description": "Health services that cover a range of prevention, wellness, and treatment for common illnesses. " + }, + { + "term": "Prior Authorization", + "description": "Another way of saying Pre-Authorization<\/a>." + }, + { + "term": "Private Health Insurance", + "description": "Health insurance<\/a> offered by an employer, purchased through an insurance company or through a health insurance marketplace like the private plans available through DC Health Link. " + }, + { + "term": "QHP", + "description": "The acronym for Qualified Health Plan<\/a>." + }, + { + "term": "QLE", + "description": "The acronym for Qualifying Life Event<\/a>." + }, + { + "term": "Qualified Health Plan", + "description": "A plan purchased through a health insurance marketplace<\/a>, such as the private plans<\/a> available through DC Health Link." + }, + { + "term": "Qualified Medical Expenses", + "description": "The same types of services and products that generally can be deducted as medical expenses on your federal tax return. Deductibles<\/a>, copayments<\/a>, coinsurance<\/a> and prescription drugs<\/a> are examples. " + }, + { + "term": "Qualifying Life Event", + "description": "If you have a life change, such as but not limited to getting married, having a baby or losing your employer-sponsored insurance, you may be able to get health insurance<\/a> coverage outside of the annual open enrollment<\/a> period, or make changes to your plan during the year. This is called special enrollment<\/a>. The deadlines for reporting the life change to DC Health Link and enrolling through special enrollment are different in the Individual & Family and Small Business marketplaces. See Individual & Family life changes and deadlines<\/a> or employer-sponsored insurance life changes and deadlines<\/a> for more information. " + }, + { + "term": "Rate Review", + "description": "The District's Department of Insurance, Security & Banking<\/a> reviews health insurance<\/a> rates that insurance company's submit for approval to determine if rate increases or decreases will be approved or rejected. Learn more about the rate review process<\/a>. " + }, + { + "term": "RCA", + "description": "The acronym for the District\u2019s Refugee Cash Assistance Program<\/a>." + }, + { + "term": "Reconstructive Surgery", + "description": "Surgery and follow-up treatment needed to correct or improve a part of the body because of birth defects, accidents, injuries or medical conditions." + }, + { + "term": "Reference Plan", + "description": "Employers that offer plan participants<\/a> a choice of plans (by metal level<\/a> or insurance company) choose one plan among them to cap costs. This is the reference plan. Employer contributions towards premiums<\/a> are determined by the cost of this plan regardless of which plans participants select. Download our guide (PDF)<\/a>" + }, + { + "term": "Referral", + "description": "A written recommendation from a doctor for you to see a specialist or get certain medical services. Some health plans require you to have a primary care physician<\/a> and get a written referral before you can get medical care from anyone else (except in an emergency). If you don\u2019t get a referral first, the plan may not pay for the services." + }, + { + "term": "Refugee Cash Assistance Program", + "description": "This District's Office of Refugee Resettlement serves to transition District of Columbia Refugees from dependency on public assistance to self-sufficiency. Cash assistance is one of many services offered to refugees in the District. Learn more about refugee assistance in the District of Columbia<\/a>. " + }, + { + "term": "Rehabilitation Services", + "description": "Health care services such as occupational, physical, speech or psychiatric therapy that focus on helping retain, recover or enhance daily living skills that were lost or damaged because of an illness, injury or disability. Examples include physical and speech therapy following a stroke. " + }, + { + "term": "SBC", + "description": "The acronym for Summary of Benefits and Coverage<\/a>." + }, + { + "term": "Second Lowest Cost Silver Plan", + "description": "The premium<\/a> you would be charged for the second lowest cost silver health plan<\/a> available through DC Health Link is used to calculate the amount of any advance premium tax credit<\/a> you could be eligible to receive, even when this isn\u2019t the plan in which you enroll. Following enrollment, this amount is reported on IRS Form 1095-A<\/a>." + }, + { + "term": "Service Area", + "description": "Some health plans only provide covered services<\/a> within a specific geographic area (except in an emergency) using in-network<\/a> service providers<\/a>. " + }, + { + "term": "Service Provider", + "description": "A doctor, health care professional, or health care facility licensed, certified or accredited as required by state law. " + }, + { + "term": "SHOP", + "description": "The acronym for Small Business Health Options Program<\/a>." + }, + { + "term": "Silver Health Plan", + "description": "Silver Health Plans pay 70 percent of in-network<\/a> expenses for an average population of consumers. The premiums<\/a> are typically lower, but the out-of-pocket limit<\/a> of what you'll pay before the plan starts paying is higher. If you qualify for cost-sharing reductions<\/a> and choose a silver plan, you'll have very low out-of-pocket expenses. Metal levels<\/a> only focus on what the plan is expected to pay, and do NOT reflect the quality of health care or service providers<\/a> available through the health insurance<\/a> plan. Once you meet your in-network out-of-pocket limit for the plan year<\/a>, plans pay 100 percent of the allowed amount<\/a> for covered services<\/a>. " + }, + { + "term": "Silver Plan", + "description": "Silver Health Plans pay 70 percent of in-network<\/a> expenses for an average population of consumers. The premiums<\/a> are typically lower, but the out-of-pocket limit<\/a> of what you'll pay before the plan starts paying is higher. If you qualify for cost-sharing reductions<\/a> and choose a silver plan, you'll have very low out-of-pocket expenses. Metal levels<\/a> only focus on what the plan is expected to pay, and do NOT reflect the quality of health care or service providers<\/a> available through the health insurance<\/a> plan. Once you meet your in-network out-of-pocket limit for the plan year<\/a>, plans pay 100 percent of the allowed amount<\/a> for covered services<\/a>. " + }, + { + "term": "SLCSP", + "description": "The acronym for Second Lowest Cost Silver Plan<\/a>." + }, + // Rearranged so RegExp searches for larger terms first + { + "term": "Small Business Health Options Program", + "description": "The name used to describe the federal and state health insurance marketplaces<\/a> for small businesses. " + }, + { + "term": "Small Business Tax Credit", + "description": "Small businesses that have fewer than 25 full-time equivalent employees<\/a>, pay an average wage of less than $50,000 a year, and pay at least half of employee health insurance<\/a> premiums<\/a> are eligible for a federal tax credit when they purchase health insurance through DC Health Link. Use the small business tax credit calculator<\/a> to learn more and estimate your credit." + }, + { + "term": "Small Business", + "description": "At DC Health Link, a small business is defined as having at least 1 but no more than 50 full-time equivalent employees<\/a>. " + }, + { + "term": "SNAP", + "description": "The acronym for Supplemental Nutrition Assistance Program<\/a>." + }, + // Rearranged so RegExp searches for larger terms first + { + "term": "Social Security Administration", + "description": "The federal agency that assigns social security numbers; administers the retirement, survivors, and disability insurance programs known as Social Security<\/a>; and administers the Supplemental Security Income<\/a> program for the aged, blind, and disabled." + }, + { + "term": "Social Security", + "description": "A federal benefits program that taxes your income while you work, so that when you retire or if you become disabled, you, your spouse and your dependent children receive monthly benefits based on your reported earnings. Survivors can also collect benefits if you die. " + }, + { + "term": "Special Enrollment Period", + "description": "Outside the open enrollment<\/a> season, you can enroll in a health insurance<\/a> plan only if you qualify for a special enrollment<\/a>. You qualify if you have certain qualifying life events<\/a>, like moving to the District, getting married, having a baby, losing other health coverage and other circumstances. " + }, + { + "term": "Specialist", + "description": "A service provider<\/a> with medical expertise, education and training in a particular practice area. Examples include: dermatologists, ear\/nose\/throat specialists, oncologists and cardiologists. Some health plans require a referral<\/a> from your primary care physician<\/a> to see a specialist. " + }, + { + "term": "SSA", + "description": "The acronym for Social Security Administration<\/a>." + }, + { + "term": "SSI", + "description": "The acronym for the Supplemental Security Income<\/a> program." + }, + { + "term": "Stand-alone Dental Plan", + "description": "A dental insurance plan not included in your health plan. Dental care for adults is typically not included in medical plans. " + }, + { + "term": "Stand-alone Vision Plan", + "description": "A vision insurance plan not included in your health plan. Vision care for adults is not always included in medical plans. " + }, + { + "term": "Standard Plan", + "description": "Each health insurance company offers a standard plan at each metal level<\/a>. Benefits and cost-sharing are the same, but monthly premiums<\/a> and network<\/a> options may be different. This makes it easier for consumers to do a side-by-side comparison of plans at the same metal level offered by different insurers. " + }, + { + "term": "State Continuation Coverage", + "description": "Small businesses in the District with 20 or fewer employees that offer health benefits, are required to provide 3 months of continuing coverage to terminated employees, except for terminations arising from gross misconduct. The employer is required to provide notice to the employee within 15 days after the date that coverage would terminate of the employee\u2019s rights to continuing coverage. The employee must confirm they want to keep coverage, and pay the premium<\/a> within 45 days after the date the coverage would otherwise terminate. " + }, + { + "term": "Step Therapy", + "description": "A form of pre-authorization<\/a> some plans apply to certain prescription drugs<\/a> to control risks and costs where the safest, most cost effective drug for a medical condition is prescribed first, before treatment can be \u201cstepped up\u201d with more expensive and\/or riskier drugs. " + }, + { + "term": "Subsidy", + "description": "An informal name for the advance premium tax credit<\/a> or cost-sharing reductions<\/a>." + }, + { + "term": "Summary of Benefits and Coverage", + "description": "All plans available through DC Health Link include a short, plain language PDF document that provides an overview of covered services<\/a>, excluded services<\/a>, a short glossary of terms, deductibles<\/a>, copayments<\/a> and coinsurance<\/a> for in-network<\/a> and out-of-network<\/a> services. The SBC is standardized so that you can make an apples-to-apples comparison among plans, and includes what the plan will pay in two common medical situations. You can find the SBC on the 'Plan Details' page when using DC Health Link's Plan Match<\/a> tool. " + }, + { + "term": "Supplemental Nutrition Assistance Program", + "description": "The name for the federal food stamp program. The Districts\u2019 SNAP program helps low-income residents and families buy the food they need for good health. Learn more about how to apply for SNAP<\/a>. " + }, + { + "term": "Supplemental Security Income", + "description": "A federal program that provides cash assistance for food, clothing and shelter for disabled or blind adults, children, and people 65 years or older without disabilities who have limited income or resources. This is not the same as social security<\/a> retirement or disability benefits, and some people may qualify for both. Learn more about how to apply for SSI<\/a>. " + }, + { + "term": "TANF", + "description": "The acronym for the District\u2019s Temporary Cash Assistance for Needy Families<\/a> program." + }, + { + "term": "Tax Credit", + "description": "An informal way of referring to the Advance Premium Tax Credit<\/a> for individuals or families or the Small Business Tax Credit<\/a>." + }, + { + "term": "Tax Dependent", + "description": "A person (other than you or your spouse) such as a child, parent or other relative, for whom you're entitled to claim a personal exemption on your federal tax return. If you're unsure, the IRS has a tool to help determine who you can claim as a dependent<\/a>. " + }, + { + "term": "Tax Equity and Fiscal Responsibility Act", + "description": "A more formal name for the Katie Beckett Program<\/a>." + }, + { + "term": "Tax Penalty", + "description": "An informal name for the penalty you may pay if you go without health insurance, known as the Individual Shared Responsibility Payment<\/a>." + }, + { + "term": "TEFRA", + "description": "The acronym for the Tax Equity Fiscal Responsibility Act, also known as the Katie Beckett Program<\/a>." + }, + { + "term": "Temporary Cash Assistance for Needy Families", + "description": "Provides cash assistance to needy families with dependent children when available resources do not fully address the family's needs and while preparing program participants for independence through work. Learn more about financial and technical eligibility requirements<\/a> for District residents." + }, + { + "term": "TTY", + "description": "A telephone and text communications protocol for people with hearing or speech difficulties. " + }, + { + "term": "UCR", + "description": "The acronym for Usual, Customary and Reasonable<\/a>." + }, + { + "term": "Unaffordable Coverage", + "description": "A standard applied to employer-sponsored health insurance<\/a>. See the definition for affordable coverage<\/a>." + }, + { + "term": "Urgent Care", + "description": "A situation that requires immediate medical attention, but isn't life threatening or a severe bodily injury. " + }, + { + "term": "US Department of Health and Human Services", + "description": "A cabinet-level federal department charged with protecting and enhancing the health and well-being of all Americans. The Affordable Care Act<\/a> is administered by HHS and many of its agencies." + }, + { + "term": "Usual, Customary and Reasonable", + "description": "The amount service providers<\/a> typically charge for a medical service in your geographic area. Sometimes it's the same as the allowed amount<\/a>, or is used by your insurance company to determine what an out-of-network<\/a> service provider will be paid for covered services<\/a> if your plan allows you to go out-of-network." + }, + { + "term": "Waiver of Coverage", + "description": "Applies only to employer-sponsored health plans<\/a>. Employees have the option of waiving medical coverage offered by their employer. Employees who waive coverage don\u2019t count towards the minimum participation requirements to create a health benefits program through DC Health Link. Employees who believe they may qualify for Medicaid<\/a> or help paying for coverage in the Individual & Family marketplace<\/a> should apply for financial assistance<\/a> before waiving coverage offered by an employer." + }, + { + "term": "Well-Baby\/Well-Child Care", + "description": "All health insurance<\/a> plans available through DC Health Link are required by federal law to include certain preventive services<\/a> for children under the age of 18 at no cost to you if you use an in-network<\/a> service provider<\/a>. This includes well-baby\/well-child visits to a doctor or nurse to make sure your child is healthy and developing normally, standard tests and assessments and recommended immunizations. The number of visits covered depends on your child's age, and does not include visits when your child is sick or injured. Check with your insurance company to understand what's covered and to get the most out of your benefits. " + }, + { + "term": "Wellness Program", + "description": "An optional incentive program sometimes offered by employers or insurance companies to improve health and fitness. Examples include programs that promote weight loss, smoking cessation, or preventive screenings. " + }, + { + "term": "Yearly Cost Estimate for Health Coverage", + "description": "A feature of DC Health Link's Plan Match<\/a> tool that shows the estimated amount you might pay in a given year for premiums<\/a>, deductibles<\/a>, copayments<\/a> and coinsurance<\/a> based on the number of people covered, your health status<\/a> and any expected medical procedures. " + }, + { + "term": "Zero Cost Sharing Plan", + "description": "Federally recognized Tribes<\/a> and Alaska Native<\/a> Claims Settlement Act (ANCSA) Corporation shareholders whose income is at or below 300 percent of the federal poverty level<\/a> are eligible for a zero cost sharing plan. With this plan, there are no copayments<\/a>, deductibles<\/a> or coinsurance<\/a> when care is received from Indian health care providers, which include health programs operated by the Indian Health Service<\/a>, tribes and tribal organizations, and urban Indian organizations. This is also true when receiving essential health benefits<\/a> through a DC Health Link plan, and you won't need a referral<\/a> from an Indian health care provider to receive these benefits. Zero cost sharing is available for any metal level<\/a> plan." + } + ] + + // this allows the :contains selector to be case insensitive + $.expr[":"].contains = $.expr.createPseudo(function (arg) { + return function (elem) { + return $(elem).text().toLowerCase().indexOf(arg.toLowerCase()) >= 0; + }; + }); + $(terms).each(function(i, term) { + // finds the first instance of the term on the page + // var matchingEl = $('.run-glossary:contains(' + term.term + ')').first(); + // if (matchingEl.length) { + // finds every instance of the term on the page + $('.run-glossary:contains(' + term.term + ')').each(function(i, matchingEl) { + // matches the exact or plural term + var termRegex = new RegExp("\\b(" + term.term + "[s]?)\\b", "gi"); + var popoverRegex = new RegExp("()"); + var description = term.description; + var newElement = ""; + $(matchingEl).html().toString().split(popoverRegex).forEach(function(text){ + // if a matching term has not yet been given a popover, replace it with the popover element + if (!text.includes("class=\"glossary\"")) { + newElement += text.replace(termRegex, '$1'); + } + else { + // if the term has already been given a popover, do not search it again + newElement += text; + } + $(matchingEl).html(newElement); + }); + }); + }); + $('[data-toggle="popover"]').popover(); + + // Because of the change to popover on click instead of hover, you need to + // manually close each popover. This will close others if you click to open one + // or click outside of a popover. + + $(document).click(function(e){ + if (e.target.className == 'glossary') { + e.preventDefault(); + $('.glossary').not($(e.target)).popover('hide'); + } + else if (!$(e.target).parents('.popover').length) { + $('.glossary').popover('hide'); + } + }); + + + //$.ajax({ + // cache: true, + // type: 'json', + // url: 'https://dchealthlink.com/glossary/json' + //}).done(function(data, textStatus, jqXHR) { + //}); + } +} + + +function hideGlossaryPopovers() { + $('.glossary').popover('hide'); +} diff --git a/app/javascript/components/financial_assistance/income.js b/app/javascript/components/financial_assistance/income.js new file mode 100644 index 00000000000..a0027e7da60 --- /dev/null +++ b/app/javascript/components/financial_assistance/income.js @@ -0,0 +1,1587 @@ +function stopEditingIncome() { + shouldShowEndDateWarningModal = false; + // remove disabled style from drivers, instructions, and other income kinds + $( + '.driver-question, .driver-question a, .instruction-row, .income, .other-income-kind, .unemployment-income' + ).removeClass('disabled'); + // enable inputs on drivers, instructions, and income kinds - except for submit (save) buttons as this would enable the submit button in the dummy forms, and fake-disabled-inputs as they should never be enabled + $( + '.driver-question input, .instruction-row input, .income input:not(":input[type=submit], .fake-disabled-input"), .other-income-kind input:not(":input[type=submit], .fake-disabled-input"), .unemployment-income input:not(":input[type=submit], .fake-disabled-input")' + ).removeAttr('disabled'); + // enable "Add New" income buttons + $( + '#new-unemployment-income, #new-ai-an-income, .new-income, .add_new_other_income_kind' + ).removeAttr('disabled'); + $('a.interaction-click-control-add-more').removeClass('hide'); + $("a[class*='income-edit'], a[class*='income-delete']").removeClass( + 'disabled' + ); // legacy + + // enable nav + $('#nav-buttons a').removeClass('disabled'); + $('.col-md-3 > .interaction-click-control-continue').removeClass('disabled'); // legacy +} + +function startEditingIncome(income_kind) { + shouldShowEndDateWarningModal = true; + // apply disabled style to drivers, instructions, and other income kinds not being edited + $( + '.driver-question, .driver-question a, .instruction-row, .income:not(#' + + income_kind + + '), .other-income-kind:not(#' + + income_kind + + '), .unemployment-income:not(#' + + income_kind + + ')' + ).addClass('disabled'); + // disable inputs on drivers, instructions, and other income kinds not being edited - except for submit (save) buttons as some form types require them to be enabled on edit/create + $( + '.driver-question input, .instruction-row input, .income:not(#' + + income_kind + + ') input:not(":input[type=submit]"), .other-income-kind:not(#' + + income_kind + + ') input:not(":input[type=submit]"), .unemployment-income:not(#' + + income_kind + + ') input:not(":input[type=submit]")' + ).attr('disabled', true); + // disable "Add New" income buttons + $( + '#new-unemployment-income, #new-ai-an-income, .new-income, .add_new_other_income_kind' + ).attr('disabled', true); + $('a.interaction-click-control-add-more').addClass('hide'); // legacy + + // disable all income edit and edit buttons on created incomes + $("a[class*='income-edit'], a[class*='income-delete']").addClass('disabled'); + + // disable nav + $('#nav-buttons a').addClass('disabled'); + $('.col-md-3 > .interaction-click-control-continue').addClass('disabled'); // legacy +} + +function checkDate(income_id) { + var startDate = $('#start_on_' + income_id); + var endDate = $('#end_on_' + income_id); + + if (endDate && new Date(endDate.val()) <= new Date(startDate.val())) { + alert('The end date must be after the start date.'); + endDate.val(''); + window.event.preventDefault(); + } +} + +$(document).on('submit', 'form[data-income-id]', function () { + checkDate($(this).data('income-id')); +}); + +$(document).on( + 'change', + 'form[data-income-id] input[type="date"]', + function () { + var form = $(this).parents('form'); + if (form.data('income-and-deduction-date-warning-flag')) { + validateDateWarnings(form.data('income-id')); + } + } +); + +function currentlyEditing() { + return ( + $('.interaction-click-control-continue').hasClass('disabled') || + $('#nav-buttons a').hasClass('disabled') + ); +} + +function deleteIncomes(kind) { + const requests = $(kind) + .find('.other-incomes-list > .other-income') + .map(function (_, income) { + return $.ajax({ + type: 'DELETE', + url: $(income).attr('id').replace('other_income_', ''), + success: function () { + $(income).remove(); + }, + }); + }); + + $.when.apply($, requests).done(function () { + const args = [].slice.apply(arguments); + const responses = requests.length == 1 ? [args] : args; + + if ( + responses.every(function (response) { + return response[1] == 'success'; + }) + ) { + $(kind).find('input[type="checkbox"]').prop('checked', false); + $(kind) + .find('[class^="interaction-click-control-add-more"]') + .addClass('hidden'); + $(kind).find('.new-other-income-form').addClass('hidden'); + $(kind).find('.add-more-link').addClass('hidden'); + } + }); +} + +/** + * Clone, strip of dummy attributes, unhide, and append a new income form to the income list. + * Each income type owns a permananently-hidden new income form which is used here to display the new income form. + * To prevent Multiple Form Label accessibility errors, the dummy form owns its own unique dummy id to tie to labels, + * which is processed here to remove the dummy suffix from all (defined & DOM-generated) attributes. + * @param {JQuery} newIncomeFormEl The dummy form to process. + * @param {JQuery} incomeListEl The income list to append the cloned form to. + * @return {JQuery} The processed new income form. + */ +function generateNewForm(newIncomeFormEl, incomeListEl) { + const clonedForm = newIncomeFormEl.clone(true, true); + const attrs = ['id', 'class', 'for']; + attrs.forEach(function (attr) { + const els = clonedForm.find('[' + attr + '*="dummy"]'); + $(els).each(function () { + const dummyAttr = $(this).attr(attr); + $(this).attr(attr, dummyAttr.replace('dummy', '')); + }); + }); + clonedForm.removeClass('hidden').appendTo(incomeListEl); + + return clonedForm; +} + +document.addEventListener('turbolinks:load', function () { + var faWindow = $('.incomes'); + if ( + $( + '.incomes-list, .other-incomes-list, .unemployment-incomes .ai-an-incomes' + ).length + ) { + $(faWindow).bind('beforeunload', function (e) { + if ( + !currentlyEditing() || + $('#unsavedIncomeChangesWarning:visible').length + ) + return undefined; + + (e || faWindow.event).returnValue = + 'You have an unsaved income, are you sure you want to proceed?'; //Gecko + IE + return 'You have an unsaved income, are you sure you want to proceed?'; + }); + + $('a[href]:not(.disabled)').off('click'); + $('a[href]:not(.disabled)').on('click', function (e) { + if (currentlyEditing()) { + e.preventDefault(); + var self = this; + + $('#unsavedIncomeChangesWarning').modal('show'); + $('button#leave').on('click', function () { + // these two lines are necessary to prevent the modal from showing again + $('.interaction-click-control-continue').removeClass('disabled'); + $('#nav-buttons a').removeClass('disabled'); + + // re-triggering the click as navigating based on the href got flagged in security check + self.click(); + }); + + return false; + } else return true; + }); + + var typingTimer; + const doneTypingInterval = 500; + $('.end-on-field').on('change', function () { + clearTimeout(typingTimer); + var endDateWarning = $('#end_date_warning_modal'); + typingTimer = setTimeout(function () { + if (shouldShowEndDateWarningModal) { + endDateWarning.addClass('show'); + endDateWarning.removeClass('hidden'); + endDateWarning.modal('show'); + shouldShowEndDateWarningModal = false; + } + }, doneTypingInterval); + }); + + /* Saving Responses to Job Income & Self Employment Driver Questions */ + $( + '#has_job_income_true, #has_job_income_false, #has_self_employment_income_true, #has_self_employment_income_false' + ).on('change', function (e) { + var attributes = {}; + attributes[$(this).attr('name')] = $(this).val(); + $.ajax({ + type: 'POST', + url: window.location.pathname.replace('/incomes', ''), + data: { financial_assistance_applicant: attributes }, + success: function (response) {}, + }); + }); + + /* Saving Responses to Other Income Driver Questions */ + $( + '#has_other_income_true, #has_other_income_false, #has_unemployment_income_true, #has_unemployment_income_false, #has_american_indian_alaskan_native_income_true, #has_american_indian_alaskan_native_income_false' + ).on('change', function (e) { + var attributes = {}; + attributes[$(this).attr('name')] = $(this).val(); + $.ajax({ + type: 'POST', + url: window.location.pathname + .replace('/incomes', '') + .replace('/other', ''), + data: { financial_assistance_applicant: attributes }, + success: function (response) {}, + }); + }); + + /* DELETING all Job Incomes on selcting 'no' on Driver Question */ + $('#has_job_income_false').on('change', function (e) { + var self = this; + //$('#DestroyExistingJobIncomesWarning').modal('show'); + if ($('.incomes-list:not(.self-employed-incomes-list) .income').length) { + e.preventDefault(); + // prompt to delete all these dedcutions + $('#destroyAllJobIncomes').modal(); + $('#destroyAllJobIncomes .modal-cancel-button').off('click'); + $('#destroyAllJobIncomes .modal-cancel-button').on( + 'click', + function (e) { + $('#destroyAllJobIncomes').modal('hide'); + $('#has_job_income_true').prop('checked', true).trigger('change'); + } + ); + + $('#destroyAllJobIncomes .modal-continue-button').off('click'); + $('#destroyAllJobIncomes .modal-continue-button').on( + 'click', + function (e) { + $('#destroyAllJobIncomes').modal('hide'); + //$(self).prop('checked', false); + $('#self-employed-income').addClass('hidden'); + $('#job_income') + .find('.incomes-list > .income') + .each(function (i, job_income) { + var url = $(job_income) + .attr('id') + .replace('income_', 'incomes/'); + $(job_income).remove(); + $.ajax({ + type: 'DELETE', + url: url, + }); + }); + } + ); + } + }); + + /* DELETING all American Indian/Alaskan Native Incomes on selcting 'no' on Driver Question */ + $('#has_american_indian_alaskan_native_income_false').on( + 'change', + function (e) { + var self = this; + //$('#DestroyExistingJobIncomesWarning').modal('show'); + if ( + $('.ai-an-incomes-list:not(.other-incomes-list) .ai-an-income').length + ) { + e.preventDefault(); + // prompt to delete all these dedcutions + $('#destroyAllAIANIncomes').modal(); + + $('#destroyAllAIANIncomes .modal-cancel-button').off('click'); + $('#destroyAllAIANIncomes .modal-cancel-button').on( + 'click', + function (e) { + $('#destroyAllAIAN').modal('hide'); + $('#has_american_indian_alaskan_native_income_true') + .prop('checked', true) + .trigger('change'); + } + ); + + $('#destroyAllAIANIncomes .modal-continue-button').off('click'); + $('#destroyAllAIANIncomes .modal-continue-button').on( + 'click', + function (e) { + $('#destroyAllAIANIncomes').modal('hide'); + //$(self).prop('checked', false); + + $('#ai_an_income') + .find('.ai-an-incomes-list > .ai-an-income') + .each(function (i, ai_an_income) { + var url = $(ai_an_income) + .attr('id') + .replace('financial_assistance_income_', ''); + $(ai_an_income).remove(); + $.ajax({ + type: 'DELETE', + url: url, + success: function () { + $(ai_an_income).remove(); + $('#add-more-link-ai').addClass('hidden'); + $('a.interaction-click-control-add-more').addClass( + 'hide' + ); + }, + }); + }); + } + ); + } + } + ); + + /* DELETING all Job Incomes on selcting 'no' on Driver Question */ + $('#has_unemployment_income_false').on('change', function (e) { + var self = this; + stopEditingIncome(); + //$('#DestroyExistingJobIncomesWarning').modal('show'); + if ( + $( + '.unemployment-incomes-list:not(.other-incomes-list) .unemployment-income' + ).length + ) { + e.preventDefault(); + // prompt to delete all these dedcutions + $('#destroyAllUnemploymentIncomes').modal('show'); + + $('#destroyAllUnemploymentIncomes .modal-cancel-button').off('click'); + $('#destroyAllUnemploymentIncomes .modal-cancel-button').on( + 'click', + function (e) { + $('#destroyAllUnemploymentIncomes').modal('hide'); + $('#has_unemployment_income_true') + .prop('checked', true) + .trigger('change'); + } + ); + + $('#destroyAllUnemploymentIncomes .modal-continue-button').off('click'); + $('#destroyAllUnemploymentIncomes .modal-continue-button').on( + 'click', + function (e) { + $('#destroyAllUnemploymentIncomes').modal('hide'); + //$(self).prop('checked', false); + + $('#unemployment_income') + .find('.unemployment-incomes-list > .unemployment-income') + .each(function (i, unemployment_income) { + var url = $(unemployment_income) + .attr('id') + .replace('income_', ''); + $.ajax({ + type: 'DELETE', + url: url, + success: function () { + $(unemployment_income).remove(); + $('#add-more-link-unemployment').addClass('hidden'); + $('a.interaction-click-control-add-more').addClass('hide'); + }, + }); + }); + } + ); + } + }); + + /* DELETING all Self Employment Incomes on selcting 'no' on Driver Question */ + $('#has_self_employment_income_false').on('change', function (e) { + self = this; + //$('#DestroyExistingJobIncomesWarning').modal('show'); + if ($('.self-employed-incomes-list .income').length) { + e.preventDefault(); + // prompt to delete all these dedcutions + $('#destroyAllSelfEmploymentIncomes').modal(); + + $('#destroyAllSelfEmploymentIncomes .modal-cancel-button').off('click'); + $('#destroyAllSelfEmploymentIncomes .modal-cancel-button').on( + 'click', + function (e) { + $('#destroyAllSelfEmploymentIncomes').modal('hide'); + $('#has_self_employment_income_true') + .prop('checked', true) + .trigger('change'); + } + ); + + $('#destroyAllSelfEmploymentIncomes .modal-continue-button').off( + 'click' + ); + $('#destroyAllSelfEmploymentIncomes .modal-continue-button').on( + 'click', + function (e) { + $('#destroyAllSelfEmploymentIncomes').modal('hide'); + //$(self).prop('checked', false); + + $('#self_employed_incomes') + .find('.self-employed-incomes-list > .income') + .each(function (i, job_income) { + var url = $(job_income) + .attr('id') + .replace('income_', 'incomes/'); + $(job_income).remove(); + $.ajax({ + type: 'DELETE', + url: url, + }); + }); + } + ); + } + }); + + /* edit existing incomes */ + $('.incomes-list').on( + 'click', + 'a.income-edit:not(.disabled)', + function (e) { + e.preventDefault(); + var incomeEl = $(this).parents('.income'); + incomeEl.find('.display-income').addClass('hidden'); + incomeEl.find('.income-edit-form').removeClass('hidden'); + if (!disableSelectric) { + $(incomeEl).find('select').selectric(); + } + $(incomeEl).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + startEditingIncome($(this).parents('.income').attr('id')); + } + ); + + /* destroy existing job incomes */ + $('.incomes-list').on( + 'click', + 'a.income-delete:not(.disabled)', + function (e) { + var self = this; + e.preventDefault(); + $('#DestroyJobIncomeWarning').modal(); + + $('#DestroyJobIncomeWarning .modal-cancel-button').off('click'); + $('#DestroyJobIncomeWarning .modal-cancel-button').on( + 'click', + function (e) { + $('#DestroyJobIncomeWarning').modal('hide'); + } + ); + + $('#DestroyJobIncomeWarning .modal-continue-button').off('click'); + $('#DestroyJobIncomeWarning .modal-continue-button').on( + 'click', + function (e) { + $('#DestroyJobIncomeWarning').modal('hide'); + $(self).parents('.income').remove(); + + var url = $(self) + .parents('.income') + .attr('id') + .replace('income_', 'incomes/'); + $.ajax({ + type: 'delete', + url: url, + }); + } + ); + } + ); + + /* destroy existing Self Employed Incomes */ + $('.self-employed-incomes-list').on( + 'click', + 'a.self-employed-income-delete:not(.disabled)', + function (e) { + var self = this; + e.preventDefault(); + $('#DestroySelfEmplyedIncomeWarning').modal(); + + $('#DestroySelfEmplyedIncomeWarning .modal-cancel-button').off('click'); + $('#DestroySelfEmplyedIncomeWarning .modal-cancel-button').on( + 'click', + function (e) { + $('#DestroySelfEmplyedIncomeWarning').modal('hide'); + } + ); + + $('#DestroySelfEmplyedIncomeWarning .modal-continue-button').off( + 'click' + ); + $('#DestroySelfEmplyedIncomeWarning .modal-continue-button').on( + 'click', + function (e) { + $('#DestroySelfEmplyedIncomeWarning').modal('hide'); + $(self).parents('.income').remove(); + + var url = $(self) + .parents('.income') + .attr('id') + .replace('income_', 'incomes/'); + $.ajax({ + type: 'delete', + url: url, + }); + } + ); + } + ); + + /* cancel income edits */ + $('.incomes-list').on('click', 'a.income-cancel', function (e) { + e.preventDefault(); + var incomeEl = $(this).parents('.income'); + $(this).parents('.new-income-form').addClass('hidden'); + incomeEl.find('.income-edit-form').addClass('hidden'); + incomeEl.find('.display-income').removeClass('hidden'); + + var incomeList = this.closest('.incomes-list'); + var incomeType = incomeList ? incomeList.parentNode.id : null; + if (incomeType == 'job_income') { + if ( + document.querySelectorAll( + '.incomes-list:not(.self-employed-incomes-list) .income' + ).length == 0 + ) { + $('.new-income').addClass('hidden'); + $('#has_job_income_false').prop('checked', true).trigger('change'); + } + } else if (incomeType == 'self_employed_incomes') { + if ( + document.querySelectorAll('.self-employed-incomes-list .income') + .length == 0 + ) { + $('.new-income-self-employed').addClass('hidden'); + $('#has_self_employment_income_false') + .prop('checked', true) + .trigger('change'); + } + } + + stopEditingIncome(); + $(this).parents('.new-income-form').remove(); + /* TODO: Handle unchecking boxes if there are no more incomes of that kind */ + }); + + $(document).on('click', 'a.other-income-cancel', function (e) { + e.preventDefault(); + stopEditingIncome(); + + var otherIncomeEl = $(this).parents('.other-income'); + if (otherIncomeEl.length) { + // canceling edit of existing income + otherIncomeEl.find('.other-income-show').removeClass('hidden'); + otherIncomeEl.find('.edit-other-income-form').addClass('hidden'); + } else { + // canceling edit of new income + if ( + !$(this).parents('.other-incomes-list').find('.other-income').length + ) { + // the kind for the canceled new income has no existing incomes + $(this) + .parents('.other-income-kind') + .find('input[type="checkbox"]') + .prop('checked', false); + $(this) + .parents('.other-income-kind') + .find('.add-more-link') + .addClass('hidden'); + $(this) + .parents('.other-income-kind') + .find('a.interaction-click-control-add-more') + .addClass('hide'); + } + $(this).parents('.new-other-income-form').remove(); + } + }); + + $(document).on('click', 'a.unemployment-income-cancel', function (e) { + e.preventDefault(); + stopEditingIncome(); + + var unemploymentIncomeEl = $(this).parents('.unemployment-income'); + if (unemploymentIncomeEl.length) { + // canceling edit of existing income + unemploymentIncomeEl + .find('.unemployment-income-show') + .removeClass('hidden'); + unemploymentIncomeEl + .find('.edit-unemployment-income-form') + .addClass('hidden'); + } else { + // canceling edit of new income + if ( + !$('.unemployment-incomes-list').find('.unemployment-income').length + ) { + // no other existing incomes + $('#add-more-link-unemployment').addClass('hidden'); + $('a.interaction-click-control-add-more').addClass('hide'); + + $('#has_unemployment_income_false') + .prop('checked', true) + .trigger('change'); + } + + $(this).parents('.new-unmployment-income-form').remove(); + } + }); + + $(document).on('click', 'a.ai-an-income-cancel', function (e) { + e.preventDefault(); + stopEditingIncome(); + + var aiAnIncomeEl = $(this).parents('ai-an-income'); + if (aiAnIncomeEl.length) { + // canceling edit of existing income + aiAnIncomeEl.find('.ai-an-income-show').removeClass('hidden'); + aiAnIncomeEl.find('.edit-ai-an-income-form').addClass('hidden'); + } else { + // canceling edit of new income + if (!$('.ai-an-incomes-list').find('.ai-an-income').length) { + // no other existing incomes + $('#add-more-link-ai').addClass('hidden'); + $('a.interaction-click-control-add-more').addClass('hide'); + $('#has_american_indian_alaskan_native_income_false') + .prop('checked', true) + .trigger('change'); + } + + $(this).parents('.new-ai-an-income-form').remove(); + } + }); + + // this index is to ensure duplicate hidden forms aren't saved on submit + var incomeIndex = 0; + /* new job incomes */ + $('.new-income').off('click'); + $('.new-income').on('click', function (e) { + e.preventDefault(); + startEditingIncome($(this).parents('.income').attr('id')); + var form = $(this).parents(); + if ($(this).parents('#job_income').children('.new-income-form').length) { + var newIncomeForm = $(this) + .parents('#job_income') + .children('.new-income-form'); + } else { + var newIncomeForm = $(this) + .parents('#self_employed_incomes') + .children('.new-income-form'); + } + + if ($(this).parents('#job_income').find('.incomes-list').length) { + var incomeListEl = $(this).parents('#job_income').find('.incomes-list'); + } else { + var incomeListEl = $(this) + .parents('#self_employed_incomes') + .find('.incomes-list'); + } + if (newIncomeForm.find('select').data('selectric')) + newIncomeForm.find('select').selectric('destroy'); + var clonedForm = generateNewForm(newIncomeForm, incomeListEl); + if ( + incomeListEl.children().length > 1 && + incomeListEl.children().first().attr('id') === 'hidden-income-form' + ) { + incomeListEl.children().first().remove(); + } + if (incomeIndex != 0) { + var previousForm = clonedForm.prev('.new-income-form'); + previousForm.remove(); + } + var length = incomeListEl.find('.income').length; + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + //$(newIncomeForm).find(".datepicker-js").datepicker({ dateFormat: 'mm/dd/yy', changeMonth: true, changeYear: true}); + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + clonedForm.find('.interaction-click-control-save').addClass('disabled'); + incomeIndex++; + }); + + // this index is to ensure duplicate hidden forms aren't saved on submit for unemployment incomes + var unemploymentIndex = 0; + /* new unemployment incomes */ + $('#new-unemployment-income').off('click'); + $('#new-unemployment-income').on('click', function (e) { + e.preventDefault(); + startEditingIncome($(this).parents('.unemployment-income').attr('id')); + var form = $(this).parents(); + var newIncomeForm = $(this) + .parents('#unemployment_income') + .children('.new-unemployment-income-form'); + var incomeListEl = $(this) + .parents('#unemployment_income') + .find('.unemployment-incomes-list'); + + if (newIncomeForm.find('select').data('selectric')) + newIncomeForm.find('select').selectric('destroy'); + const clonedForm = generateNewForm(newIncomeForm, incomeListEl); + if ( + incomeListEl.children().length > 1 && + incomeListEl.children().first().attr('id') === 'hidden-income-form' + ) { + incomeListEl.children().first().remove(); + } + if (unemploymentIndex != 0) { + var previousForm = clonedForm.prev('.new-unemployment-income-form'); + previousForm.remove(); + } + var length = incomeListEl.find('.unemployment-income').length; + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + clonedForm.find('.interaction-click-control-save').addClass('disabled'); + unemploymentIndex++; + }); + + /* new AI/AN incomes */ + $('#new-ai-an-income').off('click'); + $('#new-ai-an-income').on('click', function (e) { + e.preventDefault(); + startEditingIncome($(this).parents('.ai-an-income').attr('id')); + var form = $(this).parents(); + var newIncomeForm = $(this) + .parents('#ai_an_income') + .children('.new-ai-an-income-form'); + var incomeListEl = $(this) + .parents('#ai_an_income') + .find('.ai-an-incomes-list'); + + if (newIncomeForm.find('select').data('selectric')) + newIncomeForm.find('select').selectric('destroy'); + const clonedForm = generateNewForm(newIncomeForm, incomeListEl); + var length = incomeListEl.find('.ai-an-income').length; + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + clonedForm.find('.interaction-click-control-save').addClass('disabled'); + }); + + $('#has_job_income_true').off('click'); + $('#has_job_income_true').on('click', function (e) { + $('.new-income-job').removeClass('hidden'); + startEditingIncome($(this).parents('.income').attr('id')); + if ($('#job_income').children('.new-income-form').length) { + var newIncomeForm = $('#job_income').children('.new-income-form'); + } + + if ($('#job_income').find('.incomes-list').length) { + var incomeListEl = $('#job_income').find('.incomes-list'); + } + if (newIncomeForm.find('select').data('selectric')) + newIncomeForm.find('select').selectric('destroy'); + var clonedForm = generateNewForm(newIncomeForm, incomeListEl); + if ( + incomeListEl.children().length > 1 && + incomeListEl.children().first().attr('id') === 'hidden-income-form' + ) { + incomeListEl.children().first().remove(); + } + var length = incomeListEl.find('.income').length; + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + }); + $('#has_unemployment_income_true').off('click'); + $('#has_unemployment_income_true').on('click', function (e) { + startEditingIncome($(this).parents('.income').attr('id')); + if ( + $('#unemployment_income').children('.new-unemployment-income-form') + .length + ) { + var newIncomeForm = $('#unemployment_income').children( + '.new-unemployment-income-form' + ); + } + + if ($('#unemployment_income').find('.unemployment-incomes-list').length) { + var incomeListEl = $('#unemployment_income').find( + '.unemployment-incomes-list' + ); + } + if (newIncomeForm.find('select').data('selectric')) + newIncomeForm.find('select').selectric('destroy'); + if ( + !$('.unemployment-incomes-list').children( + '.new-unemployment-income-form' + ).length + ) { + var clonedForm = generateNewForm(newIncomeForm, incomeListEl); + } + var length = incomeListEl.find('.unemployment-income').length; + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + }); + + $('#has_american_indian_alaskan_native_income_true').off('click'); + $('#has_american_indian_alaskan_native_income_true').on( + 'click', + function (e) { + startEditingIncome($(this).parents('.income').attr('id')); + if ($('#ai_an_income').children('.new-ai-an-income-form').length) { + var newIncomeForm = $('#ai_an_income').children( + '.new-ai-an-income-form' + ); + } + + if ($('#ai_an_income').find('.ai-an-incomes-list').length) { + var incomeListEl = $('#ai_an_income').find('.ai-an-incomes-list'); + } + if (newIncomeForm.find('select').data('selectric')) + newIncomeForm.find('select').selectric('destroy'); + if ( + !$('.ai-an-incomes-list').children('.new-ai-an-income-form').length + ) { + var clonedForm = generateNewForm(newIncomeForm, incomeListEl); + } + var length = incomeListEl.find('.ai-an-income').length; + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + } + } + ); + + $('#has_self_employment_income_true').off('click'); + $('#has_self_employment_income_true').on('click', function (e) { + $('.new-income-self-employed').removeClass('hidden'); + startEditingIncome($(this).parents('.income').attr('id')); + if ($('#self_employed_incomes').children('.new-income-form').length) { + var newIncomeForm = $('#self_employed_incomes').children( + '.new-income-form' + ); + } + if ($('#self_employed_incomes').find('.incomes-list').length) { + var incomeListEl = $('#self_employed_incomes').find('.incomes-list'); + } + if (newIncomeForm.find('select').data('selectric')) + newIncomeForm.find('select').selectric('destroy'); + var clonedForm = generateNewForm(newIncomeForm, incomeListEl); + if ( + incomeListEl.children().length > 1 && + incomeListEl.children().first().attr('id') === 'hidden-self-income-form' + ) { + incomeListEl.children().first().remove(); + } + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + }); + + /* Condtional Display Job Income Question */ + if (!$('#has_job_income_true').is(':checked')) + $('#job_income').addClass('hidden'); + if (!$('#has_self_employment_income_true').is(':checked')) + $('#self_employed_incomes').addClass('hidden'); + if (!$('#has_other_income_true').is(':checked')) + $('.other_income_kinds').addClass('hidden'); + if (!$('#has_unemployment_income_true').is(':checked')) + $('#unemployment_income').addClass('hidden'); + if (!$('#has_american_indian_alaskan_native_income_true').is(':checked')) + $('#ai_an_income').addClass('hidden'); + + $('body').on('change', '#has_job_income_true', function () { + if ($('#has_job_income_true').is(':checked')) { + $('#job_income').removeClass('hidden'); + } else { + $('#job_income').addClass('hidden'); + } + }); + + $('body').on('change', '#has_job_income_false', function () { + if ($('#has_job_income_false').is(':checked')) { + $('#job_income').addClass('hidden'); + $('#new_income_form').remove(); + } else { + $('#job_income').removeClass('hidden'); + } + }); + + $('body').on('change', '#has_unemployment_income_true', function () { + if ($('#has_unemployment_income_true').is(':checked')) { + $('#unemployment_income').removeClass('hidden'); + } else { + $('#unemployment_income').addClass('hidden'); + } + }); + + $('body').on('change', '#has_unemployment_income_false', function () { + if ($('#has_unemployment_income_false').is(':checked')) { + $('#unemployment_income').addClass('hidden'); + } else { + $('#unemployment_income').removeClass('hidden'); + } + }); + + $('body').on( + 'change', + '#has_american_indian_alaskan_native_income_true', + function () { + if ( + $('#has_american_indian_alaskan_native_income_true').is(':checked') + ) { + $('#ai_an_income').removeClass('hidden'); + } else { + $('#ai_an_income').addClass('hidden'); + } + } + ); + + $('body').on( + 'change', + '#has_american_indian_alaskan_native_income_false', + function () { + if ( + $('#has_american_indian_alaskan_native_income_false').is(':checked') + ) { + $('#ai_an_income').addClass('hidden'); + } else { + $('#ai_an_income').removeClass('hidden'); + } + } + ); + + $('body').on('change', '#has_self_employment_income_true', function () { + if ($('#has_self_employment_income_true').is(':checked')) { + $('#self_employed_incomes').removeClass('hidden'); + } else { + $('#self_employed_incomes').addClass('hidden'); + } + }); + + $('body').on('change', '#has_self_employment_income_false', function () { + if ($('#has_self_employment_income_false').is(':checked')) { + $('#self_employed_incomes').addClass('hidden'); + } else { + $('#self_employed_incomes').removeClass('hidden'); + } + }); + + /* Condtional Display Other Income Question */ + $('body').on('change', '#has_other_income_true', function () { + if ($('#has_other_income_true').is(':checked')) { + $('.other_income_kinds').removeClass('hidden'); + } else { + $('.other_income_kinds').addClass('hidden'); + } + }); + + $('body').on('change', '#has_other_income_false', function () { + if ($('#has_other_income_false').is(':checked')) { + $('.other_income_kinds').addClass('hidden'); + } else { + $('.other_income_kinds').removeClass('hidden'); + } + }); + } +}); + +// otherincome checkbox fuctionality +$(document).on('turbolinks:load', function () { + function disableSave(form) { + form.find('.interaction-click-control-save').addClass('disabled'); + form.find('.interaction-click-control-save').attr('disabled', 'disabled'); + } + + function enableSave(form) { + form.find('.interaction-click-control-save').removeClass('disabled'); + form.find('.interaction-click-control-save').removeAttr('disabled'); + } + $(':input[required=""],:input[required]').on('change', function () { + var form = $(this).closest('form'); + if (validateForm(form)) { + enableSave(form); + } else { + disableSave(form); + } + }); + + function validateForm(form) { + var isValid = true; + // form.find('#financial_assistance_income_start_on, input[name*=financial_assistance_income[start_on]], input[name*=financial_assistance_income[end_on]]').each(function() { + // if ( $(this).val() == '' || $(this).val()=='0') + // isValid = false; + // }); + return isValid; + } + + // $(window).bind('beforeunload', function(e) { + // if (!currentlyEditing() || $('#unsavedIncomeChangesWarning:visible').length) + // return undefined; + + // (e || window.event).returnValue = 'You have an unsaved income, are you sure you want to proceed?'; //Gecko + IE + // return 'You have an unsaved income, are you sure you want to proceed?'; + // }); + $('input[name="other_income_kind"]').off('click'); + $('input[name="other_income_kind"]').on('click', function (e) { + var value = e.target.checked; + self = this; + if (value) { + // checked deduction kind + var newOtherIncomeFormEl = $(this) + .parents('.other-income-kind') + .children('.new-other-income-form') + .first(); + otherIncomeListEl = $(this) + .parents('.other-income-kind') + .find('.other-incomes-list'); + if (newOtherIncomeFormEl.find('select').data('selectric')) + newOtherIncomeFormEl.find('select').selectric('destroy'); + const clonedForm = generateNewForm( + newOtherIncomeFormEl, + otherIncomeListEl + ); + startEditingIncome($(this).parents('.other-income-kind').attr('id')); + if (!disableSelectric) { + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + $(clonedForm).find('select').selectric(); + } + } else if ( + !$(self) + .parents('.other-income-kind') + .find('.other-incomes-list > .other-income').length + ) { + // unchecked deduction kind with no created deductions + $(self).parents('.other-income-kind').find('.other-incomes-list').empty(); + $(self) + .parents('.other-income-kind') + .find('.add-more-link') + .addClass('hidden'); + stopEditingIncome(); + } else { + // unchecked deduction kind with created deductions + // prompt to delete all these deductions + e.preventDefault(); + $('#destroyAllOtherIncomesOfKind').modal(); + $('#destroyAllOtherIncomesOfKind .modal-cancel-button').off('click'); + $('#destroyAllOtherIncomesOfKind .modal-cancel-button').on( + 'click', + function (e) { + $('#destroyAllOtherIncomesOfKind').modal('hide'); + } + ); + + $('#destroyAllOtherIncomesOfKind .modal-continue-button').off('click'); + $('#destroyAllOtherIncomesOfKind .modal-continue-button').on( + 'click', + function (e) { + $('#destroyAllOtherIncomesOfKind').modal('hide'); + stopEditingIncome(); + deleteIncomes($(self).parents('.other-income-kind')); + } + ); + } + }); + + /* DELETING all Other Incomes on selecting 'no' on Driver Question */ + $('#has_other_income_false').on('change', function (e) { + var self = this; + + let other_incomes_exists = false; + document + .querySelectorAll('.other_income_kinds .other-income-kind') + .forEach(function (kind) { + if (kind.querySelector('input[type="checkbox"]').checked) { + other_incomes_exists = true; + } + }); + + if (other_incomes_exists) { + e.preventDefault(); + $('#destroyAllOtherIncomes').modal(); + $('#destroyAllOtherIncomes .modal-cancel-button').off('click'); + $('#destroyAllOtherIncomes .modal-cancel-button').on( + 'click', + function (e) { + $('#destroyAllOtherIncomes').modal('hide'); + $('#has_other_income_true').prop('checked', true).trigger('change'); + } + ); + + $('#destroyAllOtherIncomes .modal-continue-button').off('click'); + $('#destroyAllOtherIncomes .modal-continue-button').on( + 'click', + function (e) { + $('#destroyAllOtherIncomes').modal('hide'); + + $('.other_income_kinds .other-income-kind').each(function (_, kind) { + deleteIncomes($(kind)); + }); + } + ); + } + }); + + // this index is to ensure duplicate hidden forms aren't saved on submit + var otherIndex = 0; + $(document).on('click', '.add_new_other_income_kind', function (e) { + var newOtherIncomeFormEl = $(this) + .parents('.other-income-kind') + .children('.new-other-income-form'), + otherIncomeListEl = $(this) + .parents('.other-income-kind') + .find('.other-incomes-list'); + if (newOtherIncomeFormEl.find('select').data('selectric')) + newOtherIncomeFormEl.find('select').selectric('destroy'); + const clonedForm = generateNewForm(newOtherIncomeFormEl, otherIncomeListEl); + if ( + otherIncomeListEl.children().length > 1 && + otherIncomeListEl.children().first().attr('id') === + 'hidden-other-income-form' + ) { + incomeListEl.children().first().remove(); + } + if (otherIndex != 0) { + var previousForm = clonedForm.prev('.new-other-income-form'); + previousForm.remove(); + } + startEditingIncome($(this).parents('.other-income-kind').attr('id')); + if (!disableSelectric) { + $(clonedForm).find('select').selectric(); + } + $(clonedForm).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + e.stopImmediatePropagation(); + otherIndex++; + }); + + /* edit existing other income */ + $('.other-incomes-list').off('click', 'a.other-income-edit:not(.disabled)'); + $('.other-incomes-list').on( + 'click', + 'a.other-income-edit:not(.disabled)', + function (e) { + e.preventDefault(); + var otherIncomeEl = $(this).parents('.other-income'); + otherIncomeEl.find('.other-income-show').addClass('hidden'); + otherIncomeEl.find('.edit-other-income-form').removeClass('hidden'); + startEditingIncome($(this).parents('.other-income-kind').attr('id')); + + $(otherIncomeEl).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + } + ); + + /* destroy existing other income */ + $('.other-incomes-list').on( + 'click', + 'a.other-income-delete:not(.disabled)', + function (e) { + var self = this; + e.preventDefault(); + $('#destroyOtherIncome').modal(); + + $('#destroyOtherIncome .modal-cancel-button').off('click'); + $('#destroyOtherIncome .modal-cancel-button').on('click', function (e) { + $('#destroyOtherIncome').modal('hide'); + }); + + $('#destroyOtherIncome .modal-continue-button').off('click'); + $('#destroyOtherIncome .modal-continue-button').on('click', function (e) { + $('#destroyOtherIncome').modal('hide'); + + var url = $(self) + .parents('.other-income') + .attr('id') + .replace('financial_assistance_income_', ''); + $.ajax({ + type: 'DELETE', + url: url, + dataType: 'script', + success: function () { + if ( + $(self).parents('.other-incomes-list').find('.other-income') + .length == 1 + ) { + $(self) + .parents('.other-income-kind') + .find('input[type="checkbox"]') + .prop('checked', false); + $(self) + .parents('.other-income-kind') + .find('.add-more-link') + .addClass('hidden'); + $(self) + .parents('.other-income-kind') + .find('a.interaction-click-control-add-more') + .addClass('hide'); + } + $(self).parents('.other-income').remove(); + }, + }); + }); + } + ); + + /* cancel other income edits */ + $('.other-incomes-list').off('click', 'a.other-income-cancel'); + $('.other-incomes-list').on('click', 'a.other-income-cancel', function (e) { + e.preventDefault(); + stopEditingIncome(); + + var otherIncomeEl = $(this).parents('.other-income'); + if (otherIncomeEl.length) { + // canceling edit of existing income + otherIncomeEl.find('.other-income-show').removeClass('hidden'); + otherIncomeEl.find('.edit-other-income-form').addClass('hidden'); + } else { + // canceling edit of new income + if ( + !$(this).parents('.other-incomes-list').find('.other-income').length + ) { + // the kind for the canceled new income has no existing incomes + $(this) + .parents('.other-income-kind') + .find('input[type="checkbox"]') + .prop('checked', false); + $(this) + .parents('.other-income-kind') + .find('.add-more-link') + .addClass('hidden'); + $(this) + .parents('.other-income-kind') + .find('a.interaction-click-control-add-more') + .addClass('hide'); + } + $(this).parents('.new-other-income-form').remove(); + } + }); + + /* edit existing unemployment income */ + $('.unemployment-incomes-list').off( + 'click', + 'a.unemployment-income-edit:not(.disabled)' + ); + $('.unemployment-incomes-list').on( + 'click', + 'a.unemployment-income-edit:not(.disabled)', + function (e) { + e.preventDefault(); + + var unemploymentIncomeEl = $(this).parents('.unemployment-income'); + unemploymentIncomeEl.find('.unemployment-income-show').addClass('hidden'); + unemploymentIncomeEl + .find('.edit-unemployment-income-form') + .removeClass('hidden'); + + startEditingIncome($(this).parents('.unemployment-income').attr('id')); + + $(unemploymentIncomeEl).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + } + ); + + /* destroy existing unemployment income */ + $('.unemployment-incomes-list').off( + 'click', + 'a.unemployment-income-delete:not(.disabled)' + ); + $('.unemployment-incomes-list').on( + 'click', + 'a.unemployment-income-delete:not(.disabled)', + function (e) { + var self = this; + e.preventDefault(); + $('#destroyUnemploymentIncome').modal(); + + $('#destroyUnemploymentIncome .modal-cancel-button').off('click'); + $('#destroyUnemploymentIncome .modal-cancel-button').on( + 'click', + function (e) { + $('#destroyUnemploymentIncome').modal('hide'); + } + ); + + $('#destroyUnemploymentIncome .modal-continue-button').off('click'); + $('#destroyUnemploymentIncome .modal-continue-button').on( + 'click', + function (e) { + $('#destroyUnemploymentIncome').modal('hide'); + + var url = $(self) + .parents('.unemployment-income') + .attr('id') + .replace('financial_assistance_income_', ''); + $.ajax({ + type: 'DELETE', + url: url, + dataType: 'script', + success: function () { + $(self).parents('.unemployment-income').remove(); + if ( + !$('.unemployment-incomes-list').find('.unemployment-income') + .length + ) { + // no other existing incomes + $('#add-more-link-unemployment').addClass('hidden'); + $('a.interaction-click-control-add-more').addClass('hide'); + $('#has_unemployment_income_false') + .prop('checked', true) + .trigger('change'); + } + }, + }); + } + ); + } + ); + + /* cancel unemployment income edits */ + $('.unemployment-incomes-list').on( + 'click', + 'a.unemployment-income-cancel', + function (e) { + e.preventDefault(); + stopEditingIncome(); + + var unemploymentIncomeEl = $(this).parents('.unemployment-income'); + if (unemploymentIncomeEl.length) { + $(this) + .closest('.unemployment-income-kind') + .find('a#add_new_unemployment_income_kind') + .removeClass('hidden'); + unemploymentIncomeEl + .find('.unemployment-income-show') + .removeClass('hidden'); + unemploymentIncomeEl + .find('.edit-unemployment-income-form') + .addClass('hidden'); + } else { + if ( + !$(this).parents( + '.unemployment-incomes-list > div.unemployment-income' + ).length + ) { + $(this) + .parents('.unemployment-income-kind') + .find('input[type="checkbox"]') + .prop('checked', false); + $(this) + .closest('.unemployment-income-kind') + .find('a#add_new_unemployment_income_kind') + .addClass('hidden'); + } + $(this).parents('.new-unemployment-income-form').remove(); + $(this).parents('.edit-unemployment-income-form').remove(); + } + } + ); + + /* edit existing AI/AN income */ + $('.ai-an-incomes-list').on( + 'click', + 'a.ai-an-income-edit:not(.disabled)', + function (e) { + e.preventDefault(); + var aianIncomeEl = $(this).parents('.ai-an-income'); + aianIncomeEl.find('.ai-an-income-show').addClass('hidden'); + aianIncomeEl.find('.edit-ai-an-income-form').removeClass('hidden'); + startEditingIncome($(this).parents('.ai-an-income-kind').attr('id')); + + $(aianIncomeEl).find('.datepicker-js').datepicker({ + dateFormat: 'mm/dd/yy', + changeMonth: true, + changeYear: true, + yearRange: '-110:+110', + }); + } + ); + + /* destroy existing AI/AN income */ + $('.ai-an-incomes-list').on( + 'click', + 'a.ai-an-income-delete:not(.disabled)', + function (e) { + var self = this; + e.preventDefault(); + $('#destroyAIANIncome').modal(); + + $('#destroyAIANIncome .modal-cancel-button').off('click'); + $('#destroyAIANIncome .modal-cancel-button').on('click', function (e) { + $('#destroyAIANIncome').modal('hide'); + }); + + $('#destroyAIANIncome .modal-continue-button').off('click'); + $('#destroyAIANIncome .modal-continue-button').on('click', function (e) { + $('#destroyAIANIncome').modal('hide'); + + var url = $(self) + .parents('.ai-an-income') + .attr('id') + .replace('financial_assistance_income_', ''); + $.ajax({ + type: 'DELETE', + url: url, + dataType: 'script', + success: function () { + $(self).parents('.ai-an-income').remove(); + if (!$('.ai-an-incomes-list').find('.ai-an-income').length) { + // no other existing incomes + $('#add-more-link-ai').addClass('hidden'); + $('a.interaction-click-control-add-more').addClass('hide'); + $('#has_american_indian_alaskan_native_income_false') + .prop('checked', true) + .trigger('change'); + } + }, + }); + }); + } + ); + + /* cancel AI/AN income edits */ + $('.ai-an-incomes-list').on('click', 'a.ai-an-income-cancel', function (e) { + e.preventDefault(); + stopEditingIncome(); + + var aianIncomeEl = $(this).parents('.ai-an-income'); + if (aianIncomeEl.length) { + $(this) + .closest('.ai-an-income-kind') + .find('a#add_new_ai_an_income_kind') + .removeClass('hidden'); + aianIncomeEl.find('.ai-an-income-show').removeClass('hidden'); + aianIncomeEl.find('.edit-ai-an-income-form').addClass('hidden'); + } else { + if (!$(this).parents('.ai-an-incomes-list > div.ai-an-income').length) { + $(this) + .parents('.ai-an-income-kind') + .find('input[type="checkbox"]') + .prop('checked', false); + $(this) + .closest('.ai-an-income-kind') + .find('a#add_new_ai_an_income_kind') + .addClass('hidden'); + } + $(this).parents('.new-ai-an-income-form').remove(); + $(this).parents('.edit-ai-an-income-form').remove(); + } + }); + // disable save button logic + function disableSave(form) { + form.find('.interaction-click-control-save').addClass('disabled'); + form.find('.interaction-click-control-save').attr('disabled', 'disabled'); + } + + function enableSave(form) { + form.find('.interaction-click-control-save').removeClass('disabled'); + form.find('.interaction-click-control-save').removeAttr('disabled'); + } + + $(':input[required]').on('keyup change', function () { + var form = $(this).closest('form'); + if (validateForm(form)) { + enableSave(form); + } else { + disableSave(form); + } + }); + + function validateForm(form) { + var isValid = true; + form.find(':input[required]').each(function () { + if ( + $(this).val() == '' || + $(this).val() == '0.00' || + $(this).val() == 'Choose' + ) { + isValid = false; + } + }); + return isValid; + } + + $(document).on('focus', '.new-income-form .phone_number', function () { + $(this).mask('(000) 000-0000'); + }); + + $('body').on( + 'keyup keydown keypress', + '#income_employer_phone_full_phone_number', + function (e) { + var key = e.which || e.keyCode || e.charCode; + $(this).mask('(000) 000-0000'); + return ( + key == 8 || + key == 9 || + key == 46 || + (key >= 37 && key <= 40) || + (key >= 48 && key <= 57) || + (key >= 96 && key <= 105) + ); + } + ); + + $('body').on( + 'keyup keydown keypress', + '#income_employer_address_zip', + function (e) { + var key = e.which || e.keyCode || e.charCode; + $(this).attr('maxlength', '5'); + return ( + key == 8 || + key == 9 || + key == 46 || + (key >= 37 && key <= 40) || + (key >= 48 && key <= 57) || + (key >= 96 && key <= 105) + ); + } + ); +}); diff --git a/app/javascript/components/financial_assistance/inline_replacements.js b/app/javascript/components/financial_assistance/inline_replacements.js new file mode 100644 index 00000000000..9991cc88df7 --- /dev/null +++ b/app/javascript/components/financial_assistance/inline_replacements.js @@ -0,0 +1,142 @@ +function init_faa_immigration_doc_fields() { + $(document).ready(function(){ + if ($("[data-vlp-doc-subject]").length) { + showOnly($("[data-vlp-doc-subject]").data('vlp-doc-subject')); + } + }); +} + + +function init_faa_dependent_form() { + // components/financial_assistance/app/views/financial_assistance/applicants/_dependent_form.html.erb + var bs4 = document.documentElement.dataset.bs4 + var immigrationDocWarning = immigrationDocWarning || false; + + if (bs4) { + function disableButton(button) { + button.attr('disabled', 'disabled') + .addClass('disabled'); + }; + + function enableButton(button) { + button.removeAttr('disabled') + .removeClass('disabled'); + }; + + $(document).ready(function() { + $.inputMasks(); + $('.field_with_errors > *').unwrap(); + // enable confirm member button + enableButton($('#confirm-dependent')); + + $('#applicant_same_with_primary').click(function(){ + if($(this).is(':checked')){ + $('#applicant-home-address-area').addClass("hidden"); + } else { + $('#applicant-home-address-area').removeClass("hidden"); + } + }); + + $("#dependent_first_name").change(function() { + var text = $("#dependent_first_name").val() == '' ? "This person" : $("#dependent_first_name").val() + $("#is_applying_coverage_value_dep").text("Does "+ text +" need coverage? *"); + $("#is_applying_coverage_value_dep_1").text(text); + }); + }); + + $(document).off('click', '#confirm-dependent'); + $(document).on('click', '#confirm-dependent', function(e) { + const $button = $(this); + e.preventDefault(); + // disable confirm member button + disableButton($button); + // submit the form + submitForm(); + + function submitForm() { + if ($("input#applicant_same_with_primary").is(":checked")) { + $("#dependent-address input.required, dependent-address select.required, #dependent-address .address_required").removeAttr('required'); + } else { + $("#dependent-address input.required, dependent-address select.required, #dependent-address .address_required").attr('required', true); + } + + // addressChange pop up Confirmation button + enableButton($(".btn-confirmation")); + + var form = $('#new_applicant')[0] || $('#new_dependent')[0] || $('#edit_dependent')[0]; + + if (!$("input#applicant_same_with_primary").is(":checked")) { + $('#addressChangeConfirmation') + .modal({ + show: true, + backdrop: false + }) + .one('hidden.bs.modal', function (e) { + let param = $(this).data('customParam'); + if (param && param.disable) { + return; + } + enableButton($button); + }); + } else { + PersonValidations.manageRequiredValidations($('#confirm-dependent')); + } + + // enable confirm member button + if (!form.checkValidity()){ + enableButton($button); + } + if ($('#showWarning').length && !$('#showWarning').hasClass('hidden')) { + if (!immigrationDocWarning) { + immigrationDocWarning = true; + enableButton($button); + } + } + } + }); + } else { + $(document).ready(function() { + $.inputMasks(); + + $('.field_with_errors > *').unwrap(); + Freebies.floatlabels(); + if($("input#applicant_same_with_primary").is(":checked")){ + $("#dependent-address input, dependent-address select").removeAttr('required'); + }; + $("#dependent_first_name").change(function() { + var text = $("#dependent_first_name").val() == '' ? "this person" : $("#dependent_first_name").val() + $("#is_applying_coverage_value_dep").text("Does "+ text +" need coverage? *"); + $("#is_applying_coverage_value_dep_1").text(text); + }); + }); + + function confirmMember(element) { + const form = element.closest('form')[0]; + const maleRadio = document.getElementById('radio_male'); + const femaleRadio = document.getElementById('radio_female'); + const confirmButtonText = "<%= l10n('confirm_member') %>"; + const applicantSSN = document.getElementById('applicant_ssn') + const applicantNoSSN = document.getElementById('applicant_no_ssn') + + element.addClass("disabled"); + + ApplicantValidations.manageRequiredValidations(element); + + if (!form.checkValidity() || !isGenderSelected(maleRadio, femaleRadio) || !isSsnSelected(applicantSSN, applicantNoSSN)) { + element.removeClass("disabled"); + } + } + + function isGenderSelected(maleRadio, femaleRadio) { + return (maleRadio && maleRadio.checked) || (femaleRadio && femaleRadio.checked); + } + + function isSsnSelected(applicantSSN, applicantNoSSN) { + return (applicantSSN && applicantSSN.value.replace(/-/g, '').length == 9) || (applicantNoSSN && applicantNoSSN.checked); + } + + $(document).on('click', '.applicant-confirm-member', function() { + confirmMember($(this)) + }) + } +} diff --git a/app/javascript/components/financial_assistance/keyboard_navigation.js b/app/javascript/components/financial_assistance/keyboard_navigation.js new file mode 100644 index 00000000000..5d22a29faf5 --- /dev/null +++ b/app/javascript/components/financial_assistance/keyboard_navigation.js @@ -0,0 +1,17 @@ +// Keyboard navigation for the applicant mailing address form's 'Add Mailing Address' and 'Remove Mailing Address' buttons +function addApplicantMailingAddressKeyboardNavigation() { + var removeMailingAddressButton = document.getElementById('remove_applicant_mailing_address'); + var addMailingAddressButton = document.getElementById('add_applicant_mailing_address'); + + if (removeMailingAddressButton) { + removeMailingAddressButton.addEventListener('keydown', function(event) { + handleButtonKeyDown(event, 'remove_applicant_mailing_address'); + }); + } + + if (addMailingAddressButton) { + addMailingAddressButton.addEventListener('keydown', function(event) { + handleButtonKeyDown(event, 'add_applicant_mailing_address'); + }); + } +}; diff --git a/app/javascript/components/financial_assistance/relationship_selector.js b/app/javascript/components/financial_assistance/relationship_selector.js new file mode 100644 index 00000000000..9a4d4318c53 --- /dev/null +++ b/app/javascript/components/financial_assistance/relationship_selector.js @@ -0,0 +1,18 @@ + +$(document).on('turbolinks:load', function () { + $("#family-matrix").off("change", ".selected_relationship").on("change", ".selected_relationship", function () { + var bs4 = document.documentElement.dataset.bs4; + $.ajax({ + url: window.location.pathname.replace('/financial_assistance/relationships', ''), + method: "POST", + dataType: 'script', + cache: false, + data: { + "kind": $(this).val(), + "applicant_id": $(this).data("applicant"), + "relative_id": $(this).data("relative"), + "bs4": bs4 + } + }) + }); +}) diff --git a/app/javascript/components/financial_assistance/shared.js b/app/javascript/components/financial_assistance/shared.js new file mode 100644 index 00000000000..8e3d8818619 --- /dev/null +++ b/app/javascript/components/financial_assistance/shared.js @@ -0,0 +1,30 @@ +function getDateFieldDate(id) { + const dateValue = $(id).val(); + return dateValue ? new Date(dateValue) : null; +}; + +function validateDateWarnings(id) { + var useBs4 = document.documentElement.dataset.bs4 + const startDateId = "#start_on_" + id; + const endDateId = ("#end_on_" + id); + var startDate = useBs4 ? getDateFieldDate(startDateId) : $(startDateId).datepicker('getDate'); + var endDate = useBs4 ? getDateFieldDate(endDateId) : $(endDateId).datepicker('getDate'); + var today = new Date(); + var requiresStartDateWarning = startDate > today + var requiresEndDateWarning = endDate + var warning_div = $("#date_warning_message_" + id); + var startDateWarning = $("#start_date_warning_" + id) + var endDateWarning = $("#end_date_warning_" + id) + + warning_div.add(startDateWarning).add(endDateWarning).addClass('hidden'); + if (requiresStartDateWarning) warning_div.add(startDateWarning).removeClass('hidden'); + if (requiresEndDateWarning) warning_div.add(endDateWarning).removeClass('hidden'); +}; + +$(document).on('change', "[data-validate-date-id]", function() { + let id = $(this).data('validate-date-id') + let bs4 = $(this).data('use-bs4') + if (id.length) { + validateDateWarnings(id, bs4) + } +}) diff --git a/app/javascript/components/financial_assistance/step_conditionals.js b/app/javascript/components/financial_assistance/step_conditionals.js new file mode 100644 index 00000000000..a554efcca14 --- /dev/null +++ b/app/javascript/components/financial_assistance/step_conditionals.js @@ -0,0 +1,599 @@ +document.addEventListener("turbolinks:load", function() { + $('label.required, legend.required, p.required').each(function() { + if ($(this).find('.sr-only').length == 0) { + $(this).append('*'); + } + }); + $('.step-tabs, .interaction-click-control-my-household').on('click', function(e) { + //Leave without saving for all side nav items - this gathers all items + $('.btn.btn-primary').click(function() { + window.location.href = e.target.href; + }); + }); + + /* attestations */ + $('#living_outside_yes, #living_outside_no').off('change') + $('#living_outside_yes, #living_outside_no').on('change', function(e) { + if ($('#living_outside_yes').is(':checked')) { + $('#application_attestation_terms').attr('required', true); + } else { + $('#application_attestation_terms').removeAttr('required'); + } + }); + + if ($('#medicaid_pregnancy_yes').length) { + $.ajax({ + type: "GET", + data:{}, + url: window.location.href.replace(/other_questions/, "age_of_applicant"), + success: function (age) { + hide_show_foster_care_related_qns(age); + } + }); + } + + // To hide/show the foster care related questions based on the age_of_applicant. + function hide_show_foster_care_related_qns(age) { + if (age >= 18 && age < 26){ + $('#is_former_foster_care_yes').parents('.row-form-wrapper').removeClass('hide'); + } else { + $('#is_former_foster_care_yes').parents('.row-form-wrapper').addClass('hide'); + $('#foster_care_us_state, #age_left_foster_care, #had_medicaid_during_foster_care_yes').parents('.row-form-wrapper').addClass('hide'); + $('#is_former_foster_care_yes, #is_former_foster_care_no').prop('required', false); + $('#had_medicaid_during_foster_care_yes, #had_medicaid_during_foster_care_no').prop('required', false); + } + } + + function hide_show_person_flling_jointly_question(){ + $.ajax({ + type: "GET", + data:{}, + url: window.location.href.replace(/tax_info/, 'applicant_is_eligible_for_joint_filing'), + success: function (has_spouse_relationship) { + if(has_spouse_relationship == 'true'){ + $('#is_joint_tax_filing_no').parents('.is_joint_tax_filing').removeClass('hide'); + } + } + }); + } + + $('#income_kind').on('selectric-change', function(e){ + if ($(this).val() == 'wages_and_salaries') + toggle_employer_contact_divs('show'); + else + toggle_employer_contact_divs('hide'); + }); + + if ($('#income_kind').val() == 'wages_and_salaries'){ + toggle_employer_contact_divs('show'); + } else { + toggle_employer_contact_divs('hide'); + } + + + function toggle_employer_contact_divs(hide_show) { + if (hide_show == 'hide') { + $('#income_kind').parents(".row").next().next().addClass('hide'); + $('#income_kind').parents(".row").next().next().next().addClass('hide'); + $('#income_kind').parents(".row").next().next().next().next().addClass('hide'); + } else { + $('#income_kind').parents(".row").next().next().removeClass('hide'); + $('#income_kind').parents(".row").next().next().next().removeClass('hide'); + $('#income_kind').parents(".row").next().next().next().next().removeClass('hide'); + } + } + + // Clear 0 value for Income + if ($("#income_amount").val() == 0){ + $("#income_amount").val(""); + } + + $("body").on("change", "#is_required_to_file_taxes_no", function(){ + if ($('#is_required_to_file_taxes_no').is(':checked')) { + $('#is_joint_tax_filing_no').parents('.is_joint_tax_filing').addClass('hide'); + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('checked', false) + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('required', false); + $('.filing-as-head-of-household').first().addClass('hide'); + } else{ + $('.is_claimed_as_tax_dependent').removeClass('hide'); + } + }); + + $("body").on("change", "#is_required_to_file_taxes_yes", function(){ + if ($('#is_required_to_file_taxes_yes').is(':checked')) { + hide_show_person_flling_jointly_question(); + if($('#is_joint_tax_filing_no').is(':checked')) { + $('.filing-as-head-of-household').first().removeClass('hide'); + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('required', true); + } + } else{ + $('.is_claimed_as_tax_dependent').addClass('hide'); + } + }); + + $("body").on("change", "#is_joint_tax_filing_no", function(){ + if ($('#is_joint_tax_filing_no').is(':checked')) { + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('required', true); + $('.filing-as-head-of-household').first().removeClass('hide'); + } + }); + + $("body").on("change", "#is_joint_tax_filing_yes", function(){ + if ($('#is_joint_tax_filing_yes').is(':checked')) { + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('checked', false) + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('required', false); + $('.filing-as-head-of-household').first().addClass('hide'); + } + }); + + $('.claimed_as_tax_dependent_by').addClass('hide'); + + $("body").on("change", "#is_claimed_as_tax_dependent_no", function(){ + if ($('#is_claimed_as_tax_dependent_no').is(':checked')) { + $('.claimed_as_tax_dependent_by').addClass('hide'); + } else{ + $(this).parents(".row").next().next().removeClass('hide'); + } + }); + + $("body").on("change", "#is_claimed_as_tax_dependent_yes", function(){ + if ($('#is_claimed_as_tax_dependent_yes').is(':checked')) { + $('.claimed_as_tax_dependent_by').removeClass('hide'); + } else{ + $(this).parents(".row").next().next().addClass('hide'); + } + }); + + /* employer phone & zip validations */ + $('#employer_phone_full_phone_number').on('keyup keydown keypress', function (e) { + var key = e.which || e.keyCode || e.charCode; + $(this).attr('maxlength', '10'); + return (key == 8 || + key == 9 || + key == 46 || + (key >= 37 && key <= 40) || + (key >= 48 && key <= 57) || + (key >= 96 && key <= 105) ); + }) + + .on('focus', function () { + $(this).val($(this).val().replace(/\W+/g, '')); + }) + + .on('blur', function () { + $(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d{4})+$/, "($1) $2-$3")); + }); + + $("#employer_address_zip").mask("99999"); + /* employer phone & zip validations */ + + + /* Toggle Show/Hide of dates row when eligible/ enrolled types are selected */ + $("#is_eligible, #is_enrolled").on('change', function() { + if ($('#is_eligible').is(':checked')) { + $('#is_eligible').parents(".row").next().addClass('hide'); + $('#is_eligible').parents(".row").next().removeClass('show'); + } else { + $('#is_eligible').parents(".row").next().addClass('show'); + $('#is_eligible').parents(".row").next().removeClass('hide'); + } + }); + + /* Submit Application Form Related */ + + $('#attestation_terms').addClass('hide'); + + $("body").on("change", "#living_outside_no", function(){ + if ($('#living_outside_no').is(':checked')) { + $("#attestation_terms").addClass('hide'); + }; + }); + + $("body").on("change", "#living_outside_yes", function(){ + if ($('#living_outside_yes').is(':checked')) { + $("#attestation_terms").removeClass('hide'); + }; + }); + + // On Load, hide by default if checked no + if($('#living_outside_no').is(':checked')) { + $("#attestation_terms").addClass('hide'); + } + + if($('#living_outside_yes').is(':checked')) { + $("#attestation_terms").removeClass('hide'); + } + /* Submit Application Form Related */ + + + /* Preference Application Form Related */ + + // On Load, hide by default if checked + if ($('#eligibility_easier_yes').is(':checked')) { + $('#eligibility_easier_yes').parents(".row").next().addClass('hide'); + $('#eligibility_easier_yes').parents(".row").next().next().addClass('hide'); + $('#application_years_to_renew').attr('required', false); + }; + + $("body").on("change", "#eligibility_easier_yes", function(){ + if ($('#eligibility_easier_yes').is(':checked')) { + $('#renewal_years').addClass('hide'); + $('#application_years_to_renew').attr('required', false); + }; + }); + + $("body").on("change", "#eligibility_easier_no", function(){ + if ($('#eligibility_easier_no').is(':checked')) { + $('#renewal_years').removeClass('hide'); + $('#application_years_to_renew').attr('required', true); + }; + }); + + if($('#eligibility_easier_yes').is(':checked')) { + $('#renewal_years').addClass('hide'); + $('#application_years_to_renew').attr('required', false); + } + + if($('#eligibility_easier_no').is(':checked')) { + $('#renewal_years').removeClass('hide'); + $('#application_years_to_renew').attr('required', true); + } + +/* Applicant's Tax Info Form Related */ + + $('#is_joint_tax_filing_yes').parents('.is_joint_tax_filing').addClass('hide'); + + if($('#is_required_to_file_taxes_no').is(':checked')) { + $('#is_joint_tax_filing_yes').parents('.is_joint_tax_filing').addClass('hide'); + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('checked', false) + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('required', false); + $('.filing-as-head-of-household').first().addClass('hide'); + } + + if($('#is_required_to_file_taxes_yes').is(':checked')) { + hide_show_person_flling_jointly_question(); + if($('#is_joint_tax_filing_no').is(':checked')) { + $('.filing-as-head-of-household').first().removeClass('hide'); + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('required', true); + } else { + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('checked', false) + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('required', false); + $('.filing-as-head-of-household').first().addClass('hide'); + } + } + + if(!$('#is_required_to_file_taxes_no, #is_required_to_file_taxes_yes').is(':checked')) { + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('checked', false) + $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').prop('required', false); + $('.filing-as-head-of-household').first().addClass('hide'); + } + + if($('#is_claimed_as_tax_dependent_no').is(':checked')) { + $('.claimed_as_tax_dependent_by').addClass('hide'); + } + + if($('#is_claimed_as_tax_dependent_yes').is(':checked')) { + $('.claimed_as_tax_dependent_by').removeClass('hide'); + } + + $("#is_required_to_file_taxes_yes, #is_required_to_file_taxes_no, #is_claimed_as_tax_dependent_yes, #is_claimed_as_tax_dependent_no, #is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no, #is_joint_tax_filing_no, #is_joint_tax_filing_yes").on('change', function() { + var taxInfoPage = document.querySelector("[data-cuke='tax_info_header']"); + if( (typeof(taxInfoPage) != 'undefined' && taxInfoPage != null) + && ($('#is_required_to_file_taxes_yes, #is_required_to_file_taxes_no').is(':checked') && $('#is_claimed_as_tax_dependent_yes, #is_claimed_as_tax_dependent_no').is(':checked')) + && ($('.hide.filing-as-head-of-household').length > 0 + || (((($('.filing-as-head-of-household').length > 0) && $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').is(':checked')) || ($('.filing-as-head-of-household').length == 0) || $('#is_required_to_file_taxes_no').is(':checked') || $('#is_joint_tax_filing_yes').is(':checked'))))){ + $('input[type="submit"]#btn-continue').prop('disabled', false) + // + } + }); +/* Applicant's Tax Info Form Related */ + +$(document).ready(function(){ + var taxInfoPage = document.querySelector("[data-cuke='tax_info_header']"); + if( (typeof(taxInfoPage) != 'undefined' && taxInfoPage != null) + && ($('#is_required_to_file_taxes_yes, #is_required_to_file_taxes_no').is(':checked') && $('#is_claimed_as_tax_dependent_yes, #is_claimed_as_tax_dependent_no').is(':checked')) + && ($('.hide.filing-as-head-of-household').length > 0 + || ((($('.filing-as-head-of-household').length > 0) && $('#is_filing_as_head_of_household_yes, #is_filing_as_head_of_household_no').is(':checked')) || $('.filing-as-head-of-household').length == 0))){ + $('input[type="submit"]#btn-continue').prop('disabled', false) + } +}) + +/* Applicant's Other Questions Form Related */ + + if ($('#is_ssn_applied_yes').is(':checked')) { + $('#no_ssn_reason').parents('.row-form-wrapper').addClass('hide'); + } else { + $('#no_ssn_reason').parents('.row-form-wrapper').addClass('hide'); + } + + $("body").on("change", "#is_ssn_applied_yes", function(){ + if ($('#is_ssn_applied_yes').is(':checked')) { + $('#no_ssn_reason').parents('.row-form-wrapper').addClass('hide'); + }; + }); + + if ($('#is_ssn_applied_no').is(':checked')) { + $('#no_ssn_reason').parents('.row-form-wrapper').removeClass('hide'); + } else { + $('#no_ssn_reason').parents('.row-form-wrapper').addClass('hide'); + } + + $("body").on("change", "#is_ssn_applied_no", function(){ + if ($('#is_ssn_applied_no').is(':checked')) { + $('#no_ssn_reason').parents('.row-form-wrapper').removeClass('hide'); + }; + }); + + $('#applicant_pregnancy_end_on').parents('.row-form-wrapper').addClass('hide'); + + $("body").on("change", "#is_pregnant_yes", function(){ + if ($('#is_pregnant_yes').is(':checked')) { + $('#children_expected_count, #applicant_pregnancy_due_on').parents('.row-form-wrapper').removeClass('hide'); + $('#children_expected_count, #applicant_pregnancy_due_on').attr('required', true); + if (!disable_selectric) { + $('#children_expected_count').selectric(); + } + $('#is_post_partum_period_yes, #applicant_pregnancy_end_on').parents('.row-form-wrapper').addClass('hide'); + $('#is_post_partum_period_yes, #is_post_partum_period_no').attr('required', false); + $('#medicaid_pregnancy_yes').parents('.row-form-wrapper').addClass('hide'); + $('#medicaid_pregnancy_yes, #medicaid_pregnancy_no').prop('required', false); + }; + }); + + if($('#is_pregnant_yes').is(':checked')) { + $('#children_expected_count, #applicant_pregnancy_due_on').parents('.row-form-wrapper').removeClass('hide'); + $('#medicaid_pregnancy_yes').parents('.row-form-wrapper').addClass('hide'); + $('#children_expected_count, #applicant_pregnancy_due_on').attr('required', true); + $('#medicaid_pregnancy_yes, #medicaid_pregnancy_no').prop('required', false); + } else { + $('#children_expected_count, #applicant_pregnancy_due_on').parents('.row-form-wrapper').addClass('hide'); + $('#medicaid_pregnancy_yes').parents('.row-form-wrapper').addClass('hide'); + $('#medicaid_pregnancy_yes, #medicaid_pregnancy_no').prop('required', false); + } + + $("body").on("change", "#is_pregnant_no", function(){ + if ($('#is_pregnant_no').is(':checked')) { + $('#is_post_partum_period_yes').parents('.row-form-wrapper').removeClass('hide'); + $('#is_post_partum_period_yes, #is_post_partum_period_no').attr('checked', false); + $('#is_post_partum_period_yes, #is_post_partum_period_no').attr('required', true); + $('#children_expected_count, #applicant_pregnancy_due_on').removeAttr('required'); + $('#children_expected_count, #applicant_pregnancy_due_on').parents('.row-form-wrapper').addClass('hide'); + $('#medicaid_pregnancy_yes').parents('.row-form-wrapper').addClass('hide'); + $('#medicaid_pregnancy_yes, #medicaid_pregnancy_no').prop('required', false); + }; + }); + + if($('#is_pregnant_no').is(':checked')) { + $('#is_post_partum_period_yes').parents('.row-form-wrapper').removeClass('hide'); + $('#is_post_partum_period_yes, #is_post_partum_period_no').attr('required', true); + $('#medicaid_pregnancy_yes').parents('.row-form-wrapper').addClass('hide'); + $('#children_expected_count, #applicant_pregnancy_due_on').removeAttr('required'); + $('#medicaid_pregnancy_yes, #medicaid_pregnancy_no').prop('required', false); + } else { + $('#is_post_partum_period_yes').parents('.row-form-wrapper').addClass('hide'); + $('#is_post_partum_period_yes, #is_post_partum_period_no').attr('required', false); + $('#medicaid_pregnancy_yes').parents('.row-form-wrapper').addClass('hide'); + $('#medicaid_pregnancy_yes, #medicaid_pregnancy_no').prop('required', false); + } + + if($('#is_post_partum_period_yes').is(':checked')) { + $('#medicaid_pregnancy_yes, #applicant_pregnancy_end_on').attr('required', true) + $('#medicaid_pregnancy_yes, #applicant_pregnancy_end_on').parents('.row-form-wrapper').removeClass('hide'); + } + + $("body").on("change", "#is_post_partum_period_yes", function(){ + if ($('#is_post_partum_period_yes').is(':checked')) { + $('#medicaid_pregnancy_yes, #applicant_pregnancy_end_on').attr('required', true) + $('#medicaid_pregnancy_yes, #applicant_pregnancy_end_on').parents('.row-form-wrapper').removeClass('hide'); + }; + }); + + if($('#is_post_partum_period_no').is(':checked')) { + $('#medicaid_pregnancy_yes, #medicaid_pregnancy_no, #applicant_pregnancy_end_on').removeAttr('required') + $('#medicaid_pregnancy_yes, #applicant_pregnancy_end_on').parents('.row-form-wrapper').addClass('hide'); + } + + $("body").on("change", "#is_post_partum_period_no", function(){ + if ($('#is_post_partum_period_no').is(':checked')) { + $('#medicaid_pregnancy_yes, #medicaid_pregnancy_no, #applicant_pregnancy_end_on').removeAttr('required') + $('#medicaid_pregnancy_yes, #applicant_pregnancy_end_on').parents('.row-form-wrapper').addClass('hide'); + }; + }); + + + $("body").on("change", "#is_former_foster_care_no", function(){ + if ($('#is_former_foster_care_no').is(':checked')) { + $('#foster_care_us_state, #age_left_foster_care, #had_medicaid_during_foster_care_yes').parents('.row-form-wrapper').addClass('hide'); + $('#had_medicaid_during_foster_care_yes, #had_medicaid_during_foster_care_no').prop('required', false); + }; + }); + + $("body").on("change", "#is_former_foster_care_yes", function(){ + if ($('#is_former_foster_care_yes').is(':checked')) { + $('#foster_care_us_state, #age_left_foster_care, #had_medicaid_during_foster_care_yes').parents('.row-form-wrapper').removeClass('hide'); + }; + }); + + if($('#is_former_foster_care_yes').is(':checked')) { + $('#foster_care_us_state, #age_left_foster_care, #had_medicaid_during_foster_care_yes').parents('.row-form-wrapper').removeClass('hide'); + } else { + $('#foster_care_us_state, #age_left_foster_care, #had_medicaid_during_foster_care_yes').parents('.row-form-wrapper').addClass('hide'); + $('#had_medicaid_during_foster_care_yes, #had_medicaid_during_foster_care_no').prop('required', false); + } + + $("body").on("change", "#is_student_no", function(){ + if ($('#is_student_no').is(':checked')) { + $('#student_kind, #applicant_student_status_end_on, #student_school_kind').parents('.row-form-wrapper').addClass('hide'); + }; + }); + + $("body").on("change", "#is_student_yes", function(){ + if ($('#is_student_yes').is(':checked')) { + $('#student_kind, #applicant_student_status_end_on, #student_school_kind').parents('.row-form-wrapper').removeClass('hide'); + }; + }); + + if($('#is_student_yes').is(':checked')) { + $('#student_kind, #applicant_student_status_end_on, #student_school_kind').parents('.row-form-wrapper').removeClass('hide'); + } else { + $('#student_kind, #applicant_student_status_end_on, #student_school_kind').parents('.row-form-wrapper').addClass('hide'); + } + + //start primary caregiver controls + $("body").on("change", "#is_primary_caregiver_no", function(){ + if ($('#is_primary_caregiver_no').is(':checked')) { + $('#is_primary_caregiver_for').parents('.row-form-wrapper').addClass('hide'); + }; + }); + + $("body").on("change", "#is_primary_caregiver_yes", function(){ + if ($('#is_primary_caregiver_yes').is(':checked')) { + $('#is_primary_caregiver_for').parents('.row-form-wrapper').removeClass('hide'); + }; + }); + + if($('#is_primary_caregiver_yes').is(':checked')) { + $('#is_primary_caregiver_for').parents('.row-form-wrapper').removeClass('hide'); + } else { + $('#is_primary_caregiver_for').parents('.row-form-wrapper').addClass('hide'); + } + + $("body").on("change", "#applicant_is_primary_caregiver_for_none", function(){ + if ($('#applicant_is_primary_caregiver_for_none').is(':checked')) { + $('.interaction-choice-control-value-is-primary-caregiver-for').prop( "checked", false ); + } + }); + + $("body").on("change", "#is_primary_caregiver_for", function(){ + if ($('#is_primary_caregiver_for:checked').length > 0) { + $('#applicant_is_primary_caregiver_for_none').prop( "checked", false ); + } + }); + //end primary caregiver controls + + if($('#is_veteran_or_active_military_yes').is(':checked')) { + $('#is_vets_spouse_or_child_yes').parents('.row-form-wrapper').addClass('hide'); + } else { + $('#is_vets_spouse_or_child_yes').parents('.row-form-wrapper').addClass('hide'); + } + + $("body").on("change", "#is_veteran_or_active_military_yes", function(){ + if ($('#is_veteran_or_active_military_yes').is(':checked')) { + $('#is_vets_spouse_or_child_yes').parents('.row-form-wrapper').addClass('hide'); + }; + }); + + if($('#is_veteran_or_active_military_no').is(':checked')) { + $('#is_vets_spouse_or_child_yes').parents('.row-form-wrapper').removeClass('hide'); + } else { + $('#is_vets_spouse_or_child_yes').parents('.row-form-wrapper').addClass('hide'); + } + + $("body").on("change", "#is_veteran_or_active_military_no", function(){ + if ($('#is_veteran_or_active_military_no').is(':checked')) { + $('#is_vets_spouse_or_child_yes').parents('.row-form-wrapper').removeClass('hide'); + }; + }); + +/* Applicant's Other Questions Form Related */ + + /* Submit Application Form Related */ + $("body").on("change", "#living_outside_no", function(){ + if ($('#living_outside_no').is(':checked')) { + $(this).parents(".row").next().addClass('hide'); + $(this).parents(".row").next().next().addClass('hide'); + }; + }); + + $("body").on("change", "#living_outside_yes", function(){ + if ($('#living_outside_yes').is(':checked')) { + $(this).parents(".row").next().removeClass('hide'); + $(this).parents(".row").next().next().removeClass('hide'); + }; + }); + + // On Load, hide by default if checked no + if($('#living_outside_no').is(':checked')) { + $('#living_outside_no').parents(".row").next().addClass('hide'); + $('#living_outside_no').parents(".row").next().next().addClass('hide'); + } + + if($('#living_outside_yes').is(':checked')) { + $('#living_outside_yes').parents(".row").next().removeClass('hide'); + } + /* Submit Application Form Related */ + + /* Preference Application Form Related */ + + // On Load, hide by default if checked + if ($('#eligibility_easier_yes').is(':checked')) { + $('#eligibility_easier_yes').parents(".row").next().addClass('hide'); + $('#eligibility_easier_yes').parents(".row").next().next().addClass('hide'); + }; + + $("body").on("change", "#eligibility_easier_yes", function(){ + if ($('#eligibility_easier_yes').is(':checked')) { + $('#eligibility_easier_yes').parents(".row").next().addClass('hide'); + $('#eligibility_easier_yes').parents(".row").next().next().addClass('hide'); + }; + }); + + $("body").on("change", "#eligibility_easier_no", function(){ + if ($('#eligibility_easier_no').is(':checked')) { + $(this).parents(".row").next().removeClass('hide'); + $(this).parents(".row").next().next().removeClass('hide'); + }; + }); + + if($('#eligibility_easier_yes').is(':checked')) { + $('#eligibility_easier_yes').parents(".row").next().addClass('hide'); + } + + if($('#eligibility_easier_no').is(':checked')) { + $('#eligibility_easier_no').parents(".row").next().removeClass('hide'); + } + + $("#mailed_yes, #mailed_no").on('change', function() { + if( $('#mailed_yes, #mailed_no').is(':checked')){ + $('.interaction-click-control-continue').prop('disabled', false); + } + }); + + /* Preference Application Form Related */ + + /* enable or disable submit application button by checkboxes & electronic siganture (first/last name match)*/ + function enable_submit_button() { + first_name_thank_you = $("#first_name_thank_you").val() ? $("#first_name_thank_you").val().toString().toLowerCase().trim() : ''; + last_name_thank_you = $("#last_name_thank_you").val() ? $("#last_name_thank_you").val().toString().toLowerCase().trim() : ''; + subscriber_first_name = $("#subscriber_first_name").val(); + subscriber_last_name = $("#subscriber_last_name").val(); + living_outside_no = $('#living_outside_no').is(':checked'); + living_outside_yes = $('#living_outside_yes').is(':checked'); + medicare_review_box = $('#application_medicaid_terms').is(':checked'); + medicaid_insurance_box = $('#application_medicaid_insurance_collection_terms').is(':checked'); + report_change_box = $('#application_report_change_terms').is(':checked'); + medicaid_terms_box = $('#application_submission_terms').is(':checked'); + attestation_terms = $('#application_attestation_terms').is(':checked'); + + boxes_checked = medicare_review_box && medicaid_insurance_box && report_change_box && medicaid_terms_box + living_outside_checked = living_outside_no || (living_outside_yes && attestation_terms) + signature_valid = (first_name_thank_you == subscriber_first_name) && (last_name_thank_you == subscriber_last_name) + checks_complete = boxes_checked && living_outside_checked && signature_valid + if(checks_complete){ + $('.interaction-click-control-submit-application').removeClass('disabled'); + } else { + $('.interaction-click-control-submit-application').addClass('disabled'); + } + } + + $(window).load(function() { + $('.interaction-click-control-submit-application').addClass('disabled'); + enable_submit_button(); + }); + + $(document).on('change click blur keyup', function() { + enable_submit_button(); + }); + + /* enable or disable submit application button by checkboxes & electronic siganture (first/last name match)*/ +}); diff --git a/app/javascript/components/notifier/application.js b/app/javascript/components/notifier/application.js new file mode 100644 index 00000000000..76c3fc558bb --- /dev/null +++ b/app/javascript/components/notifier/application.js @@ -0,0 +1,13 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +//= require ckeditor/application +//= require_tree . diff --git a/app/javascript/components/notifier/ckeditor/config.js.erb b/app/javascript/components/notifier/ckeditor/config.js.erb new file mode 100644 index 00000000000..d471cb7c3e1 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/config.js.erb @@ -0,0 +1,61 @@ +function update_placeholders(config) { + $.ajax({ + type:"GET", + url:"notice_kinds/get_placeholders", + dataType:"json", + async: false, + data: {builder: $('#notice_kind_recipient').val(), market_kind: $('#notice_kind_market_kind').val()}, + success:function(result){ + config.placeholder_selects = [ + { + key: 'select_system_settings', + title: 'Select Application Settings', + placeholders: result.setting_placeholders + }, + { + key: 'select_conditional_statement', + title: 'Select Condition/Loop', + placeholders: result.placeholders + } + ]; + }}); + + return config; +} + +function update_tokens(config) { + $.ajax({ + type:"GET", + url:"notice_kinds/get_tokens", + dataType:"json", + async: false, + data: {builder: $('#notice_kind_recipient').val(), market_kind: $('#notice_kind_market_kind').val()}, + success:function(result){ + config.availableTokens = result.tokens; + update_placeholders(config); + } + }); +} + +CKEDITOR.editorConfig = function( config ) +{ + update_tokens(config); + + config.removeButtons = "Form,Checkbox,Radio,TextField,Textarea,Select,Button,ImageButton,HiddenField,About,Print,Save,NewPage,Preview,Save,Language,Flash,Smiley,Image,Iframe"; + config.extraPlugins = 'fontawesome,button,lineutils,widgetselection,notification,toolbar,widget,dialogui,dialog,clipboard,token,placeholder,placeholder_select,lineheight'; + CKEDITOR.dtd.$removeEmpty.span = 0; + CKEDITOR.dtd.$removeEmpty.i = 0; + config.allowedContent = true; + config.font_names = + 'Open Sans;'+ + 'Georgia;' + + 'Lucida Sans Unicode;' + + 'Tahoma;'+ + 'Times New Roman/Times New Roman, Times, serif;' + + 'Trebuchet MS;'+ + 'Verdana;'; + config.language = 'en'; + + config.tokenStart = '#{'; + config.tokenEnd = '}'; +}; \ No newline at end of file diff --git a/app/javascript/components/notifier/ckeditor/contents.css b/app/javascript/components/notifier/ckeditor/contents.css new file mode 100644 index 00000000000..8aa7ad85697 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/contents.css @@ -0,0 +1,232 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +body +{ + /* Font */ + font-family: sans-serif, Arial, Verdana, "Trebuchet MS"; + font-size: 12px; + + /* Text color */ + color: #333; + + /* Remove the background color to make it transparent */ + background-color: #fff; + + margin: 20px; +} + +.cke_editable +{ + font-size: 13px; + line-height: 1.6; + + /* Fix for missing scrollbars with RTL texts. (#10488) */ + word-wrap: break-word; +} + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +a +{ + color: #0782C1; +} + +ol,ul,dl +{ + /* IE7: reset rtl list margin. (#7334) */ + *margin-right: 0px; + /* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/ + padding: 0 40px; +} + +h1,h2,h3,h4,h5,h6 +{ + font-weight: normal; + line-height: 1.2; +} + +hr +{ + border: 0px; + border-top: 1px solid #ccc; +} + +img.right +{ + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left +{ + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} + +pre +{ + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ + -moz-tab-size: 4; + tab-size: 4; +} + +.marker +{ + background-color: Yellow; +} + +span[lang] +{ + font-style: italic; +} + +figure +{ + text-align: center; + border: solid 1px #ccc; + border-radius: 2px; + background: rgba(0,0,0,0.05); + padding: 10px; + margin: 10px 20px; + display: inline-block; +} + +figure > figcaption +{ + text-align: center; + display: block; /* For IE8 */ +} + +a > img { + padding: 1px; + margin: 1px; + border: none; + outline: 1px solid #0782C1; +} + +/* Widget Styles */ +.code-featured +{ + border: 5px solid red; +} + +.math-featured +{ + padding: 20px; + box-shadow: 0 0 2px rgba(200, 0, 0, 1); + background-color: rgba(255, 0, 0, 0.05); + margin: 10px; +} + +.image-clean +{ + border: 0; + background: none; + padding: 0; +} + +.image-clean > figcaption +{ + font-size: .9em; + text-align: right; +} + +.image-grayscale +{ + background-color: white; + color: #666; +} + +.image-grayscale img, img.image-grayscale +{ + filter: grayscale(100%); +} + +.embed-240p +{ + max-width: 426px; + max-height: 240px; + margin:0 auto; +} + +.embed-360p +{ + max-width: 640px; + max-height: 360px; + margin:0 auto; +} + +.embed-480p +{ + max-width: 854px; + max-height: 480px; + margin:0 auto; +} + +.embed-720p +{ + max-width: 1280px; + max-height: 720px; + margin:0 auto; +} + +.embed-1080p +{ + max-width: 1920px; + max-height: 1080px; + margin:0 auto; +} + +@font-face{font-family:'FontAwesome';src:url('./fonts/fontawesome-webfont.eot?v=4.3.0');src:url('./fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('./fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('./fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('./fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('./fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} + +#fontawesome {overflow:auto; text-align:center; height:400px; width:100%;} +#fontawesome div {text-align:center;} +#fontawesome a, #fontawesome span {margin-bottom:.5em; text-align:center;} +#fontawesome a {padding:.5em; display:block; float:left; width:100px; border:1px solid #fff; -webkit-border-radius:5px; border-radius:5px; white-space:normal; text-align:center; height:68px;} +#fontawesome a:hover, #fontawesome a.active {border:1px solid #ddd; background:#eee;} +#fontawesome span {font-size:24px; color:#000;} + +.fasm_check_circle { + list-style: none; + padding-left: 15px; +} + +.fasm_check_circle li { + padding-left: 0em; +} + +.fasm_check_circle li:before { + font-family: 'FontAwesome'; + content: "\f058"; + margin:0 5px 0 -15px; +} diff --git a/app/assets/fonts/FontAwesome.otf b/app/javascript/components/notifier/ckeditor/fonts/FontAwesome.otf old mode 100644 new mode 100755 similarity index 100% rename from app/assets/fonts/FontAwesome.otf rename to app/javascript/components/notifier/ckeditor/fonts/FontAwesome.otf diff --git a/app/assets/fonts/fontawesome-webfont.eot b/app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.eot old mode 100644 new mode 100755 similarity index 100% rename from app/assets/fonts/fontawesome-webfont.eot rename to app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.eot diff --git a/app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.svg b/app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.svg new file mode 100755 index 00000000000..0d2afc71fe8 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/assets/fonts/fontawesome-webfont.ttf b/app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.ttf old mode 100644 new mode 100755 similarity index 100% rename from app/assets/fonts/fontawesome-webfont.ttf rename to app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.ttf diff --git a/app/assets/fonts/fontawesome-webfont.woff b/app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.woff old mode 100644 new mode 100755 similarity index 100% rename from app/assets/fonts/fontawesome-webfont.woff rename to app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.woff diff --git a/app/assets/fonts/fontawesome-webfont.woff2 b/app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.woff2 old mode 100644 new mode 100755 similarity index 100% rename from app/assets/fonts/fontawesome-webfont.woff2 rename to app/javascript/components/notifier/ckeditor/fonts/fontawesome-webfont.woff2 diff --git a/app/javascript/components/notifier/ckeditor/fonts/index.html b/app/javascript/components/notifier/ckeditor/fonts/index.html new file mode 100755 index 00000000000..065d2da5e7e --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/fonts/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/javascript/components/notifier/ckeditor/lang/en.js b/app/javascript/components/notifier/ckeditor/lang/en.js new file mode 100644 index 00000000000..21dac7e3435 --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/lang/en.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.lang['en']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","224":"Command"},"keyboardShortcut":"Keyboard shortcut"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"button":{"selectedLabel":"%1 (Selected)"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"notification":{"closed":"Notification closed."},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Your browser doesn't allow you to paste this way. Press %1 to paste."},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background color","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","check_circle":"Check Circle","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Your browser does not allow you to paste plain text this way. Press %1 to paste."},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/app/javascript/components/notifier/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js b/app/javascript/components/notifier/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js new file mode 100644 index 00000000000..0b2c0f14b5e --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("a11yHelp",function(e){var a=e.lang.a11yhelp,b=e.lang.common.keyboard,q=CKEDITOR.tools.getNextId(),d={8:b[8],9:a.tab,13:b[13],16:b[16],17:b[17],18:b[18],19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:b[35],36:b[36],37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:b[46],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8, +105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};d[CKEDITOR.ALT]=b[18];d[CKEDITOR.SHIFT]=b[16];d[CKEDITOR.CTRL]=CKEDITOR.env.mac?b[224]:b[17];var k= +[CKEDITOR.ALT,CKEDITOR.SHIFT,CKEDITOR.CTRL],r=/\$\{(.*?)\}/g,t=function(a,b){var c=e.getCommandKeystroke(b);if(c){for(var l,f,h=[],g=0;g=l&&(c-=f,h.push(d[f]));h.push(d[c]||String.fromCharCode(c));c=h.join("+")}else c=a;return c};return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:e.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()},html:function(){for(var b= +'\x3cdiv class\x3d"cke_accessibility_legend" role\x3d"document" aria-labelledby\x3d"'+q+'_arialbl" tabIndex\x3d"-1"\x3e%1\x3c/div\x3e\x3cspan id\x3d"'+q+'_arialbl" class\x3d"cke_voice_label"\x3e'+a.contents+" \x3c/span\x3e",d=[],c=a.legend,l=c.length,f=0;f' + + '{label}' + + '{ariaShortcut}' + + '{arrowHtml}' + + '
'; + + var templateArrow = '' + + // BLACK DOWN-POINTING TRIANGLE + ( CKEDITOR.env.hc ? '▼' : '' ) + + ''; + + var btnArrowTpl = CKEDITOR.addTemplate( 'buttonArrow', templateArrow ), + btnTpl = CKEDITOR.addTemplate( 'button', template ); + + CKEDITOR.plugins.add( 'button', { + lang: 'af,ar,az,bg,ca,cs,da,de,de-ch,el,en,en-gb,eo,es,es-mx,eu,fa,fi,fr,gl,he,hr,hu,id,it,ja,km,ko,ku,lt,nb,nl,no,oc,pl,pt,pt-br,ro,ru,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% + beforeInit: function( editor ) { + editor.ui.addHandler( CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler ); + } + } ); + + /** + * Button UI element. + * + * @readonly + * @property {String} [='button'] + * @member CKEDITOR + */ + CKEDITOR.UI_BUTTON = 'button'; + + /** + * Represents a button UI element. This class should not be called directly. To + * create new buttons use {@link CKEDITOR.ui#addButton} instead. + * + * @class + * @constructor Creates a button class instance. + * @param {Object} definition The button definition. + */ + CKEDITOR.ui.button = function( definition ) { + CKEDITOR.tools.extend( this, definition, + // Set defaults. + { + title: definition.label, + click: definition.click || + function( editor ) { + editor.execCommand( definition.command ); + } + } ); + + this._ = {}; + }; + + /** + * Represents the button handler object. + * + * @class + * @singleton + * @extends CKEDITOR.ui.handlerDefinition + */ + CKEDITOR.ui.button.handler = { + /** + * Transforms a button definition in a {@link CKEDITOR.ui.button} instance. + * + * @member CKEDITOR.ui.button.handler + * @param {Object} definition + * @returns {CKEDITOR.ui.button} + */ + create: function( definition ) { + return new CKEDITOR.ui.button( definition ); + } + }; + + /** @class CKEDITOR.ui.button */ + CKEDITOR.ui.button.prototype = { + /** + * Renders the button. + * + * @param {CKEDITOR.editor} editor The editor instance which this button is + * to be used by. + * @param {Array} output The output array to which the HTML code related to + * this button should be appended. + */ + render: function( editor, output ) { + function updateState() { + // "this" is a CKEDITOR.ui.button instance. + var mode = editor.mode; + + if ( mode ) { + // Restore saved button state. + var state = this.modes[ mode ] ? modeStates[ mode ] !== undefined ? modeStates[ mode ] : CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; + + state = editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state; + + this.setState( state ); + + // Let plugin to disable button. + if ( this.refresh ) + this.refresh(); + } + } + + var env = CKEDITOR.env, + id = this._.id = CKEDITOR.tools.getNextId(), + stateName = '', + command = this.command, + // Get the command name. + clickFn, + keystroke, + shortcut; + + this._.editor = editor; + + var instance = { + id: id, + button: this, + editor: editor, + focus: function() { + var element = CKEDITOR.document.getById( id ); + element.focus(); + }, + execute: function() { + this.button.click( editor ); + }, + attach: function( editor ) { + this.button.attach( editor ); + } + }; + + var keydownFn = CKEDITOR.tools.addFunction( function( ev ) { + if ( instance.onkey ) { + ev = new CKEDITOR.dom.event( ev ); + return ( instance.onkey( instance, ev.getKeystroke() ) !== false ); + } + } ); + + var focusFn = CKEDITOR.tools.addFunction( function( ev ) { + var retVal; + + if ( instance.onfocus ) + retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false ); + + return retVal; + } ); + + var selLocked = 0; + + instance.clickFn = clickFn = CKEDITOR.tools.addFunction( function() { + + // Restore locked selection in Opera. + if ( selLocked ) { + editor.unlockSelection( 1 ); + selLocked = 0; + } + instance.execute(); + + // Fixed iOS focus issue when your press disabled button (http://dev.ckeditor.com/ticket/12381). + if ( env.iOS ) { + editor.focus(); + } + } ); + + + // Indicate a mode sensitive button. + if ( this.modes ) { + var modeStates = {}; + + editor.on( 'beforeModeUnload', function() { + if ( editor.mode && this._.state != CKEDITOR.TRISTATE_DISABLED ) + modeStates[ editor.mode ] = this._.state; + }, this ); + + // Update status when activeFilter, mode or readOnly changes. + editor.on( 'activeFilterChange', updateState, this ); + editor.on( 'mode', updateState, this ); + // If this button is sensitive to readOnly state, update it accordingly. + !this.readOnly && editor.on( 'readOnly', updateState, this ); + + } else if ( command ) { + // Get the command instance. + command = editor.getCommand( command ); + + if ( command ) { + command.on( 'state', function() { + this.setState( command.state ); + }, this ); + + stateName += ( command.state == CKEDITOR.TRISTATE_ON ? 'on' : command.state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off' ); + } + } + + // For button that has text-direction awareness on selection path. + if ( this.directional ) { + editor.on( 'contentDirChanged', function( evt ) { + var el = CKEDITOR.document.getById( this._.id ), + icon = el.getFirst(); + + var pathDir = evt.data; + + // Make a minor direction change to become style-able for the skin icon. + if ( pathDir != editor.lang.dir ) + el.addClass( 'cke_' + pathDir ); + else + el.removeClass( 'cke_ltr' ).removeClass( 'cke_rtl' ); + + // Inline style update for the plugin icon. + icon.setAttribute( 'style', CKEDITOR.skin.getIconStyle( iconName, pathDir == 'rtl', this.icon, this.iconOffset ) ); + }, this ); + } + + if ( !command ) { + stateName += 'off'; + } else { + keystroke = editor.getCommandKeystroke( command ); + + if ( keystroke ) { + shortcut = CKEDITOR.tools.keystrokeToString( editor.lang.common.keyboard, keystroke ); + } + } + + var name = this.name || this.command, + iconName = name; + + // Check if we're pointing to an icon defined by another command. (http://dev.ckeditor.com/ticket/9555) + if ( this.icon && !( /\./ ).test( this.icon ) ) { + iconName = this.icon; + this.icon = null; + } + + var params = { + id: id, + name: name, + iconName: iconName, + label: this.label, + cls: this.className || '', + state: stateName, + ariaDisabled: stateName == 'disabled' ? 'true' : 'false', + title: this.title + ( shortcut ? ' (' + shortcut.display + ')' : '' ), + ariaShortcut: shortcut ? editor.lang.common.keyboardShortcut + ' ' + shortcut.aria : '', + titleJs: env.gecko && !env.hc ? '' : ( this.title || '' ).replace( /'/g, '' ), + hasArrow: this.hasArrow ? 'true' : 'false', + keydownFn: keydownFn, + focusFn: focusFn, + clickFn: clickFn, + style: CKEDITOR.skin.getIconStyle( iconName, ( editor.lang.dir == 'rtl' ), this.icon, this.iconOffset ), + arrowHtml: this.hasArrow ? btnArrowTpl.output() : '' + }; + + btnTpl.output( params, output ); + + if ( this.onRender ) + this.onRender(); + + return instance; + }, + + /** + * Sets the button state. + * + * @param {Number} state Indicates the button state. One of {@link CKEDITOR#TRISTATE_ON}, + * {@link CKEDITOR#TRISTATE_OFF}, or {@link CKEDITOR#TRISTATE_DISABLED}. + */ + setState: function( state ) { + if ( this._.state == state ) + return false; + + this._.state = state; + + var element = CKEDITOR.document.getById( this._.id ); + + if ( element ) { + element.setState( state, 'cke_button' ); + + state == CKEDITOR.TRISTATE_DISABLED ? + element.setAttribute( 'aria-disabled', true ) : + element.removeAttribute( 'aria-disabled' ); + + if ( !this.hasArrow ) { + // Note: aria-pressed attribute should not be added to menuButton instances. (http://dev.ckeditor.com/ticket/11331) + state == CKEDITOR.TRISTATE_ON ? + element.setAttribute( 'aria-pressed', true ) : + element.removeAttribute( 'aria-pressed' ); + } else { + var newLabel = state == CKEDITOR.TRISTATE_ON ? + this._.editor.lang.button.selectedLabel.replace( /%1/g, this.label ) : this.label; + CKEDITOR.document.getById( this._.id + '_label' ).setText( newLabel ); + } + + return true; + } else { + return false; + } + }, + + /** + * Gets the button state. + * + * @returns {Number} The button state. One of {@link CKEDITOR#TRISTATE_ON}, + * {@link CKEDITOR#TRISTATE_OFF}, or {@link CKEDITOR#TRISTATE_DISABLED}. + */ + getState: function() { + return this._.state; + }, + + /** + * Returns this button's {@link CKEDITOR.feature} instance. + * + * It may be this button instance if it has at least one of + * `allowedContent` and `requiredContent` properties. Otherwise, + * if a command is bound to this button by the `command` property, then + * that command will be returned. + * + * This method implements the {@link CKEDITOR.feature#toFeature} interface method. + * + * @since 4.1 + * @param {CKEDITOR.editor} Editor instance. + * @returns {CKEDITOR.feature} The feature. + */ + toFeature: function( editor ) { + if ( this._.feature ) + return this._.feature; + + var feature = this; + + // If button isn't a feature, return command if is bound. + if ( !this.allowedContent && !this.requiredContent && this.command ) + feature = editor.getCommand( this.command ) || feature; + + return this._.feature = feature; + } + }; + + /** + * Adds a button definition to the UI elements list. + * + * editorInstance.ui.addButton( 'MyBold', { + * label: 'My Bold', + * command: 'bold', + * toolbar: 'basicstyles,1' + * } ); + * + * @member CKEDITOR.ui + * @param {String} name The button name. + * @param {Object} definition The button definition. + * @param {String} definition.label The textual part of the button (if visible) and its tooltip. + * @param {String} definition.command The command to be executed once the button is activated. + * @param {String} definition.toolbar The {@link CKEDITOR.config#toolbarGroups toolbar group} into which + * the button will be added. An optional index value (separated by a comma) determines the button position within the group. + */ + CKEDITOR.ui.prototype.addButton = function( name, definition ) { + this.add( name, CKEDITOR.UI_BUTTON, definition ); + }; + +} )(); diff --git a/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/clipboard.html b/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/clipboard.html new file mode 100644 index 00000000000..aa2598b550d --- /dev/null +++ b/app/javascript/components/notifier/ckeditor/plugins/clipboard/dev/clipboard.html @@ -0,0 +1,190 @@ + + + + + + Clipboard playground – CKEditor Sample + + + + + +