activeadmin 3.5.0 → 4.0.0.beta1

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