activeadmin 3.2.3 → 4.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (339) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -57
  3. data/CONTRIBUTING.md +25 -108
  4. data/README.md +19 -32
  5. data/app/assets/config/active_admin_manifest.js +2 -0
  6. data/app/controllers/active_admin/base_controller/menu.rb +39 -0
  7. data/{lib → app/controllers}/active_admin/base_controller.rb +46 -18
  8. data/{lib → app/controllers}/active_admin/page_controller.rb +0 -4
  9. data/{lib → app/controllers}/active_admin/resource_controller/action_builder.rb +1 -1
  10. data/{lib → app/controllers}/active_admin/resource_controller/data_access.rb +2 -2
  11. data/{lib → app/controllers}/active_admin/resource_controller/scoping.rb +1 -1
  12. data/{lib → app/controllers}/active_admin/resource_controller/streaming.rb +2 -2
  13. data/app/controllers/active_admin/resource_controller.rb +102 -0
  14. data/app/helpers/active_admin/auto_link_helper.rb +66 -0
  15. data/app/helpers/active_admin/breadcrumb_helper.rb +41 -0
  16. data/app/helpers/active_admin/display_helper.rb +117 -0
  17. data/app/helpers/active_admin/form_helper.rb +95 -0
  18. data/app/helpers/active_admin/index_helper.rb +40 -0
  19. data/app/helpers/active_admin/layout_helper.rb +63 -0
  20. data/app/javascript/active_admin/features/batch_actions.js +89 -0
  21. data/app/javascript/active_admin/features/dark_mode_toggle.js +37 -0
  22. data/app/javascript/active_admin/features/filters.js +34 -0
  23. data/app/javascript/active_admin/features/has_many.js +28 -0
  24. data/app/javascript/active_admin/features/main_menu.js +12 -0
  25. data/app/javascript/active_admin/features/per_page.js +9 -0
  26. data/app/javascript/active_admin/utils/dom.js +17 -0
  27. data/app/javascript/active_admin.js +10 -0
  28. data/app/views/active_admin/_flash_messages.html.erb +22 -0
  29. data/app/views/active_admin/_html_head.html.erb +13 -0
  30. data/app/views/active_admin/_main_navigation.html.erb +28 -0
  31. data/app/views/active_admin/_page_header.html.erb +27 -0
  32. data/app/views/active_admin/_sidebar.html.erb +5 -0
  33. data/app/views/active_admin/_site_footer.html.erb +7 -0
  34. data/app/views/active_admin/_site_header.html.erb +30 -0
  35. data/app/views/active_admin/devise/confirmations/new.html.erb +5 -3
  36. data/app/views/active_admin/devise/passwords/edit.html.erb +5 -3
  37. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  38. data/app/views/active_admin/devise/registrations/new.html.erb +6 -4
  39. data/app/views/active_admin/devise/sessions/new.html.erb +6 -4
  40. data/app/views/active_admin/devise/shared/_links.erb +3 -1
  41. data/app/views/active_admin/devise/unlocks/new.html.erb +6 -4
  42. data/app/views/{kaminari/active_admin_countless → active_admin/kaminari}/_gap.html.erb +3 -1
  43. data/app/views/active_admin/kaminari/_next_page.html.erb +16 -0
  44. data/app/views/active_admin/kaminari/_page.html.erb +14 -0
  45. data/app/views/{kaminari/active_admin_countless → active_admin/kaminari}/_paginator.html.erb +1 -2
  46. data/app/views/active_admin/kaminari/_prev_page.html.erb +16 -0
  47. data/app/views/active_admin/page/index.html.arb +5 -1
  48. data/app/views/active_admin/resource/_active_filters.html.erb +32 -0
  49. data/app/views/active_admin/resource/_batch_actions_dropdown.html.erb +19 -0
  50. data/app/views/active_admin/resource/_form.html.arb +16 -0
  51. data/app/views/active_admin/resource/_form_default.html.arb +12 -0
  52. data/app/views/active_admin/resource/_index_as_table_default.html.arb +9 -0
  53. data/app/views/active_admin/resource/_index_blank_slate.html.erb +14 -0
  54. data/app/views/active_admin/resource/_index_empty_results.html.erb +5 -0
  55. data/app/views/active_admin/resource/_index_table_actions_default.html.erb +9 -0
  56. data/app/views/active_admin/resource/_show_default.html.arb +3 -0
  57. data/app/views/active_admin/resource/edit.html.arb +1 -1
  58. data/app/views/active_admin/resource/index.html.arb +94 -1
  59. data/app/views/active_admin/resource/new.html.arb +1 -1
  60. data/app/views/active_admin/resource/show.html.arb +12 -1
  61. data/app/views/active_admin/shared/_action_items.html.erb +3 -0
  62. data/app/views/active_admin/shared/_download_format_links.html.erb +7 -0
  63. data/app/views/active_admin/shared/_resource_comments.html.erb +51 -0
  64. data/app/views/active_admin/shared/_sidebar_section.html.arb +7 -0
  65. data/app/views/active_admin/shared/_sidebar_sections.html.erb +5 -0
  66. data/app/views/layouts/active_admin.html.erb +20 -0
  67. data/app/views/layouts/active_admin_logged_out.html.erb +8 -45
  68. data/config/locales/ar.yml +0 -16
  69. data/config/locales/az.yml +0 -16
  70. data/config/locales/bg.yml +0 -9
  71. data/config/locales/bs.yml +0 -7
  72. data/config/locales/ca.yml +0 -9
  73. data/config/locales/cs.yml +0 -9
  74. data/config/locales/da.yml +0 -16
  75. data/config/locales/de-CH.yml +0 -10
  76. data/config/locales/de.yml +0 -16
  77. data/config/locales/el.yml +0 -13
  78. data/config/locales/en-CA.yml +0 -16
  79. data/config/locales/en-GB.yml +0 -16
  80. data/config/locales/en.yml +18 -28
  81. data/config/locales/eo.yml +0 -17
  82. data/config/locales/es-MX.yml +0 -9
  83. data/config/locales/es.yml +0 -16
  84. data/config/locales/fa.yml +0 -9
  85. data/config/locales/fi.yml +0 -9
  86. data/config/locales/fr.yml +32 -26
  87. data/config/locales/he.yml +0 -16
  88. data/config/locales/hr.yml +0 -9
  89. data/config/locales/hu.yml +0 -6
  90. data/config/locales/id.yml +0 -16
  91. data/config/locales/it.yml +0 -16
  92. data/config/locales/ja.yml +0 -16
  93. data/config/locales/ko.yml +0 -9
  94. data/config/locales/lt.yml +0 -16
  95. data/config/locales/lv.yml +0 -6
  96. data/config/locales/mk.yml +0 -15
  97. data/config/locales/nb.yml +0 -12
  98. data/config/locales/nl.yml +21 -29
  99. data/config/locales/pl.yml +0 -16
  100. data/config/locales/pt-BR.yml +0 -16
  101. data/config/locales/pt-PT.yml +0 -6
  102. data/config/locales/ro.yml +0 -6
  103. data/config/locales/ru.yml +0 -16
  104. data/config/locales/sk.yml +0 -16
  105. data/config/locales/sv-SE.yml +0 -16
  106. data/config/locales/tr.yml +0 -16
  107. data/config/locales/uk.yml +0 -16
  108. data/config/locales/vi.yml +0 -16
  109. data/config/locales/zh-CN.yml +0 -16
  110. data/config/locales/zh-TW.yml +0 -16
  111. data/lib/active_admin/application.rb +1 -9
  112. data/lib/active_admin/batch_actions/controller.rb +1 -4
  113. data/lib/active_admin/batch_actions/resource_extension.rb +6 -13
  114. data/lib/active_admin/batch_actions/views/batch_action_form.rb +0 -6
  115. data/lib/active_admin/batch_actions/views/selection_cells.rb +2 -2
  116. data/lib/active_admin/batch_actions.rb +0 -5
  117. data/lib/active_admin/callbacks.rb +6 -4
  118. data/lib/active_admin/component.rb +0 -1
  119. data/lib/active_admin/csv_builder.rb +1 -1
  120. data/lib/active_admin/devise.rb +3 -3
  121. data/lib/active_admin/dsl.rb +2 -2
  122. data/lib/active_admin/dynamic_settings_node.rb +4 -4
  123. data/lib/active_admin/engine.rb +19 -6
  124. data/lib/active_admin/filters/active.rb +6 -4
  125. data/lib/active_admin/filters/active_filter.rb +1 -3
  126. data/lib/active_admin/filters/forms.rb +1 -42
  127. data/lib/active_admin/filters/resource_extension.rb +17 -9
  128. data/lib/active_admin/filters.rb +0 -2
  129. data/lib/active_admin/form_builder.rb +15 -14
  130. data/lib/active_admin/inputs/filters/base/search_method_select.rb +8 -10
  131. data/lib/active_admin/inputs/filters/base.rb +1 -1
  132. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -6
  133. data/lib/active_admin/inputs/filters/date_range_input.rb +4 -2
  134. data/lib/active_admin/inputs.rb +0 -3
  135. data/lib/active_admin/menu.rb +10 -7
  136. data/lib/active_admin/menu_collection.rb +1 -1
  137. data/lib/active_admin/menu_item.rb +24 -3
  138. data/lib/active_admin/namespace.rb +2 -44
  139. data/lib/active_admin/namespace_settings.rb +2 -35
  140. data/lib/active_admin/order_clause.rb +4 -1
  141. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +3 -75
  142. data/lib/active_admin/orm/active_record/comments.rb +10 -5
  143. data/lib/active_admin/pundit_adapter.rb +1 -1
  144. data/lib/active_admin/resource/action_items.rb +15 -20
  145. data/lib/active_admin/resource/attributes.rb +1 -8
  146. data/lib/active_admin/resource/naming.rb +1 -2
  147. data/lib/active_admin/resource.rb +1 -0
  148. data/lib/active_admin/resource_dsl.rb +1 -1
  149. data/lib/active_admin/scope.rb +1 -1
  150. data/lib/active_admin/settings_node.rb +1 -1
  151. data/lib/active_admin/sidebar_section.rb +0 -5
  152. data/lib/active_admin/version.rb +1 -1
  153. data/lib/active_admin/view_helpers.rb +0 -12
  154. data/lib/active_admin/views/components/active_admin_form.rb +20 -16
  155. data/lib/active_admin/views/components/attributes_table.rb +4 -12
  156. data/lib/active_admin/views/components/index_list.rb +10 -23
  157. data/lib/active_admin/views/components/paginated_collection.rb +34 -39
  158. data/lib/active_admin/views/components/panel.rb +2 -10
  159. data/lib/active_admin/views/components/scopes.rb +12 -21
  160. data/lib/active_admin/views/components/status_tag.rb +22 -19
  161. data/lib/active_admin/views/components/table_for.rb +19 -24
  162. data/lib/active_admin/views/components/tabs.rb +10 -11
  163. data/lib/active_admin/views/index_as_table.rb +24 -97
  164. data/lib/active_admin.rb +7 -11
  165. data/lib/generators/active_admin/assets/assets_generator.rb +4 -4
  166. data/lib/generators/active_admin/assets/templates/active_admin.css +3 -0
  167. data/lib/generators/active_admin/assets/templates/tailwind.config.js +18 -0
  168. data/lib/generators/active_admin/install/install_generator.rb +2 -8
  169. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +10 -87
  170. data/lib/generators/active_admin/install/templates/dashboard.rb +8 -25
  171. data/lib/generators/active_admin/page/page_generator.rb +0 -1
  172. data/lib/generators/active_admin/resource/resource_generator.rb +46 -7
  173. data/lib/generators/active_admin/resource/templates/resource.rb.erb +42 -0
  174. data/lib/generators/active_admin/views_generator.rb +18 -0
  175. metadata +67 -214
  176. data/app/assets/javascripts/active_admin/base.js +0 -521
  177. data/app/assets/stylesheets/active_admin/_base.scss +0 -57
  178. data/app/assets/stylesheets/active_admin/_forms.scss +0 -315
  179. data/app/assets/stylesheets/active_admin/_header.scss +0 -188
  180. data/app/assets/stylesheets/active_admin/_mixins.scss +0 -1
  181. data/app/assets/stylesheets/active_admin/_normalize.scss +0 -349
  182. data/app/assets/stylesheets/active_admin/_print.scss +0 -287
  183. data/app/assets/stylesheets/active_admin/_typography.scss +0 -100
  184. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -6
  185. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -30
  186. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +0 -20
  187. data/app/assets/stylesheets/active_admin/components/_buttons.scss +0 -6
  188. data/app/assets/stylesheets/active_admin/components/_columns.scss +0 -3
  189. data/app/assets/stylesheets/active_admin/components/_comments.scss +0 -41
  190. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +0 -148
  191. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -154
  192. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +0 -37
  193. data/app/assets/stylesheets/active_admin/components/_grid.scss +0 -9
  194. data/app/assets/stylesheets/active_admin/components/_index_list.scss +0 -12
  195. data/app/assets/stylesheets/active_admin/components/_links.scss +0 -5
  196. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +0 -34
  197. data/app/assets/stylesheets/active_admin/components/_pagination.scss +0 -58
  198. data/app/assets/stylesheets/active_admin/components/_panels.scss +0 -6
  199. data/app/assets/stylesheets/active_admin/components/_scopes.scss +0 -13
  200. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -12
  201. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +0 -70
  202. data/app/assets/stylesheets/active_admin/components/_tables.scss +0 -112
  203. data/app/assets/stylesheets/active_admin/components/_tabs.scss +0 -68
  204. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +0 -16
  205. data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -8
  206. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +0 -65
  207. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +0 -28
  208. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +0 -22
  209. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +0 -41
  210. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +0 -15
  211. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +0 -3
  212. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -17
  213. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +0 -51
  214. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +0 -44
  215. data/app/assets/stylesheets/active_admin/structure/_footer.scss +0 -19
  216. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +0 -29
  217. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -43
  218. data/app/javascript/active_admin/base.js +0 -28
  219. data/app/javascript/active_admin/ext/jquery-ui.js +0 -7
  220. data/app/javascript/active_admin/ext/jquery.js +0 -9
  221. data/app/javascript/active_admin/initializers/batch-actions.js +0 -61
  222. data/app/javascript/active_admin/initializers/checkbox-toggler.js +0 -3
  223. data/app/javascript/active_admin/initializers/datepicker.js +0 -16
  224. data/app/javascript/active_admin/initializers/dropdown-menu.js +0 -9
  225. data/app/javascript/active_admin/initializers/filters.js +0 -10
  226. data/app/javascript/active_admin/initializers/has-many.js +0 -98
  227. data/app/javascript/active_admin/initializers/per-page.js +0 -13
  228. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +0 -3
  229. data/app/javascript/active_admin/initializers/tabs.js +0 -6
  230. data/app/javascript/active_admin/lib/checkbox-toggler.js +0 -49
  231. data/app/javascript/active_admin/lib/dropdown-menu.js +0 -116
  232. data/app/javascript/active_admin/lib/filters.js +0 -39
  233. data/app/javascript/active_admin/lib/modal-dialog.js +0 -63
  234. data/app/javascript/active_admin/lib/per-page.js +0 -38
  235. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +0 -38
  236. data/app/javascript/active_admin/lib/utils.js +0 -40
  237. data/app/views/kaminari/active_admin/_first_page.html.erb +0 -11
  238. data/app/views/kaminari/active_admin/_gap.html.erb +0 -8
  239. data/app/views/kaminari/active_admin/_last_page.html.erb +0 -11
  240. data/app/views/kaminari/active_admin/_next_page.html.erb +0 -11
  241. data/app/views/kaminari/active_admin/_page.html.erb +0 -12
  242. data/app/views/kaminari/active_admin/_paginator.html.erb +0 -25
  243. data/app/views/kaminari/active_admin/_prev_page.html.erb +0 -11
  244. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +0 -11
  245. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +0 -11
  246. data/app/views/kaminari/active_admin_countless/_page.html.erb +0 -12
  247. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +0 -11
  248. data/app/views/layouts/active_admin.html.arb +0 -2
  249. data/lib/active_admin/abstract_view_factory.rb +0 -48
  250. data/lib/active_admin/asset_registration.rb +0 -30
  251. data/lib/active_admin/base_controller/menu.rb +0 -35
  252. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +0 -59
  253. data/lib/active_admin/filters/active_sidebar.rb +0 -28
  254. data/lib/active_admin/generators/boilerplate.rb +0 -54
  255. data/lib/active_admin/helpers/collection.rb +0 -21
  256. data/lib/active_admin/helpers/i18n.rb +0 -8
  257. data/lib/active_admin/inputs/datepicker_input.rb +0 -28
  258. data/lib/active_admin/inputs/filters/date_picker_input.rb +0 -14
  259. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +0 -24
  260. data/lib/active_admin/orm/mongoid.rb +0 -2
  261. data/lib/active_admin/resource_controller/sidebars.rb +0 -19
  262. data/lib/active_admin/resource_controller.rb +0 -68
  263. data/lib/active_admin/view_factory.rb +0 -28
  264. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +0 -13
  265. data/lib/active_admin/view_helpers/auto_link_helper.rb +0 -46
  266. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +0 -34
  267. data/lib/active_admin/view_helpers/display_helper.rb +0 -119
  268. data/lib/active_admin/view_helpers/download_format_links_helper.rb +0 -60
  269. data/lib/active_admin/view_helpers/fields_for.rb +0 -51
  270. data/lib/active_admin/view_helpers/flash_helper.rb +0 -15
  271. data/lib/active_admin/view_helpers/form_helper.rb +0 -21
  272. data/lib/active_admin/view_helpers/scope_name_helper.rb +0 -17
  273. data/lib/active_admin/view_helpers/sidebar_helper.rb +0 -16
  274. data/lib/active_admin/view_helpers/title_helper.rb +0 -12
  275. data/lib/active_admin/view_helpers/view_factory_helper.rb +0 -12
  276. data/lib/active_admin/views/action_items.rb +0 -18
  277. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +0 -59
  278. data/lib/active_admin/views/components/blank_slate.rb +0 -18
  279. data/lib/active_admin/views/components/columns.rb +0 -162
  280. data/lib/active_admin/views/components/dropdown_menu.rb +0 -69
  281. data/lib/active_admin/views/components/menu.rb +0 -33
  282. data/lib/active_admin/views/components/menu_item.rb +0 -59
  283. data/lib/active_admin/views/components/sidebar.rb +0 -14
  284. data/lib/active_admin/views/components/sidebar_section.rb +0 -35
  285. data/lib/active_admin/views/components/site_title.rb +0 -55
  286. data/lib/active_admin/views/components/unsupported_browser.rb +0 -12
  287. data/lib/active_admin/views/footer.rb +0 -32
  288. data/lib/active_admin/views/header.rb +0 -20
  289. data/lib/active_admin/views/index_as_block.rb +0 -37
  290. data/lib/active_admin/views/index_as_blog.rb +0 -156
  291. data/lib/active_admin/views/index_as_grid.rb +0 -81
  292. data/lib/active_admin/views/pages/base.rb +0 -134
  293. data/lib/active_admin/views/pages/form.rb +0 -65
  294. data/lib/active_admin/views/pages/index.rb +0 -166
  295. data/lib/active_admin/views/pages/layout.rb +0 -27
  296. data/lib/active_admin/views/pages/page.rb +0 -31
  297. data/lib/active_admin/views/pages/show.rb +0 -60
  298. data/lib/active_admin/views/tabbed_navigation.rb +0 -12
  299. data/lib/active_admin/views/title_bar.rb +0 -56
  300. data/lib/generators/active_admin/assets/templates/active_admin.js +0 -1
  301. data/lib/generators/active_admin/assets/templates/active_admin.scss +0 -17
  302. data/lib/generators/active_admin/resource/templates/admin.rb.erb +0 -46
  303. data/lib/generators/active_admin/webpacker/plugins/jquery.js +0 -7
  304. data/lib/generators/active_admin/webpacker/templates/active_admin.js +0 -5
  305. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +0 -17
  306. data/lib/generators/active_admin/webpacker/templates/print.scss +0 -2
  307. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +0 -27
  308. data/vendor/assets/javascripts/jquery-ui/data.js +0 -45
  309. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +0 -51
  310. data/vendor/assets/javascripts/jquery-ui/focusable.js +0 -89
  311. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +0 -83
  312. data/vendor/assets/javascripts/jquery-ui/form.js +0 -25
  313. data/vendor/assets/javascripts/jquery-ui/ie.js +0 -20
  314. data/vendor/assets/javascripts/jquery-ui/keycode.js +0 -51
  315. data/vendor/assets/javascripts/jquery-ui/labels.js +0 -71
  316. data/vendor/assets/javascripts/jquery-ui/plugin.js +0 -49
  317. data/vendor/assets/javascripts/jquery-ui/position.js +0 -513
  318. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +0 -46
  319. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +0 -27
  320. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +0 -50
  321. data/vendor/assets/javascripts/jquery-ui/tabbable.js +0 -41
  322. data/vendor/assets/javascripts/jquery-ui/unique-id.js +0 -54
  323. data/vendor/assets/javascripts/jquery-ui/version.js +0 -20
  324. data/vendor/assets/javascripts/jquery-ui/widget.js +0 -758
  325. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +0 -454
  326. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +0 -294
  327. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +0 -304
  328. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +0 -2243
  329. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +0 -971
  330. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +0 -1268
  331. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +0 -241
  332. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +0 -1228
  333. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +0 -1622
  334. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +0 -931
  335. /data/{lib → app/controllers}/active_admin/base_controller/authorization.rb +0 -0
  336. /data/{lib → app/controllers}/active_admin/resource_controller/decorators.rb +0 -0
  337. /data/{lib → app/controllers}/active_admin/resource_controller/polymorphic_routes.rb +0 -0
  338. /data/{lib → app/controllers}/active_admin/resource_controller/resource_class_methods.rb +0 -0
  339. /data/lib/{active_admin/orm/mongoid/.gitkeep → generators/active_admin/assets/templates/builds/.keep} +0 -0
@@ -1,931 +0,0 @@
1
- //= require jquery-ui/keycode
2
- //= require jquery-ui/safe-active-element
3
- //= require jquery-ui/unique-id
4
- //= require jquery-ui/version
5
- //= require jquery-ui/widget
6
-
7
- /*!
8
- * jQuery UI Tabs 1.13.3
9
- * https://jqueryui.com
10
- *
11
- * Copyright OpenJS Foundation and other contributors
12
- * Released under the MIT license.
13
- * https://jquery.org/license
14
- */
15
-
16
- //>>label: Tabs
17
- //>>group: Widgets
18
- //>>description: Transforms a set of container elements into a tab structure.
19
- //>>docs: https://api.jqueryui.com/tabs/
20
- //>>demos: https://jqueryui.com/tabs/
21
- //>>css.structure: ../../themes/base/core.css
22
- //>>css.structure: ../../themes/base/tabs.css
23
- //>>css.theme: ../../themes/base/theme.css
24
-
25
- ( function( factory ) {
26
- "use strict";
27
-
28
- if ( typeof define === "function" && define.amd ) {
29
-
30
- // AMD. Register as an anonymous module.
31
- define( [
32
- "jquery",
33
- "../keycode",
34
- "../safe-active-element",
35
- "../unique-id",
36
- "../version",
37
- "../widget"
38
- ], factory );
39
- } else {
40
-
41
- // Browser globals
42
- factory( jQuery );
43
- }
44
- } )( function( $ ) {
45
- "use strict";
46
-
47
- $.widget( "ui.tabs", {
48
- version: "1.13.3",
49
- delay: 300,
50
- options: {
51
- active: null,
52
- classes: {
53
- "ui-tabs": "ui-corner-all",
54
- "ui-tabs-nav": "ui-corner-all",
55
- "ui-tabs-panel": "ui-corner-bottom",
56
- "ui-tabs-tab": "ui-corner-top"
57
- },
58
- collapsible: false,
59
- event: "click",
60
- heightStyle: "content",
61
- hide: null,
62
- show: null,
63
-
64
- // Callbacks
65
- activate: null,
66
- beforeActivate: null,
67
- beforeLoad: null,
68
- load: null
69
- },
70
-
71
- _isLocal: ( function() {
72
- var rhash = /#.*$/;
73
-
74
- return function( anchor ) {
75
- var anchorUrl, locationUrl;
76
-
77
- anchorUrl = anchor.href.replace( rhash, "" );
78
- locationUrl = location.href.replace( rhash, "" );
79
-
80
- // Decoding may throw an error if the URL isn't UTF-8 (#9518)
81
- try {
82
- anchorUrl = decodeURIComponent( anchorUrl );
83
- } catch ( error ) {}
84
- try {
85
- locationUrl = decodeURIComponent( locationUrl );
86
- } catch ( error ) {}
87
-
88
- return anchor.hash.length > 1 && anchorUrl === locationUrl;
89
- };
90
- } )(),
91
-
92
- _create: function() {
93
- var that = this,
94
- options = this.options;
95
-
96
- this.running = false;
97
-
98
- this._addClass( "ui-tabs", "ui-widget ui-widget-content" );
99
- this._toggleClass( "ui-tabs-collapsible", null, options.collapsible );
100
-
101
- this._processTabs();
102
- options.active = this._initialActive();
103
-
104
- // Take disabling tabs via class attribute from HTML
105
- // into account and update option properly.
106
- if ( Array.isArray( options.disabled ) ) {
107
- options.disabled = $.uniqueSort( options.disabled.concat(
108
- $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
109
- return that.tabs.index( li );
110
- } )
111
- ) ).sort();
112
- }
113
-
114
- // Check for length avoids error when initializing empty list
115
- if ( this.options.active !== false && this.anchors.length ) {
116
- this.active = this._findActive( options.active );
117
- } else {
118
- this.active = $();
119
- }
120
-
121
- this._refresh();
122
-
123
- if ( this.active.length ) {
124
- this.load( options.active );
125
- }
126
- },
127
-
128
- _initialActive: function() {
129
- var active = this.options.active,
130
- collapsible = this.options.collapsible,
131
- locationHash = location.hash.substring( 1 );
132
-
133
- if ( active === null ) {
134
-
135
- // check the fragment identifier in the URL
136
- if ( locationHash ) {
137
- this.tabs.each( function( i, tab ) {
138
- if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
139
- active = i;
140
- return false;
141
- }
142
- } );
143
- }
144
-
145
- // Check for a tab marked active via a class
146
- if ( active === null ) {
147
- active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
148
- }
149
-
150
- // No active tab, set to false
151
- if ( active === null || active === -1 ) {
152
- active = this.tabs.length ? 0 : false;
153
- }
154
- }
155
-
156
- // Handle numbers: negative, out of range
157
- if ( active !== false ) {
158
- active = this.tabs.index( this.tabs.eq( active ) );
159
- if ( active === -1 ) {
160
- active = collapsible ? false : 0;
161
- }
162
- }
163
-
164
- // Don't allow collapsible: false and active: false
165
- if ( !collapsible && active === false && this.anchors.length ) {
166
- active = 0;
167
- }
168
-
169
- return active;
170
- },
171
-
172
- _getCreateEventData: function() {
173
- return {
174
- tab: this.active,
175
- panel: !this.active.length ? $() : this._getPanelForTab( this.active )
176
- };
177
- },
178
-
179
- _tabKeydown: function( event ) {
180
- var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ),
181
- selectedIndex = this.tabs.index( focusedTab ),
182
- goingForward = true;
183
-
184
- if ( this._handlePageNav( event ) ) {
185
- return;
186
- }
187
-
188
- switch ( event.keyCode ) {
189
- case $.ui.keyCode.RIGHT:
190
- case $.ui.keyCode.DOWN:
191
- selectedIndex++;
192
- break;
193
- case $.ui.keyCode.UP:
194
- case $.ui.keyCode.LEFT:
195
- goingForward = false;
196
- selectedIndex--;
197
- break;
198
- case $.ui.keyCode.END:
199
- selectedIndex = this.anchors.length - 1;
200
- break;
201
- case $.ui.keyCode.HOME:
202
- selectedIndex = 0;
203
- break;
204
- case $.ui.keyCode.SPACE:
205
-
206
- // Activate only, no collapsing
207
- event.preventDefault();
208
- clearTimeout( this.activating );
209
- this._activate( selectedIndex );
210
- return;
211
- case $.ui.keyCode.ENTER:
212
-
213
- // Toggle (cancel delayed activation, allow collapsing)
214
- event.preventDefault();
215
- clearTimeout( this.activating );
216
-
217
- // Determine if we should collapse or activate
218
- this._activate( selectedIndex === this.options.active ? false : selectedIndex );
219
- return;
220
- default:
221
- return;
222
- }
223
-
224
- // Focus the appropriate tab, based on which key was pressed
225
- event.preventDefault();
226
- clearTimeout( this.activating );
227
- selectedIndex = this._focusNextTab( selectedIndex, goingForward );
228
-
229
- // Navigating with control/command key will prevent automatic activation
230
- if ( !event.ctrlKey && !event.metaKey ) {
231
-
232
- // Update aria-selected immediately so that AT think the tab is already selected.
233
- // Otherwise AT may confuse the user by stating that they need to activate the tab,
234
- // but the tab will already be activated by the time the announcement finishes.
235
- focusedTab.attr( "aria-selected", "false" );
236
- this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
237
-
238
- this.activating = this._delay( function() {
239
- this.option( "active", selectedIndex );
240
- }, this.delay );
241
- }
242
- },
243
-
244
- _panelKeydown: function( event ) {
245
- if ( this._handlePageNav( event ) ) {
246
- return;
247
- }
248
-
249
- // Ctrl+up moves focus to the current tab
250
- if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
251
- event.preventDefault();
252
- this.active.trigger( "focus" );
253
- }
254
- },
255
-
256
- // Alt+page up/down moves focus to the previous/next tab (and activates)
257
- _handlePageNav: function( event ) {
258
- if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
259
- this._activate( this._focusNextTab( this.options.active - 1, false ) );
260
- return true;
261
- }
262
- if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
263
- this._activate( this._focusNextTab( this.options.active + 1, true ) );
264
- return true;
265
- }
266
- },
267
-
268
- _findNextTab: function( index, goingForward ) {
269
- var lastTabIndex = this.tabs.length - 1;
270
-
271
- function constrain() {
272
- if ( index > lastTabIndex ) {
273
- index = 0;
274
- }
275
- if ( index < 0 ) {
276
- index = lastTabIndex;
277
- }
278
- return index;
279
- }
280
-
281
- while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
282
- index = goingForward ? index + 1 : index - 1;
283
- }
284
-
285
- return index;
286
- },
287
-
288
- _focusNextTab: function( index, goingForward ) {
289
- index = this._findNextTab( index, goingForward );
290
- this.tabs.eq( index ).trigger( "focus" );
291
- return index;
292
- },
293
-
294
- _setOption: function( key, value ) {
295
- if ( key === "active" ) {
296
-
297
- // _activate() will handle invalid values and update this.options
298
- this._activate( value );
299
- return;
300
- }
301
-
302
- this._super( key, value );
303
-
304
- if ( key === "collapsible" ) {
305
- this._toggleClass( "ui-tabs-collapsible", null, value );
306
-
307
- // Setting collapsible: false while collapsed; open first panel
308
- if ( !value && this.options.active === false ) {
309
- this._activate( 0 );
310
- }
311
- }
312
-
313
- if ( key === "event" ) {
314
- this._setupEvents( value );
315
- }
316
-
317
- if ( key === "heightStyle" ) {
318
- this._setupHeightStyle( value );
319
- }
320
- },
321
-
322
- _sanitizeSelector: function( hash ) {
323
- return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
324
- },
325
-
326
- refresh: function() {
327
- var options = this.options,
328
- lis = this.tablist.children( ":has(a[href])" );
329
-
330
- // Get disabled tabs from class attribute from HTML
331
- // this will get converted to a boolean if needed in _refresh()
332
- options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
333
- return lis.index( tab );
334
- } );
335
-
336
- this._processTabs();
337
-
338
- // Was collapsed or no tabs
339
- if ( options.active === false || !this.anchors.length ) {
340
- options.active = false;
341
- this.active = $();
342
-
343
- // was active, but active tab is gone
344
- } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
345
-
346
- // all remaining tabs are disabled
347
- if ( this.tabs.length === options.disabled.length ) {
348
- options.active = false;
349
- this.active = $();
350
-
351
- // activate previous tab
352
- } else {
353
- this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
354
- }
355
-
356
- // was active, active tab still exists
357
- } else {
358
-
359
- // make sure active index is correct
360
- options.active = this.tabs.index( this.active );
361
- }
362
-
363
- this._refresh();
364
- },
365
-
366
- _refresh: function() {
367
- this._setOptionDisabled( this.options.disabled );
368
- this._setupEvents( this.options.event );
369
- this._setupHeightStyle( this.options.heightStyle );
370
-
371
- this.tabs.not( this.active ).attr( {
372
- "aria-selected": "false",
373
- "aria-expanded": "false",
374
- tabIndex: -1
375
- } );
376
- this.panels.not( this._getPanelForTab( this.active ) )
377
- .hide()
378
- .attr( {
379
- "aria-hidden": "true"
380
- } );
381
-
382
- // Make sure one tab is in the tab order
383
- if ( !this.active.length ) {
384
- this.tabs.eq( 0 ).attr( "tabIndex", 0 );
385
- } else {
386
- this.active
387
- .attr( {
388
- "aria-selected": "true",
389
- "aria-expanded": "true",
390
- tabIndex: 0
391
- } );
392
- this._addClass( this.active, "ui-tabs-active", "ui-state-active" );
393
- this._getPanelForTab( this.active )
394
- .show()
395
- .attr( {
396
- "aria-hidden": "false"
397
- } );
398
- }
399
- },
400
-
401
- _processTabs: function() {
402
- var that = this,
403
- prevTabs = this.tabs,
404
- prevAnchors = this.anchors,
405
- prevPanels = this.panels;
406
-
407
- this.tablist = this._getList().attr( "role", "tablist" );
408
- this._addClass( this.tablist, "ui-tabs-nav",
409
- "ui-helper-reset ui-helper-clearfix ui-widget-header" );
410
-
411
- // Prevent users from focusing disabled tabs via click
412
- this.tablist
413
- .on( "mousedown" + this.eventNamespace, "> li", function( event ) {
414
- if ( $( this ).is( ".ui-state-disabled" ) ) {
415
- event.preventDefault();
416
- }
417
- } )
418
-
419
- // Support: IE <9
420
- // Preventing the default action in mousedown doesn't prevent IE
421
- // from focusing the element, so if the anchor gets focused, blur.
422
- // We don't have to worry about focusing the previously focused
423
- // element since clicking on a non-focusable element should focus
424
- // the body anyway.
425
- .on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() {
426
- if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
427
- this.blur();
428
- }
429
- } );
430
-
431
- this.tabs = this.tablist.find( "> li:has(a[href])" )
432
- .attr( {
433
- role: "tab",
434
- tabIndex: -1
435
- } );
436
- this._addClass( this.tabs, "ui-tabs-tab", "ui-state-default" );
437
-
438
- this.anchors = this.tabs.map( function() {
439
- return $( "a", this )[ 0 ];
440
- } )
441
- .attr( {
442
- tabIndex: -1
443
- } );
444
- this._addClass( this.anchors, "ui-tabs-anchor" );
445
-
446
- this.panels = $();
447
-
448
- this.anchors.each( function( i, anchor ) {
449
- var selector, panel, panelId,
450
- anchorId = $( anchor ).uniqueId().attr( "id" ),
451
- tab = $( anchor ).closest( "li" ),
452
- originalAriaControls = tab.attr( "aria-controls" );
453
-
454
- // Inline tab
455
- if ( that._isLocal( anchor ) ) {
456
- selector = anchor.hash;
457
- panelId = selector.substring( 1 );
458
- panel = that.element.find( that._sanitizeSelector( selector ) );
459
-
460
- // remote tab
461
- } else {
462
-
463
- // If the tab doesn't already have aria-controls,
464
- // generate an id by using a throw-away element
465
- panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
466
- selector = "#" + panelId;
467
- panel = that.element.find( selector );
468
- if ( !panel.length ) {
469
- panel = that._createPanel( panelId );
470
- panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
471
- }
472
- panel.attr( "aria-live", "polite" );
473
- }
474
-
475
- if ( panel.length ) {
476
- that.panels = that.panels.add( panel );
477
- }
478
- if ( originalAriaControls ) {
479
- tab.data( "ui-tabs-aria-controls", originalAriaControls );
480
- }
481
- tab.attr( {
482
- "aria-controls": panelId,
483
- "aria-labelledby": anchorId
484
- } );
485
- panel.attr( "aria-labelledby", anchorId );
486
- } );
487
-
488
- this.panels.attr( "role", "tabpanel" );
489
- this._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" );
490
-
491
- // Avoid memory leaks (#10056)
492
- if ( prevTabs ) {
493
- this._off( prevTabs.not( this.tabs ) );
494
- this._off( prevAnchors.not( this.anchors ) );
495
- this._off( prevPanels.not( this.panels ) );
496
- }
497
- },
498
-
499
- // Allow overriding how to find the list for rare usage scenarios (#7715)
500
- _getList: function() {
501
- return this.tablist || this.element.find( "ol, ul" ).eq( 0 );
502
- },
503
-
504
- _createPanel: function( id ) {
505
- return $( "<div>" )
506
- .attr( "id", id )
507
- .data( "ui-tabs-destroy", true );
508
- },
509
-
510
- _setOptionDisabled: function( disabled ) {
511
- var currentItem, li, i;
512
-
513
- if ( Array.isArray( disabled ) ) {
514
- if ( !disabled.length ) {
515
- disabled = false;
516
- } else if ( disabled.length === this.anchors.length ) {
517
- disabled = true;
518
- }
519
- }
520
-
521
- // Disable tabs
522
- for ( i = 0; ( li = this.tabs[ i ] ); i++ ) {
523
- currentItem = $( li );
524
- if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
525
- currentItem.attr( "aria-disabled", "true" );
526
- this._addClass( currentItem, null, "ui-state-disabled" );
527
- } else {
528
- currentItem.removeAttr( "aria-disabled" );
529
- this._removeClass( currentItem, null, "ui-state-disabled" );
530
- }
531
- }
532
-
533
- this.options.disabled = disabled;
534
-
535
- this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null,
536
- disabled === true );
537
- },
538
-
539
- _setupEvents: function( event ) {
540
- var events = {};
541
- if ( event ) {
542
- $.each( event.split( " " ), function( index, eventName ) {
543
- events[ eventName ] = "_eventHandler";
544
- } );
545
- }
546
-
547
- this._off( this.anchors.add( this.tabs ).add( this.panels ) );
548
-
549
- // Always prevent the default action, even when disabled
550
- this._on( true, this.anchors, {
551
- click: function( event ) {
552
- event.preventDefault();
553
- }
554
- } );
555
- this._on( this.anchors, events );
556
- this._on( this.tabs, { keydown: "_tabKeydown" } );
557
- this._on( this.panels, { keydown: "_panelKeydown" } );
558
-
559
- this._focusable( this.tabs );
560
- this._hoverable( this.tabs );
561
- },
562
-
563
- _setupHeightStyle: function( heightStyle ) {
564
- var maxHeight,
565
- parent = this.element.parent();
566
-
567
- if ( heightStyle === "fill" ) {
568
- maxHeight = parent.height();
569
- maxHeight -= this.element.outerHeight() - this.element.height();
570
-
571
- this.element.siblings( ":visible" ).each( function() {
572
- var elem = $( this ),
573
- position = elem.css( "position" );
574
-
575
- if ( position === "absolute" || position === "fixed" ) {
576
- return;
577
- }
578
- maxHeight -= elem.outerHeight( true );
579
- } );
580
-
581
- this.element.children().not( this.panels ).each( function() {
582
- maxHeight -= $( this ).outerHeight( true );
583
- } );
584
-
585
- this.panels.each( function() {
586
- $( this ).height( Math.max( 0, maxHeight -
587
- $( this ).innerHeight() + $( this ).height() ) );
588
- } )
589
- .css( "overflow", "auto" );
590
- } else if ( heightStyle === "auto" ) {
591
- maxHeight = 0;
592
- this.panels.each( function() {
593
- maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
594
- } ).height( maxHeight );
595
- }
596
- },
597
-
598
- _eventHandler: function( event ) {
599
- var options = this.options,
600
- active = this.active,
601
- anchor = $( event.currentTarget ),
602
- tab = anchor.closest( "li" ),
603
- clickedIsActive = tab[ 0 ] === active[ 0 ],
604
- collapsing = clickedIsActive && options.collapsible,
605
- toShow = collapsing ? $() : this._getPanelForTab( tab ),
606
- toHide = !active.length ? $() : this._getPanelForTab( active ),
607
- eventData = {
608
- oldTab: active,
609
- oldPanel: toHide,
610
- newTab: collapsing ? $() : tab,
611
- newPanel: toShow
612
- };
613
-
614
- event.preventDefault();
615
-
616
- if ( tab.hasClass( "ui-state-disabled" ) ||
617
-
618
- // tab is already loading
619
- tab.hasClass( "ui-tabs-loading" ) ||
620
-
621
- // can't switch durning an animation
622
- this.running ||
623
-
624
- // click on active header, but not collapsible
625
- ( clickedIsActive && !options.collapsible ) ||
626
-
627
- // allow canceling activation
628
- ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
629
- return;
630
- }
631
-
632
- options.active = collapsing ? false : this.tabs.index( tab );
633
-
634
- this.active = clickedIsActive ? $() : tab;
635
- if ( this.xhr ) {
636
- this.xhr.abort();
637
- }
638
-
639
- if ( !toHide.length && !toShow.length ) {
640
- $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
641
- }
642
-
643
- if ( toShow.length ) {
644
- this.load( this.tabs.index( tab ), event );
645
- }
646
- this._toggle( event, eventData );
647
- },
648
-
649
- // Handles show/hide for selecting tabs
650
- _toggle: function( event, eventData ) {
651
- var that = this,
652
- toShow = eventData.newPanel,
653
- toHide = eventData.oldPanel;
654
-
655
- this.running = true;
656
-
657
- function complete() {
658
- that.running = false;
659
- that._trigger( "activate", event, eventData );
660
- }
661
-
662
- function show() {
663
- that._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" );
664
-
665
- if ( toShow.length && that.options.show ) {
666
- that._show( toShow, that.options.show, complete );
667
- } else {
668
- toShow.show();
669
- complete();
670
- }
671
- }
672
-
673
- // Start out by hiding, then showing, then completing
674
- if ( toHide.length && this.options.hide ) {
675
- this._hide( toHide, this.options.hide, function() {
676
- that._removeClass( eventData.oldTab.closest( "li" ),
677
- "ui-tabs-active", "ui-state-active" );
678
- show();
679
- } );
680
- } else {
681
- this._removeClass( eventData.oldTab.closest( "li" ),
682
- "ui-tabs-active", "ui-state-active" );
683
- toHide.hide();
684
- show();
685
- }
686
-
687
- toHide.attr( "aria-hidden", "true" );
688
- eventData.oldTab.attr( {
689
- "aria-selected": "false",
690
- "aria-expanded": "false"
691
- } );
692
-
693
- // If we're switching tabs, remove the old tab from the tab order.
694
- // If we're opening from collapsed state, remove the previous tab from the tab order.
695
- // If we're collapsing, then keep the collapsing tab in the tab order.
696
- if ( toShow.length && toHide.length ) {
697
- eventData.oldTab.attr( "tabIndex", -1 );
698
- } else if ( toShow.length ) {
699
- this.tabs.filter( function() {
700
- return $( this ).attr( "tabIndex" ) === 0;
701
- } )
702
- .attr( "tabIndex", -1 );
703
- }
704
-
705
- toShow.attr( "aria-hidden", "false" );
706
- eventData.newTab.attr( {
707
- "aria-selected": "true",
708
- "aria-expanded": "true",
709
- tabIndex: 0
710
- } );
711
- },
712
-
713
- _activate: function( index ) {
714
- var anchor,
715
- active = this._findActive( index );
716
-
717
- // Trying to activate the already active panel
718
- if ( active[ 0 ] === this.active[ 0 ] ) {
719
- return;
720
- }
721
-
722
- // Trying to collapse, simulate a click on the current active header
723
- if ( !active.length ) {
724
- active = this.active;
725
- }
726
-
727
- anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
728
- this._eventHandler( {
729
- target: anchor,
730
- currentTarget: anchor,
731
- preventDefault: $.noop
732
- } );
733
- },
734
-
735
- _findActive: function( index ) {
736
- return index === false ? $() : this.tabs.eq( index );
737
- },
738
-
739
- _getIndex: function( index ) {
740
-
741
- // meta-function to give users option to provide a href string instead of a numerical index.
742
- if ( typeof index === "string" ) {
743
- index = this.anchors.index( this.anchors.filter( "[href$='" +
744
- $.escapeSelector( index ) + "']" ) );
745
- }
746
-
747
- return index;
748
- },
749
-
750
- _destroy: function() {
751
- if ( this.xhr ) {
752
- this.xhr.abort();
753
- }
754
-
755
- this.tablist
756
- .removeAttr( "role" )
757
- .off( this.eventNamespace );
758
-
759
- this.anchors
760
- .removeAttr( "role tabIndex" )
761
- .removeUniqueId();
762
-
763
- this.tabs.add( this.panels ).each( function() {
764
- if ( $.data( this, "ui-tabs-destroy" ) ) {
765
- $( this ).remove();
766
- } else {
767
- $( this ).removeAttr( "role tabIndex " +
768
- "aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" );
769
- }
770
- } );
771
-
772
- this.tabs.each( function() {
773
- var li = $( this ),
774
- prev = li.data( "ui-tabs-aria-controls" );
775
- if ( prev ) {
776
- li
777
- .attr( "aria-controls", prev )
778
- .removeData( "ui-tabs-aria-controls" );
779
- } else {
780
- li.removeAttr( "aria-controls" );
781
- }
782
- } );
783
-
784
- this.panels.show();
785
-
786
- if ( this.options.heightStyle !== "content" ) {
787
- this.panels.css( "height", "" );
788
- }
789
- },
790
-
791
- enable: function( index ) {
792
- var disabled = this.options.disabled;
793
- if ( disabled === false ) {
794
- return;
795
- }
796
-
797
- if ( index === undefined ) {
798
- disabled = false;
799
- } else {
800
- index = this._getIndex( index );
801
- if ( Array.isArray( disabled ) ) {
802
- disabled = $.map( disabled, function( num ) {
803
- return num !== index ? num : null;
804
- } );
805
- } else {
806
- disabled = $.map( this.tabs, function( li, num ) {
807
- return num !== index ? num : null;
808
- } );
809
- }
810
- }
811
- this._setOptionDisabled( disabled );
812
- },
813
-
814
- disable: function( index ) {
815
- var disabled = this.options.disabled;
816
- if ( disabled === true ) {
817
- return;
818
- }
819
-
820
- if ( index === undefined ) {
821
- disabled = true;
822
- } else {
823
- index = this._getIndex( index );
824
- if ( $.inArray( index, disabled ) !== -1 ) {
825
- return;
826
- }
827
- if ( Array.isArray( disabled ) ) {
828
- disabled = $.merge( [ index ], disabled ).sort();
829
- } else {
830
- disabled = [ index ];
831
- }
832
- }
833
- this._setOptionDisabled( disabled );
834
- },
835
-
836
- load: function( index, event ) {
837
- index = this._getIndex( index );
838
- var that = this,
839
- tab = this.tabs.eq( index ),
840
- anchor = tab.find( ".ui-tabs-anchor" ),
841
- panel = this._getPanelForTab( tab ),
842
- eventData = {
843
- tab: tab,
844
- panel: panel
845
- },
846
- complete = function( jqXHR, status ) {
847
- if ( status === "abort" ) {
848
- that.panels.stop( false, true );
849
- }
850
-
851
- that._removeClass( tab, "ui-tabs-loading" );
852
- panel.removeAttr( "aria-busy" );
853
-
854
- if ( jqXHR === that.xhr ) {
855
- delete that.xhr;
856
- }
857
- };
858
-
859
- // Not remote
860
- if ( this._isLocal( anchor[ 0 ] ) ) {
861
- return;
862
- }
863
-
864
- this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
865
-
866
- // Support: jQuery <1.8
867
- // jQuery <1.8 returns false if the request is canceled in beforeSend,
868
- // but as of 1.8, $.ajax() always returns a jqXHR object.
869
- if ( this.xhr && this.xhr.statusText !== "canceled" ) {
870
- this._addClass( tab, "ui-tabs-loading" );
871
- panel.attr( "aria-busy", "true" );
872
-
873
- this.xhr
874
- .done( function( response, status, jqXHR ) {
875
-
876
- // support: jQuery <1.8
877
- // https://bugs.jquery.com/ticket/11778
878
- setTimeout( function() {
879
- panel.html( response );
880
- that._trigger( "load", event, eventData );
881
-
882
- complete( jqXHR, status );
883
- }, 1 );
884
- } )
885
- .fail( function( jqXHR, status ) {
886
-
887
- // support: jQuery <1.8
888
- // https://bugs.jquery.com/ticket/11778
889
- setTimeout( function() {
890
- complete( jqXHR, status );
891
- }, 1 );
892
- } );
893
- }
894
- },
895
-
896
- _ajaxSettings: function( anchor, event, eventData ) {
897
- var that = this;
898
- return {
899
-
900
- // Support: IE <11 only
901
- // Strip any hash that exists to prevent errors with the Ajax request
902
- url: anchor.attr( "href" ).replace( /#.*$/, "" ),
903
- beforeSend: function( jqXHR, settings ) {
904
- return that._trigger( "beforeLoad", event,
905
- $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
906
- }
907
- };
908
- },
909
-
910
- _getPanelForTab: function( tab ) {
911
- var id = $( tab ).attr( "aria-controls" );
912
- return this.element.find( this._sanitizeSelector( "#" + id ) );
913
- }
914
- } );
915
-
916
- // DEPRECATED
917
- // TODO: Switch return back to widget declaration at top of file when this is removed
918
- if ( $.uiBackCompat !== false ) {
919
-
920
- // Backcompat for ui-tab class (now ui-tabs-tab)
921
- $.widget( "ui.tabs", $.ui.tabs, {
922
- _processTabs: function() {
923
- this._superApply( arguments );
924
- this._addClass( this.tabs, "ui-tab" );
925
- }
926
- } );
927
- }
928
-
929
- return $.ui.tabs;
930
-
931
- } );