rails_admin 0.8.1 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -34
  3. data/LICENSE.md +1 -1
  4. data/README.md +34 -26
  5. data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
  6. data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
  7. data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  8. data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  9. data/app/assets/images/rails_admin/bullet_black.png +0 -0
  10. data/app/assets/images/rails_admin/bullet_white.png +0 -0
  11. data/app/assets/images/rails_admin/calendar.png +0 -0
  12. data/app/assets/images/rails_admin/clock.png +0 -0
  13. data/app/assets/images/rails_admin/magnifier.png +0 -0
  14. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
  15. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
  16. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
  17. data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  18. data/app/assets/javascripts/rails_admin/jquery-ui.js.erb +8 -0
  19. data/app/assets/javascripts/rails_admin/jquery.migrate.js +3 -0
  20. data/app/assets/javascripts/rails_admin/ra.filter-box.js +148 -60
  21. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +31 -26
  22. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +211 -110
  23. data/app/assets/javascripts/rails_admin/ra.i18n.js +28 -0
  24. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +59 -0
  25. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  26. data/app/assets/javascripts/rails_admin/ra.widgets.js +379 -0
  27. data/app/assets/javascripts/rails_admin/rails_admin.js +5 -5
  28. data/app/assets/javascripts/rails_admin/ui.js +135 -0
  29. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  30. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  31. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  32. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  33. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss +5 -5
  34. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +29 -0
  35. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +9 -1
  36. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +2 -1
  37. data/app/controllers/rails_admin/application_controller.rb +14 -8
  38. data/app/controllers/rails_admin/main_controller.rb +9 -9
  39. data/app/helpers/rails_admin/application_helper.rb +26 -11
  40. data/app/helpers/rails_admin/form_builder.rb +20 -12
  41. data/app/helpers/rails_admin/main_helper.rb +8 -7
  42. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_gap.html.haml +0 -0
  43. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_next_page.html.haml +0 -0
  44. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_page.html.haml +0 -0
  45. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_paginator.html.haml +0 -0
  46. data/app/views/kaminari/{twitter-bootstrap → ra-twitter-bootstrap}/_prev_page.html.haml +0 -0
  47. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.haml +4 -0
  48. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.haml +4 -0
  49. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.haml +4 -0
  50. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  51. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +2 -2
  52. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  53. data/app/views/layouts/rails_admin/application.html.haml +4 -10
  54. data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
  55. data/app/views/rails_admin/main/_delete_notice.html.haml +14 -9
  56. data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
  57. data/app/views/rails_admin/main/_form_colorpicker.html.haml +1 -1
  58. data/app/views/rails_admin/main/_form_enumeration.html.haml +4 -3
  59. data/app/views/rails_admin/main/_form_file_upload.html.haml +5 -5
  60. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +7 -6
  61. data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
  62. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +16 -0
  63. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
  64. data/app/views/rails_admin/main/_form_simple_mde.haml +8 -0
  65. data/app/views/rails_admin/main/dashboard.html.haml +5 -6
  66. data/app/views/rails_admin/main/export.html.haml +45 -36
  67. data/app/views/rails_admin/main/history.html.haml +3 -3
  68. data/app/views/rails_admin/main/index.html.haml +37 -26
  69. data/app/views/rails_admin/main/show.html.haml +6 -7
  70. data/config/initializers/active_record_extensions.rb +3 -3
  71. data/config/initializers/haml.rb +4 -1
  72. data/config/locales/rails_admin.en.yml +5 -2
  73. data/lib/generators/rails_admin/templates/initializer.erb +6 -2
  74. data/lib/rails_admin/abstract_model.rb +9 -10
  75. data/lib/rails_admin/adapters/active_record/abstract_object.rb +9 -3
  76. data/lib/rails_admin/adapters/active_record/property.rb +1 -5
  77. data/lib/rails_admin/adapters/active_record.rb +83 -28
  78. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +3 -3
  79. data/lib/rails_admin/adapters/mongoid/association.rb +18 -6
  80. data/lib/rails_admin/adapters/mongoid/bson.rb +29 -0
  81. data/lib/rails_admin/adapters/mongoid/extension.rb +4 -2
  82. data/lib/rails_admin/adapters/mongoid/property.rb +3 -3
  83. data/lib/rails_admin/adapters/mongoid.rb +40 -26
  84. data/lib/rails_admin/bootstrap-sass/compass_functions.rb +1 -1
  85. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
  86. data/lib/rails_admin/bootstrap-sass.rb +8 -6
  87. data/lib/rails_admin/config/actions/base.rb +20 -5
  88. data/lib/rails_admin/config/actions/bulk_delete.rb +2 -4
  89. data/lib/rails_admin/config/actions/dashboard.rb +9 -5
  90. data/lib/rails_admin/config/actions/edit.rb +1 -3
  91. data/lib/rails_admin/config/actions/export.rb +1 -1
  92. data/lib/rails_admin/config/actions/index.rb +5 -3
  93. data/lib/rails_admin/config/actions/new.rb +4 -5
  94. data/lib/rails_admin/config/actions.rb +1 -1
  95. data/lib/rails_admin/config/configurable.rb +25 -18
  96. data/lib/rails_admin/config/fields/association.rb +11 -3
  97. data/lib/rails_admin/config/fields/base.rb +20 -27
  98. data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
  99. data/lib/rails_admin/config/fields/factories/active_storage.rb +30 -0
  100. data/lib/rails_admin/config/fields/factories/carrierwave.rb +4 -2
  101. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  102. data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
  103. data/lib/rails_admin/config/fields/types/action_text.rb +30 -0
  104. data/lib/rails_admin/config/fields/types/active_record_enum.rb +19 -2
  105. data/lib/rails_admin/config/fields/types/active_storage.rb +49 -0
  106. data/lib/rails_admin/config/fields/types/all.rb +7 -1
  107. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +8 -0
  108. data/lib/rails_admin/config/fields/types/bson_object_id.rb +1 -15
  109. data/lib/rails_admin/config/fields/types/ck_editor.rb +7 -7
  110. data/lib/rails_admin/config/fields/types/code_mirror.rb +10 -12
  111. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  112. data/lib/rails_admin/config/fields/types/datetime.rb +6 -3
  113. data/lib/rails_admin/config/fields/types/file_upload.rb +12 -4
  114. data/lib/rails_admin/config/fields/types/froala.rb +9 -11
  115. data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -1
  116. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  117. data/lib/rails_admin/config/fields/types/json.rb +9 -1
  118. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +53 -0
  119. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +56 -0
  120. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +125 -0
  121. data/lib/rails_admin/config/fields/types/password.rb +5 -1
  122. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +12 -1
  123. data/lib/rails_admin/config/fields/types/serialized.rb +2 -2
  124. data/lib/rails_admin/config/fields/types/shrine.rb +54 -0
  125. data/lib/rails_admin/config/fields/types/simple_mde.rb +36 -0
  126. data/lib/rails_admin/config/fields/types/string.rb +8 -7
  127. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  128. data/lib/rails_admin/config/fields/types/text.rb +2 -20
  129. data/lib/rails_admin/config/fields/types/wysihtml5.rb +14 -10
  130. data/lib/rails_admin/config/fields/types.rb +1 -1
  131. data/lib/rails_admin/config/fields.rb +3 -1
  132. data/lib/rails_admin/config/has_fields.rb +1 -1
  133. data/lib/rails_admin/config/has_groups.rb +1 -1
  134. data/lib/rails_admin/config/hideable.rb +1 -1
  135. data/lib/rails_admin/config/inspectable.rb +39 -0
  136. data/lib/rails_admin/config/lazy_model.rb +48 -8
  137. data/lib/rails_admin/config/model.rb +10 -22
  138. data/lib/rails_admin/config/proxyable/proxy.rb +7 -9
  139. data/lib/rails_admin/config/proxyable.rb +13 -1
  140. data/lib/rails_admin/config/sections/base.rb +4 -17
  141. data/lib/rails_admin/config/sections/list.rb +37 -0
  142. data/lib/rails_admin/config.rb +46 -25
  143. data/lib/rails_admin/engine.rb +37 -4
  144. data/lib/rails_admin/extension.rb +16 -4
  145. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +23 -7
  146. data/lib/rails_admin/extensions/cancancan.rb +1 -1
  147. data/lib/rails_admin/extensions/controller_extension.rb +6 -0
  148. data/lib/rails_admin/extensions/history/auditing_adapter.rb +2 -2
  149. data/lib/rails_admin/extensions/history/history.rb +2 -2
  150. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +59 -17
  151. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +11 -3
  152. data/lib/rails_admin/support/csv_converter.rb +20 -14
  153. data/lib/rails_admin/support/datetime.rb +7 -6
  154. data/lib/rails_admin/support/i18n.rb +7 -5
  155. data/lib/rails_admin/version.rb +2 -2
  156. data/lib/rails_admin.rb +23 -1
  157. data/lib/tasks/rails_admin.rake +16 -7
  158. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  159. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  160. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
  161. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  162. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  163. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  164. data/vendor/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  165. data/vendor/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  166. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  167. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  168. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  169. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  170. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  171. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  172. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  173. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  174. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  175. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  176. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  177. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  178. data/vendor/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  179. data/vendor/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  180. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  181. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  182. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  183. data/vendor/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  184. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  185. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  186. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  187. data/vendor/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  188. data/vendor/assets/images/rails_admin/colorpicker/select.png +0 -0
  189. data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  190. data/vendor/assets/images/rails_admin/colorpicker/slider.png +0 -0
  191. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +50 -28
  192. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +10 -7
  193. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +35 -20
  194. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +48 -25
  195. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +70 -28
  196. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +56 -42
  197. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +118 -40
  198. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +26 -16
  199. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +29 -27
  200. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +46 -19
  201. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +280 -60
  202. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +5 -5
  203. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  204. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  205. data/vendor/assets/javascripts/rails_admin/bootstrap-datetimepicker.js +317 -150
  206. data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  207. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +316 -161
  208. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +16528 -8420
  209. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  210. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  211. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  212. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  213. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  214. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  215. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  216. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  217. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  218. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  219. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  220. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  221. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  222. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  223. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  224. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  225. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  226. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  227. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  228. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  229. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  230. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  231. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  232. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  233. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  234. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  235. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  236. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  237. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  238. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  239. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  240. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  241. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  242. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  243. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  244. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  245. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  246. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  247. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  248. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  249. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  250. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  251. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  252. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  253. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  254. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  255. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  256. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  257. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  258. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  259. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  260. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  261. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  262. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  263. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  264. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  265. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  266. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  267. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  268. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  269. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  270. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  271. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  272. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  273. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  274. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  275. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  276. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  277. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  278. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  279. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +2342 -0
  280. data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
  281. metadata +214 -199
  282. data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  283. data/app/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  284. data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  285. data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  286. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  287. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  288. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  289. data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  290. data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  291. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  292. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  293. data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  294. data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  295. data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  296. data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  297. data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  298. data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  299. data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  300. data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  301. data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
  302. data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
  303. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  304. data/app/assets/javascripts/rails_admin/jquery.remotipart.fixed.js +0 -72
  305. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -8
  306. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -52
  307. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -308
  308. data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
  309. data/config/initializers/devise_patch.rb +0 -9
  310. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  311. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  312. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
  313. data/lib/rails_admin/extensions/cancan.rb +0 -3
@@ -1,11 +1,12 @@
1
1
  /* ========================================================================
2
- * Bootstrap: collapse.js v3.2.0
3
- * http://getbootstrap.com/javascript/#collapse
2
+ * Bootstrap: collapse.js v3.4.1
3
+ * https://getbootstrap.com/docs/3.4/javascript/#collapse
4
4
  * ========================================================================
5
- * Copyright 2011-2014 Twitter, Inc.
5
+ * Copyright 2011-2019 Twitter, Inc.
6
6
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
7
  * ======================================================================== */
8
8
 
9
+ /* jshint latedef: false */
9
10
 
10
11
  +function ($) {
11
12
  'use strict';
@@ -16,13 +17,22 @@
16
17
  var Collapse = function (element, options) {
17
18
  this.$element = $(element)
18
19
  this.options = $.extend({}, Collapse.DEFAULTS, options)
20
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
21
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
19
22
  this.transitioning = null
20
23
 
21
- if (this.options.parent) this.$parent = $(this.options.parent)
24
+ if (this.options.parent) {
25
+ this.$parent = this.getParent()
26
+ } else {
27
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
28
+ }
29
+
22
30
  if (this.options.toggle) this.toggle()
23
31
  }
24
32
 
25
- Collapse.VERSION = '3.2.0'
33
+ Collapse.VERSION = '3.4.1'
34
+
35
+ Collapse.TRANSITION_DURATION = 350
26
36
 
27
37
  Collapse.DEFAULTS = {
28
38
  toggle: true
@@ -36,17 +46,21 @@
36
46
  Collapse.prototype.show = function () {
37
47
  if (this.transitioning || this.$element.hasClass('in')) return
38
48
 
49
+ var activesData
50
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
51
+
52
+ if (actives && actives.length) {
53
+ activesData = actives.data('bs.collapse')
54
+ if (activesData && activesData.transitioning) return
55
+ }
56
+
39
57
  var startEvent = $.Event('show.bs.collapse')
40
58
  this.$element.trigger(startEvent)
41
59
  if (startEvent.isDefaultPrevented()) return
42
60
 
43
- var actives = this.$parent && this.$parent.find('> .panel > .in')
44
-
45
61
  if (actives && actives.length) {
46
- var hasData = actives.data('bs.collapse')
47
- if (hasData && hasData.transitioning) return
48
62
  Plugin.call(actives, 'hide')
49
- hasData || actives.data('bs.collapse', null)
63
+ activesData || actives.data('bs.collapse', null)
50
64
  }
51
65
 
52
66
  var dimension = this.dimension()
@@ -54,6 +68,11 @@
54
68
  this.$element
55
69
  .removeClass('collapse')
56
70
  .addClass('collapsing')[dimension](0)
71
+ .attr('aria-expanded', true)
72
+
73
+ this.$trigger
74
+ .removeClass('collapsed')
75
+ .attr('aria-expanded', true)
57
76
 
58
77
  this.transitioning = 1
59
78
 
@@ -72,7 +91,7 @@
72
91
 
73
92
  this.$element
74
93
  .one('bsTransitionEnd', $.proxy(complete, this))
75
- .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
94
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
76
95
  }
77
96
 
78
97
  Collapse.prototype.hide = function () {
@@ -88,17 +107,21 @@
88
107
 
89
108
  this.$element
90
109
  .addClass('collapsing')
91
- .removeClass('collapse')
92
- .removeClass('in')
110
+ .removeClass('collapse in')
111
+ .attr('aria-expanded', false)
112
+
113
+ this.$trigger
114
+ .addClass('collapsed')
115
+ .attr('aria-expanded', false)
93
116
 
94
117
  this.transitioning = 1
95
118
 
96
119
  var complete = function () {
97
120
  this.transitioning = 0
98
121
  this.$element
99
- .trigger('hidden.bs.collapse')
100
122
  .removeClass('collapsing')
101
123
  .addClass('collapse')
124
+ .trigger('hidden.bs.collapse')
102
125
  }
103
126
 
104
127
  if (!$.support.transition) return complete.call(this)
@@ -106,13 +129,40 @@
106
129
  this.$element
107
130
  [dimension](0)
108
131
  .one('bsTransitionEnd', $.proxy(complete, this))
109
- .emulateTransitionEnd(350)
132
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
110
133
  }
111
134
 
112
135
  Collapse.prototype.toggle = function () {
113
136
  this[this.$element.hasClass('in') ? 'hide' : 'show']()
114
137
  }
115
138
 
139
+ Collapse.prototype.getParent = function () {
140
+ return $(document).find(this.options.parent)
141
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
142
+ .each($.proxy(function (i, element) {
143
+ var $element = $(element)
144
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
145
+ }, this))
146
+ .end()
147
+ }
148
+
149
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
150
+ var isOpen = $element.hasClass('in')
151
+
152
+ $element.attr('aria-expanded', isOpen)
153
+ $trigger
154
+ .toggleClass('collapsed', !isOpen)
155
+ .attr('aria-expanded', isOpen)
156
+ }
157
+
158
+ function getTargetFromTrigger($trigger) {
159
+ var href
160
+ var target = $trigger.attr('data-target')
161
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
162
+
163
+ return $(document).find(target)
164
+ }
165
+
116
166
 
117
167
  // COLLAPSE PLUGIN DEFINITION
118
168
  // ==========================
@@ -123,7 +173,7 @@
123
173
  var data = $this.data('bs.collapse')
124
174
  var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
125
175
 
126
- if (!data && options.toggle && option == 'show') option = !option
176
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
127
177
  if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
128
178
  if (typeof option == 'string') data[option]()
129
179
  })
@@ -148,21 +198,13 @@
148
198
  // =================
149
199
 
150
200
  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
151
- var href
152
201
  var $this = $(this)
153
- var target = $this.attr('data-target')
154
- || e.preventDefault()
155
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
156
- var $target = $(target)
202
+
203
+ if (!$this.attr('data-target')) e.preventDefault()
204
+
205
+ var $target = getTargetFromTrigger($this)
157
206
  var data = $target.data('bs.collapse')
158
207
  var option = data ? 'toggle' : $this.data()
159
- var parent = $this.attr('data-parent')
160
- var $parent = parent && $(parent)
161
-
162
- if (!data || !data.transitioning) {
163
- if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
164
- $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
165
- }
166
208
 
167
209
  Plugin.call($target, option)
168
210
  })
@@ -1,8 +1,8 @@
1
1
  /* ========================================================================
2
- * Bootstrap: dropdown.js v3.2.0
3
- * http://getbootstrap.com/javascript/#dropdowns
2
+ * Bootstrap: dropdown.js v3.4.1
3
+ * https://getbootstrap.com/docs/3.4/javascript/#dropdowns
4
4
  * ========================================================================
5
- * Copyright 2011-2014 Twitter, Inc.
5
+ * Copyright 2011-2019 Twitter, Inc.
6
6
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
7
  * ======================================================================== */
8
8
 
@@ -19,7 +19,41 @@
19
19
  $(element).on('click.bs.dropdown', this.toggle)
20
20
  }
21
21
 
22
- Dropdown.VERSION = '3.2.0'
22
+ Dropdown.VERSION = '3.4.1'
23
+
24
+ function getParent($this) {
25
+ var selector = $this.attr('data-target')
26
+
27
+ if (!selector) {
28
+ selector = $this.attr('href')
29
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
30
+ }
31
+
32
+ var $parent = selector !== '#' ? $(document).find(selector) : null
33
+
34
+ return $parent && $parent.length ? $parent : $this.parent()
35
+ }
36
+
37
+ function clearMenus(e) {
38
+ if (e && e.which === 3) return
39
+ $(backdrop).remove()
40
+ $(toggle).each(function () {
41
+ var $this = $(this)
42
+ var $parent = getParent($this)
43
+ var relatedTarget = { relatedTarget: this }
44
+
45
+ if (!$parent.hasClass('open')) return
46
+
47
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
48
+
49
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
50
+
51
+ if (e.isDefaultPrevented()) return
52
+
53
+ $this.attr('aria-expanded', 'false')
54
+ $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
55
+ })
56
+ }
23
57
 
24
58
  Dropdown.prototype.toggle = function (e) {
25
59
  var $this = $(this)
@@ -34,7 +68,10 @@
34
68
  if (!isActive) {
35
69
  if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
36
70
  // if mobile we use a backdrop because click events don't delegate
37
- $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
71
+ $(document.createElement('div'))
72
+ .addClass('dropdown-backdrop')
73
+ .insertAfter($(this))
74
+ .on('click', clearMenus)
38
75
  }
39
76
 
40
77
  var relatedTarget = { relatedTarget: this }
@@ -42,18 +79,20 @@
42
79
 
43
80
  if (e.isDefaultPrevented()) return
44
81
 
45
- $this.trigger('focus')
82
+ $this
83
+ .trigger('focus')
84
+ .attr('aria-expanded', 'true')
46
85
 
47
86
  $parent
48
87
  .toggleClass('open')
49
- .trigger('shown.bs.dropdown', relatedTarget)
88
+ .trigger($.Event('shown.bs.dropdown', relatedTarget))
50
89
  }
51
90
 
52
91
  return false
53
92
  }
54
93
 
55
94
  Dropdown.prototype.keydown = function (e) {
56
- if (!/(38|40|27)/.test(e.keyCode)) return
95
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
57
96
 
58
97
  var $this = $(this)
59
98
 
@@ -65,51 +104,25 @@
65
104
  var $parent = getParent($this)
66
105
  var isActive = $parent.hasClass('open')
67
106
 
68
- if (!isActive || (isActive && e.keyCode == 27)) {
107
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
69
108
  if (e.which == 27) $parent.find(toggle).trigger('focus')
70
109
  return $this.trigger('click')
71
110
  }
72
111
 
73
- var desc = ' li:not(.divider):visible a'
74
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
112
+ var desc = ' li:not(.disabled):visible a'
113
+ var $items = $parent.find('.dropdown-menu' + desc)
75
114
 
76
115
  if (!$items.length) return
77
116
 
78
- var index = $items.index($items.filter(':focus'))
117
+ var index = $items.index(e.target)
79
118
 
80
- if (e.keyCode == 38 && index > 0) index-- // up
81
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
82
- if (!~index) index = 0
119
+ if (e.which == 38 && index > 0) index-- // up
120
+ if (e.which == 40 && index < $items.length - 1) index++ // down
121
+ if (!~index) index = 0
83
122
 
84
123
  $items.eq(index).trigger('focus')
85
124
  }
86
125
 
87
- function clearMenus(e) {
88
- if (e && e.which === 3) return
89
- $(backdrop).remove()
90
- $(toggle).each(function () {
91
- var $parent = getParent($(this))
92
- var relatedTarget = { relatedTarget: this }
93
- if (!$parent.hasClass('open')) return
94
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
95
- if (e.isDefaultPrevented()) return
96
- $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
97
- })
98
- }
99
-
100
- function getParent($this) {
101
- var selector = $this.attr('data-target')
102
-
103
- if (!selector) {
104
- selector = $this.attr('href')
105
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
106
- }
107
-
108
- var $parent = selector && $(selector)
109
-
110
- return $parent && $parent.length ? $parent : $this.parent()
111
- }
112
-
113
126
 
114
127
  // DROPDOWN PLUGIN DEFINITION
115
128
  // ==========================
@@ -146,6 +159,7 @@
146
159
  .on('click.bs.dropdown.data-api', clearMenus)
147
160
  .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
148
161
  .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
149
- .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
162
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
163
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
150
164
 
151
165
  }(jQuery);
@@ -1,8 +1,8 @@
1
1
  /* ========================================================================
2
- * Bootstrap: modal.js v3.2.0
3
- * http://getbootstrap.com/javascript/#modals
2
+ * Bootstrap: modal.js v3.4.1
3
+ * https://getbootstrap.com/docs/3.4/javascript/#modals
4
4
  * ========================================================================
5
- * Copyright 2011-2014 Twitter, Inc.
5
+ * Copyright 2011-2019 Twitter, Inc.
6
6
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
7
  * ======================================================================== */
8
8
 
@@ -14,12 +14,16 @@
14
14
  // ======================
15
15
 
16
16
  var Modal = function (element, options) {
17
- this.options = options
18
- this.$body = $(document.body)
19
- this.$element = $(element)
20
- this.$backdrop =
21
- this.isShown = null
17
+ this.options = options
18
+ this.$body = $(document.body)
19
+ this.$element = $(element)
20
+ this.$dialog = this.$element.find('.modal-dialog')
21
+ this.$backdrop = null
22
+ this.isShown = null
23
+ this.originalBodyPad = null
22
24
  this.scrollbarWidth = 0
25
+ this.ignoreBackdropClick = false
26
+ this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
23
27
 
24
28
  if (this.options.remote) {
25
29
  this.$element
@@ -30,7 +34,10 @@
30
34
  }
31
35
  }
32
36
 
33
- Modal.VERSION = '3.2.0'
37
+ Modal.VERSION = '3.4.1'
38
+
39
+ Modal.TRANSITION_DURATION = 300
40
+ Modal.BACKDROP_TRANSITION_DURATION = 150
34
41
 
35
42
  Modal.DEFAULTS = {
36
43
  backdrop: true,
@@ -44,7 +51,7 @@
44
51
 
45
52
  Modal.prototype.show = function (_relatedTarget) {
46
53
  var that = this
47
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
54
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
48
55
 
49
56
  this.$element.trigger(e)
50
57
 
@@ -53,13 +60,20 @@
53
60
  this.isShown = true
54
61
 
55
62
  this.checkScrollbar()
63
+ this.setScrollbar()
56
64
  this.$body.addClass('modal-open')
57
65
 
58
- this.setScrollbar()
59
66
  this.escape()
67
+ this.resize()
60
68
 
61
69
  this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
62
70
 
71
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
72
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
73
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
74
+ })
75
+ })
76
+
63
77
  this.backdrop(function () {
64
78
  var transition = $.support.transition && that.$element.hasClass('fade')
65
79
 
@@ -71,24 +85,24 @@
71
85
  .show()
72
86
  .scrollTop(0)
73
87
 
88
+ that.adjustDialog()
89
+
74
90
  if (transition) {
75
91
  that.$element[0].offsetWidth // force reflow
76
92
  }
77
93
 
78
- that.$element
79
- .addClass('in')
80
- .attr('aria-hidden', false)
94
+ that.$element.addClass('in')
81
95
 
82
96
  that.enforceFocus()
83
97
 
84
98
  var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
85
99
 
86
100
  transition ?
87
- that.$element.find('.modal-dialog') // wait for modal to slide in
101
+ that.$dialog // wait for modal to slide in
88
102
  .one('bsTransitionEnd', function () {
89
103
  that.$element.trigger('focus').trigger(e)
90
104
  })
91
- .emulateTransitionEnd(300) :
105
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
92
106
  that.$element.trigger('focus').trigger(e)
93
107
  })
94
108
  }
@@ -104,22 +118,22 @@
104
118
 
105
119
  this.isShown = false
106
120
 
107
- this.$body.removeClass('modal-open')
108
-
109
- this.resetScrollbar()
110
121
  this.escape()
122
+ this.resize()
111
123
 
112
124
  $(document).off('focusin.bs.modal')
113
125
 
114
126
  this.$element
115
127
  .removeClass('in')
116
- .attr('aria-hidden', true)
117
128
  .off('click.dismiss.bs.modal')
129
+ .off('mouseup.dismiss.bs.modal')
130
+
131
+ this.$dialog.off('mousedown.dismiss.bs.modal')
118
132
 
119
133
  $.support.transition && this.$element.hasClass('fade') ?
120
134
  this.$element
121
135
  .one('bsTransitionEnd', $.proxy(this.hideModal, this))
122
- .emulateTransitionEnd(300) :
136
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
123
137
  this.hideModal()
124
138
  }
125
139
 
@@ -127,7 +141,9 @@
127
141
  $(document)
128
142
  .off('focusin.bs.modal') // guard against infinite focus loop
129
143
  .on('focusin.bs.modal', $.proxy(function (e) {
130
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
144
+ if (document !== e.target &&
145
+ this.$element[0] !== e.target &&
146
+ !this.$element.has(e.target).length) {
131
147
  this.$element.trigger('focus')
132
148
  }
133
149
  }, this))
@@ -135,11 +151,19 @@
135
151
 
136
152
  Modal.prototype.escape = function () {
137
153
  if (this.isShown && this.options.keyboard) {
138
- this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
154
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
139
155
  e.which == 27 && this.hide()
140
156
  }, this))
141
157
  } else if (!this.isShown) {
142
- this.$element.off('keyup.dismiss.bs.modal')
158
+ this.$element.off('keydown.dismiss.bs.modal')
159
+ }
160
+ }
161
+
162
+ Modal.prototype.resize = function () {
163
+ if (this.isShown) {
164
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
165
+ } else {
166
+ $(window).off('resize.bs.modal')
143
167
  }
144
168
  }
145
169
 
@@ -147,6 +171,9 @@
147
171
  var that = this
148
172
  this.$element.hide()
149
173
  this.backdrop(function () {
174
+ that.$body.removeClass('modal-open')
175
+ that.resetAdjustments()
176
+ that.resetScrollbar()
150
177
  that.$element.trigger('hidden.bs.modal')
151
178
  })
152
179
  }
@@ -163,14 +190,19 @@
163
190
  if (this.isShown && this.options.backdrop) {
164
191
  var doAnimate = $.support.transition && animate
165
192
 
166
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
193
+ this.$backdrop = $(document.createElement('div'))
194
+ .addClass('modal-backdrop ' + animate)
167
195
  .appendTo(this.$body)
168
196
 
169
197
  this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
198
+ if (this.ignoreBackdropClick) {
199
+ this.ignoreBackdropClick = false
200
+ return
201
+ }
170
202
  if (e.target !== e.currentTarget) return
171
203
  this.options.backdrop == 'static'
172
- ? this.$element[0].focus.call(this.$element[0])
173
- : this.hide.call(this)
204
+ ? this.$element[0].focus()
205
+ : this.hide()
174
206
  }, this))
175
207
 
176
208
  if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
@@ -182,7 +214,7 @@
182
214
  doAnimate ?
183
215
  this.$backdrop
184
216
  .one('bsTransitionEnd', callback)
185
- .emulateTransitionEnd(150) :
217
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
186
218
  callback()
187
219
 
188
220
  } else if (!this.isShown && this.$backdrop) {
@@ -195,7 +227,7 @@
195
227
  $.support.transition && this.$element.hasClass('fade') ?
196
228
  this.$backdrop
197
229
  .one('bsTransitionEnd', callbackRemove)
198
- .emulateTransitionEnd(150) :
230
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
199
231
  callbackRemove()
200
232
 
201
233
  } else if (callback) {
@@ -203,18 +235,61 @@
203
235
  }
204
236
  }
205
237
 
238
+ // these following methods are used to handle overflowing modals
239
+
240
+ Modal.prototype.handleUpdate = function () {
241
+ this.adjustDialog()
242
+ }
243
+
244
+ Modal.prototype.adjustDialog = function () {
245
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
246
+
247
+ this.$element.css({
248
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
249
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
250
+ })
251
+ }
252
+
253
+ Modal.prototype.resetAdjustments = function () {
254
+ this.$element.css({
255
+ paddingLeft: '',
256
+ paddingRight: ''
257
+ })
258
+ }
259
+
206
260
  Modal.prototype.checkScrollbar = function () {
207
- if (document.body.clientWidth >= window.innerWidth) return
208
- this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
261
+ var fullWindowWidth = window.innerWidth
262
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
263
+ var documentElementRect = document.documentElement.getBoundingClientRect()
264
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
265
+ }
266
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
267
+ this.scrollbarWidth = this.measureScrollbar()
209
268
  }
210
269
 
211
270
  Modal.prototype.setScrollbar = function () {
212
271
  var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
213
- if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
272
+ this.originalBodyPad = document.body.style.paddingRight || ''
273
+ var scrollbarWidth = this.scrollbarWidth
274
+ if (this.bodyIsOverflowing) {
275
+ this.$body.css('padding-right', bodyPad + scrollbarWidth)
276
+ $(this.fixedContent).each(function (index, element) {
277
+ var actualPadding = element.style.paddingRight
278
+ var calculatedPadding = $(element).css('padding-right')
279
+ $(element)
280
+ .data('padding-right', actualPadding)
281
+ .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')
282
+ })
283
+ }
214
284
  }
215
285
 
216
286
  Modal.prototype.resetScrollbar = function () {
217
- this.$body.css('padding-right', '')
287
+ this.$body.css('padding-right', this.originalBodyPad)
288
+ $(this.fixedContent).each(function (index, element) {
289
+ var padding = $(element).data('padding-right')
290
+ $(element).removeData('padding-right')
291
+ element.style.paddingRight = padding ? padding : ''
292
+ })
218
293
  }
219
294
 
220
295
  Modal.prototype.measureScrollbar = function () { // thx walsh
@@ -232,8 +307,8 @@
232
307
 
233
308
  function Plugin(option, _relatedTarget) {
234
309
  return this.each(function () {
235
- var $this = $(this)
236
- var data = $this.data('bs.modal')
310
+ var $this = $(this)
311
+ var data = $this.data('bs.modal')
237
312
  var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
238
313
 
239
314
  if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
@@ -244,7 +319,7 @@
244
319
 
245
320
  var old = $.fn.modal
246
321
 
247
- $.fn.modal = Plugin
322
+ $.fn.modal = Plugin
248
323
  $.fn.modal.Constructor = Modal
249
324
 
250
325
 
@@ -261,10 +336,13 @@
261
336
  // ==============
262
337
 
263
338
  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
264
- var $this = $(this)
265
- var href = $this.attr('href')
266
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
267
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
339
+ var $this = $(this)
340
+ var href = $this.attr('href')
341
+ var target = $this.attr('data-target') ||
342
+ (href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
343
+
344
+ var $target = $(document).find(target)
345
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
268
346
 
269
347
  if ($this.is('a')) e.preventDefault()
270
348