renalware-core 2.0.51 → 2.0.52

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/app/assets/stylesheets/renalware/application.scss +2 -1
  4. data/app/assets/stylesheets/renalware/base/_mixins.scss +3 -3
  5. data/app/assets/stylesheets/renalware/base/_variables.scss +33 -33
  6. data/app/assets/stylesheets/renalware/clipboard.scss +2 -2
  7. data/app/assets/stylesheets/renalware/hd_diary_pdf.scss +8 -8
  8. data/app/assets/stylesheets/renalware/lib/_foundation_and_overrides.scss +25 -25
  9. data/app/assets/stylesheets/renalware/lib/_select2-foundation5-overrides.scss +12 -0
  10. data/app/assets/stylesheets/renalware/modules/_admissions.scss +3 -3
  11. data/app/assets/stylesheets/renalware/modules/_clinical.scss +34 -33
  12. data/app/assets/stylesheets/renalware/modules/_clipboard.scss +3 -3
  13. data/app/assets/stylesheets/renalware/modules/_dashboard.scss +2 -2
  14. data/app/assets/stylesheets/renalware/modules/_events.scss +1 -1
  15. data/app/assets/stylesheets/renalware/modules/_feeds.scss +1 -1
  16. data/app/assets/stylesheets/renalware/modules/_hd.scss +44 -39
  17. data/app/assets/stylesheets/renalware/modules/_letters.scss +6 -6
  18. data/app/assets/stylesheets/renalware/modules/_medications.scss +15 -4
  19. data/app/assets/stylesheets/renalware/modules/_messaging.scss +2 -2
  20. data/app/assets/stylesheets/renalware/modules/_pathology.scss +24 -15
  21. data/app/assets/stylesheets/renalware/modules/_patients.scss +35 -29
  22. data/app/assets/stylesheets/renalware/modules/_pd.scss +10 -6
  23. data/app/assets/stylesheets/renalware/modules/_problems.scss +1 -1
  24. data/app/assets/stylesheets/renalware/modules/_renal.scss +3 -3
  25. data/app/assets/stylesheets/renalware/modules/_snippets.scss +29 -20
  26. data/app/assets/stylesheets/renalware/modules/_system.scss +11 -3
  27. data/app/assets/stylesheets/renalware/modules/_users.scss +5 -5
  28. data/app/assets/stylesheets/renalware/partials/_animation.scss +1 -0
  29. data/app/assets/stylesheets/renalware/partials/_animations.scss +1 -0
  30. data/app/assets/stylesheets/renalware/partials/_autocomplete.scss +5 -5
  31. data/app/assets/stylesheets/renalware/partials/_beta_banner.scss +1 -1
  32. data/app/assets/stylesheets/renalware/partials/_button.scss +2 -2
  33. data/app/assets/stylesheets/renalware/partials/_components.scss +1 -1
  34. data/app/assets/stylesheets/renalware/partials/_datepicker.scss +1 -1
  35. data/app/assets/stylesheets/renalware/partials/_disabled_block.scss +2 -2
  36. data/app/assets/stylesheets/renalware/partials/_document.scss +6 -6
  37. data/app/assets/stylesheets/renalware/partials/_editor.scss +11 -11
  38. data/app/assets/stylesheets/renalware/partials/_errors.scss +8 -6
  39. data/app/assets/stylesheets/renalware/partials/_forms.scss +27 -27
  40. data/app/assets/stylesheets/renalware/partials/_highlight.scss +1 -1
  41. data/app/assets/stylesheets/renalware/partials/_iframe.scss +1 -1
  42. data/app/assets/stylesheets/renalware/partials/_layout.scss +25 -23
  43. data/app/assets/stylesheets/renalware/partials/_lists.scss +8 -7
  44. data/app/assets/stylesheets/renalware/partials/_mdm.scss +3 -3
  45. data/app/assets/stylesheets/renalware/partials/_modal_window.scss +23 -21
  46. data/app/assets/stylesheets/renalware/partials/_navigation.scss +36 -36
  47. data/app/assets/stylesheets/renalware/partials/_patient_search.scss +2 -2
  48. data/app/assets/stylesheets/renalware/partials/_simple_form.scss +2 -2
  49. data/app/assets/stylesheets/renalware/partials/_tables.scss +48 -46
  50. data/app/assets/stylesheets/renalware/partials/_tabs.scss +8 -8
  51. data/app/assets/stylesheets/renalware/partials/_toggle.scss +3 -3
  52. data/app/assets/stylesheets/renalware/partials/_tooltip.scss +1 -342
  53. data/app/assets/stylesheets/renalware/partials/_typography.scss +4 -4
  54. data/app/assets/stylesheets/renalware/pdf.scss +7 -7
  55. data/app/assets/stylesheets/renalware/print/pathology_request_forms.scss +4 -4
  56. data/app/assets/stylesheets/renalware/protocol_pdf.scss +50 -42
  57. data/app/assets/stylesheets/renalware/table_pdf.scss +27 -24
  58. data/app/assets/stylesheets/renalware/watermark.scss +3 -3
  59. data/app/controllers/renalware/accesses/assessments_controller.rb +12 -19
  60. data/app/controllers/renalware/base_controller.rb +2 -0
  61. data/app/controllers/renalware/events/events_controller.rb +12 -11
  62. data/app/controllers/renalware/hd/current_profile_controller.rb +2 -8
  63. data/app/controllers/renalware/hd/mdm_patients_controller.rb +9 -3
  64. data/app/controllers/renalware/letters/electronic_receipts_controller.rb +0 -5
  65. data/app/controllers/renalware/letters/letters_controller.rb +0 -6
  66. data/app/controllers/renalware/low_clearance/profiles_controller.rb +1 -8
  67. data/app/controllers/renalware/patients/patients_controller.rb +5 -15
  68. data/app/controllers/renalware/pd/assessments_controller.rb +3 -16
  69. data/app/controllers/renalware/pd/training_sessions_controller.rb +6 -20
  70. data/app/controllers/renalware/renal/profiles_controller.rb +1 -9
  71. data/app/controllers/renalware/research/studies_controller.rb +3 -2
  72. data/app/controllers/renalware/research/study_participants_controller.rb +9 -3
  73. data/app/controllers/renalware/transplants/donor_workups_controller.rb +1 -10
  74. data/app/controllers/renalware/virology/dashboards_controller.rb +1 -1
  75. data/app/controllers/renalware/virology/profiles_controller.rb +1 -14
  76. data/app/helpers/renalware/admin_helper.rb +4 -0
  77. data/app/models/concerns/renalware/ordered_set_scope.rb +1 -1
  78. data/app/models/concerns/renalware/patient_pathology_scopes.rb +8 -2
  79. data/app/models/concerns/renalware/supersedeable.rb +10 -3
  80. data/app/models/renalware/admissions/consult_query.rb +14 -0
  81. data/app/models/renalware/hd/mdm_patients_form.rb +8 -1
  82. data/app/models/renalware/letters/electronic_recipient_options.rb +11 -3
  83. data/app/models/renalware/letters/letter.rb +3 -3
  84. data/app/models/renalware/letters/printing/create_pdf_by_interleaving_address_sheet_and_letter_for_each_recipient.rb +1 -0
  85. data/app/models/renalware/letters/recipient.rb +12 -1
  86. data/app/models/renalware/low_clearance.rb +1 -1
  87. data/app/models/renalware/low_clearance/mdm_patients_query.rb +3 -1
  88. data/app/models/renalware/messaging.rb +0 -4
  89. data/app/models/renalware/messaging/internal/recipient_options.rb +14 -4
  90. data/app/models/renalware/pathology/observation_descriptions_by_code_query.rb +1 -1
  91. data/app/models/renalware/pathology/ordered_patient_query.rb +1 -1
  92. data/app/models/renalware/research/study_participant.rb +2 -0
  93. data/app/models/renalware/research/study_participants_query.rb +20 -0
  94. data/app/models/renalware/transplants/registrations/wait_list_query.rb +14 -0
  95. data/app/models/renalware/ukrdc/send_patients.rb +1 -13
  96. data/app/models/renalware/user.rb +4 -1
  97. data/app/policies/renalware/virology/{dasboard_policy.rb → dashboard_policy.rb} +0 -0
  98. data/app/presenters/renalware/letters/letter_presenter.rb +24 -6
  99. data/app/presenters/renalware/transplants/consent_presenter.rb +2 -1
  100. data/app/values/renalware/address.rb +1 -1
  101. data/app/views/renalware/admin/users/_tabs.html.slim +4 -2
  102. data/app/views/renalware/admissions/consults/_table.html.slim +1 -2
  103. data/app/views/renalware/api/ukrdc/patients/_allergies.xml.builder +1 -1
  104. data/app/views/renalware/api/ukrdc/patients/_diagnoses.xml.builder +8 -3
  105. data/app/views/renalware/api/ukrdc/patients/_documents.xml.builder +1 -1
  106. data/app/views/renalware/events/swabs/_list.html.slim +1 -1
  107. data/app/views/renalware/hd/current_profile/_form.html.slim +25 -21
  108. data/app/views/renalware/hd/mdm_patients/_filters.html.slim +9 -4
  109. data/app/views/renalware/letters/letters/_additional_ccs.html.slim +5 -4
  110. data/app/views/renalware/letters/letters/edit.html.slim +1 -0
  111. data/app/views/renalware/letters/letters/new.html.slim +1 -1
  112. data/app/views/renalware/patients/patients/edit.html.slim +2 -2
  113. data/app/views/renalware/renal/registry_preflight_checks/_filters.html.slim +3 -3
  114. data/app/views/renalware/renal/registry_preflight_checks/_table.html.slim +9 -5
  115. data/app/views/renalware/renal/registry_preflight_checks/deaths.html.slim +1 -1
  116. data/app/views/renalware/reporting/report_mailer/daily_summary.html.slim +2 -1
  117. data/app/views/renalware/research/studies/_filters.html.slim +14 -0
  118. data/app/views/renalware/research/studies/index.html.slim +7 -4
  119. data/app/views/renalware/research/study_participants/_filters.html.slim +13 -0
  120. data/app/views/renalware/research/study_participants/_table.html.slim +2 -2
  121. data/app/views/renalware/research/study_participants/create.js.erb +1 -1
  122. data/app/views/renalware/research/study_participants/index.html.slim +4 -1
  123. data/app/views/renalware/research/study_participants/update.js.erb +1 -1
  124. data/app/views/renalware/shared/documents/_year_dated_confirmation_input.html.slim +1 -1
  125. data/app/views/renalware/transplants/wait_lists/show.html.slim +2 -2
  126. data/db/migrate/20181008144324_update_daily_letters_report_view_to_version_2.rb +13 -0
  127. data/db/migrate/20181008145159_create_reporting_daily_ukrdc_view.rb +11 -0
  128. data/db/migrate/20181013115138_update_reporting_daily_pathology_view_to_v2.rb +13 -0
  129. data/db/views/reporting_daily_letters_v02.sql +4 -0
  130. data/db/views/reporting_daily_pathology_v02.sql +18 -0
  131. data/db/views/reporting_daily_ukrdc_v01.sql +2 -0
  132. data/lib/migration_helper.rb +11 -0
  133. data/lib/renalware/version.rb +1 -1
  134. data/lib/sql/{index_case_stmt.rb → indexed_case_stmt.rb} +2 -2
  135. data/lib/tasks/ukrdc.rake +2 -1
  136. data/spec/factories/patients/practices.rb +2 -1
  137. data/spec/factories/patients/primary_care_physicians.rb +1 -1
  138. data/spec/support/pages/admissions/consults_page.rb +26 -0
  139. data/spec/support/pages/page_object.rb +10 -0
  140. data/spec/support/shared_examples/paranoia_examples.rb +2 -2
  141. data/vendor/assets/stylesheets/renalware/balloon.css +383 -0
  142. data/{app/assets/stylesheets/renalware/lib/_select2-foundation5.scss → vendor/assets/stylesheets/renalware/select2-foundation5.css} +180 -78
  143. metadata +26 -37
  144. data/app/models/renalware/clinics/consultant.rb +0 -10
  145. data/app/models/renalware/events/patient_listener.rb +0 -10
  146. data/app/models/renalware/letters/discharge_summary.rb +0 -10
  147. data/app/presenters/renalware/clinical/body_composition_presenter.rb +0 -11
  148. data/app/presenters/renalware/pathology/patient_presenter.rb +0 -13
  149. data/app/presenters/renalware/pathology/requests/global_rule_presenter.rb +0 -15
  150. data/app/views/renalware/events/types/_header.html.slim.dead +0 -4
  151. data/app/views/renalware/modalities/descriptions/_header.html.slim.dead +0 -5
  152. data/app/views/renalware/transplants/mdm_patients/_filters.html.slim.dead +0 -8
  153. data/config/locales/renalware/reporting/reporting_daily.en.yml +0 -7
@@ -0,0 +1,13 @@
1
+ .search-form.filters
2
+ = simple_form_for query,
3
+ as: :q,
4
+ url: research_study_participants_path(study),
5
+ method: :get do |f|
6
+ .row
7
+ .columns.medium-3
8
+ = f.input :identity_match, label: "Search by Hosp/NHS no or name"
9
+
10
+ .columns.medium-4.actions.end
11
+ = f.submit t("helpers.submit.filter"), class: "button", name: nil
12
+ span= " or "
13
+ = link_to t("helpers.reset"), research_study_participants_path(study)
@@ -2,8 +2,8 @@
2
2
  table
3
3
  thead
4
4
  tr
5
- th.col-width-date Joined on
6
- th.col-width-date Left on
5
+ th.col-width-date= sort_link(query, :joined_on, "Joined on")
6
+ th.col-width-date= sort_link(query, :left_on, "Left on")
7
7
  th Patient
8
8
  th.col-width-nhs-no NHS Number
9
9
  th.col-width-reference-no Hosp no
@@ -1,3 +1,3 @@
1
1
  <%= refresh(".flash-message", partial: "renalware/shared/flash_messages", locals: local_assigns) %>
2
- $(".study-participants-table").replaceWith("<%= j(render 'table', study: study, participants: participants) %>");
2
+ $(".study-participants-table").replaceWith("<%= j(render 'table', **local_assigns) %>");
3
3
  $("#study-participant-modal").foundation('reveal', 'close');
@@ -5,6 +5,9 @@
5
5
  class: :button,
6
6
  data: { "reveal-id" => "study-participant-modal", "reveal-ajax" => "true" })
7
7
 
8
+ = content_for(:filters) do
9
+ = render "filters", study: study, query: query
10
+
8
11
  = within_admin_layout(\
9
12
  title: "Participants",
10
13
  breadcrumbs: [\
@@ -20,6 +23,6 @@
20
23
  br
21
24
  = "Leader: #{study.leader}"
22
25
 
23
- = render "table", study: study, participants: participants
26
+ = render "table", study: study, participants: participants, query: query
24
27
 
25
28
  #study-participant-modal.reveal-modal.small(data-reveal)
@@ -1,3 +1,3 @@
1
1
  <%= refresh(".flash-message", partial: "renalware/shared/flash_messages", locals: local_assigns) %>
2
- $(".study-participants-table").replaceWith("<%= j(render 'table', study: study, participants: participants) %>");
2
+ $(".study-participants-table").replaceWith("<%= j(render 'table', **local_assigns) %>");
3
3
  $("#study-participant-modal").foundation('reveal', 'close');
@@ -1,5 +1,5 @@
1
1
  = f.simple_fields_for attribute, f.object.public_send(attribute) do |fd|
2
- tr
2
+ tr(class="year-dated-confirmation--#{attribute}")
3
3
  td= fd.label :status, f.object.class.human_attribute_name(attribute)
4
4
  td= fd.input :status, as: :inline_radio_buttons,
5
5
  label: false, wrapper: "vertical_form"
@@ -27,8 +27,8 @@
27
27
  th Sex
28
28
  th= sort_link([:renalware, q], :patient_current_modality_description_name, "Modality")
29
29
  th= sort_link([:renalware, q], :hd_site, "HD Site")
30
- th Status
31
- th UKT Status
30
+ th= sort_link([:renalware, q], :patient_current_status_description_name, "Status")
31
+ th= sort_link([:renalware, q], :ukt_status, "UKT Status")
32
32
  th.col-width-date= sort_link([:renalware, q], :esrf_on, "ESRF Date")
33
33
  th.col-width-date= sort_link([:renalware, q], :entered_on, "Entry Date")
34
34
  th DOL
@@ -0,0 +1,13 @@
1
+ class UpdateDailyLettersReportViewToVersion2 < ActiveRecord::Migration[5.2]
2
+ include MigrationHelper
3
+
4
+ def change
5
+ within_renalware_schema do
6
+ update_view(
7
+ :reporting_daily_letters,
8
+ version: 2,
9
+ revert_to_version: 1
10
+ )
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ require "migration_helper"
2
+
3
+ class CreateReportingDailyUKRDCView < ActiveRecord::Migration[5.2]
4
+ include MigrationHelper
5
+
6
+ def change
7
+ within_renalware_schema do
8
+ create_view :reporting_daily_ukrdc
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ class UpdateReportingDailyPathologyViewToV2 < ActiveRecord::Migration[5.2]
2
+ include MigrationHelper
3
+
4
+ def change
5
+ within_renalware_schema do
6
+ update_view(
7
+ :reporting_daily_pathology,
8
+ version: 2,
9
+ revert_to_version: 1
10
+ )
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ select
2
+ (select count(*) from letter_letters where created_at::date = now()::date) as letters_created_today,
3
+ (select count(*) from letter_letters where completed_at::date = now()::date) as letters_printed_today,
4
+ (select count(*) from letter_letters where type = 'Renalware::Letters::Letter::Draft' and issued_on < (current_date - interval '14 days')) as draft_letters_older_than_14_days;
@@ -0,0 +1,18 @@
1
+ -- A pathology report to help identify any HL7/delayed_job issues
2
+ -- the name of the view (the filename here) is significant as we'll compile all reporting_daily_*
3
+ -- views into a daily digest email
4
+ select
5
+ (select count(*) from delayed_jobs) as delayed_jobs_total,
6
+ (select count(*) from delayed_jobs where attempts = 0) as delayed_jobs_unprocessed,
7
+ (select count(*) from delayed_jobs where last_error is not null and failed_at is null ) as delayed_jobs_retrying,
8
+ (select count(*) from delayed_jobs where last_error is not null and failed_at is not null ) as delayed_jobs_failed,
9
+ (select max(created_at) from delayed_jobs) as delayed_jobs_latest_entry,
10
+ (select count(*) from delayed_jobs where created_at >= now()::date) as delayed_jobs_added_today,
11
+ (select json_object_agg(priority, count) from (select priority, count(*) from delayed_jobs group by priority ) query) as delayed_jobs_priority_counts,
12
+ (select json_object_agg(queue, count) from (select queue, count(*) from delayed_jobs group by queue ) query) as delayed_jobs_queue_counts,
13
+ (select json_object_agg(attempts, count) from (select attempts, count(*) from delayed_jobs group by attempts ) query) as delayed_jobs_attempts_counts,
14
+ (select count(*) from feed_messages) as feed_messages_total,
15
+ (select count(*) from feed_messages where created_at >= now()::date) as feed_messages_added_today,
16
+ (select max(created_at) from feed_messages) as feed_messages_added_latest_entry, -- will be slow, needs index on feed_messages.created_at
17
+ (select count(*) from pathology_observations where created_at::date >= now()::date) as pathology_observations_added_today,
18
+ (select max(observed_at) from pathology_observations) as pathology_observations_latest_observed_at;
@@ -0,0 +1,2 @@
1
+ select
2
+ (select count(*) from patients where sent_to_ukrdc_at::date = current_date) as patients_sent_to_ukrdc_today;
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MigrationHelper
4
+ def within_renalware_schema
5
+ reversible do |direction|
6
+ direction.up { connection.execute("SET SEARCH_PATH=renalware,public;") }
7
+ direction.down { connection.execute("SET SEARCH_PATH=renalware,public;") }
8
+ end
9
+ yield if block_given?
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Renalware
4
- VERSION = "2.0.51"
4
+ VERSION = "2.0.52"
5
5
  end
@@ -26,10 +26,10 @@ module SQL
26
26
 
27
27
  clauses = []
28
28
  Array(items).each_with_index do |item, index|
29
- clauses << "WHEN '#{item}' THEN #{index}"
29
+ clauses << Arel.sql("WHEN '#{item}' THEN #{index}")
30
30
  end
31
31
 
32
- "CASE #{column} #{clauses.join(' ')} END"
32
+ Arel.sql("CASE #{column} #{clauses.join(' ')} END")
33
33
  end
34
34
  end
35
35
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "fileutils"
2
- require "gpgme"
3
4
 
4
5
  # Note you can print out the help for this task and others with `rake -D`
5
6
  namespace :ukrdc do
@@ -2,8 +2,9 @@
2
2
 
3
3
  FactoryBot.define do
4
4
  sequence :practice_code do |n|
5
- "PR432#{n}"
5
+ "M" + n.to_s.rjust(5, "0")
6
6
  end
7
+
7
8
  factory :practice, class: "Renalware::Patients::Practice" do
8
9
  name { "Trumpton Medical Centre" }
9
10
  email { "admin@trumptonmedicalcentre-nhs.net" }
@@ -2,7 +2,7 @@
2
2
 
3
3
  FactoryBot.define do
4
4
  sequence :gp_code do |n|
5
- "GP1234#{n}"
5
+ "G" + n.to_s.rjust(7, "0")
6
6
  end
7
7
 
8
8
  factory :primary_care_physician, class: "Renalware::Patients::PrimaryCarePhysician" do
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../page_object"
4
+
5
+ module Pages
6
+ module Admissions
7
+ class Consults < PageObject
8
+ def go
9
+ visit admissions_consults_path
10
+ self
11
+ end
12
+
13
+ def sort_by_modality
14
+ within ".admissions-consults-table thead" do
15
+ click_on "Modality"
16
+ end
17
+ end
18
+
19
+ def has_patient?(patient)
20
+ within ".admissions-consults-table" do
21
+ has_content?(patient.to_s)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper"
4
+
5
+ module Pages
6
+ class PageObject
7
+ include Capybara::DSL
8
+ include Renalware::Engine.routes.url_helpers
9
+ end
10
+ end
@@ -6,10 +6,10 @@ shared_examples_for "a Paranoid model" do
6
6
  it { is_expected.to have_db_index(:deleted_at) }
7
7
 
8
8
  it "adds a deleted_at where clause" do
9
- expect(described_class.all.where_sql).to include(".\"deleted_at\" IS NULL")
9
+ expect(described_class.all.to_sql).to include(".\"deleted_at\" IS NULL")
10
10
  end
11
11
 
12
12
  it "skips adding the deleted_at where clause when unscoped" do
13
- expect(described_class.unscoped.where_sql.to_s).not_to include("\"deleted_at\"")
13
+ expect(described_class.unscoped.to_sql).not_to include("\"deleted_at\"")
14
14
  end
15
15
  end
@@ -0,0 +1,383 @@
1
+ // Tweaked CSS tooltips from https://github.com/kazzkiq/balloon.css
2
+ button[data-balloon] {
3
+ overflow: visible; }
4
+
5
+ [data-balloon] {
6
+ cursor: pointer;
7
+ position: relative; }
8
+
9
+ [data-balloon]:after {
10
+ -khtml-opacity: 0;
11
+ -moz-opacity: 0;
12
+ -moz-transition: all 0.18s ease-out 0.18s;
13
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
14
+ -ms-transition: all 0.18s ease-out 0.18s;
15
+ -o-transition: all 0.18s ease-out 0.18s;
16
+ -webkit-transition: all 0.18s ease-out 0.18s;
17
+ background: rgba(17, 17, 17, 0.9);
18
+ border-radius: 3px;
19
+ color: #fff;
20
+ content: attr(data-balloon);
21
+ filter: alpha(opacity=0);
22
+ font-family: sans-serif !important;
23
+ font-size: .9rem !important;
24
+ font-style: normal !important;
25
+ font-weight: normal !important;
26
+ opacity: 0;
27
+ padding: .5em 1em;
28
+ pointer-events: none;
29
+ position: absolute;
30
+ text-shadow: none !important;
31
+ transition: all 0.18s ease-out 0.18s;
32
+ white-space: nowrap;
33
+ z-index: 10; }
34
+
35
+ [data-balloon]:before {
36
+ -khtml-opacity: 0;
37
+ -moz-opacity: 0;
38
+ -moz-transition: all 0.18s ease-out 0.18s;
39
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
40
+ -ms-transition: all 0.18s ease-out 0.18s;
41
+ -o-transition: all 0.18s ease-out 0.18s;
42
+ -webkit-transition: all 0.18s ease-out 0.18s;
43
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(0)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
44
+ background-size: 100% auto;
45
+ content: '';
46
+ filter: alpha(opacity=0);
47
+ height: 6px;
48
+ opacity: 0;
49
+ pointer-events: none;
50
+ position: absolute;
51
+ transition: all 0.18s ease-out 0.18s;
52
+ width: 18px;
53
+ z-index: 10; }
54
+
55
+ [data-balloon]:hover:before, [data-balloon]:hover:after, [data-balloon][data-balloon-visible]:before, [data-balloon][data-balloon-visible]:after {
56
+ -khtml-opacity: 1;
57
+ -moz-opacity: 1;
58
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
59
+ filter: alpha(opacity=100);
60
+ opacity: 1;
61
+ pointer-events: auto; }
62
+
63
+ [data-balloon].font-awesome:after {
64
+ font-family: FontAwesome; }
65
+
66
+ [data-balloon][data-balloon-break]:after {
67
+ white-space: pre; }
68
+
69
+ [data-balloon][data-balloon-blunt]:before, [data-balloon][data-balloon-blunt]:after {
70
+ -moz-transition: none;
71
+ -ms-transition: none;
72
+ -o-transition: none;
73
+ -webkit-transition: none;
74
+ transition: none; }
75
+
76
+ [data-balloon][data-balloon-pos="up"]:after {
77
+ -moz-transform: translate(-50%, 10px);
78
+ -moz-transform-origin: top;
79
+ -ms-transform: translate(-50%, 10px);
80
+ -ms-transform-origin: top;
81
+ -webkit-transform: translate(-50%, 10px);
82
+ -webkit-transform-origin: top;
83
+ bottom: 100%;
84
+ left: 50%;
85
+ margin-bottom: 11px;
86
+ transform: translate(-50%, 10px);
87
+ transform-origin: top; }
88
+
89
+ [data-balloon][data-balloon-pos="up"]:before {
90
+ -moz-transform: translate(-50%, 10px);
91
+ -moz-transform-origin: top;
92
+ -ms-transform: translate(-50%, 10px);
93
+ -ms-transform-origin: top;
94
+ -webkit-transform: translate(-50%, 10px);
95
+ -webkit-transform-origin: top;
96
+ bottom: 100%;
97
+ left: 50%;
98
+ margin-bottom: 5px;
99
+ transform: translate(-50%, 10px);
100
+ transform-origin: top; }
101
+
102
+ [data-balloon][data-balloon-pos="up"]:hover:after, [data-balloon][data-balloon-pos="up"][data-balloon-visible]:after {
103
+ -moz-transform: translate(-50%, 0);
104
+ -ms-transform: translate(-50%, 0);
105
+ -webkit-transform: translate(-50%, 0);
106
+ transform: translate(-50%, 0); }
107
+
108
+ [data-balloon][data-balloon-pos="up"]:hover:before, [data-balloon][data-balloon-pos="up"][data-balloon-visible]:before {
109
+ -moz-transform: translate(-50%, 0);
110
+ -ms-transform: translate(-50%, 0);
111
+ -webkit-transform: translate(-50%, 0);
112
+ transform: translate(-50%, 0); }
113
+
114
+ [data-balloon][data-balloon-pos="up-left"]:after {
115
+ -moz-transform: translate(0, 10px);
116
+ -moz-transform-origin: top;
117
+ -ms-transform: translate(0, 10px);
118
+ -ms-transform-origin: top;
119
+ -webkit-transform: translate(0, 10px);
120
+ -webkit-transform-origin: top;
121
+ bottom: 100%;
122
+ left: 0;
123
+ margin-bottom: 11px;
124
+ transform: translate(0, 10px);
125
+ transform-origin: top; }
126
+
127
+ [data-balloon][data-balloon-pos="up-left"]:before {
128
+ -moz-transform: translate(0, 10px);
129
+ -moz-transform-origin: top;
130
+ -ms-transform: translate(0, 10px);
131
+ -ms-transform-origin: top;
132
+ -webkit-transform: translate(0, 10px);
133
+ -webkit-transform-origin: top;
134
+ bottom: 100%;
135
+ left: 5px;
136
+ margin-bottom: 5px;
137
+ transform: translate(0, 10px);
138
+ transform-origin: top; }
139
+
140
+ [data-balloon][data-balloon-pos="up-left"]:hover:after, [data-balloon][data-balloon-pos="up-left"][data-balloon-visible]:after {
141
+ -moz-transform: translate(0, 0);
142
+ -ms-transform: translate(0, 0);
143
+ -webkit-transform: translate(0, 0);
144
+ transform: translate(0, 0); }
145
+
146
+ [data-balloon][data-balloon-pos="up-left"]:hover:before, [data-balloon][data-balloon-pos="up-left"][data-balloon-visible]:before {
147
+ -moz-transform: translate(0, 0);
148
+ -ms-transform: translate(0, 0);
149
+ -webkit-transform: translate(0, 0);
150
+ transform: translate(0, 0); }
151
+
152
+ [data-balloon][data-balloon-pos="up-right"]:after {
153
+ -moz-transform: translate(0, 10px);
154
+ -moz-transform-origin: top;
155
+ -ms-transform: translate(0, 10px);
156
+ -ms-transform-origin: top;
157
+ -webkit-transform: translate(0, 10px);
158
+ -webkit-transform-origin: top;
159
+ bottom: 100%;
160
+ margin-bottom: 11px;
161
+ right: 0;
162
+ transform: translate(0, 10px);
163
+ transform-origin: top; }
164
+
165
+ [data-balloon][data-balloon-pos="up-right"]:before {
166
+ -moz-transform: translate(0, 10px);
167
+ -moz-transform-origin: top;
168
+ -ms-transform: translate(0, 10px);
169
+ -ms-transform-origin: top;
170
+ -webkit-transform: translate(0, 10px);
171
+ -webkit-transform-origin: top;
172
+ bottom: 100%;
173
+ margin-bottom: 5px;
174
+ right: 5px;
175
+ transform: translate(0, 10px);
176
+ transform-origin: top; }
177
+
178
+ [data-balloon][data-balloon-pos="up-right"]:hover:after, [data-balloon][data-balloon-pos="up-right"][data-balloon-visible]:after {
179
+ -moz-transform: translate(0, 0);
180
+ -ms-transform: translate(0, 0);
181
+ -webkit-transform: translate(0, 0);
182
+ transform: translate(0, 0); }
183
+
184
+ [data-balloon][data-balloon-pos="up-right"]:hover:before, [data-balloon][data-balloon-pos="up-right"][data-balloon-visible]:before {
185
+ -moz-transform: translate(0, 0);
186
+ -ms-transform: translate(0, 0);
187
+ -webkit-transform: translate(0, 0);
188
+ transform: translate(0, 0); }
189
+
190
+ [data-balloon][data-balloon-pos='down']:after {
191
+ -moz-transform: translate(-50%, -10px);
192
+ -ms-transform: translate(-50%, -10px);
193
+ -webkit-transform: translate(-50%, -10px);
194
+ left: 50%;
195
+ margin-top: 11px;
196
+ top: 100%;
197
+ transform: translate(-50%, -10px); }
198
+
199
+ [data-balloon][data-balloon-pos='down']:before {
200
+ -moz-transform: translate(-50%, -10px);
201
+ -ms-transform: translate(-50%, -10px);
202
+ -webkit-transform: translate(-50%, -10px);
203
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
204
+ background-size: 100% auto;
205
+ height: 6px;
206
+ left: 50%;
207
+ margin-top: 5px;
208
+ top: 100%;
209
+ transform: translate(-50%, -10px);
210
+ width: 18px; }
211
+
212
+ [data-balloon][data-balloon-pos='down']:hover:after, [data-balloon][data-balloon-pos='down'][data-balloon-visible]:after {
213
+ -moz-transform: translate(-50%, 0);
214
+ -ms-transform: translate(-50%, 0);
215
+ -webkit-transform: translate(-50%, 0);
216
+ transform: translate(-50%, 0); }
217
+
218
+ [data-balloon][data-balloon-pos='down']:hover:before, [data-balloon][data-balloon-pos='down'][data-balloon-visible]:before {
219
+ -moz-transform: translate(-50%, 0);
220
+ -ms-transform: translate(-50%, 0);
221
+ -webkit-transform: translate(-50%, 0);
222
+ transform: translate(-50%, 0); }
223
+
224
+ [data-balloon][data-balloon-pos='down-left']:after {
225
+ -moz-transform: translate(0, -10px);
226
+ -ms-transform: translate(0, -10px);
227
+ -webkit-transform: translate(0, -10px);
228
+ left: 0;
229
+ margin-top: 11px;
230
+ top: 100%;
231
+ transform: translate(0, -10px); }
232
+
233
+ [data-balloon][data-balloon-pos='down-left']:before {
234
+ -moz-transform: translate(0, -10px);
235
+ -ms-transform: translate(0, -10px);
236
+ -webkit-transform: translate(0, -10px);
237
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
238
+ background-size: 100% auto;
239
+ height: 6px;
240
+ left: 5px;
241
+ margin-top: 5px;
242
+ top: 100%;
243
+ transform: translate(0, -10px);
244
+ width: 18px; }
245
+
246
+ [data-balloon][data-balloon-pos='down-left']:hover:after, [data-balloon][data-balloon-pos='down-left'][data-balloon-visible]:after {
247
+ -moz-transform: translate(0, 0);
248
+ -ms-transform: translate(0, 0);
249
+ -webkit-transform: translate(0, 0);
250
+ transform: translate(0, 0); }
251
+
252
+ [data-balloon][data-balloon-pos='down-left']:hover:before, [data-balloon][data-balloon-pos='down-left'][data-balloon-visible]:before {
253
+ -moz-transform: translate(0, 0);
254
+ -ms-transform: translate(0, 0);
255
+ -webkit-transform: translate(0, 0);
256
+ transform: translate(0, 0); }
257
+
258
+ [data-balloon][data-balloon-pos='down-right']:after {
259
+ -moz-transform: translate(0, -10px);
260
+ -ms-transform: translate(0, -10px);
261
+ -webkit-transform: translate(0, -10px);
262
+ margin-top: 11px;
263
+ right: 0;
264
+ top: 100%;
265
+ transform: translate(0, -10px); }
266
+
267
+ [data-balloon][data-balloon-pos='down-right']:before {
268
+ -moz-transform: translate(0, -10px);
269
+ -ms-transform: translate(0, -10px);
270
+ -webkit-transform: translate(0, -10px);
271
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
272
+ background-size: 100% auto;
273
+ height: 6px;
274
+ margin-top: 5px;
275
+ right: 5px;
276
+ top: 100%;
277
+ transform: translate(0, -10px);
278
+ width: 18px; }
279
+
280
+ [data-balloon][data-balloon-pos='down-right']:hover:after, [data-balloon][data-balloon-pos='down-right'][data-balloon-visible]:after {
281
+ -moz-transform: translate(0, 0);
282
+ -ms-transform: translate(0, 0);
283
+ -webkit-transform: translate(0, 0);
284
+ transform: translate(0, 0); }
285
+
286
+ [data-balloon][data-balloon-pos='down-right']:hover:before, [data-balloon][data-balloon-pos='down-right'][data-balloon-visible]:before {
287
+ -moz-transform: translate(0, 0);
288
+ -ms-transform: translate(0, 0);
289
+ -webkit-transform: translate(0, 0);
290
+ transform: translate(0, 0); }
291
+
292
+ [data-balloon][data-balloon-pos='left']:after {
293
+ -moz-transform: translate(10px, -50%);
294
+ -ms-transform: translate(10px, -50%);
295
+ -webkit-transform: translate(10px, -50%);
296
+ margin-right: 11px;
297
+ right: 100%;
298
+ top: 50%;
299
+ transform: translate(10px, -50%); }
300
+
301
+ [data-balloon][data-balloon-pos='left']:before {
302
+ -moz-transform: translate(10px, -50%);
303
+ -ms-transform: translate(10px, -50%);
304
+ -webkit-transform: translate(10px, -50%);
305
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(-90 18 18)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
306
+ background-size: 100% auto;
307
+ height: 18px;
308
+ margin-right: 5px;
309
+ right: 100%;
310
+ top: 50%;
311
+ transform: translate(10px, -50%);
312
+ width: 6px; }
313
+
314
+ [data-balloon][data-balloon-pos='left']:hover:after, [data-balloon][data-balloon-pos='left'][data-balloon-visible]:after {
315
+ -moz-transform: translate(0, -50%);
316
+ -ms-transform: translate(0, -50%);
317
+ -webkit-transform: translate(0, -50%);
318
+ transform: translate(0, -50%); }
319
+
320
+ [data-balloon][data-balloon-pos='left']:hover:before, [data-balloon][data-balloon-pos='left'][data-balloon-visible]:before {
321
+ -moz-transform: translate(0, -50%);
322
+ -ms-transform: translate(0, -50%);
323
+ -webkit-transform: translate(0, -50%);
324
+ transform: translate(0, -50%); }
325
+
326
+ [data-balloon][data-balloon-pos='right']:after {
327
+ -moz-transform: translate(-10px, -50%);
328
+ -ms-transform: translate(-10px, -50%);
329
+ -webkit-transform: translate(-10px, -50%);
330
+ left: 100%;
331
+ margin-left: 11px;
332
+ top: 50%;
333
+ transform: translate(-10px, -50%); }
334
+
335
+ [data-balloon][data-balloon-pos='right']:before {
336
+ -moz-transform: translate(-10px, -50%);
337
+ -ms-transform: translate(-10px, -50%);
338
+ -webkit-transform: translate(-10px, -50%);
339
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(90 6 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
340
+ background-size: 100% auto;
341
+ height: 18px;
342
+ left: 100%;
343
+ margin-left: 5px;
344
+ top: 50%;
345
+ transform: translate(-10px, -50%);
346
+ width: 6px; }
347
+
348
+ [data-balloon][data-balloon-pos='right']:hover:after, [data-balloon][data-balloon-pos='right'][data-balloon-visible]:after {
349
+ -moz-transform: translate(0, -50%);
350
+ -ms-transform: translate(0, -50%);
351
+ -webkit-transform: translate(0, -50%);
352
+ transform: translate(0, -50%); }
353
+
354
+ [data-balloon][data-balloon-pos='right']:hover:before, [data-balloon][data-balloon-pos='right'][data-balloon-visible]:before {
355
+ -moz-transform: translate(0, -50%);
356
+ -ms-transform: translate(0, -50%);
357
+ -webkit-transform: translate(0, -50%);
358
+ transform: translate(0, -50%); }
359
+
360
+ [data-balloon][data-balloon-length='small']:after {
361
+ white-space: normal;
362
+ width: 80px; }
363
+
364
+ [data-balloon][data-balloon-length='medium']:after {
365
+ white-space: normal;
366
+ width: 150px; }
367
+
368
+ [data-balloon][data-balloon-length='large']:after {
369
+ white-space: normal;
370
+ width: 260px; }
371
+
372
+ [data-balloon][data-balloon-length='xlarge']:after {
373
+ white-space: normal;
374
+ width: 380px; }
375
+
376
+ @media screen and (max-width: 768px) {
377
+ [data-balloon][data-balloon-length='xlarge']:after {
378
+ white-space: normal;
379
+ width: 90vw; } }
380
+
381
+ [data-balloon][data-balloon-length='fit']:after {
382
+ white-space: normal;
383
+ width: 100%; }