renalware-core 2.0.152 → 2.0.158

Sign up to get free protection for your applications and to get access to all the features.
Files changed (295) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/renalware/components/navigation.js +0 -7
  3. data/app/assets/javascripts/renalware/components/sortable.js +3 -0
  4. data/app/assets/javascripts/renalware/core.js.erb +0 -2
  5. data/app/assets/javascripts/renalware/rollup_compiled.css +69147 -50289
  6. data/app/assets/javascripts/renalware/rollup_compiled.js +10 -14
  7. data/app/assets/stylesheets/renalware/base/_variables.scss +1 -0
  8. data/app/assets/stylesheets/renalware/lib/_foundation_and_overrides.scss +1 -620
  9. data/app/assets/stylesheets/renalware/lib/_select2-foundation5-overrides.scss +1 -1
  10. data/app/assets/stylesheets/renalware/modules/_medications.scss +9 -9
  11. data/app/assets/stylesheets/renalware/modules/_patients.scss +4 -0
  12. data/app/assets/stylesheets/renalware/modules/_users.scss +2 -1
  13. data/app/assets/stylesheets/renalware/partials/_forms.scss +11 -0
  14. data/app/assets/stylesheets/renalware/partials/_navigation.scss +15 -12
  15. data/app/assets/stylesheets/renalware/partials/_simple_form.scss +1 -1
  16. data/app/assets/stylesheets/renalware/partials/_tables.scss +15 -8
  17. data/app/assets/stylesheets/renalware/partials/_toggle.scss +0 -66
  18. data/app/assets/stylesheets/renalware/partials/_toggling.scss +18 -0
  19. data/app/assets/stylesheets/renalware/partials/_trix.scss +12 -0
  20. data/app/components/renalware/admissions/active_consult_alert_component.html.slim +4 -0
  21. data/app/components/renalware/admissions/active_consult_alert_component.rb +25 -0
  22. data/app/components/renalware/article_component.html.slim +5 -0
  23. data/app/components/renalware/article_component.rb +12 -0
  24. data/app/components/renalware/events/event_list_component.rb +6 -1
  25. data/app/components/renalware/medications/tabbed_prescriptions_list_component.html.slim +41 -0
  26. data/app/components/renalware/medications/tabbed_prescriptions_list_component.rb +47 -0
  27. data/app/components/renalware/patients/messages_component.html.slim +45 -0
  28. data/app/components/renalware/patients/messages_component.rb +52 -0
  29. data/app/components/renalware/pd/adequacy_results_component.html.slim +3 -5
  30. data/app/components/renalware/system/admin_menu_component.html.slim +3 -1
  31. data/app/components/renalware/users/last_signin_component.html.slim +3 -0
  32. data/app/components/renalware/users/last_signin_component.rb +23 -0
  33. data/app/controllers/renalware/admin/playgrounds_controller.rb +1 -1
  34. data/app/controllers/renalware/admin/users_controller.rb +1 -0
  35. data/app/controllers/renalware/drugs/drugs_controller.rb +4 -0
  36. data/app/controllers/renalware/hd/historical_profiles_controller.rb +1 -1
  37. data/app/controllers/renalware/medications/prescriptions_controller.rb +5 -2
  38. data/app/controllers/renalware/messaging/internal/messages_controller.rb +14 -5
  39. data/app/controllers/renalware/pathology/observation_descriptions_controller.rb +58 -0
  40. data/app/controllers/renalware/patients/mdms_controller.rb +104 -0
  41. data/app/controllers/renalware/system/view_metadata_controller.rb +61 -0
  42. data/app/controllers/renalware/users_controller.rb +25 -0
  43. data/app/helpers/renalware/drugs_helper.rb +6 -0
  44. data/app/helpers/renalware/layout_helper.rb +1 -1
  45. data/app/models/concerns/renalware/sortable.rb +49 -0
  46. data/app/models/renalware/accesses/patient.rb +2 -2
  47. data/app/models/renalware/accesses/plan.rb +1 -1
  48. data/app/models/renalware/admissions/request.rb +1 -0
  49. data/app/models/renalware/clinical/body_composition.rb +1 -1
  50. data/app/models/renalware/clinical/dry_weight.rb +1 -1
  51. data/app/models/renalware/clinics/clinic_visit.rb +5 -4
  52. data/app/models/renalware/feeds/files/create_feed_file.rb +1 -1
  53. data/app/models/renalware/hd/patient.rb +1 -1
  54. data/app/models/renalware/hd/preference_set.rb +1 -1
  55. data/app/models/renalware/hd/profile.rb +4 -4
  56. data/app/models/renalware/hd/schedule_definition.rb +1 -1
  57. data/app/models/renalware/hd/session.rb +2 -2
  58. data/app/models/renalware/hd/session_forms/batch_compile_pdfs.rb +1 -1
  59. data/app/models/renalware/hd/station.rb +2 -1
  60. data/app/models/renalware/letters/description.rb +2 -0
  61. data/app/models/renalware/letters/letter.rb +1 -1
  62. data/app/models/renalware/letters/part/prescriptions.rb +12 -3
  63. data/app/models/renalware/letters/pdf_letter_cache.rb +1 -1
  64. data/app/models/renalware/letters/printing/batch_compile_pdfs.rb +1 -1
  65. data/app/models/renalware/letters/recipient_params_processor.rb +1 -1
  66. data/app/models/renalware/medications/prescription.rb +0 -4
  67. data/app/models/renalware/messaging/internal/message_form.rb +1 -0
  68. data/app/models/renalware/messaging/internal/message_form_builder.rb +2 -1
  69. data/app/models/renalware/pathology/current_observations_for_descriptions_query.rb +3 -3
  70. data/app/models/renalware/pathology/measurement_unit.rb +13 -0
  71. data/app/models/renalware/pathology/observation_description.rb +23 -5
  72. data/app/models/renalware/pathology/observation_descriptions_by_code_query.rb +1 -1
  73. data/app/models/renalware/pathology/observation_requests_attributes_builder.rb +45 -5
  74. data/app/models/renalware/pathology/observations_within_date_range_query.rb +1 -1
  75. data/app/models/renalware/patient.rb +2 -2
  76. data/app/models/renalware/patients/bookmark.rb +2 -2
  77. data/app/models/renalware/patients/mdm_menu.rb +41 -0
  78. data/app/models/renalware/patients/mdm_patients_query.rb +1 -1
  79. data/app/models/renalware/patients/search_query.rb +1 -1
  80. data/app/models/renalware/patients/worry.rb +0 -1
  81. data/app/models/renalware/pd/mdm_patients_query.rb +1 -1
  82. data/app/models/renalware/problems/problem.rb +2 -1
  83. data/app/models/renalware/snippets/snippet_query.rb +1 -1
  84. data/app/models/renalware/surveys/question.rb +1 -2
  85. data/app/models/renalware/system/column_definition.rb +43 -0
  86. data/app/models/renalware/system/filter_definition.rb +29 -0
  87. data/app/models/renalware/system/update_user.rb +5 -0
  88. data/app/models/renalware/system/version.rb +11 -0
  89. data/app/models/renalware/system/view_metadata.rb +25 -0
  90. data/app/models/renalware/transplants/donation.rb +1 -1
  91. data/app/models/renalware/transplants/donor_followup.rb +0 -1
  92. data/app/models/renalware/transplants/failure_cause_description.rb +1 -1
  93. data/app/models/renalware/transplants/mdm_patients_query.rb +2 -2
  94. data/app/models/renalware/transplants/patient.rb +1 -1
  95. data/app/models/renalware/transplants/recipient_followup.rb +1 -3
  96. data/app/models/renalware/transplants/registration.rb +1 -3
  97. data/app/models/renalware/transplants/registrations/wait_list_query.rb +4 -4
  98. data/app/models/renalware/ukrdc/measurement_unit.rb +21 -0
  99. data/app/models/renalware/ukrdc/outgoing/rendering/lab_order.rb +30 -2
  100. data/app/models/renalware/ukrdc/paths.rb +1 -1
  101. data/app/models/renalware/ukrdc/treatment_timeline/prepare_tables.rb +1 -1
  102. data/app/models/renalware/ukrdc/treatment_timeline/remap_model_table_names_to_their_prepared_equivalents.rb +1 -1
  103. data/app/models/renalware/virology/vaccination.rb +5 -0
  104. data/app/policies/application_policy.rb +1 -1
  105. data/app/policies/renalware/medications/prescription_policy.rb +35 -0
  106. data/app/policies/renalware/system/view_metadata_policy.rb +17 -0
  107. data/app/presenters/concerns/renalware/accountable_presentation.rb +33 -0
  108. data/app/presenters/renalware/clinics/visit_presenter.rb +11 -0
  109. data/app/presenters/renalware/events/event_presenter.rb +11 -0
  110. data/app/presenters/renalware/mdm_presenter.rb +11 -0
  111. data/app/presenters/renalware/pathology/results_presenter.rb +1 -2
  112. data/app/presenters/renalware/renal/clinical_summary_presenter.rb +9 -6
  113. data/app/views/renalware/admin/playgrounds/show.html.slim +2 -6
  114. data/app/views/renalware/admin/users/edit.html.slim +9 -0
  115. data/app/views/renalware/admin/users/index.html.slim +6 -0
  116. data/app/views/renalware/admissions/admissions/_filters.html.slim +8 -16
  117. data/app/views/renalware/clinical/allergies/_list.html.slim +3 -1
  118. data/app/views/renalware/dashboard/dashboards/show.html.slim +1 -0
  119. data/app/views/renalware/hd/protocols/_virology.html.slim +4 -5
  120. data/app/views/renalware/letters/letters/_form.html.slim +1 -1
  121. data/app/views/renalware/letters/parts/_prescriptions.html.slim +4 -0
  122. data/app/views/renalware/mdm/_prescriptions.html.slim +4 -13
  123. data/app/views/renalware/mdm/prescriptions/_table.html.slim +3 -1
  124. data/app/views/renalware/medications/prescriptions/_current_hd.html.slim +13 -0
  125. data/app/views/renalware/medications/prescriptions/_filter_form.html.slim +26 -13
  126. data/app/views/renalware/medications/prescriptions/_form.html.slim +3 -2
  127. data/app/views/renalware/medications/prescriptions/_options.html.slim +3 -3
  128. data/app/views/renalware/medications/prescriptions/_table.html.slim +5 -4
  129. data/app/views/renalware/medications/prescriptions/_tables.html.slim +13 -16
  130. data/app/views/renalware/medications/prescriptions/index.html.slim +5 -4
  131. data/app/views/renalware/messaging/internal/messages/_form.html.slim +3 -0
  132. data/app/views/renalware/messaging/internal/messages/index.html.slim +36 -0
  133. data/app/views/renalware/navigation/_mdms.html.slim +5 -0
  134. data/app/views/renalware/navigation/_renal.html.slim +1 -0
  135. data/app/views/renalware/navigation/{_super_admin.html.slim → _super_admin.html.slim.dead} +0 -0
  136. data/app/views/renalware/pathology/code_groups/edit.html.slim +5 -5
  137. data/app/views/renalware/pathology/code_groups/index.html.slim +4 -5
  138. data/app/views/renalware/pathology/code_groups/show.html.slim +25 -26
  139. data/app/views/renalware/pathology/observation_descriptions/_filters.html.slim +14 -0
  140. data/app/views/renalware/pathology/observation_descriptions/edit.html.slim +21 -0
  141. data/app/views/renalware/pathology/observation_descriptions/index.html.slim +38 -0
  142. data/app/views/renalware/pathology/requests/requests/request_form/_crs_form.html.slim +1 -1
  143. data/app/views/renalware/patients/alerts/_list.html.slim +1 -0
  144. data/app/views/renalware/patients/mdms/_filters.html.slim +38 -0
  145. data/app/views/renalware/patients/mdms/_table.html.slim +72 -0
  146. data/app/views/renalware/patients/mdms/show.html.slim +18 -0
  147. data/app/views/renalware/patients/side_menu/_general.html.slim +4 -0
  148. data/app/views/renalware/patients/worryboard/_filters.html.slim +18 -13
  149. data/app/views/renalware/pd/_peritonitis_episodes.html.slim +13 -13
  150. data/app/views/renalware/pd/adequacy_results/_form_fields.html.slim +1 -1
  151. data/app/views/renalware/pd/adequacy_results/_table.html.slim +2 -2
  152. data/app/views/renalware/pd/dashboards/show.html.slim +3 -3
  153. data/app/views/renalware/pd/dashboards/show/_page_actions.html.slim +9 -16
  154. data/app/views/renalware/pd/dashboards/show/_pet_adequacies.html.slim +1 -1
  155. data/app/views/renalware/pd/peritonitis_episodes/show.html.slim +8 -6
  156. data/app/views/renalware/shared/_fieldset.html.slim +1 -2
  157. data/app/views/renalware/shared/_magellan_block.html.slim +1 -2
  158. data/app/views/renalware/system/view_metadata/_columns_table.html.slim +44 -0
  159. data/app/views/renalware/system/view_metadata/_filters_form.html.slim +19 -0
  160. data/app/views/renalware/system/view_metadata/_versions.html.slim +23 -0
  161. data/app/views/renalware/system/view_metadata/edit.html.slim +66 -0
  162. data/app/views/renalware/transplants/mdm/_prescriptions.html.slim +6 -22
  163. data/app/views/renalware/users/_filters.html.slim +11 -0
  164. data/app/views/renalware/users/index.html.slim +24 -0
  165. data/app/views/renalware/virology/vaccinations/_cell.html.slim +1 -1
  166. data/app/views/renalware/virology/vaccinations/_inputs.html.slim +1 -0
  167. data/app/views/renalware/virology/vaccinations/_toggled_cell.html.slim +2 -0
  168. data/config/initializers/core_extensions.rb +2 -2
  169. data/config/initializers/delayed_job.rb +1 -1
  170. data/config/initializers/inflections.rb +1 -0
  171. data/config/initializers/pagy.rb +5 -0
  172. data/config/locales/renalware/clinical/allergies.en.yml +1 -0
  173. data/config/locales/renalware/medications/tabbed_prescriptions_list_component.yml +15 -0
  174. data/config/locales/renalware/navigation/renal.en.yml +1 -0
  175. data/config/locales/renalware/patients/side_menu.en.yml +1 -0
  176. data/config/locales/renalware/virology/virology.en.yml +2 -0
  177. data/config/permissions.yml +1 -0
  178. data/config/routes.rb +1 -0
  179. data/config/routes/messaging.rb +9 -1
  180. data/config/routes/pathology.rb +1 -0
  181. data/config/routes/patients.rb +1 -0
  182. data/config/routes/system.rb +3 -0
  183. data/config/routes/users.rb +3 -0
  184. data/db/functions/convert_to_float_with_explicit_return_v01.sql +18 -0
  185. data/db/functions/update_current_observation_set_from_trigger_v05.sql +92 -0
  186. data/db/functions/update_pathology_observations_nresult_from_trigger_v01.sql +13 -0
  187. data/db/migrate/20200122182018_update_patient_current_modalities.rb +7 -0
  188. data/db/migrate/20200122182036_create_transplant_mdm_patients.rb +7 -0
  189. data/db/migrate/20200122190909_create_view_metadata.rb +44 -0
  190. data/db/migrate/20200131133223_create_hd_mdm_patients.rb +7 -0
  191. data/db/migrate/20200205185151_add_columns_to_system_view_metadata.rb +13 -0
  192. data/db/migrate/20200219113324_create_supportive_care_mdm_patients_view.rb +7 -0
  193. data/db/migrate/20200226145010_add_unique_indexes.rb +12 -11
  194. data/db/migrate/20200622120232_add_limits_to_path_obs_descriptions.rb +18 -0
  195. data/db/migrate/20200626081248_overload_convert_to_float_function.rb +13 -0
  196. data/db/migrate/20200626090256_add_nresult_to_pathology_observations.rb +29 -0
  197. data/db/migrate/20200628094228_add_prescriber_to_users.rb +14 -0
  198. data/db/migrate/20200812074223_add_public_flag_to_messages.rb +18 -0
  199. data/db/migrate/20200815150303_create_system_versions.rb +16 -0
  200. data/db/migrate/20200817085618_create_pd_mdm_patients.rb +7 -0
  201. data/db/migrate/20200817103930_create_low_clearance_mdm_patients.rb +7 -0
  202. data/db/migrate/20201001144512_update_fn_update_current_obs_set_triggerv05.rb +13 -0
  203. data/db/migrate/20201001145452_add_position_to_letter_descriptions.rb +5 -0
  204. data/db/migrate/20201009090959_make_drug_types_unique.rb +8 -0
  205. data/db/migrate/20201012160414_add_suggested_measurement_unit_to_pathology_observation_descriptions.rb +18 -0
  206. data/db/migrate/20201012171428_create_ukrdc_measurement_units.rb +18 -0
  207. data/db/migrate/20201015160542_add_position_to_drug_types.rb +31 -0
  208. data/db/migrate/20201020155510_add_bmi_to_clinic_visits.rb +31 -0
  209. data/db/migrate/20201020164524_update_pd_mdm_patients_view.rb +7 -0
  210. data/db/migrate/20201020170921_update_hd_mdm_patients_view.rb +7 -0
  211. data/db/migrate/20201020171139_update_low_clearance_mdm_patients_view.rb +7 -0
  212. data/db/migrate/20201021153832_update_supportive_care_mdm_patients_view.rb +7 -0
  213. data/db/migrate/20201021154809_update_transplant_mdm_patients_view.rb +7 -0
  214. data/db/migrate/20201023092859_remove_unused_indexes.rb +20 -0
  215. data/db/seeds/default/system/seeds.rb +1 -0
  216. data/db/seeds/default/system/view_metadata.rb +91 -0
  217. data/db/seeds/default/ukrdc/measurement_units.csv +12 -0
  218. data/db/seeds/default/ukrdc/measurement_units.rb +15 -0
  219. data/db/seeds/default/ukrdc/seeds.rb +1 -0
  220. data/db/triggers/update_pathology_observations_nresult_trigger_v01.sql +11 -0
  221. data/db/views/hd_mdm_patients_v01.sql +69 -0
  222. data/db/views/hd_mdm_patients_v02.sql +70 -0
  223. data/db/views/low_clearance_mdm_patients_v01.sql +38 -0
  224. data/db/views/low_clearance_mdm_patients_v02.sql +39 -0
  225. data/db/views/patient_current_modalities_v02.sql +18 -0
  226. data/db/views/pd_mdm_patients_v01.sql +42 -0
  227. data/db/views/pd_mdm_patients_v02.sql +43 -0
  228. data/db/views/supportive_care_mdm_patients_v01.sql +28 -0
  229. data/db/views/supportive_care_mdm_patients_v02.sql +29 -0
  230. data/db/views/transplant_mdm_patients_v01.sql +46 -0
  231. data/db/views/transplant_mdm_patients_v02.sql +47 -0
  232. data/lib/renalware/configuration.rb +2 -0
  233. data/lib/renalware/engine.rb +2 -2
  234. data/lib/renalware/version_number.rb +1 -1
  235. data/lib/tasks/db.rake +9 -0
  236. data/lib/tasks/pd.rake +28 -0
  237. data/spec/factories/drugs/drug_types.rb +5 -1
  238. data/spec/factories/messaging/internal/messages.rb +1 -0
  239. data/spec/factories/patients/practices.rb +1 -1
  240. data/spec/factories/patients/primary_care_physicians.rb +1 -1
  241. data/spec/factories/system/users.rb +1 -0
  242. data/spec/factories/system/view_metadata.rb +20 -0
  243. data/spec/support/capybara_helper.rb +2 -4
  244. data/spec/support/letters_spec_helper.rb +1 -1
  245. data/spec/support/matchers/validate_timeliness_of.rb +1 -1
  246. data/spec/support/pathology_spec_helper.rb +1 -2
  247. data/spec/support/policy_spec_helper.rb +12 -0
  248. data/vendor/assets/javascripts/foundation/foundation.alert.js +43 -0
  249. data/vendor/assets/javascripts/foundation/foundation.dropdown.js +468 -0
  250. data/vendor/assets/javascripts/foundation/foundation.js +727 -0
  251. data/vendor/assets/javascripts/foundation/foundation.reveal.js +522 -0
  252. data/vendor/assets/javascripts/foundation/foundation.tab.js +247 -0
  253. data/vendor/assets/javascripts/foundation/foundation.tooltip.js +348 -0
  254. data/vendor/assets/javascripts/foundation/foundation.topbar.js +458 -0
  255. data/vendor/assets/stylesheets/foundation/_functions.scss +156 -0
  256. data/vendor/assets/stylesheets/foundation/components/_alert-boxes.scss +128 -0
  257. data/vendor/assets/stylesheets/foundation/components/_buttons.scss +261 -0
  258. data/vendor/assets/stylesheets/foundation/components/_dropdown-buttons.scss +130 -0
  259. data/vendor/assets/stylesheets/foundation/components/_dropdown.scss +269 -0
  260. data/vendor/assets/stylesheets/foundation/components/_forms.scss +601 -0
  261. data/vendor/assets/stylesheets/foundation/components/_global.scss +566 -0
  262. data/vendor/assets/stylesheets/foundation/components/_grid.scss +292 -0
  263. data/vendor/assets/stylesheets/foundation/components/_labels.scss +106 -0
  264. data/vendor/assets/stylesheets/foundation/components/_pagination.scss +163 -0
  265. data/vendor/assets/stylesheets/foundation/components/_panels.scss +107 -0
  266. data/vendor/assets/stylesheets/foundation/components/_reveal.scss +212 -0
  267. data/vendor/assets/stylesheets/foundation/components/_side-nav.scss +120 -0
  268. data/vendor/assets/stylesheets/foundation/components/_split-buttons.scss +203 -0
  269. data/vendor/assets/stylesheets/foundation/components/_sub-nav.scss +125 -0
  270. data/vendor/assets/stylesheets/foundation/components/_tables.scss +135 -0
  271. data/vendor/assets/stylesheets/foundation/components/_tabs.scss +142 -0
  272. data/vendor/assets/stylesheets/foundation/components/_tooltips.scss +142 -0
  273. data/vendor/assets/stylesheets/foundation/components/_top-bar.scss +745 -0
  274. data/vendor/assets/stylesheets/foundation/components/_type.scss +525 -0
  275. data/vendor/assets/stylesheets/foundation/components/_visibility.scss +425 -0
  276. metadata +162 -64
  277. data/app/views/renalware/pd/infection_organisms/_edit.html.slim.obsolete +0 -16
  278. data/app/views/renalware/transplants/donor_operations/_sections_nav.html.slim +0 -11
  279. data/app/views/renalware/transplants/donor_workups/_sections_nav.html.slim +0 -15
  280. data/app/views/renalware/transplants/recipient_operations/_sections_nav.html.slim +0 -14
  281. data/app/views/renalware/transplants/recipient_workups/_sections_nav.html.slim +0 -15
  282. data/lib/core_extensions/active_record/sort.rb +0 -52
  283. data/spec/support/pages/accesses/procedure_page.rb +0 -53
  284. data/spec/support/pages/accesses/profile_page.rb +0 -45
  285. data/spec/support/pages/admissions/consults_page.rb +0 -26
  286. data/spec/support/pages/clinical/allergy_page.rb +0 -74
  287. data/spec/support/pages/clinical/profile_page.rb +0 -28
  288. data/spec/support/pages/hd/prescription_administration_dialog.rb +0 -132
  289. data/spec/support/pages/letters/form.rb +0 -63
  290. data/spec/support/pages/letters/mailshots/form.rb +0 -58
  291. data/spec/support/pages/letters/patient_letters.rb +0 -20
  292. data/spec/support/pages/low_clearance/profile_page.rb +0 -70
  293. data/spec/support/pages/medications/home_delivery_dialog.rb +0 -77
  294. data/spec/support/pages/medications/prescription_fom.rb +0 -62
  295. data/spec/support/pages/page_object.rb +0 -10
@@ -0,0 +1,522 @@
1
+ ;(function ($, window, document, undefined) {
2
+ 'use strict';
3
+
4
+ var openModals = [];
5
+
6
+ Foundation.libs.reveal = {
7
+ name : 'reveal',
8
+
9
+ version : '5.5.3',
10
+
11
+ locked : false,
12
+
13
+ settings : {
14
+ animation : 'fadeAndPop',
15
+ animation_speed : 250,
16
+ close_on_background_click : true,
17
+ close_on_esc : true,
18
+ dismiss_modal_class : 'close-reveal-modal',
19
+ multiple_opened : false,
20
+ bg_class : 'reveal-modal-bg',
21
+ root_element : 'body',
22
+ open : function(){},
23
+ opened : function(){},
24
+ close : function(){},
25
+ closed : function(){},
26
+ on_ajax_error: $.noop,
27
+ bg : $('.reveal-modal-bg'),
28
+ css : {
29
+ open : {
30
+ 'opacity' : 0,
31
+ 'visibility' : 'visible',
32
+ 'display' : 'block'
33
+ },
34
+ close : {
35
+ 'opacity' : 1,
36
+ 'visibility' : 'hidden',
37
+ 'display' : 'none'
38
+ }
39
+ }
40
+ },
41
+
42
+ init : function (scope, method, options) {
43
+ $.extend(true, this.settings, method, options);
44
+ this.bindings(method, options);
45
+ },
46
+
47
+ events : function (scope) {
48
+ var self = this,
49
+ S = self.S;
50
+
51
+ S(this.scope)
52
+ .off('.reveal')
53
+ .on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) {
54
+ e.preventDefault();
55
+
56
+ if (!self.locked) {
57
+ var element = S(this),
58
+ ajax = element.data(self.data_attr('reveal-ajax')),
59
+ replaceContentSel = element.data(self.data_attr('reveal-replace-content'));
60
+
61
+ self.locked = true;
62
+
63
+ if (typeof ajax === 'undefined') {
64
+ self.open.call(self, element);
65
+ } else {
66
+ var url = ajax === true ? element.attr('href') : ajax;
67
+ self.open.call(self, element, {url : url}, { replaceContentSel : replaceContentSel });
68
+ }
69
+ }
70
+ });
71
+
72
+ S(document)
73
+ .on('click.fndtn.reveal', this.close_targets(), function (e) {
74
+ e.preventDefault();
75
+ if (!self.locked) {
76
+ var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init') || self.settings,
77
+ bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0];
78
+
79
+ if (bg_clicked) {
80
+ if (settings.close_on_background_click) {
81
+ e.stopPropagation();
82
+ } else {
83
+ return;
84
+ }
85
+ }
86
+
87
+ self.locked = true;
88
+ self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open:not(.toback)') : S(this).closest('[' + self.attr_name() + ']'));
89
+ }
90
+ });
91
+
92
+ if (S('[' + self.attr_name() + ']', this.scope).length > 0) {
93
+ S(this.scope)
94
+ // .off('.reveal')
95
+ .on('open.fndtn.reveal', this.settings.open)
96
+ .on('opened.fndtn.reveal', this.settings.opened)
97
+ .on('opened.fndtn.reveal', this.open_video)
98
+ .on('close.fndtn.reveal', this.settings.close)
99
+ .on('closed.fndtn.reveal', this.settings.closed)
100
+ .on('closed.fndtn.reveal', this.close_video);
101
+ } else {
102
+ S(this.scope)
103
+ // .off('.reveal')
104
+ .on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open)
105
+ .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened)
106
+ .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video)
107
+ .on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close)
108
+ .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed)
109
+ .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video);
110
+ }
111
+
112
+ return true;
113
+ },
114
+
115
+ // PATCH #3: turning on key up capture only when a reveal window is open
116
+ key_up_on : function (scope) {
117
+ var self = this;
118
+
119
+ // PATCH #1: fixing multiple keyup event trigger from single key press
120
+ self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) {
121
+ var open_modal = self.S('[' + self.attr_name() + '].open'),
122
+ settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ;
123
+ // PATCH #2: making sure that the close event can be called only while unlocked,
124
+ // so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window.
125
+ if ( settings && event.which === 27 && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key
126
+ self.close.call(self, open_modal);
127
+ }
128
+ });
129
+
130
+ return true;
131
+ },
132
+
133
+ // PATCH #3: turning on key up capture only when a reveal window is open
134
+ key_up_off : function (scope) {
135
+ this.S('body').off('keyup.fndtn.reveal');
136
+ return true;
137
+ },
138
+
139
+ open : function (target, ajax_settings) {
140
+ var self = this,
141
+ modal;
142
+
143
+ if (target) {
144
+ if (typeof target.selector !== 'undefined') {
145
+ // Find the named node; only use the first one found, since the rest of the code assumes there's only one node
146
+ modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first();
147
+ } else {
148
+ modal = self.S(this.scope);
149
+
150
+ ajax_settings = target;
151
+ }
152
+ } else {
153
+ modal = self.S(this.scope);
154
+ }
155
+
156
+ var settings = modal.data(self.attr_name(true) + '-init');
157
+ settings = settings || this.settings;
158
+
159
+
160
+ if (modal.hasClass('open') && target !== undefined && target.attr('data-reveal-id') == modal.attr('id')) {
161
+ return self.close(modal);
162
+ }
163
+
164
+ if (!modal.hasClass('open')) {
165
+ var open_modal = self.S('[' + self.attr_name() + '].open');
166
+
167
+ if (typeof modal.data('css-top') === 'undefined') {
168
+ modal.data('css-top', parseInt(modal.css('top'), 10))
169
+ .data('offset', this.cache_offset(modal));
170
+ }
171
+
172
+ modal.attr('tabindex','0').attr('aria-hidden','false');
173
+
174
+ this.key_up_on(modal); // PATCH #3: turning on key up capture only when a reveal window is open
175
+
176
+ // Prevent namespace event from triggering twice
177
+ modal.on('open.fndtn.reveal', function(e) {
178
+ if (e.namespace !== 'fndtn.reveal') return;
179
+ });
180
+
181
+ modal.on('open.fndtn.reveal').trigger('open.fndtn.reveal');
182
+
183
+ if (open_modal.length < 1) {
184
+ this.toggle_bg(modal, true);
185
+ }
186
+
187
+ if (typeof ajax_settings === 'string') {
188
+ ajax_settings = {
189
+ url : ajax_settings
190
+ };
191
+ }
192
+
193
+ var openModal = function() {
194
+ if(open_modal.length > 0) {
195
+ if(settings.multiple_opened) {
196
+ self.to_back(open_modal);
197
+ } else {
198
+ self.hide(open_modal, settings.css.close);
199
+ }
200
+ }
201
+
202
+ // bl: add the open_modal that isn't already in the background to the openModals array
203
+ if(settings.multiple_opened) {
204
+ openModals.push(modal);
205
+ }
206
+
207
+ self.show(modal, settings.css.open);
208
+ };
209
+
210
+ if (typeof ajax_settings === 'undefined' || !ajax_settings.url) {
211
+ openModal();
212
+ } else {
213
+ var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null;
214
+ $.extend(ajax_settings, {
215
+ success : function (data, textStatus, jqXHR) {
216
+ if ( $.isFunction(old_success) ) {
217
+ var result = old_success(data, textStatus, jqXHR);
218
+ if (typeof result == 'string') {
219
+ data = result;
220
+ }
221
+ }
222
+
223
+ if (typeof options !== 'undefined' && typeof options.replaceContentSel !== 'undefined') {
224
+ modal.find(options.replaceContentSel).html(data);
225
+ } else {
226
+ modal.html(data);
227
+ }
228
+
229
+ self.S(modal).foundation('section', 'reflow');
230
+ self.S(modal).children().foundation();
231
+
232
+ openModal();
233
+ }
234
+ });
235
+
236
+ // check for if user initalized with error callback
237
+ if (settings.on_ajax_error !== $.noop) {
238
+ $.extend(ajax_settings, {
239
+ error : settings.on_ajax_error
240
+ });
241
+ }
242
+
243
+ $.ajax(ajax_settings);
244
+ }
245
+ }
246
+ self.S(window).trigger('resize');
247
+ },
248
+
249
+ close : function (modal) {
250
+ var modal = modal && modal.length ? modal : this.S(this.scope),
251
+ open_modals = this.S('[' + this.attr_name() + '].open'),
252
+ settings = modal.data(this.attr_name(true) + '-init') || this.settings,
253
+ self = this;
254
+
255
+ if (open_modals.length > 0) {
256
+
257
+ modal.removeAttr('tabindex','0').attr('aria-hidden','true');
258
+
259
+ this.locked = true;
260
+ this.key_up_off(modal); // PATCH #3: turning on key up capture only when a reveal window is open
261
+
262
+ modal.trigger('close.fndtn.reveal');
263
+
264
+ if ((settings.multiple_opened && open_modals.length === 1) || !settings.multiple_opened || modal.length > 1) {
265
+ self.toggle_bg(modal, false);
266
+ self.to_front(modal);
267
+ }
268
+
269
+ if (settings.multiple_opened) {
270
+ var isCurrent = modal.is(':not(.toback)');
271
+ self.hide(modal, settings.css.close, settings);
272
+ if(isCurrent) {
273
+ // remove the last modal since it is now closed
274
+ openModals.pop();
275
+ } else {
276
+ // if this isn't the current modal, then find it in the array and remove it
277
+ openModals = $.grep(openModals, function(elt) {
278
+ var isThis = elt[0]===modal[0];
279
+ if(isThis) {
280
+ // since it's not currently in the front, put it in the front now that it is hidden
281
+ // so that if it's re-opened, it won't be .toback
282
+ self.to_front(modal);
283
+ }
284
+ return !isThis;
285
+ });
286
+ }
287
+ // finally, show the next modal in the stack, if there is one
288
+ if(openModals.length>0) {
289
+ self.to_front(openModals[openModals.length - 1]);
290
+ }
291
+ } else {
292
+ self.hide(open_modals, settings.css.close, settings);
293
+ }
294
+ }
295
+ },
296
+
297
+ close_targets : function () {
298
+ var base = '.' + this.settings.dismiss_modal_class;
299
+
300
+ if (this.settings.close_on_background_click) {
301
+ return base + ', .' + this.settings.bg_class;
302
+ }
303
+
304
+ return base;
305
+ },
306
+
307
+ toggle_bg : function (modal, state) {
308
+ if (this.S('.' + this.settings.bg_class).length === 0) {
309
+ this.settings.bg = $('<div />', {'class': this.settings.bg_class})
310
+ .appendTo('body').hide();
311
+ }
312
+
313
+ var visible = this.settings.bg.filter(':visible').length > 0;
314
+ if ( state != visible ) {
315
+ if ( state == undefined ? visible : !state ) {
316
+ this.hide(this.settings.bg);
317
+ } else {
318
+ this.show(this.settings.bg);
319
+ }
320
+ }
321
+ },
322
+
323
+ show : function (el, css) {
324
+ // is modal
325
+ if (css) {
326
+ var settings = el.data(this.attr_name(true) + '-init') || this.settings,
327
+ root_element = settings.root_element,
328
+ context = this;
329
+
330
+ if (el.parent(root_element).length === 0) {
331
+ var placeholder = el.wrap('<div style="display: none;" />').parent();
332
+
333
+ el.on('closed.fndtn.reveal.wrapped', function () {
334
+ el.detach().appendTo(placeholder);
335
+ el.unwrap().unbind('closed.fndtn.reveal.wrapped');
336
+ });
337
+
338
+ el.detach().appendTo(root_element);
339
+ }
340
+
341
+ var animData = getAnimationData(settings.animation);
342
+ if (!animData.animate) {
343
+ this.locked = false;
344
+ }
345
+ if (animData.pop) {
346
+ css.top = $(window).scrollTop() - el.data('offset') + 'px';
347
+ var end_css = {
348
+ top: $(window).scrollTop() + el.data('css-top') + 'px',
349
+ opacity: 1
350
+ };
351
+
352
+ return setTimeout(function () {
353
+ return el
354
+ .css(css)
355
+ .animate(end_css, settings.animation_speed, 'linear', function () {
356
+ context.locked = false;
357
+ el.trigger('opened.fndtn.reveal');
358
+ })
359
+ .addClass('open');
360
+ }, settings.animation_speed / 2);
361
+ }
362
+
363
+ css.top = $(window).scrollTop() + el.data('css-top') + 'px';
364
+
365
+ if (animData.fade) {
366
+ var end_css = {opacity: 1};
367
+
368
+ return setTimeout(function () {
369
+ return el
370
+ .css(css)
371
+ .animate(end_css, settings.animation_speed, 'linear', function () {
372
+ context.locked = false;
373
+ el.trigger('opened.fndtn.reveal');
374
+ })
375
+ .addClass('open');
376
+ }, settings.animation_speed / 2);
377
+ }
378
+
379
+ return el.css(css).show().css({opacity : 1}).addClass('open').trigger('opened.fndtn.reveal');
380
+ }
381
+
382
+ var settings = this.settings;
383
+
384
+ // should we animate the background?
385
+ if (getAnimationData(settings.animation).fade) {
386
+ return el.fadeIn(settings.animation_speed / 2);
387
+ }
388
+
389
+ this.locked = false;
390
+
391
+ return el.show();
392
+ },
393
+
394
+ to_back : function(el) {
395
+ el.addClass('toback');
396
+ },
397
+
398
+ to_front : function(el) {
399
+ el.removeClass('toback');
400
+ },
401
+
402
+ hide : function (el, css) {
403
+ // is modal
404
+ if (css) {
405
+ var settings = el.data(this.attr_name(true) + '-init'),
406
+ context = this;
407
+ settings = settings || this.settings;
408
+
409
+ var animData = getAnimationData(settings.animation);
410
+ if (!animData.animate) {
411
+ this.locked = false;
412
+ }
413
+ if (animData.pop) {
414
+ var end_css = {
415
+ top: - $(window).scrollTop() - el.data('offset') + 'px',
416
+ opacity: 0
417
+ };
418
+
419
+ return setTimeout(function () {
420
+ return el
421
+ .animate(end_css, settings.animation_speed, 'linear', function () {
422
+ context.locked = false;
423
+ el.css(css).trigger('closed.fndtn.reveal');
424
+ })
425
+ .removeClass('open');
426
+ }, settings.animation_speed / 2);
427
+ }
428
+
429
+ if (animData.fade) {
430
+ var end_css = {opacity : 0};
431
+
432
+ return setTimeout(function () {
433
+ return el
434
+ .animate(end_css, settings.animation_speed, 'linear', function () {
435
+ context.locked = false;
436
+ el.css(css).trigger('closed.fndtn.reveal');
437
+ })
438
+ .removeClass('open');
439
+ }, settings.animation_speed / 2);
440
+ }
441
+
442
+ return el.hide().css(css).removeClass('open').trigger('closed.fndtn.reveal');
443
+ }
444
+
445
+ var settings = this.settings;
446
+
447
+ // should we animate the background?
448
+ if (getAnimationData(settings.animation).fade) {
449
+ return el.fadeOut(settings.animation_speed / 2);
450
+ }
451
+
452
+ return el.hide();
453
+ },
454
+
455
+ close_video : function (e) {
456
+ var video = $('.flex-video', e.target),
457
+ iframe = $('iframe', video);
458
+
459
+ if (iframe.length > 0) {
460
+ iframe.attr('data-src', iframe[0].src);
461
+ iframe.attr('src', iframe.attr('src'));
462
+ video.hide();
463
+ }
464
+ },
465
+
466
+ open_video : function (e) {
467
+ var video = $('.flex-video', e.target),
468
+ iframe = video.find('iframe');
469
+
470
+ if (iframe.length > 0) {
471
+ var data_src = iframe.attr('data-src');
472
+ if (typeof data_src === 'string') {
473
+ iframe[0].src = iframe.attr('data-src');
474
+ } else {
475
+ var src = iframe[0].src;
476
+ iframe[0].src = undefined;
477
+ iframe[0].src = src;
478
+ }
479
+ video.show();
480
+ }
481
+ },
482
+
483
+ data_attr : function (str) {
484
+ if (this.namespace.length > 0) {
485
+ return this.namespace + '-' + str;
486
+ }
487
+
488
+ return str;
489
+ },
490
+
491
+ cache_offset : function (modal) {
492
+ var offset = modal.show().height() + parseInt(modal.css('top'), 10) + modal.scrollY;
493
+
494
+ modal.hide();
495
+
496
+ return offset;
497
+ },
498
+
499
+ off : function () {
500
+ $(this.scope).off('.fndtn.reveal');
501
+ },
502
+
503
+ reflow : function () {}
504
+ };
505
+
506
+ /*
507
+ * getAnimationData('popAndFade') // {animate: true, pop: true, fade: true}
508
+ * getAnimationData('fade') // {animate: true, pop: false, fade: true}
509
+ * getAnimationData('pop') // {animate: true, pop: true, fade: false}
510
+ * getAnimationData('foo') // {animate: false, pop: false, fade: false}
511
+ * getAnimationData(null) // {animate: false, pop: false, fade: false}
512
+ */
513
+ function getAnimationData(str) {
514
+ var fade = /fade/i.test(str);
515
+ var pop = /pop/i.test(str);
516
+ return {
517
+ animate : fade || pop,
518
+ pop : pop,
519
+ fade : fade
520
+ };
521
+ }
522
+ }(jQuery, window, window.document));