rails_admin 2.2.1 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (522) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +12 -11
  3. data/README.md +40 -43
  4. data/Rakefile +15 -2
  5. data/app/assets/javascripts/rails_admin/application.js.erb +29 -0
  6. data/app/assets/stylesheets/rails_admin/application.scss.erb +35 -0
  7. data/app/assets/stylesheets/rails_admin/custom/mixins.scss +1 -1
  8. data/app/assets/stylesheets/rails_admin/custom/variables.scss +1 -1
  9. data/app/controllers/rails_admin/application_controller.rb +6 -3
  10. data/app/controllers/rails_admin/main_controller.rb +55 -50
  11. data/app/helpers/rails_admin/application_helper.rb +129 -63
  12. data/app/helpers/rails_admin/form_builder.rb +17 -6
  13. data/app/helpers/rails_admin/main_helper.rb +18 -42
  14. data/app/views/kaminari/ra-twitter-bootstrap/_gap.html.erb +5 -0
  15. data/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.erb +9 -0
  16. data/app/views/kaminari/ra-twitter-bootstrap/_page.html.erb +9 -0
  17. data/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.erb +15 -0
  18. data/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.erb +9 -0
  19. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.erb +9 -0
  20. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.erb +8 -0
  21. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.erb +9 -0
  22. data/app/views/layouts/rails_admin/_head.html.erb +29 -0
  23. data/app/views/layouts/rails_admin/_navigation.html.erb +17 -0
  24. data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +26 -0
  25. data/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +5 -0
  26. data/app/views/layouts/rails_admin/application.html.erb +27 -0
  27. data/app/views/layouts/rails_admin/content.html.erb +22 -0
  28. data/app/views/layouts/rails_admin/modal.js.erb +7 -0
  29. data/app/views/rails_admin/main/_dashboard_history.html.erb +45 -0
  30. data/app/views/rails_admin/main/_delete_notice.html.erb +35 -0
  31. data/app/views/rails_admin/main/_form_action_text.html.erb +8 -0
  32. data/app/views/rails_admin/main/_form_boolean.html.erb +14 -0
  33. data/app/views/rails_admin/main/{_form_ck_editor.html.haml → _form_ck_editor.html.erb} +3 -3
  34. data/app/views/rails_admin/main/_form_code_mirror.html.erb +9 -0
  35. data/app/views/rails_admin/main/_form_colorpicker.html.erb +5 -0
  36. data/app/views/rails_admin/main/_form_datetime.html.erb +10 -0
  37. data/app/views/rails_admin/main/_form_enumeration.html.erb +25 -0
  38. data/app/views/rails_admin/main/_form_field.html.erb +1 -0
  39. data/app/views/rails_admin/main/_form_file_upload.html.erb +17 -0
  40. data/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +49 -0
  41. data/app/views/rails_admin/main/_form_filtering_select.html.erb +33 -0
  42. data/app/views/rails_admin/main/_form_froala.html.erb +8 -0
  43. data/app/views/rails_admin/main/_form_multiple_file_upload.html.erb +20 -0
  44. data/app/views/rails_admin/main/_form_nested_many.html.erb +21 -0
  45. data/app/views/rails_admin/main/_form_nested_one.html.erb +21 -0
  46. data/app/views/rails_admin/main/_form_polymorphic_association.html.erb +32 -0
  47. data/app/views/rails_admin/main/_form_simple_mde.html.erb +8 -0
  48. data/app/views/rails_admin/main/_form_text.html.erb +1 -0
  49. data/app/views/rails_admin/main/_form_wysihtml5.html.erb +8 -0
  50. data/app/views/rails_admin/main/_submit_buttons.html.erb +25 -0
  51. data/app/views/rails_admin/main/bulk_delete.html.erb +19 -0
  52. data/app/views/rails_admin/main/dashboard.html.erb +64 -0
  53. data/app/views/rails_admin/main/delete.html.erb +21 -0
  54. data/app/views/rails_admin/main/edit.html.erb +3 -0
  55. data/app/views/rails_admin/main/export.html.erb +149 -0
  56. data/app/views/rails_admin/main/history.html.erb +80 -0
  57. data/app/views/rails_admin/main/index.html.erb +184 -0
  58. data/app/views/rails_admin/main/new.html.erb +3 -0
  59. data/app/views/rails_admin/main/show.html.erb +30 -0
  60. data/config/initializers/active_record_extensions.rb +25 -0
  61. data/config/initializers/mongoid_extensions.rb +3 -1
  62. data/config/locales/rails_admin.en.yml +8 -3
  63. data/config/routes.rb +2 -0
  64. data/lib/generators/rails_admin/importmap_formatter.rb +28 -0
  65. data/lib/generators/rails_admin/install_generator.rb +117 -5
  66. data/lib/generators/rails_admin/templates/initializer.erb +2 -1
  67. data/lib/generators/rails_admin/templates/rails_admin.js +1 -0
  68. data/lib/generators/rails_admin/templates/rails_admin.scss.erb +1 -0
  69. data/lib/generators/rails_admin/templates/rails_admin.webpacker.js +2 -0
  70. data/lib/generators/rails_admin/utils.rb +2 -0
  71. data/lib/rails_admin/abstract_model.rb +35 -15
  72. data/lib/rails_admin/adapters/active_record/association.rb +31 -2
  73. data/lib/rails_admin/adapters/active_record/object_extension.rb +31 -0
  74. data/lib/rails_admin/adapters/active_record/property.rb +4 -2
  75. data/lib/rails_admin/adapters/active_record.rb +60 -28
  76. data/lib/rails_admin/adapters/composite_primary_keys/association.rb +45 -0
  77. data/lib/rails_admin/adapters/composite_primary_keys.rb +40 -0
  78. data/lib/rails_admin/adapters/mongoid/association.rb +52 -13
  79. data/lib/rails_admin/adapters/mongoid/bson.rb +6 -5
  80. data/lib/rails_admin/adapters/mongoid/extension.rb +2 -0
  81. data/lib/rails_admin/adapters/mongoid/object_extension.rb +34 -0
  82. data/lib/rails_admin/adapters/mongoid/property.rb +7 -5
  83. data/lib/rails_admin/adapters/mongoid.rb +33 -23
  84. data/lib/rails_admin/config/actions/base.rb +11 -4
  85. data/lib/rails_admin/config/actions/bulk_delete.rb +4 -2
  86. data/lib/rails_admin/config/actions/dashboard.rb +16 -9
  87. data/lib/rails_admin/config/actions/delete.rb +11 -9
  88. data/lib/rails_admin/config/actions/edit.rb +13 -7
  89. data/lib/rails_admin/config/actions/export.rb +6 -3
  90. data/lib/rails_admin/config/actions/history_index.rb +4 -2
  91. data/lib/rails_admin/config/actions/history_show.rb +4 -2
  92. data/lib/rails_admin/config/actions/index.rb +9 -8
  93. data/lib/rails_admin/config/actions/new.rb +18 -10
  94. data/lib/rails_admin/config/actions/show.rb +3 -1
  95. data/lib/rails_admin/config/actions/show_in_app.rb +9 -3
  96. data/lib/rails_admin/config/actions.rb +6 -4
  97. data/lib/rails_admin/config/configurable.rb +4 -2
  98. data/lib/rails_admin/config/const_load_suppressor.rb +78 -0
  99. data/lib/rails_admin/config/fields/association.rb +21 -11
  100. data/lib/rails_admin/config/fields/base.rb +86 -36
  101. data/lib/rails_admin/config/fields/factories/action_text.rb +2 -0
  102. data/lib/rails_admin/config/fields/factories/active_storage.rb +5 -1
  103. data/lib/rails_admin/config/fields/factories/association.rb +12 -13
  104. data/lib/rails_admin/config/fields/factories/carrierwave.rb +6 -2
  105. data/lib/rails_admin/config/fields/factories/devise.rb +6 -2
  106. data/lib/rails_admin/config/fields/factories/dragonfly.rb +6 -2
  107. data/lib/rails_admin/config/fields/factories/enum.rb +2 -0
  108. data/lib/rails_admin/config/fields/factories/paperclip.rb +6 -2
  109. data/lib/rails_admin/config/fields/factories/password.rb +2 -0
  110. data/lib/rails_admin/config/fields/factories/shrine.rb +3 -1
  111. data/lib/rails_admin/config/fields/group.rb +3 -2
  112. data/lib/rails_admin/config/fields/types/action_text.rb +7 -1
  113. data/lib/rails_admin/config/fields/types/active_record_enum.rb +4 -0
  114. data/lib/rails_admin/config/fields/types/active_storage.rb +23 -7
  115. data/lib/rails_admin/config/fields/types/all.rb +4 -0
  116. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +9 -15
  117. data/lib/rails_admin/config/fields/types/boolean.rb +38 -8
  118. data/lib/rails_admin/config/fields/types/bson_object_id.rb +2 -0
  119. data/lib/rails_admin/config/fields/types/carrierwave.rb +3 -0
  120. data/lib/rails_admin/config/fields/types/citext.rb +15 -0
  121. data/lib/rails_admin/config/fields/types/ck_editor.rb +2 -0
  122. data/lib/rails_admin/config/fields/types/code_mirror.rb +2 -0
  123. data/lib/rails_admin/config/fields/types/color.rb +8 -2
  124. data/lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb +31 -0
  125. data/lib/rails_admin/config/fields/types/date.rb +12 -6
  126. data/lib/rails_admin/config/fields/types/datetime.rb +36 -21
  127. data/lib/rails_admin/config/fields/types/decimal.rb +11 -2
  128. data/lib/rails_admin/config/fields/types/dragonfly.rb +5 -1
  129. data/lib/rails_admin/config/fields/types/enum.rb +16 -3
  130. data/lib/rails_admin/config/fields/types/file_upload.rb +6 -3
  131. data/lib/rails_admin/config/fields/types/float.rb +11 -2
  132. data/lib/rails_admin/config/fields/types/froala.rb +2 -0
  133. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +2 -0
  134. data/lib/rails_admin/config/fields/types/has_many_association.rb +7 -5
  135. data/lib/rails_admin/config/fields/types/has_one_association.rb +12 -14
  136. data/lib/rails_admin/config/fields/types/hidden.rb +2 -0
  137. data/lib/rails_admin/config/fields/types/inet.rb +2 -0
  138. data/lib/rails_admin/config/fields/types/integer.rb +4 -6
  139. data/lib/rails_admin/config/fields/types/json.rb +2 -0
  140. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +30 -6
  141. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +3 -0
  142. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +6 -3
  143. data/lib/rails_admin/config/fields/types/numeric.rb +24 -0
  144. data/lib/rails_admin/config/fields/types/paperclip.rb +2 -0
  145. data/lib/rails_admin/config/fields/types/password.rb +2 -0
  146. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +5 -2
  147. data/lib/rails_admin/config/fields/types/serialized.rb +2 -0
  148. data/lib/rails_admin/config/fields/types/shrine.rb +2 -0
  149. data/lib/rails_admin/config/fields/types/simple_mde.rb +2 -0
  150. data/lib/rails_admin/config/fields/types/string.rb +3 -1
  151. data/lib/rails_admin/config/fields/types/string_like.rb +6 -0
  152. data/lib/rails_admin/config/fields/types/text.rb +2 -0
  153. data/lib/rails_admin/config/fields/types/time.rb +16 -4
  154. data/lib/rails_admin/config/fields/types/timestamp.rb +2 -4
  155. data/lib/rails_admin/config/fields/types/uuid.rb +2 -0
  156. data/lib/rails_admin/config/fields/types/wysihtml5.rb +2 -0
  157. data/lib/rails_admin/config/fields/types.rb +3 -1
  158. data/lib/rails_admin/config/fields.rb +6 -2
  159. data/lib/rails_admin/config/groupable.rb +2 -0
  160. data/lib/rails_admin/config/has_description.rb +2 -0
  161. data/lib/rails_admin/config/has_fields.rb +12 -7
  162. data/lib/rails_admin/config/has_groups.rb +2 -0
  163. data/lib/rails_admin/config/hideable.rb +3 -1
  164. data/lib/rails_admin/config/inspectable.rb +3 -3
  165. data/lib/rails_admin/config/lazy_model.rb +13 -7
  166. data/lib/rails_admin/config/model.rb +22 -12
  167. data/lib/rails_admin/config/proxyable/proxy.rb +2 -0
  168. data/lib/rails_admin/config/proxyable.rb +2 -0
  169. data/lib/rails_admin/config/sections/base.rb +4 -3
  170. data/lib/rails_admin/config/sections/create.rb +2 -0
  171. data/lib/rails_admin/config/sections/edit.rb +2 -0
  172. data/lib/rails_admin/config/sections/export.rb +2 -0
  173. data/lib/rails_admin/config/sections/list.rb +14 -19
  174. data/lib/rails_admin/config/sections/modal.rb +2 -0
  175. data/lib/rails_admin/config/sections/nested.rb +2 -0
  176. data/lib/rails_admin/config/sections/show.rb +2 -0
  177. data/lib/rails_admin/config/sections/update.rb +2 -0
  178. data/lib/rails_admin/config/sections.rb +3 -1
  179. data/lib/rails_admin/config.rb +77 -39
  180. data/lib/rails_admin/engine.rb +43 -32
  181. data/lib/rails_admin/extension.rb +8 -14
  182. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +25 -6
  183. data/lib/rails_admin/extensions/cancancan.rb +2 -0
  184. data/lib/rails_admin/extensions/controller_extension.rb +2 -0
  185. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +61 -34
  186. data/lib/rails_admin/extensions/paper_trail.rb +2 -0
  187. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +8 -7
  188. data/lib/rails_admin/extensions/pundit.rb +2 -0
  189. data/lib/rails_admin/support/csv_converter.rb +14 -14
  190. data/lib/rails_admin/support/datetime.rb +50 -85
  191. data/lib/rails_admin/support/es_module_processor.rb +23 -0
  192. data/lib/rails_admin/support/hash_helper.rb +8 -5
  193. data/lib/rails_admin/version.rb +41 -2
  194. data/lib/rails_admin.rb +7 -5
  195. data/lib/tasks/rails_admin.rake +5 -3
  196. data/package.json +30 -0
  197. data/src/rails_admin/base.js +29 -0
  198. data/src/rails_admin/filter-box.js +360 -0
  199. data/src/rails_admin/filtering-multiselect.js +389 -0
  200. data/src/rails_admin/filtering-select.js +308 -0
  201. data/src/rails_admin/i18n.js +18 -0
  202. data/src/rails_admin/jquery.js +3 -0
  203. data/src/rails_admin/nested-form-hooks.js +110 -0
  204. data/src/rails_admin/remote-form.js +193 -0
  205. data/src/rails_admin/sidescroll.js +20 -0
  206. data/src/rails_admin/styles/base/theming.scss +342 -0
  207. data/src/rails_admin/styles/base/variables.scss +3 -0
  208. data/src/rails_admin/styles/base.scss +27 -0
  209. data/src/rails_admin/styles/filtering-multiselect.scss +53 -0
  210. data/src/rails_admin/styles/filtering-select.scss +70 -0
  211. data/src/rails_admin/styles/widgets.scss +26 -0
  212. data/src/rails_admin/ui.js +170 -0
  213. data/src/rails_admin/vendor/jquery_nested_form.js +122 -0
  214. data/src/rails_admin/widgets.js +507 -0
  215. data/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
  216. data/vendor/assets/fonts/rails_admin/fa-solid-900.woff2 +0 -0
  217. data/vendor/assets/javascripts/rails_admin/bootstrap.js +5046 -0
  218. data/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +11246 -0
  219. data/vendor/assets/javascripts/rails_admin/jquery-ui/data.js +41 -0
  220. data/vendor/assets/javascripts/rails_admin/jquery-ui/effect.js +1637 -0
  221. data/vendor/assets/javascripts/rails_admin/jquery-ui/ie.js +17 -0
  222. data/vendor/assets/javascripts/rails_admin/jquery-ui/keycode.js +47 -0
  223. data/vendor/assets/javascripts/rails_admin/jquery-ui/position.js +500 -0
  224. data/vendor/assets/javascripts/rails_admin/jquery-ui/safe-active-element.js +42 -0
  225. data/vendor/assets/javascripts/rails_admin/jquery-ui/scroll-parent.js +47 -0
  226. data/vendor/assets/javascripts/rails_admin/jquery-ui/unique-id.js +51 -0
  227. data/vendor/assets/javascripts/rails_admin/jquery-ui/version.js +17 -0
  228. data/vendor/assets/javascripts/rails_admin/jquery-ui/widget.js +735 -0
  229. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/autocomplete.js +689 -0
  230. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/menu.js +680 -0
  231. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/mouse.js +230 -0
  232. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/sortable.js +1561 -0
  233. data/vendor/assets/javascripts/rails_admin/jquery3.js +10881 -0
  234. data/vendor/assets/javascripts/rails_admin/popper.js +1974 -0
  235. data/vendor/assets/stylesheets/rails_admin/bootstrap/_accordion.scss +118 -0
  236. data/vendor/assets/stylesheets/rails_admin/bootstrap/_alert.scss +57 -0
  237. data/vendor/assets/stylesheets/rails_admin/bootstrap/_badge.scss +29 -0
  238. data/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumb.scss +28 -0
  239. data/vendor/assets/stylesheets/rails_admin/bootstrap/_button-group.scss +139 -0
  240. data/vendor/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +64 -110
  241. data/vendor/assets/stylesheets/rails_admin/bootstrap/_card.scss +216 -0
  242. data/vendor/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +162 -176
  243. data/vendor/assets/stylesheets/rails_admin/bootstrap/_close.scss +31 -26
  244. data/vendor/assets/stylesheets/rails_admin/bootstrap/_containers.scss +41 -0
  245. data/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdown.scss +240 -0
  246. data/vendor/assets/stylesheets/rails_admin/bootstrap/_forms.scss +9 -538
  247. data/vendor/assets/stylesheets/rails_admin/bootstrap/_functions.scss +302 -0
  248. data/vendor/assets/stylesheets/rails_admin/bootstrap/_grid.scss +18 -69
  249. data/vendor/assets/stylesheets/rails_admin/bootstrap/_helpers.scss +9 -0
  250. data/vendor/assets/stylesheets/rails_admin/bootstrap/_images.scss +42 -0
  251. data/vendor/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +127 -84
  252. data/vendor/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +26 -22
  253. data/vendor/assets/stylesheets/rails_admin/bootstrap/_modal.scss +209 -0
  254. data/vendor/assets/stylesheets/rails_admin/bootstrap/_nav.scss +139 -0
  255. data/vendor/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +218 -542
  256. data/vendor/assets/stylesheets/rails_admin/bootstrap/_offcanvas.scss +83 -0
  257. data/vendor/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +46 -70
  258. data/vendor/assets/stylesheets/rails_admin/bootstrap/_placeholders.scss +51 -0
  259. data/vendor/assets/stylesheets/rails_admin/bootstrap/_popover.scss +158 -0
  260. data/vendor/assets/stylesheets/rails_admin/bootstrap/_progress.scss +48 -0
  261. data/vendor/assets/stylesheets/rails_admin/bootstrap/_reboot.scss +625 -0
  262. data/vendor/assets/stylesheets/rails_admin/bootstrap/_root.scss +54 -0
  263. data/vendor/assets/stylesheets/rails_admin/bootstrap/_spinners.scss +69 -0
  264. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tables.scss +100 -178
  265. data/vendor/assets/stylesheets/rails_admin/bootstrap/_toasts.scss +51 -0
  266. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +97 -77
  267. data/vendor/assets/stylesheets/rails_admin/bootstrap/_transitions.scss +27 -0
  268. data/vendor/assets/stylesheets/rails_admin/bootstrap/_type.scss +54 -254
  269. data/vendor/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +628 -55
  270. data/vendor/assets/stylesheets/rails_admin/bootstrap/_variables.scss +1572 -781
  271. data/vendor/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +38 -35
  272. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_floating-labels.scss +63 -0
  273. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-check.scss +152 -0
  274. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-control.scss +219 -0
  275. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-range.scss +91 -0
  276. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-select.scss +72 -0
  277. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-text.scss +11 -0
  278. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_input-group.scss +121 -0
  279. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_labels.scss +36 -0
  280. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_validation.scss +12 -0
  281. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_clearfix.scss +3 -0
  282. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_colored-links.scss +12 -0
  283. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_position.scss +30 -0
  284. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_ratio.scss +26 -0
  285. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stacks.scss +15 -0
  286. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stretched-link.scss +15 -0
  287. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_text-truncation.scss +7 -0
  288. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_visually-hidden.scss +8 -0
  289. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_vr.scss +8 -0
  290. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alert.scss +11 -0
  291. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_backdrop.scss +14 -0
  292. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +72 -12
  293. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_box-shadow.scss +18 -0
  294. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_breakpoints.scss +127 -0
  295. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +113 -30
  296. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_caret.scss +64 -0
  297. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +5 -18
  298. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_color-scheme.scss +7 -0
  299. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_container.scss +9 -0
  300. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_deprecate.scss +10 -0
  301. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +130 -70
  302. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +27 -38
  303. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +127 -98
  304. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +6 -24
  305. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +13 -20
  306. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_lists.scss +7 -0
  307. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +24 -16
  308. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-text.scss +17 -0
  309. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +1 -1
  310. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-variants.scss +21 -0
  311. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/{_text-overflow.scss → _text-truncate.scss} +2 -2
  312. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_transition.scss +26 -0
  313. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_utilities.scss +89 -0
  314. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_visually-hidden.scss +29 -0
  315. data/vendor/assets/stylesheets/rails_admin/bootstrap/utilities/_api.scss +47 -0
  316. data/vendor/assets/stylesheets/rails_admin/bootstrap/vendor/_rfs.scss +354 -0
  317. data/vendor/assets/stylesheets/rails_admin/flatpickr.css +791 -0
  318. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +6291 -2282
  319. metadata +180 -328
  320. data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
  321. data/app/assets/images/rails_admin/aristo/images/icon_sprite.png +0 -0
  322. data/app/assets/images/rails_admin/aristo/images/progress_bar.gif +0 -0
  323. data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
  324. data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  325. data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  326. data/app/assets/images/rails_admin/bullet_black.png +0 -0
  327. data/app/assets/images/rails_admin/bullet_white.png +0 -0
  328. data/app/assets/images/rails_admin/calendar.png +0 -0
  329. data/app/assets/images/rails_admin/clock.png +0 -0
  330. data/app/assets/images/rails_admin/logo.png +0 -0
  331. data/app/assets/images/rails_admin/magnifier.png +0 -0
  332. data/app/assets/images/rails_admin/multiselect/icon_sprite.png +0 -0
  333. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
  334. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-light.png +0 -0
  335. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
  336. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
  337. data/app/assets/javascripts/rails_admin/jquery-ui.js.erb +0 -8
  338. data/app/assets/javascripts/rails_admin/jquery.migrate.js +0 -3
  339. data/app/assets/javascripts/rails_admin/ra.filter-box.js +0 -246
  340. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +0 -331
  341. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +0 -294
  342. data/app/assets/javascripts/rails_admin/ra.i18n.js +0 -28
  343. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +0 -59
  344. data/app/assets/javascripts/rails_admin/ra.remote-form.js +0 -155
  345. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +0 -31
  346. data/app/assets/javascripts/rails_admin/ra.widgets.js +0 -379
  347. data/app/assets/javascripts/rails_admin/rails_admin.js +0 -21
  348. data/app/assets/javascripts/rails_admin/ui.js +0 -135
  349. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  350. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  351. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  352. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  353. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  354. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  355. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss +0 -733
  356. data/app/assets/stylesheets/rails_admin/base/font-awesome-4-compability.scss +0 -153
  357. data/app/assets/stylesheets/rails_admin/base/theming.scss +0 -341
  358. data/app/assets/stylesheets/rails_admin/base/variables.scss +0 -1
  359. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.scss +0 -88
  360. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +0 -29
  361. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +0 -17
  362. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +0 -110
  363. data/app/assets/stylesheets/rails_admin/themes/cerulean/mixins.scss +0 -0
  364. data/app/assets/stylesheets/rails_admin/themes/cerulean/theming.scss +0 -133
  365. data/app/assets/stylesheets/rails_admin/themes/cerulean/variables.scss +0 -857
  366. data/app/assets/stylesheets/rails_admin/themes/default/mixins.scss +0 -8
  367. data/app/assets/stylesheets/rails_admin/themes/default/theming.scss +0 -11
  368. data/app/assets/stylesheets/rails_admin/themes/default/variables.scss +0 -12
  369. data/app/views/kaminari/ra-twitter-bootstrap/_gap.html.haml +0 -2
  370. data/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.haml +0 -4
  371. data/app/views/kaminari/ra-twitter-bootstrap/_page.html.haml +0 -4
  372. data/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.haml +0 -9
  373. data/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.haml +0 -4
  374. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.haml +0 -4
  375. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.haml +0 -4
  376. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.haml +0 -4
  377. data/app/views/layouts/rails_admin/_head.html.haml +0 -7
  378. data/app/views/layouts/rails_admin/_navigation.html.haml +0 -12
  379. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +0 -10
  380. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +0 -3
  381. data/app/views/layouts/rails_admin/application.html.haml +0 -16
  382. data/app/views/layouts/rails_admin/pjax.html.haml +0 -12
  383. data/app/views/rails_admin/main/_dashboard_history.html.haml +0 -21
  384. data/app/views/rails_admin/main/_delete_notice.html.haml +0 -24
  385. data/app/views/rails_admin/main/_form_action_text.html.haml +0 -7
  386. data/app/views/rails_admin/main/_form_boolean.html.haml +0 -3
  387. data/app/views/rails_admin/main/_form_code_mirror.html.haml +0 -9
  388. data/app/views/rails_admin/main/_form_colorpicker.html.haml +0 -1
  389. data/app/views/rails_admin/main/_form_datetime.html.haml +0 -5
  390. data/app/views/rails_admin/main/_form_enumeration.html.haml +0 -19
  391. data/app/views/rails_admin/main/_form_field.html.haml +0 -1
  392. data/app/views/rails_admin/main/_form_file_upload.html.haml +0 -17
  393. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +0 -49
  394. data/app/views/rails_admin/main/_form_filtering_select.html.haml +0 -37
  395. data/app/views/rails_admin/main/_form_froala.html.haml +0 -8
  396. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +0 -16
  397. data/app/views/rails_admin/main/_form_nested_many.html.haml +0 -15
  398. data/app/views/rails_admin/main/_form_nested_one.html.haml +0 -17
  399. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +0 -26
  400. data/app/views/rails_admin/main/_form_simple_mde.haml +0 -8
  401. data/app/views/rails_admin/main/_form_text.html.haml +0 -1
  402. data/app/views/rails_admin/main/_form_wysihtml5.html.haml +0 -8
  403. data/app/views/rails_admin/main/_submit_buttons.html.haml +0 -16
  404. data/app/views/rails_admin/main/bulk_delete.html.haml +0 -11
  405. data/app/views/rails_admin/main/dashboard.html.haml +0 -34
  406. data/app/views/rails_admin/main/delete.html.haml +0 -18
  407. data/app/views/rails_admin/main/edit.html.haml +0 -2
  408. data/app/views/rails_admin/main/export.html.haml +0 -92
  409. data/app/views/rails_admin/main/history.html.haml +0 -51
  410. data/app/views/rails_admin/main/index.html.haml +0 -126
  411. data/app/views/rails_admin/main/new.html.haml +0 -2
  412. data/app/views/rails_admin/main/show.html.haml +0 -15
  413. data/config/initializers/haml.rb +0 -5
  414. data/lib/rails_admin/adapters/active_record/abstract_object.rb +0 -38
  415. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +0 -42
  416. data/lib/rails_admin/bootstrap-sass/compass_functions.rb +0 -28
  417. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +0 -16
  418. data/lib/rails_admin/bootstrap-sass.rb +0 -49
  419. data/lib/rails_admin/extensions/history/auditing_adapter.rb +0 -37
  420. data/lib/rails_admin/extensions/history/history.rb +0 -44
  421. data/lib/rails_admin/extensions/history.rb +0 -3
  422. data/lib/rails_admin/support/i18n.rb +0 -43
  423. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  424. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  425. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +0 -2671
  426. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  427. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  428. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  429. data/vendor/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  430. data/vendor/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  431. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  432. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  433. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  434. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  435. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  436. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  437. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  438. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  439. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  440. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  441. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  442. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  443. data/vendor/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  444. data/vendor/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  445. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  446. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  447. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  448. data/vendor/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  449. data/vendor/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  450. data/vendor/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  451. data/vendor/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  452. data/vendor/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  453. data/vendor/assets/images/rails_admin/colorpicker/select.png +0 -0
  454. data/vendor/assets/images/rails_admin/colorpicker/select2.png +0 -0
  455. data/vendor/assets/images/rails_admin/colorpicker/slider.png +0 -0
  456. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -164
  457. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -95
  458. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -125
  459. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -246
  460. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -212
  461. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -165
  462. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -358
  463. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -123
  464. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -172
  465. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -155
  466. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -677
  467. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -59
  468. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -1782
  469. data/vendor/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -13
  470. data/vendor/assets/javascripts/rails_admin/bootstrap-datetimepicker.js +0 -2611
  471. data/vendor/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -484
  472. data/vendor/assets/javascripts/rails_admin/jquery.pjax.js +0 -898
  473. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +0 -18085
  474. data/vendor/assets/stylesheets/rails_admin/_bootstrap-datetimepicker.scss +0 -343
  475. data/vendor/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -68
  476. data/vendor/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -57
  477. data/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -26
  478. data/vendor/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -240
  479. data/vendor/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -68
  480. data/vendor/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -35
  481. data/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -215
  482. data/vendor/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -237
  483. data/vendor/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -166
  484. data/vendor/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -48
  485. data/vendor/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -66
  486. data/vendor/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -56
  487. data/vendor/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -150
  488. data/vendor/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -242
  489. data/vendor/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -425
  490. data/vendor/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -55
  491. data/vendor/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -243
  492. data/vendor/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -133
  493. data/vendor/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -101
  494. data/vendor/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -105
  495. data/vendor/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -34
  496. data/vendor/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -174
  497. data/vendor/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -150
  498. data/vendor/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -258
  499. data/vendor/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -38
  500. data/vendor/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -29
  501. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -14
  502. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -11
  503. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -7
  504. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -81
  505. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -21
  506. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -12
  507. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -10
  508. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -9
  509. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -8
  510. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -24
  511. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -10
  512. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -8
  513. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -21
  514. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -10
  515. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -9
  516. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -28
  517. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -11
  518. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -219
  519. data/vendor/assets/stylesheets/rails_admin/bootstrap-datetimepicker-build.scss +0 -16
  520. data/vendor/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -182
  521. /data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/base/README.txt +0 -0
  522. /data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/base/mixins.scss +0 -0
@@ -1,677 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: tooltip.js v3.4.1
3
- * https://getbootstrap.com/docs/3.4/javascript/#tooltip
4
- * Inspired by the original jQuery.tipsy by Jason Frame
5
- * ========================================================================
6
- * Copyright 2011-2019 Twitter, Inc.
7
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
8
- * ======================================================================== */
9
-
10
- +function ($) {
11
- 'use strict';
12
-
13
- var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
14
-
15
- var uriAttrs = [
16
- 'background',
17
- 'cite',
18
- 'href',
19
- 'itemtype',
20
- 'longdesc',
21
- 'poster',
22
- 'src',
23
- 'xlink:href'
24
- ]
25
-
26
- var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
27
-
28
- var DefaultWhitelist = {
29
- // Global attributes allowed on any supplied element below.
30
- '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
31
- a: ['target', 'href', 'title', 'rel'],
32
- area: [],
33
- b: [],
34
- br: [],
35
- col: [],
36
- code: [],
37
- div: [],
38
- em: [],
39
- hr: [],
40
- h1: [],
41
- h2: [],
42
- h3: [],
43
- h4: [],
44
- h5: [],
45
- h6: [],
46
- i: [],
47
- img: ['src', 'alt', 'title', 'width', 'height'],
48
- li: [],
49
- ol: [],
50
- p: [],
51
- pre: [],
52
- s: [],
53
- small: [],
54
- span: [],
55
- sub: [],
56
- sup: [],
57
- strong: [],
58
- u: [],
59
- ul: []
60
- }
61
-
62
- /**
63
- * A pattern that recognizes a commonly useful subset of URLs that are safe.
64
- *
65
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
66
- */
67
- var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
68
-
69
- /**
70
- * A pattern that matches safe data URLs. Only matches image, video and audio types.
71
- *
72
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
73
- */
74
- var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
75
-
76
- function allowedAttribute(attr, allowedAttributeList) {
77
- var attrName = attr.nodeName.toLowerCase()
78
-
79
- if ($.inArray(attrName, allowedAttributeList) !== -1) {
80
- if ($.inArray(attrName, uriAttrs) !== -1) {
81
- return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
82
- }
83
-
84
- return true
85
- }
86
-
87
- var regExp = $(allowedAttributeList).filter(function (index, value) {
88
- return value instanceof RegExp
89
- })
90
-
91
- // Check if a regular expression validates the attribute.
92
- for (var i = 0, l = regExp.length; i < l; i++) {
93
- if (attrName.match(regExp[i])) {
94
- return true
95
- }
96
- }
97
-
98
- return false
99
- }
100
-
101
- function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
102
- if (unsafeHtml.length === 0) {
103
- return unsafeHtml
104
- }
105
-
106
- if (sanitizeFn && typeof sanitizeFn === 'function') {
107
- return sanitizeFn(unsafeHtml)
108
- }
109
-
110
- // IE 8 and below don't support createHTMLDocument
111
- if (!document.implementation || !document.implementation.createHTMLDocument) {
112
- return unsafeHtml
113
- }
114
-
115
- var createdDocument = document.implementation.createHTMLDocument('sanitization')
116
- createdDocument.body.innerHTML = unsafeHtml
117
-
118
- var whitelistKeys = $.map(whiteList, function (el, i) { return i })
119
- var elements = $(createdDocument.body).find('*')
120
-
121
- for (var i = 0, len = elements.length; i < len; i++) {
122
- var el = elements[i]
123
- var elName = el.nodeName.toLowerCase()
124
-
125
- if ($.inArray(elName, whitelistKeys) === -1) {
126
- el.parentNode.removeChild(el)
127
-
128
- continue
129
- }
130
-
131
- var attributeList = $.map(el.attributes, function (el) { return el })
132
- var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
133
-
134
- for (var j = 0, len2 = attributeList.length; j < len2; j++) {
135
- if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
136
- el.removeAttribute(attributeList[j].nodeName)
137
- }
138
- }
139
- }
140
-
141
- return createdDocument.body.innerHTML
142
- }
143
-
144
- // TOOLTIP PUBLIC CLASS DEFINITION
145
- // ===============================
146
-
147
- var Tooltip = function (element, options) {
148
- this.type = null
149
- this.options = null
150
- this.enabled = null
151
- this.timeout = null
152
- this.hoverState = null
153
- this.$element = null
154
- this.inState = null
155
-
156
- this.init('tooltip', element, options)
157
- }
158
-
159
- Tooltip.VERSION = '3.4.1'
160
-
161
- Tooltip.TRANSITION_DURATION = 150
162
-
163
- Tooltip.DEFAULTS = {
164
- animation: true,
165
- placement: 'top',
166
- selector: false,
167
- template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
168
- trigger: 'hover focus',
169
- title: '',
170
- delay: 0,
171
- html: false,
172
- container: false,
173
- viewport: {
174
- selector: 'body',
175
- padding: 0
176
- },
177
- sanitize : true,
178
- sanitizeFn : null,
179
- whiteList : DefaultWhitelist
180
- }
181
-
182
- Tooltip.prototype.init = function (type, element, options) {
183
- this.enabled = true
184
- this.type = type
185
- this.$element = $(element)
186
- this.options = this.getOptions(options)
187
- this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
188
- this.inState = { click: false, hover: false, focus: false }
189
-
190
- if (this.$element[0] instanceof document.constructor && !this.options.selector) {
191
- throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
192
- }
193
-
194
- var triggers = this.options.trigger.split(' ')
195
-
196
- for (var i = triggers.length; i--;) {
197
- var trigger = triggers[i]
198
-
199
- if (trigger == 'click') {
200
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
201
- } else if (trigger != 'manual') {
202
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
203
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
204
-
205
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
206
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
207
- }
208
- }
209
-
210
- this.options.selector ?
211
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
212
- this.fixTitle()
213
- }
214
-
215
- Tooltip.prototype.getDefaults = function () {
216
- return Tooltip.DEFAULTS
217
- }
218
-
219
- Tooltip.prototype.getOptions = function (options) {
220
- var dataAttributes = this.$element.data()
221
-
222
- for (var dataAttr in dataAttributes) {
223
- if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
224
- delete dataAttributes[dataAttr]
225
- }
226
- }
227
-
228
- options = $.extend({}, this.getDefaults(), dataAttributes, options)
229
-
230
- if (options.delay && typeof options.delay == 'number') {
231
- options.delay = {
232
- show: options.delay,
233
- hide: options.delay
234
- }
235
- }
236
-
237
- if (options.sanitize) {
238
- options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)
239
- }
240
-
241
- return options
242
- }
243
-
244
- Tooltip.prototype.getDelegateOptions = function () {
245
- var options = {}
246
- var defaults = this.getDefaults()
247
-
248
- this._options && $.each(this._options, function (key, value) {
249
- if (defaults[key] != value) options[key] = value
250
- })
251
-
252
- return options
253
- }
254
-
255
- Tooltip.prototype.enter = function (obj) {
256
- var self = obj instanceof this.constructor ?
257
- obj : $(obj.currentTarget).data('bs.' + this.type)
258
-
259
- if (!self) {
260
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
261
- $(obj.currentTarget).data('bs.' + this.type, self)
262
- }
263
-
264
- if (obj instanceof $.Event) {
265
- self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
266
- }
267
-
268
- if (self.tip().hasClass('in') || self.hoverState == 'in') {
269
- self.hoverState = 'in'
270
- return
271
- }
272
-
273
- clearTimeout(self.timeout)
274
-
275
- self.hoverState = 'in'
276
-
277
- if (!self.options.delay || !self.options.delay.show) return self.show()
278
-
279
- self.timeout = setTimeout(function () {
280
- if (self.hoverState == 'in') self.show()
281
- }, self.options.delay.show)
282
- }
283
-
284
- Tooltip.prototype.isInStateTrue = function () {
285
- for (var key in this.inState) {
286
- if (this.inState[key]) return true
287
- }
288
-
289
- return false
290
- }
291
-
292
- Tooltip.prototype.leave = function (obj) {
293
- var self = obj instanceof this.constructor ?
294
- obj : $(obj.currentTarget).data('bs.' + this.type)
295
-
296
- if (!self) {
297
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
298
- $(obj.currentTarget).data('bs.' + this.type, self)
299
- }
300
-
301
- if (obj instanceof $.Event) {
302
- self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
303
- }
304
-
305
- if (self.isInStateTrue()) return
306
-
307
- clearTimeout(self.timeout)
308
-
309
- self.hoverState = 'out'
310
-
311
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
312
-
313
- self.timeout = setTimeout(function () {
314
- if (self.hoverState == 'out') self.hide()
315
- }, self.options.delay.hide)
316
- }
317
-
318
- Tooltip.prototype.show = function () {
319
- var e = $.Event('show.bs.' + this.type)
320
-
321
- if (this.hasContent() && this.enabled) {
322
- this.$element.trigger(e)
323
-
324
- var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
325
- if (e.isDefaultPrevented() || !inDom) return
326
- var that = this
327
-
328
- var $tip = this.tip()
329
-
330
- var tipId = this.getUID(this.type)
331
-
332
- this.setContent()
333
- $tip.attr('id', tipId)
334
- this.$element.attr('aria-describedby', tipId)
335
-
336
- if (this.options.animation) $tip.addClass('fade')
337
-
338
- var placement = typeof this.options.placement == 'function' ?
339
- this.options.placement.call(this, $tip[0], this.$element[0]) :
340
- this.options.placement
341
-
342
- var autoToken = /\s?auto?\s?/i
343
- var autoPlace = autoToken.test(placement)
344
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
345
-
346
- $tip
347
- .detach()
348
- .css({ top: 0, left: 0, display: 'block' })
349
- .addClass(placement)
350
- .data('bs.' + this.type, this)
351
-
352
- this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)
353
- this.$element.trigger('inserted.bs.' + this.type)
354
-
355
- var pos = this.getPosition()
356
- var actualWidth = $tip[0].offsetWidth
357
- var actualHeight = $tip[0].offsetHeight
358
-
359
- if (autoPlace) {
360
- var orgPlacement = placement
361
- var viewportDim = this.getPosition(this.$viewport)
362
-
363
- placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
364
- placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
365
- placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
366
- placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
367
- placement
368
-
369
- $tip
370
- .removeClass(orgPlacement)
371
- .addClass(placement)
372
- }
373
-
374
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
375
-
376
- this.applyPlacement(calculatedOffset, placement)
377
-
378
- var complete = function () {
379
- var prevHoverState = that.hoverState
380
- that.$element.trigger('shown.bs.' + that.type)
381
- that.hoverState = null
382
-
383
- if (prevHoverState == 'out') that.leave(that)
384
- }
385
-
386
- $.support.transition && this.$tip.hasClass('fade') ?
387
- $tip
388
- .one('bsTransitionEnd', complete)
389
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
390
- complete()
391
- }
392
- }
393
-
394
- Tooltip.prototype.applyPlacement = function (offset, placement) {
395
- var $tip = this.tip()
396
- var width = $tip[0].offsetWidth
397
- var height = $tip[0].offsetHeight
398
-
399
- // manually read margins because getBoundingClientRect includes difference
400
- var marginTop = parseInt($tip.css('margin-top'), 10)
401
- var marginLeft = parseInt($tip.css('margin-left'), 10)
402
-
403
- // we must check for NaN for ie 8/9
404
- if (isNaN(marginTop)) marginTop = 0
405
- if (isNaN(marginLeft)) marginLeft = 0
406
-
407
- offset.top += marginTop
408
- offset.left += marginLeft
409
-
410
- // $.fn.offset doesn't round pixel values
411
- // so we use setOffset directly with our own function B-0
412
- $.offset.setOffset($tip[0], $.extend({
413
- using: function (props) {
414
- $tip.css({
415
- top: Math.round(props.top),
416
- left: Math.round(props.left)
417
- })
418
- }
419
- }, offset), 0)
420
-
421
- $tip.addClass('in')
422
-
423
- // check to see if placing tip in new offset caused the tip to resize itself
424
- var actualWidth = $tip[0].offsetWidth
425
- var actualHeight = $tip[0].offsetHeight
426
-
427
- if (placement == 'top' && actualHeight != height) {
428
- offset.top = offset.top + height - actualHeight
429
- }
430
-
431
- var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
432
-
433
- if (delta.left) offset.left += delta.left
434
- else offset.top += delta.top
435
-
436
- var isVertical = /top|bottom/.test(placement)
437
- var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
438
- var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
439
-
440
- $tip.offset(offset)
441
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
442
- }
443
-
444
- Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
445
- this.arrow()
446
- .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
447
- .css(isVertical ? 'top' : 'left', '')
448
- }
449
-
450
- Tooltip.prototype.setContent = function () {
451
- var $tip = this.tip()
452
- var title = this.getTitle()
453
-
454
- if (this.options.html) {
455
- if (this.options.sanitize) {
456
- title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)
457
- }
458
-
459
- $tip.find('.tooltip-inner').html(title)
460
- } else {
461
- $tip.find('.tooltip-inner').text(title)
462
- }
463
-
464
- $tip.removeClass('fade in top bottom left right')
465
- }
466
-
467
- Tooltip.prototype.hide = function (callback) {
468
- var that = this
469
- var $tip = $(this.$tip)
470
- var e = $.Event('hide.bs.' + this.type)
471
-
472
- function complete() {
473
- if (that.hoverState != 'in') $tip.detach()
474
- if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
475
- that.$element
476
- .removeAttr('aria-describedby')
477
- .trigger('hidden.bs.' + that.type)
478
- }
479
- callback && callback()
480
- }
481
-
482
- this.$element.trigger(e)
483
-
484
- if (e.isDefaultPrevented()) return
485
-
486
- $tip.removeClass('in')
487
-
488
- $.support.transition && $tip.hasClass('fade') ?
489
- $tip
490
- .one('bsTransitionEnd', complete)
491
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
492
- complete()
493
-
494
- this.hoverState = null
495
-
496
- return this
497
- }
498
-
499
- Tooltip.prototype.fixTitle = function () {
500
- var $e = this.$element
501
- if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
502
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
503
- }
504
- }
505
-
506
- Tooltip.prototype.hasContent = function () {
507
- return this.getTitle()
508
- }
509
-
510
- Tooltip.prototype.getPosition = function ($element) {
511
- $element = $element || this.$element
512
-
513
- var el = $element[0]
514
- var isBody = el.tagName == 'BODY'
515
-
516
- var elRect = el.getBoundingClientRect()
517
- if (elRect.width == null) {
518
- // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
519
- elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
520
- }
521
- var isSvg = window.SVGElement && el instanceof window.SVGElement
522
- // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
523
- // See https://github.com/twbs/bootstrap/issues/20280
524
- var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
525
- var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
526
- var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
527
-
528
- return $.extend({}, elRect, scroll, outerDims, elOffset)
529
- }
530
-
531
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
532
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
533
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
534
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
535
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
536
-
537
- }
538
-
539
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
540
- var delta = { top: 0, left: 0 }
541
- if (!this.$viewport) return delta
542
-
543
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
544
- var viewportDimensions = this.getPosition(this.$viewport)
545
-
546
- if (/right|left/.test(placement)) {
547
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
548
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
549
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
550
- delta.top = viewportDimensions.top - topEdgeOffset
551
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
552
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
553
- }
554
- } else {
555
- var leftEdgeOffset = pos.left - viewportPadding
556
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
557
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
558
- delta.left = viewportDimensions.left - leftEdgeOffset
559
- } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
560
- delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
561
- }
562
- }
563
-
564
- return delta
565
- }
566
-
567
- Tooltip.prototype.getTitle = function () {
568
- var title
569
- var $e = this.$element
570
- var o = this.options
571
-
572
- title = $e.attr('data-original-title')
573
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
574
-
575
- return title
576
- }
577
-
578
- Tooltip.prototype.getUID = function (prefix) {
579
- do prefix += ~~(Math.random() * 1000000)
580
- while (document.getElementById(prefix))
581
- return prefix
582
- }
583
-
584
- Tooltip.prototype.tip = function () {
585
- if (!this.$tip) {
586
- this.$tip = $(this.options.template)
587
- if (this.$tip.length != 1) {
588
- throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
589
- }
590
- }
591
- return this.$tip
592
- }
593
-
594
- Tooltip.prototype.arrow = function () {
595
- return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
596
- }
597
-
598
- Tooltip.prototype.enable = function () {
599
- this.enabled = true
600
- }
601
-
602
- Tooltip.prototype.disable = function () {
603
- this.enabled = false
604
- }
605
-
606
- Tooltip.prototype.toggleEnabled = function () {
607
- this.enabled = !this.enabled
608
- }
609
-
610
- Tooltip.prototype.toggle = function (e) {
611
- var self = this
612
- if (e) {
613
- self = $(e.currentTarget).data('bs.' + this.type)
614
- if (!self) {
615
- self = new this.constructor(e.currentTarget, this.getDelegateOptions())
616
- $(e.currentTarget).data('bs.' + this.type, self)
617
- }
618
- }
619
-
620
- if (e) {
621
- self.inState.click = !self.inState.click
622
- if (self.isInStateTrue()) self.enter(self)
623
- else self.leave(self)
624
- } else {
625
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
626
- }
627
- }
628
-
629
- Tooltip.prototype.destroy = function () {
630
- var that = this
631
- clearTimeout(this.timeout)
632
- this.hide(function () {
633
- that.$element.off('.' + that.type).removeData('bs.' + that.type)
634
- if (that.$tip) {
635
- that.$tip.detach()
636
- }
637
- that.$tip = null
638
- that.$arrow = null
639
- that.$viewport = null
640
- that.$element = null
641
- })
642
- }
643
-
644
- Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
645
- return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)
646
- }
647
-
648
- // TOOLTIP PLUGIN DEFINITION
649
- // =========================
650
-
651
- function Plugin(option) {
652
- return this.each(function () {
653
- var $this = $(this)
654
- var data = $this.data('bs.tooltip')
655
- var options = typeof option == 'object' && option
656
-
657
- if (!data && /destroy|hide/.test(option)) return
658
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
659
- if (typeof option == 'string') data[option]()
660
- })
661
- }
662
-
663
- var old = $.fn.tooltip
664
-
665
- $.fn.tooltip = Plugin
666
- $.fn.tooltip.Constructor = Tooltip
667
-
668
-
669
- // TOOLTIP NO CONFLICT
670
- // ===================
671
-
672
- $.fn.tooltip.noConflict = function () {
673
- $.fn.tooltip = old
674
- return this
675
- }
676
-
677
- }(jQuery);