activeadmin 2.2.0

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 (372) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +546 -0
  3. data/CODE_OF_CONDUCT.md +74 -0
  4. data/CONTRIBUTING.md +217 -0
  5. data/LICENSE +20 -0
  6. data/README.md +110 -0
  7. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  8. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  9. data/app/assets/images/active_admin/orderable.png +0 -0
  10. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  11. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  12. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  13. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  14. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  15. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  16. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  17. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +55 -0
  18. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  19. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  20. data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
  21. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  22. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  23. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  24. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  25. data/app/assets/stylesheets/active_admin/_forms.scss +326 -0
  26. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  27. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  28. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  29. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  30. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  31. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  32. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  33. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  34. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  35. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  36. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  37. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  38. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  39. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  40. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  41. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  42. data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
  43. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  44. data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  45. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  46. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  47. data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
  48. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  49. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  50. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  51. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  52. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  53. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  54. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  55. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  56. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  57. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  58. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  59. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  60. data/app/assets/stylesheets/active_admin/print.scss +287 -0
  61. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  62. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  63. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
  64. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  65. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  66. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  67. data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  68. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  69. data/app/views/active_admin/devise/registrations/new.html.erb +21 -0
  70. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  71. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  72. data/app/views/active_admin/devise/shared/_links.erb +33 -0
  73. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  74. data/app/views/active_admin/page/index.html.arb +1 -0
  75. data/app/views/active_admin/resource/edit.html.arb +1 -0
  76. data/app/views/active_admin/resource/index.html.arb +1 -0
  77. data/app/views/active_admin/resource/new.html.arb +1 -0
  78. data/app/views/active_admin/resource/show.html.arb +1 -0
  79. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  80. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  81. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  82. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  83. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  84. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  85. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  86. data/app/views/layouts/active_admin.html.arb +1 -0
  87. data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
  88. data/config/locales/ar.yml +135 -0
  89. data/config/locales/bg.yml +119 -0
  90. data/config/locales/bs.yml +121 -0
  91. data/config/locales/ca.yml +106 -0
  92. data/config/locales/cs.yml +109 -0
  93. data/config/locales/da.yml +137 -0
  94. data/config/locales/de-CH.yml +101 -0
  95. data/config/locales/de.yml +144 -0
  96. data/config/locales/el.yml +126 -0
  97. data/config/locales/en-CA.yml +139 -0
  98. data/config/locales/en-GB.yml +139 -0
  99. data/config/locales/en.yml +162 -0
  100. data/config/locales/eo.yml +145 -0
  101. data/config/locales/es-MX.yml +96 -0
  102. data/config/locales/es.yml +162 -0
  103. data/config/locales/fa.yml +119 -0
  104. data/config/locales/fi.yml +112 -0
  105. data/config/locales/fr.yml +141 -0
  106. data/config/locales/he.yml +141 -0
  107. data/config/locales/hr.yml +123 -0
  108. data/config/locales/hu.yml +102 -0
  109. data/config/locales/id.yml +135 -0
  110. data/config/locales/it.yml +144 -0
  111. data/config/locales/ja.yml +141 -0
  112. data/config/locales/ko.yml +120 -0
  113. data/config/locales/lt.yml +142 -0
  114. data/config/locales/lv.yml +92 -0
  115. data/config/locales/mk.yml +134 -0
  116. data/config/locales/nb.yml +130 -0
  117. data/config/locales/nl.yml +144 -0
  118. data/config/locales/pl.yml +168 -0
  119. data/config/locales/pt-BR.yml +143 -0
  120. data/config/locales/pt-PT.yml +92 -0
  121. data/config/locales/ro.yml +96 -0
  122. data/config/locales/ru.yml +141 -0
  123. data/config/locales/sk.yml +109 -0
  124. data/config/locales/sv-SE.yml +135 -0
  125. data/config/locales/tr.yml +144 -0
  126. data/config/locales/uk.yml +138 -0
  127. data/config/locales/vi.yml +134 -0
  128. data/config/locales/zh-CN.yml +143 -0
  129. data/config/locales/zh-TW.yml +135 -0
  130. data/docs/.gitignore +1 -0
  131. data/docs/0-installation.md +118 -0
  132. data/docs/1-general-configuration.md +204 -0
  133. data/docs/10-custom-pages.md +150 -0
  134. data/docs/11-decorators.md +59 -0
  135. data/docs/12-arbre-components.md +214 -0
  136. data/docs/13-authorization-adapter.md +285 -0
  137. data/docs/14-gotchas.md +138 -0
  138. data/docs/2-resource-customization.md +466 -0
  139. data/docs/3-index-pages.md +328 -0
  140. data/docs/3-index-pages/custom-index.md +35 -0
  141. data/docs/3-index-pages/index-as-block.md +19 -0
  142. data/docs/3-index-pages/index-as-blog.md +69 -0
  143. data/docs/3-index-pages/index-as-grid.md +27 -0
  144. data/docs/3-index-pages/index-as-table.md +227 -0
  145. data/docs/4-csv-format.md +74 -0
  146. data/docs/5-forms.md +232 -0
  147. data/docs/6-show-pages.md +81 -0
  148. data/docs/7-sidebars.md +75 -0
  149. data/docs/8-custom-actions.md +177 -0
  150. data/docs/9-batch-actions.md +237 -0
  151. data/docs/CNAME +1 -0
  152. data/docs/Gemfile +4 -0
  153. data/docs/Gemfile.lock +249 -0
  154. data/docs/README.md +24 -0
  155. data/docs/_config.yml +2 -0
  156. data/docs/_includes/footer.html +8 -0
  157. data/docs/_includes/google-analytics.html +16 -0
  158. data/docs/_includes/head.html +7 -0
  159. data/docs/_includes/toc.html +98 -0
  160. data/docs/_includes/top-menu.html +17 -0
  161. data/docs/_layouts/default.html +21 -0
  162. data/docs/documentation.md +60 -0
  163. data/docs/images/activeadmin.png +0 -0
  164. data/docs/images/code-header.png +0 -0
  165. data/docs/images/divider.png +0 -0
  166. data/docs/images/features.png +0 -0
  167. data/docs/images/tidelift.svg +14 -0
  168. data/docs/index.html +125 -0
  169. data/docs/stylesheets/main.css +1176 -0
  170. data/lib/active_admin.rb +134 -0
  171. data/lib/active_admin/abstract_view_factory.rb +47 -0
  172. data/lib/active_admin/application.rb +234 -0
  173. data/lib/active_admin/application_settings.rb +42 -0
  174. data/lib/active_admin/asset_registration.rb +29 -0
  175. data/lib/active_admin/authorization_adapter.rb +129 -0
  176. data/lib/active_admin/base_controller.rb +81 -0
  177. data/lib/active_admin/base_controller/authorization.rb +127 -0
  178. data/lib/active_admin/base_controller/menu.rb +34 -0
  179. data/lib/active_admin/batch_actions.rb +16 -0
  180. data/lib/active_admin/batch_actions/controller.rb +40 -0
  181. data/lib/active_admin/batch_actions/resource_extension.rb +155 -0
  182. data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
  183. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
  184. data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
  185. data/lib/active_admin/callbacks.rb +88 -0
  186. data/lib/active_admin/cancan_adapter.rb +36 -0
  187. data/lib/active_admin/component.rb +5 -0
  188. data/lib/active_admin/controller_action.rb +13 -0
  189. data/lib/active_admin/csv_builder.rb +133 -0
  190. data/lib/active_admin/dependency.rb +100 -0
  191. data/lib/active_admin/deprecation.rb +10 -0
  192. data/lib/active_admin/devise.rb +80 -0
  193. data/lib/active_admin/dsl.rb +160 -0
  194. data/lib/active_admin/dynamic_setting.rb +38 -0
  195. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  196. data/lib/active_admin/engine.rb +21 -0
  197. data/lib/active_admin/error.rb +64 -0
  198. data/lib/active_admin/filters.rb +11 -0
  199. data/lib/active_admin/filters/active.rb +29 -0
  200. data/lib/active_admin/filters/active_filter.rb +124 -0
  201. data/lib/active_admin/filters/active_sidebar.rb +54 -0
  202. data/lib/active_admin/filters/dsl.rb +21 -0
  203. data/lib/active_admin/filters/forms.rb +85 -0
  204. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  205. data/lib/active_admin/filters/resource_extension.rb +155 -0
  206. data/lib/active_admin/form_builder.rb +182 -0
  207. data/lib/active_admin/generators/boilerplate.rb +45 -0
  208. data/lib/active_admin/helpers/collection.rb +19 -0
  209. data/lib/active_admin/helpers/i18n.rb +7 -0
  210. data/lib/active_admin/helpers/optional_display.rb +38 -0
  211. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  212. data/lib/active_admin/helpers/scope_chain.rb +24 -0
  213. data/lib/active_admin/inputs.rb +21 -0
  214. data/lib/active_admin/inputs/datepicker_input.rb +27 -0
  215. data/lib/active_admin/inputs/filters/base.rb +44 -0
  216. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  217. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  218. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  219. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  220. data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
  221. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  222. data/lib/active_admin/inputs/filters/select_input.rb +58 -0
  223. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  224. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  225. data/lib/active_admin/localizers.rb +11 -0
  226. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  227. data/lib/active_admin/menu.rb +102 -0
  228. data/lib/active_admin/menu_collection.rb +91 -0
  229. data/lib/active_admin/menu_item.rb +69 -0
  230. data/lib/active_admin/namespace.rb +266 -0
  231. data/lib/active_admin/namespace_settings.rb +110 -0
  232. data/lib/active_admin/order_clause.rb +48 -0
  233. data/lib/active_admin/orm/active_record.rb +5 -0
  234. data/lib/active_admin/orm/active_record/comments.rb +101 -0
  235. data/lib/active_admin/orm/active_record/comments/comment.rb +31 -0
  236. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  237. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  238. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  239. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  240. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +100 -0
  241. data/lib/active_admin/orm/mongoid.rb +1 -0
  242. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  243. data/lib/active_admin/page.rb +111 -0
  244. data/lib/active_admin/page_controller.rb +29 -0
  245. data/lib/active_admin/page_dsl.rb +32 -0
  246. data/lib/active_admin/page_presenter.rb +33 -0
  247. data/lib/active_admin/pundit_adapter.rb +81 -0
  248. data/lib/active_admin/resource.rb +207 -0
  249. data/lib/active_admin/resource/action_items.rb +120 -0
  250. data/lib/active_admin/resource/attributes.rb +47 -0
  251. data/lib/active_admin/resource/belongs_to.rb +50 -0
  252. data/lib/active_admin/resource/controllers.rb +19 -0
  253. data/lib/active_admin/resource/includes.rb +12 -0
  254. data/lib/active_admin/resource/menu.rb +67 -0
  255. data/lib/active_admin/resource/naming.rb +62 -0
  256. data/lib/active_admin/resource/ordering.rb +11 -0
  257. data/lib/active_admin/resource/page_presenters.rb +82 -0
  258. data/lib/active_admin/resource/pagination.rb +23 -0
  259. data/lib/active_admin/resource/routes.rb +139 -0
  260. data/lib/active_admin/resource/scope_to.rb +74 -0
  261. data/lib/active_admin/resource/scopes.rb +52 -0
  262. data/lib/active_admin/resource/sidebars.rb +28 -0
  263. data/lib/active_admin/resource_collection.rb +72 -0
  264. data/lib/active_admin/resource_controller.rb +64 -0
  265. data/lib/active_admin/resource_controller/action_builder.rb +31 -0
  266. data/lib/active_admin/resource_controller/data_access.rb +322 -0
  267. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  268. data/lib/active_admin/resource_controller/resource_class_methods.rb +26 -0
  269. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  270. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  271. data/lib/active_admin/resource_controller/streaming.rb +43 -0
  272. data/lib/active_admin/resource_dsl.rb +224 -0
  273. data/lib/active_admin/router.rb +114 -0
  274. data/lib/active_admin/scope.rb +64 -0
  275. data/lib/active_admin/settings_node.rb +19 -0
  276. data/lib/active_admin/sidebar_section.rb +39 -0
  277. data/lib/active_admin/version.rb +3 -0
  278. data/lib/active_admin/view_factory.rb +27 -0
  279. data/lib/active_admin/view_helpers.rb +20 -0
  280. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  281. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  282. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
  283. data/lib/active_admin/view_helpers/display_helper.rb +104 -0
  284. data/lib/active_admin/view_helpers/download_format_links_helper.rb +59 -0
  285. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  286. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  287. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  288. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +100 -0
  289. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  290. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  291. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  292. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  293. data/lib/active_admin/views.rb +8 -0
  294. data/lib/active_admin/views/action_items.rb +17 -0
  295. data/lib/active_admin/views/components/active_admin_form.rb +155 -0
  296. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  297. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  298. data/lib/active_admin/views/components/columns.rb +161 -0
  299. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  300. data/lib/active_admin/views/components/index_list.rb +69 -0
  301. data/lib/active_admin/views/components/menu.rb +32 -0
  302. data/lib/active_admin/views/components/menu_item.rb +58 -0
  303. data/lib/active_admin/views/components/paginated_collection.rb +159 -0
  304. data/lib/active_admin/views/components/panel.rb +38 -0
  305. data/lib/active_admin/views/components/scopes.rb +72 -0
  306. data/lib/active_admin/views/components/sidebar.rb +13 -0
  307. data/lib/active_admin/views/components/sidebar_section.rb +34 -0
  308. data/lib/active_admin/views/components/site_title.rb +54 -0
  309. data/lib/active_admin/views/components/status_tag.rb +75 -0
  310. data/lib/active_admin/views/components/table_for.rb +209 -0
  311. data/lib/active_admin/views/components/tabs.rb +40 -0
  312. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  313. data/lib/active_admin/views/footer.rb +30 -0
  314. data/lib/active_admin/views/header.rb +19 -0
  315. data/lib/active_admin/views/index_as_block.rb +36 -0
  316. data/lib/active_admin/views/index_as_blog.rb +155 -0
  317. data/lib/active_admin/views/index_as_grid.rb +80 -0
  318. data/lib/active_admin/views/index_as_table.rb +392 -0
  319. data/lib/active_admin/views/pages/base.rb +126 -0
  320. data/lib/active_admin/views/pages/form.rb +64 -0
  321. data/lib/active_admin/views/pages/index.rb +163 -0
  322. data/lib/active_admin/views/pages/layout.rb +26 -0
  323. data/lib/active_admin/views/pages/page.rb +30 -0
  324. data/lib/active_admin/views/pages/show.rb +65 -0
  325. data/lib/active_admin/views/tabbed_navigation.rb +11 -0
  326. data/lib/active_admin/views/title_bar.rb +55 -0
  327. data/lib/activeadmin.rb +1 -0
  328. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  329. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  330. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  331. data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
  332. data/lib/generators/active_admin/install/install_generator.rb +49 -0
  333. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +315 -0
  334. data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  335. data/lib/generators/active_admin/install/templates/dashboard.rb +32 -0
  336. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
  337. data/lib/generators/active_admin/page/USAGE +8 -0
  338. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  339. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  340. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  341. data/lib/generators/active_admin/resource/templates/admin.rb.erb +44 -0
  342. data/lib/ransack_ext.rb +20 -0
  343. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  344. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  345. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  346. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  347. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  348. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  349. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  350. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  351. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  352. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  353. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  354. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  355. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  356. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  357. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  358. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  359. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  360. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  361. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  362. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +291 -0
  363. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  364. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  365. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  366. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  367. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  368. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  369. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  370. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  371. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  372. metadata +616 -0
@@ -0,0 +1,1259 @@
1
+ //= require jquery-ui/widgets/mouse
2
+ //= require jquery-ui/data
3
+ //= require jquery-ui/plugin
4
+ //= require jquery-ui/safe-active-element
5
+ //= require jquery-ui/safe-blur
6
+ //= require jquery-ui/scroll-parent
7
+ //= require jquery-ui/version
8
+ //= require jquery-ui/widget
9
+
10
+ /*!
11
+ * jQuery UI Draggable 1.12.1
12
+ * http://jqueryui.com
13
+ *
14
+ * Copyright jQuery Foundation and other contributors
15
+ * Released under the MIT license.
16
+ * http://jquery.org/license
17
+ */
18
+
19
+ //>>label: Draggable
20
+ //>>group: Interactions
21
+ //>>description: Enables dragging functionality for any element.
22
+ //>>docs: http://api.jqueryui.com/draggable/
23
+ //>>demos: http://jqueryui.com/draggable/
24
+ //>>css.structure: ../../themes/base/draggable.css
25
+
26
+ ( function( factory ) {
27
+ if ( typeof define === "function" && define.amd ) {
28
+
29
+ // AMD. Register as an anonymous module.
30
+ define( [
31
+ "jquery",
32
+ "./mouse",
33
+ "../data",
34
+ "../plugin",
35
+ "../safe-active-element",
36
+ "../safe-blur",
37
+ "../scroll-parent",
38
+ "../version",
39
+ "../widget"
40
+ ], factory );
41
+ } else {
42
+
43
+ // Browser globals
44
+ factory( jQuery );
45
+ }
46
+ }( function( $ ) {
47
+
48
+ $.widget( "ui.draggable", $.ui.mouse, {
49
+ version: "1.12.1",
50
+ widgetEventPrefix: "drag",
51
+ options: {
52
+ addClasses: true,
53
+ appendTo: "parent",
54
+ axis: false,
55
+ connectToSortable: false,
56
+ containment: false,
57
+ cursor: "auto",
58
+ cursorAt: false,
59
+ grid: false,
60
+ handle: false,
61
+ helper: "original",
62
+ iframeFix: false,
63
+ opacity: false,
64
+ refreshPositions: false,
65
+ revert: false,
66
+ revertDuration: 500,
67
+ scope: "default",
68
+ scroll: true,
69
+ scrollSensitivity: 20,
70
+ scrollSpeed: 20,
71
+ snap: false,
72
+ snapMode: "both",
73
+ snapTolerance: 20,
74
+ stack: false,
75
+ zIndex: false,
76
+
77
+ // Callbacks
78
+ drag: null,
79
+ start: null,
80
+ stop: null
81
+ },
82
+ _create: function() {
83
+
84
+ if ( this.options.helper === "original" ) {
85
+ this._setPositionRelative();
86
+ }
87
+ if ( this.options.addClasses ) {
88
+ this._addClass( "ui-draggable" );
89
+ }
90
+ this._setHandleClassName();
91
+
92
+ this._mouseInit();
93
+ },
94
+
95
+ _setOption: function( key, value ) {
96
+ this._super( key, value );
97
+ if ( key === "handle" ) {
98
+ this._removeHandleClassName();
99
+ this._setHandleClassName();
100
+ }
101
+ },
102
+
103
+ _destroy: function() {
104
+ if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
105
+ this.destroyOnClear = true;
106
+ return;
107
+ }
108
+ this._removeHandleClassName();
109
+ this._mouseDestroy();
110
+ },
111
+
112
+ _mouseCapture: function( event ) {
113
+ var o = this.options;
114
+
115
+ // Among others, prevent a drag on a resizable-handle
116
+ if ( this.helper || o.disabled ||
117
+ $( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) {
118
+ return false;
119
+ }
120
+
121
+ //Quit if we're not on a valid handle
122
+ this.handle = this._getHandle( event );
123
+ if ( !this.handle ) {
124
+ return false;
125
+ }
126
+
127
+ this._blurActiveElement( event );
128
+
129
+ this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
130
+
131
+ return true;
132
+
133
+ },
134
+
135
+ _blockFrames: function( selector ) {
136
+ this.iframeBlocks = this.document.find( selector ).map( function() {
137
+ var iframe = $( this );
138
+
139
+ return $( "<div>" )
140
+ .css( "position", "absolute" )
141
+ .appendTo( iframe.parent() )
142
+ .outerWidth( iframe.outerWidth() )
143
+ .outerHeight( iframe.outerHeight() )
144
+ .offset( iframe.offset() )[ 0 ];
145
+ } );
146
+ },
147
+
148
+ _unblockFrames: function() {
149
+ if ( this.iframeBlocks ) {
150
+ this.iframeBlocks.remove();
151
+ delete this.iframeBlocks;
152
+ }
153
+ },
154
+
155
+ _blurActiveElement: function( event ) {
156
+ var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
157
+ target = $( event.target );
158
+
159
+ // Don't blur if the event occurred on an element that is within
160
+ // the currently focused element
161
+ // See #10527, #12472
162
+ if ( target.closest( activeElement ).length ) {
163
+ return;
164
+ }
165
+
166
+ // Blur any element that currently has focus, see #4261
167
+ $.ui.safeBlur( activeElement );
168
+ },
169
+
170
+ _mouseStart: function( event ) {
171
+
172
+ var o = this.options;
173
+
174
+ //Create and append the visible helper
175
+ this.helper = this._createHelper( event );
176
+
177
+ this._addClass( this.helper, "ui-draggable-dragging" );
178
+
179
+ //Cache the helper size
180
+ this._cacheHelperProportions();
181
+
182
+ //If ddmanager is used for droppables, set the global draggable
183
+ if ( $.ui.ddmanager ) {
184
+ $.ui.ddmanager.current = this;
185
+ }
186
+
187
+ /*
188
+ * - Position generation -
189
+ * This block generates everything position related - it's the core of draggables.
190
+ */
191
+
192
+ //Cache the margins of the original element
193
+ this._cacheMargins();
194
+
195
+ //Store the helper's css position
196
+ this.cssPosition = this.helper.css( "position" );
197
+ this.scrollParent = this.helper.scrollParent( true );
198
+ this.offsetParent = this.helper.offsetParent();
199
+ this.hasFixedAncestor = this.helper.parents().filter( function() {
200
+ return $( this ).css( "position" ) === "fixed";
201
+ } ).length > 0;
202
+
203
+ //The element's absolute position on the page minus margins
204
+ this.positionAbs = this.element.offset();
205
+ this._refreshOffsets( event );
206
+
207
+ //Generate the original position
208
+ this.originalPosition = this.position = this._generatePosition( event, false );
209
+ this.originalPageX = event.pageX;
210
+ this.originalPageY = event.pageY;
211
+
212
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
213
+ ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
214
+
215
+ //Set a containment if given in the options
216
+ this._setContainment();
217
+
218
+ //Trigger event + callbacks
219
+ if ( this._trigger( "start", event ) === false ) {
220
+ this._clear();
221
+ return false;
222
+ }
223
+
224
+ //Recache the helper size
225
+ this._cacheHelperProportions();
226
+
227
+ //Prepare the droppable offsets
228
+ if ( $.ui.ddmanager && !o.dropBehaviour ) {
229
+ $.ui.ddmanager.prepareOffsets( this, event );
230
+ }
231
+
232
+ // Execute the drag once - this causes the helper not to be visible before getting its
233
+ // correct position
234
+ this._mouseDrag( event, true );
235
+
236
+ // If the ddmanager is used for droppables, inform the manager that dragging has started
237
+ // (see #5003)
238
+ if ( $.ui.ddmanager ) {
239
+ $.ui.ddmanager.dragStart( this, event );
240
+ }
241
+
242
+ return true;
243
+ },
244
+
245
+ _refreshOffsets: function( event ) {
246
+ this.offset = {
247
+ top: this.positionAbs.top - this.margins.top,
248
+ left: this.positionAbs.left - this.margins.left,
249
+ scroll: false,
250
+ parent: this._getParentOffset(),
251
+ relative: this._getRelativeOffset()
252
+ };
253
+
254
+ this.offset.click = {
255
+ left: event.pageX - this.offset.left,
256
+ top: event.pageY - this.offset.top
257
+ };
258
+ },
259
+
260
+ _mouseDrag: function( event, noPropagation ) {
261
+
262
+ // reset any necessary cached properties (see #5009)
263
+ if ( this.hasFixedAncestor ) {
264
+ this.offset.parent = this._getParentOffset();
265
+ }
266
+
267
+ //Compute the helpers position
268
+ this.position = this._generatePosition( event, true );
269
+ this.positionAbs = this._convertPositionTo( "absolute" );
270
+
271
+ //Call plugins and callbacks and use the resulting position if something is returned
272
+ if ( !noPropagation ) {
273
+ var ui = this._uiHash();
274
+ if ( this._trigger( "drag", event, ui ) === false ) {
275
+ this._mouseUp( new $.Event( "mouseup", event ) );
276
+ return false;
277
+ }
278
+ this.position = ui.position;
279
+ }
280
+
281
+ this.helper[ 0 ].style.left = this.position.left + "px";
282
+ this.helper[ 0 ].style.top = this.position.top + "px";
283
+
284
+ if ( $.ui.ddmanager ) {
285
+ $.ui.ddmanager.drag( this, event );
286
+ }
287
+
288
+ return false;
289
+ },
290
+
291
+ _mouseStop: function( event ) {
292
+
293
+ //If we are using droppables, inform the manager about the drop
294
+ var that = this,
295
+ dropped = false;
296
+ if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
297
+ dropped = $.ui.ddmanager.drop( this, event );
298
+ }
299
+
300
+ //if a drop comes from outside (a sortable)
301
+ if ( this.dropped ) {
302
+ dropped = this.dropped;
303
+ this.dropped = false;
304
+ }
305
+
306
+ if ( ( this.options.revert === "invalid" && !dropped ) ||
307
+ ( this.options.revert === "valid" && dropped ) ||
308
+ this.options.revert === true || ( $.isFunction( this.options.revert ) &&
309
+ this.options.revert.call( this.element, dropped ) )
310
+ ) {
311
+ $( this.helper ).animate(
312
+ this.originalPosition,
313
+ parseInt( this.options.revertDuration, 10 ),
314
+ function() {
315
+ if ( that._trigger( "stop", event ) !== false ) {
316
+ that._clear();
317
+ }
318
+ }
319
+ );
320
+ } else {
321
+ if ( this._trigger( "stop", event ) !== false ) {
322
+ this._clear();
323
+ }
324
+ }
325
+
326
+ return false;
327
+ },
328
+
329
+ _mouseUp: function( event ) {
330
+ this._unblockFrames();
331
+
332
+ // If the ddmanager is used for droppables, inform the manager that dragging has stopped
333
+ // (see #5003)
334
+ if ( $.ui.ddmanager ) {
335
+ $.ui.ddmanager.dragStop( this, event );
336
+ }
337
+
338
+ // Only need to focus if the event occurred on the draggable itself, see #10527
339
+ if ( this.handleElement.is( event.target ) ) {
340
+
341
+ // The interaction is over; whether or not the click resulted in a drag,
342
+ // focus the element
343
+ this.element.trigger( "focus" );
344
+ }
345
+
346
+ return $.ui.mouse.prototype._mouseUp.call( this, event );
347
+ },
348
+
349
+ cancel: function() {
350
+
351
+ if ( this.helper.is( ".ui-draggable-dragging" ) ) {
352
+ this._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) );
353
+ } else {
354
+ this._clear();
355
+ }
356
+
357
+ return this;
358
+
359
+ },
360
+
361
+ _getHandle: function( event ) {
362
+ return this.options.handle ?
363
+ !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
364
+ true;
365
+ },
366
+
367
+ _setHandleClassName: function() {
368
+ this.handleElement = this.options.handle ?
369
+ this.element.find( this.options.handle ) : this.element;
370
+ this._addClass( this.handleElement, "ui-draggable-handle" );
371
+ },
372
+
373
+ _removeHandleClassName: function() {
374
+ this._removeClass( this.handleElement, "ui-draggable-handle" );
375
+ },
376
+
377
+ _createHelper: function( event ) {
378
+
379
+ var o = this.options,
380
+ helperIsFunction = $.isFunction( o.helper ),
381
+ helper = helperIsFunction ?
382
+ $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
383
+ ( o.helper === "clone" ?
384
+ this.element.clone().removeAttr( "id" ) :
385
+ this.element );
386
+
387
+ if ( !helper.parents( "body" ).length ) {
388
+ helper.appendTo( ( o.appendTo === "parent" ?
389
+ this.element[ 0 ].parentNode :
390
+ o.appendTo ) );
391
+ }
392
+
393
+ // Http://bugs.jqueryui.com/ticket/9446
394
+ // a helper function can return the original element
395
+ // which wouldn't have been set to relative in _create
396
+ if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
397
+ this._setPositionRelative();
398
+ }
399
+
400
+ if ( helper[ 0 ] !== this.element[ 0 ] &&
401
+ !( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) {
402
+ helper.css( "position", "absolute" );
403
+ }
404
+
405
+ return helper;
406
+
407
+ },
408
+
409
+ _setPositionRelative: function() {
410
+ if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
411
+ this.element[ 0 ].style.position = "relative";
412
+ }
413
+ },
414
+
415
+ _adjustOffsetFromHelper: function( obj ) {
416
+ if ( typeof obj === "string" ) {
417
+ obj = obj.split( " " );
418
+ }
419
+ if ( $.isArray( obj ) ) {
420
+ obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
421
+ }
422
+ if ( "left" in obj ) {
423
+ this.offset.click.left = obj.left + this.margins.left;
424
+ }
425
+ if ( "right" in obj ) {
426
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
427
+ }
428
+ if ( "top" in obj ) {
429
+ this.offset.click.top = obj.top + this.margins.top;
430
+ }
431
+ if ( "bottom" in obj ) {
432
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
433
+ }
434
+ },
435
+
436
+ _isRootNode: function( element ) {
437
+ return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
438
+ },
439
+
440
+ _getParentOffset: function() {
441
+
442
+ //Get the offsetParent and cache its position
443
+ var po = this.offsetParent.offset(),
444
+ document = this.document[ 0 ];
445
+
446
+ // This is a special case where we need to modify a offset calculated on start, since the
447
+ // following happened:
448
+ // 1. The position of the helper is absolute, so it's position is calculated based on the
449
+ // next positioned parent
450
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
451
+ // the document, which means that the scroll is included in the initial calculation of the
452
+ // offset of the parent, and never recalculated upon drag
453
+ if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document &&
454
+ $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
455
+ po.left += this.scrollParent.scrollLeft();
456
+ po.top += this.scrollParent.scrollTop();
457
+ }
458
+
459
+ if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
460
+ po = { top: 0, left: 0 };
461
+ }
462
+
463
+ return {
464
+ top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
465
+ left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
466
+ };
467
+
468
+ },
469
+
470
+ _getRelativeOffset: function() {
471
+ if ( this.cssPosition !== "relative" ) {
472
+ return { top: 0, left: 0 };
473
+ }
474
+
475
+ var p = this.element.position(),
476
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
477
+
478
+ return {
479
+ top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
480
+ ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
481
+ left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
482
+ ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
483
+ };
484
+
485
+ },
486
+
487
+ _cacheMargins: function() {
488
+ this.margins = {
489
+ left: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ),
490
+ top: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ),
491
+ right: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ),
492
+ bottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 )
493
+ };
494
+ },
495
+
496
+ _cacheHelperProportions: function() {
497
+ this.helperProportions = {
498
+ width: this.helper.outerWidth(),
499
+ height: this.helper.outerHeight()
500
+ };
501
+ },
502
+
503
+ _setContainment: function() {
504
+
505
+ var isUserScrollable, c, ce,
506
+ o = this.options,
507
+ document = this.document[ 0 ];
508
+
509
+ this.relativeContainer = null;
510
+
511
+ if ( !o.containment ) {
512
+ this.containment = null;
513
+ return;
514
+ }
515
+
516
+ if ( o.containment === "window" ) {
517
+ this.containment = [
518
+ $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
519
+ $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
520
+ $( window ).scrollLeft() + $( window ).width() -
521
+ this.helperProportions.width - this.margins.left,
522
+ $( window ).scrollTop() +
523
+ ( $( window ).height() || document.body.parentNode.scrollHeight ) -
524
+ this.helperProportions.height - this.margins.top
525
+ ];
526
+ return;
527
+ }
528
+
529
+ if ( o.containment === "document" ) {
530
+ this.containment = [
531
+ 0,
532
+ 0,
533
+ $( document ).width() - this.helperProportions.width - this.margins.left,
534
+ ( $( document ).height() || document.body.parentNode.scrollHeight ) -
535
+ this.helperProportions.height - this.margins.top
536
+ ];
537
+ return;
538
+ }
539
+
540
+ if ( o.containment.constructor === Array ) {
541
+ this.containment = o.containment;
542
+ return;
543
+ }
544
+
545
+ if ( o.containment === "parent" ) {
546
+ o.containment = this.helper[ 0 ].parentNode;
547
+ }
548
+
549
+ c = $( o.containment );
550
+ ce = c[ 0 ];
551
+
552
+ if ( !ce ) {
553
+ return;
554
+ }
555
+
556
+ isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
557
+
558
+ this.containment = [
559
+ ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) +
560
+ ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
561
+ ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) +
562
+ ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
563
+ ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
564
+ ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
565
+ ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
566
+ this.helperProportions.width -
567
+ this.margins.left -
568
+ this.margins.right,
569
+ ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
570
+ ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
571
+ ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
572
+ this.helperProportions.height -
573
+ this.margins.top -
574
+ this.margins.bottom
575
+ ];
576
+ this.relativeContainer = c;
577
+ },
578
+
579
+ _convertPositionTo: function( d, pos ) {
580
+
581
+ if ( !pos ) {
582
+ pos = this.position;
583
+ }
584
+
585
+ var mod = d === "absolute" ? 1 : -1,
586
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
587
+
588
+ return {
589
+ top: (
590
+
591
+ // The absolute mouse position
592
+ pos.top +
593
+
594
+ // Only for relative positioned nodes: Relative offset from element to offset parent
595
+ this.offset.relative.top * mod +
596
+
597
+ // The offsetParent's offset without borders (offset + border)
598
+ this.offset.parent.top * mod -
599
+ ( ( this.cssPosition === "fixed" ?
600
+ -this.offset.scroll.top :
601
+ ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )
602
+ ),
603
+ left: (
604
+
605
+ // The absolute mouse position
606
+ pos.left +
607
+
608
+ // Only for relative positioned nodes: Relative offset from element to offset parent
609
+ this.offset.relative.left * mod +
610
+
611
+ // The offsetParent's offset without borders (offset + border)
612
+ this.offset.parent.left * mod -
613
+ ( ( this.cssPosition === "fixed" ?
614
+ -this.offset.scroll.left :
615
+ ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )
616
+ )
617
+ };
618
+
619
+ },
620
+
621
+ _generatePosition: function( event, constrainPosition ) {
622
+
623
+ var containment, co, top, left,
624
+ o = this.options,
625
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
626
+ pageX = event.pageX,
627
+ pageY = event.pageY;
628
+
629
+ // Cache the scroll
630
+ if ( !scrollIsRootNode || !this.offset.scroll ) {
631
+ this.offset.scroll = {
632
+ top: this.scrollParent.scrollTop(),
633
+ left: this.scrollParent.scrollLeft()
634
+ };
635
+ }
636
+
637
+ /*
638
+ * - Position constraining -
639
+ * Constrain the position to a mix of grid, containment.
640
+ */
641
+
642
+ // If we are not dragging yet, we won't check for options
643
+ if ( constrainPosition ) {
644
+ if ( this.containment ) {
645
+ if ( this.relativeContainer ) {
646
+ co = this.relativeContainer.offset();
647
+ containment = [
648
+ this.containment[ 0 ] + co.left,
649
+ this.containment[ 1 ] + co.top,
650
+ this.containment[ 2 ] + co.left,
651
+ this.containment[ 3 ] + co.top
652
+ ];
653
+ } else {
654
+ containment = this.containment;
655
+ }
656
+
657
+ if ( event.pageX - this.offset.click.left < containment[ 0 ] ) {
658
+ pageX = containment[ 0 ] + this.offset.click.left;
659
+ }
660
+ if ( event.pageY - this.offset.click.top < containment[ 1 ] ) {
661
+ pageY = containment[ 1 ] + this.offset.click.top;
662
+ }
663
+ if ( event.pageX - this.offset.click.left > containment[ 2 ] ) {
664
+ pageX = containment[ 2 ] + this.offset.click.left;
665
+ }
666
+ if ( event.pageY - this.offset.click.top > containment[ 3 ] ) {
667
+ pageY = containment[ 3 ] + this.offset.click.top;
668
+ }
669
+ }
670
+
671
+ if ( o.grid ) {
672
+
673
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid
674
+ // argument errors in IE (see ticket #6950)
675
+ top = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -
676
+ this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;
677
+ pageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||
678
+ top - this.offset.click.top > containment[ 3 ] ) ?
679
+ top :
680
+ ( ( top - this.offset.click.top >= containment[ 1 ] ) ?
681
+ top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;
682
+
683
+ left = o.grid[ 0 ] ? this.originalPageX +
684
+ Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :
685
+ this.originalPageX;
686
+ pageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||
687
+ left - this.offset.click.left > containment[ 2 ] ) ?
688
+ left :
689
+ ( ( left - this.offset.click.left >= containment[ 0 ] ) ?
690
+ left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;
691
+ }
692
+
693
+ if ( o.axis === "y" ) {
694
+ pageX = this.originalPageX;
695
+ }
696
+
697
+ if ( o.axis === "x" ) {
698
+ pageY = this.originalPageY;
699
+ }
700
+ }
701
+
702
+ return {
703
+ top: (
704
+
705
+ // The absolute mouse position
706
+ pageY -
707
+
708
+ // Click offset (relative to the element)
709
+ this.offset.click.top -
710
+
711
+ // Only for relative positioned nodes: Relative offset from element to offset parent
712
+ this.offset.relative.top -
713
+
714
+ // The offsetParent's offset without borders (offset + border)
715
+ this.offset.parent.top +
716
+ ( this.cssPosition === "fixed" ?
717
+ -this.offset.scroll.top :
718
+ ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
719
+ ),
720
+ left: (
721
+
722
+ // The absolute mouse position
723
+ pageX -
724
+
725
+ // Click offset (relative to the element)
726
+ this.offset.click.left -
727
+
728
+ // Only for relative positioned nodes: Relative offset from element to offset parent
729
+ this.offset.relative.left -
730
+
731
+ // The offsetParent's offset without borders (offset + border)
732
+ this.offset.parent.left +
733
+ ( this.cssPosition === "fixed" ?
734
+ -this.offset.scroll.left :
735
+ ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
736
+ )
737
+ };
738
+
739
+ },
740
+
741
+ _clear: function() {
742
+ this._removeClass( this.helper, "ui-draggable-dragging" );
743
+ if ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {
744
+ this.helper.remove();
745
+ }
746
+ this.helper = null;
747
+ this.cancelHelperRemoval = false;
748
+ if ( this.destroyOnClear ) {
749
+ this.destroy();
750
+ }
751
+ },
752
+
753
+ // From now on bulk stuff - mainly helpers
754
+
755
+ _trigger: function( type, event, ui ) {
756
+ ui = ui || this._uiHash();
757
+ $.ui.plugin.call( this, type, [ event, ui, this ], true );
758
+
759
+ // Absolute position and offset (see #6884 ) have to be recalculated after plugins
760
+ if ( /^(drag|start|stop)/.test( type ) ) {
761
+ this.positionAbs = this._convertPositionTo( "absolute" );
762
+ ui.offset = this.positionAbs;
763
+ }
764
+ return $.Widget.prototype._trigger.call( this, type, event, ui );
765
+ },
766
+
767
+ plugins: {},
768
+
769
+ _uiHash: function() {
770
+ return {
771
+ helper: this.helper,
772
+ position: this.position,
773
+ originalPosition: this.originalPosition,
774
+ offset: this.positionAbs
775
+ };
776
+ }
777
+
778
+ } );
779
+
780
+ $.ui.plugin.add( "draggable", "connectToSortable", {
781
+ start: function( event, ui, draggable ) {
782
+ var uiSortable = $.extend( {}, ui, {
783
+ item: draggable.element
784
+ } );
785
+
786
+ draggable.sortables = [];
787
+ $( draggable.options.connectToSortable ).each( function() {
788
+ var sortable = $( this ).sortable( "instance" );
789
+
790
+ if ( sortable && !sortable.options.disabled ) {
791
+ draggable.sortables.push( sortable );
792
+
793
+ // RefreshPositions is called at drag start to refresh the containerCache
794
+ // which is used in drag. This ensures it's initialized and synchronized
795
+ // with any changes that might have happened on the page since initialization.
796
+ sortable.refreshPositions();
797
+ sortable._trigger( "activate", event, uiSortable );
798
+ }
799
+ } );
800
+ },
801
+ stop: function( event, ui, draggable ) {
802
+ var uiSortable = $.extend( {}, ui, {
803
+ item: draggable.element
804
+ } );
805
+
806
+ draggable.cancelHelperRemoval = false;
807
+
808
+ $.each( draggable.sortables, function() {
809
+ var sortable = this;
810
+
811
+ if ( sortable.isOver ) {
812
+ sortable.isOver = 0;
813
+
814
+ // Allow this sortable to handle removing the helper
815
+ draggable.cancelHelperRemoval = true;
816
+ sortable.cancelHelperRemoval = false;
817
+
818
+ // Use _storedCSS To restore properties in the sortable,
819
+ // as this also handles revert (#9675) since the draggable
820
+ // may have modified them in unexpected ways (#8809)
821
+ sortable._storedCSS = {
822
+ position: sortable.placeholder.css( "position" ),
823
+ top: sortable.placeholder.css( "top" ),
824
+ left: sortable.placeholder.css( "left" )
825
+ };
826
+
827
+ sortable._mouseStop( event );
828
+
829
+ // Once drag has ended, the sortable should return to using
830
+ // its original helper, not the shared helper from draggable
831
+ sortable.options.helper = sortable.options._helper;
832
+ } else {
833
+
834
+ // Prevent this Sortable from removing the helper.
835
+ // However, don't set the draggable to remove the helper
836
+ // either as another connected Sortable may yet handle the removal.
837
+ sortable.cancelHelperRemoval = true;
838
+
839
+ sortable._trigger( "deactivate", event, uiSortable );
840
+ }
841
+ } );
842
+ },
843
+ drag: function( event, ui, draggable ) {
844
+ $.each( draggable.sortables, function() {
845
+ var innermostIntersecting = false,
846
+ sortable = this;
847
+
848
+ // Copy over variables that sortable's _intersectsWith uses
849
+ sortable.positionAbs = draggable.positionAbs;
850
+ sortable.helperProportions = draggable.helperProportions;
851
+ sortable.offset.click = draggable.offset.click;
852
+
853
+ if ( sortable._intersectsWith( sortable.containerCache ) ) {
854
+ innermostIntersecting = true;
855
+
856
+ $.each( draggable.sortables, function() {
857
+
858
+ // Copy over variables that sortable's _intersectsWith uses
859
+ this.positionAbs = draggable.positionAbs;
860
+ this.helperProportions = draggable.helperProportions;
861
+ this.offset.click = draggable.offset.click;
862
+
863
+ if ( this !== sortable &&
864
+ this._intersectsWith( this.containerCache ) &&
865
+ $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
866
+ innermostIntersecting = false;
867
+ }
868
+
869
+ return innermostIntersecting;
870
+ } );
871
+ }
872
+
873
+ if ( innermostIntersecting ) {
874
+
875
+ // If it intersects, we use a little isOver variable and set it once,
876
+ // so that the move-in stuff gets fired only once.
877
+ if ( !sortable.isOver ) {
878
+ sortable.isOver = 1;
879
+
880
+ // Store draggable's parent in case we need to reappend to it later.
881
+ draggable._parent = ui.helper.parent();
882
+
883
+ sortable.currentItem = ui.helper
884
+ .appendTo( sortable.element )
885
+ .data( "ui-sortable-item", true );
886
+
887
+ // Store helper option to later restore it
888
+ sortable.options._helper = sortable.options.helper;
889
+
890
+ sortable.options.helper = function() {
891
+ return ui.helper[ 0 ];
892
+ };
893
+
894
+ // Fire the start events of the sortable with our passed browser event,
895
+ // and our own helper (so it doesn't create a new one)
896
+ event.target = sortable.currentItem[ 0 ];
897
+ sortable._mouseCapture( event, true );
898
+ sortable._mouseStart( event, true, true );
899
+
900
+ // Because the browser event is way off the new appended portlet,
901
+ // modify necessary variables to reflect the changes
902
+ sortable.offset.click.top = draggable.offset.click.top;
903
+ sortable.offset.click.left = draggable.offset.click.left;
904
+ sortable.offset.parent.left -= draggable.offset.parent.left -
905
+ sortable.offset.parent.left;
906
+ sortable.offset.parent.top -= draggable.offset.parent.top -
907
+ sortable.offset.parent.top;
908
+
909
+ draggable._trigger( "toSortable", event );
910
+
911
+ // Inform draggable that the helper is in a valid drop zone,
912
+ // used solely in the revert option to handle "valid/invalid".
913
+ draggable.dropped = sortable.element;
914
+
915
+ // Need to refreshPositions of all sortables in the case that
916
+ // adding to one sortable changes the location of the other sortables (#9675)
917
+ $.each( draggable.sortables, function() {
918
+ this.refreshPositions();
919
+ } );
920
+
921
+ // Hack so receive/update callbacks work (mostly)
922
+ draggable.currentItem = draggable.element;
923
+ sortable.fromOutside = draggable;
924
+ }
925
+
926
+ if ( sortable.currentItem ) {
927
+ sortable._mouseDrag( event );
928
+
929
+ // Copy the sortable's position because the draggable's can potentially reflect
930
+ // a relative position, while sortable is always absolute, which the dragged
931
+ // element has now become. (#8809)
932
+ ui.position = sortable.position;
933
+ }
934
+ } else {
935
+
936
+ // If it doesn't intersect with the sortable, and it intersected before,
937
+ // we fake the drag stop of the sortable, but make sure it doesn't remove
938
+ // the helper by using cancelHelperRemoval.
939
+ if ( sortable.isOver ) {
940
+
941
+ sortable.isOver = 0;
942
+ sortable.cancelHelperRemoval = true;
943
+
944
+ // Calling sortable's mouseStop would trigger a revert,
945
+ // so revert must be temporarily false until after mouseStop is called.
946
+ sortable.options._revert = sortable.options.revert;
947
+ sortable.options.revert = false;
948
+
949
+ sortable._trigger( "out", event, sortable._uiHash( sortable ) );
950
+ sortable._mouseStop( event, true );
951
+
952
+ // Restore sortable behaviors that were modfied
953
+ // when the draggable entered the sortable area (#9481)
954
+ sortable.options.revert = sortable.options._revert;
955
+ sortable.options.helper = sortable.options._helper;
956
+
957
+ if ( sortable.placeholder ) {
958
+ sortable.placeholder.remove();
959
+ }
960
+
961
+ // Restore and recalculate the draggable's offset considering the sortable
962
+ // may have modified them in unexpected ways. (#8809, #10669)
963
+ ui.helper.appendTo( draggable._parent );
964
+ draggable._refreshOffsets( event );
965
+ ui.position = draggable._generatePosition( event, true );
966
+
967
+ draggable._trigger( "fromSortable", event );
968
+
969
+ // Inform draggable that the helper is no longer in a valid drop zone
970
+ draggable.dropped = false;
971
+
972
+ // Need to refreshPositions of all sortables just in case removing
973
+ // from one sortable changes the location of other sortables (#9675)
974
+ $.each( draggable.sortables, function() {
975
+ this.refreshPositions();
976
+ } );
977
+ }
978
+ }
979
+ } );
980
+ }
981
+ } );
982
+
983
+ $.ui.plugin.add( "draggable", "cursor", {
984
+ start: function( event, ui, instance ) {
985
+ var t = $( "body" ),
986
+ o = instance.options;
987
+
988
+ if ( t.css( "cursor" ) ) {
989
+ o._cursor = t.css( "cursor" );
990
+ }
991
+ t.css( "cursor", o.cursor );
992
+ },
993
+ stop: function( event, ui, instance ) {
994
+ var o = instance.options;
995
+ if ( o._cursor ) {
996
+ $( "body" ).css( "cursor", o._cursor );
997
+ }
998
+ }
999
+ } );
1000
+
1001
+ $.ui.plugin.add( "draggable", "opacity", {
1002
+ start: function( event, ui, instance ) {
1003
+ var t = $( ui.helper ),
1004
+ o = instance.options;
1005
+ if ( t.css( "opacity" ) ) {
1006
+ o._opacity = t.css( "opacity" );
1007
+ }
1008
+ t.css( "opacity", o.opacity );
1009
+ },
1010
+ stop: function( event, ui, instance ) {
1011
+ var o = instance.options;
1012
+ if ( o._opacity ) {
1013
+ $( ui.helper ).css( "opacity", o._opacity );
1014
+ }
1015
+ }
1016
+ } );
1017
+
1018
+ $.ui.plugin.add( "draggable", "scroll", {
1019
+ start: function( event, ui, i ) {
1020
+ if ( !i.scrollParentNotHidden ) {
1021
+ i.scrollParentNotHidden = i.helper.scrollParent( false );
1022
+ }
1023
+
1024
+ if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&
1025
+ i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
1026
+ i.overflowOffset = i.scrollParentNotHidden.offset();
1027
+ }
1028
+ },
1029
+ drag: function( event, ui, i ) {
1030
+
1031
+ var o = i.options,
1032
+ scrolled = false,
1033
+ scrollParent = i.scrollParentNotHidden[ 0 ],
1034
+ document = i.document[ 0 ];
1035
+
1036
+ if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
1037
+ if ( !o.axis || o.axis !== "x" ) {
1038
+ if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <
1039
+ o.scrollSensitivity ) {
1040
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
1041
+ } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
1042
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
1043
+ }
1044
+ }
1045
+
1046
+ if ( !o.axis || o.axis !== "y" ) {
1047
+ if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <
1048
+ o.scrollSensitivity ) {
1049
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
1050
+ } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
1051
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
1052
+ }
1053
+ }
1054
+
1055
+ } else {
1056
+
1057
+ if ( !o.axis || o.axis !== "x" ) {
1058
+ if ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {
1059
+ scrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );
1060
+ } else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <
1061
+ o.scrollSensitivity ) {
1062
+ scrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );
1063
+ }
1064
+ }
1065
+
1066
+ if ( !o.axis || o.axis !== "y" ) {
1067
+ if ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {
1068
+ scrolled = $( document ).scrollLeft(
1069
+ $( document ).scrollLeft() - o.scrollSpeed
1070
+ );
1071
+ } else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <
1072
+ o.scrollSensitivity ) {
1073
+ scrolled = $( document ).scrollLeft(
1074
+ $( document ).scrollLeft() + o.scrollSpeed
1075
+ );
1076
+ }
1077
+ }
1078
+
1079
+ }
1080
+
1081
+ if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
1082
+ $.ui.ddmanager.prepareOffsets( i, event );
1083
+ }
1084
+
1085
+ }
1086
+ } );
1087
+
1088
+ $.ui.plugin.add( "draggable", "snap", {
1089
+ start: function( event, ui, i ) {
1090
+
1091
+ var o = i.options;
1092
+
1093
+ i.snapElements = [];
1094
+
1095
+ $( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap )
1096
+ .each( function() {
1097
+ var $t = $( this ),
1098
+ $o = $t.offset();
1099
+ if ( this !== i.element[ 0 ] ) {
1100
+ i.snapElements.push( {
1101
+ item: this,
1102
+ width: $t.outerWidth(), height: $t.outerHeight(),
1103
+ top: $o.top, left: $o.left
1104
+ } );
1105
+ }
1106
+ } );
1107
+
1108
+ },
1109
+ drag: function( event, ui, inst ) {
1110
+
1111
+ var ts, bs, ls, rs, l, r, t, b, i, first,
1112
+ o = inst.options,
1113
+ d = o.snapTolerance,
1114
+ x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
1115
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
1116
+
1117
+ for ( i = inst.snapElements.length - 1; i >= 0; i-- ) {
1118
+
1119
+ l = inst.snapElements[ i ].left - inst.margins.left;
1120
+ r = l + inst.snapElements[ i ].width;
1121
+ t = inst.snapElements[ i ].top - inst.margins.top;
1122
+ b = t + inst.snapElements[ i ].height;
1123
+
1124
+ if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||
1125
+ !$.contains( inst.snapElements[ i ].item.ownerDocument,
1126
+ inst.snapElements[ i ].item ) ) {
1127
+ if ( inst.snapElements[ i ].snapping ) {
1128
+ ( inst.options.snap.release &&
1129
+ inst.options.snap.release.call(
1130
+ inst.element,
1131
+ event,
1132
+ $.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )
1133
+ ) );
1134
+ }
1135
+ inst.snapElements[ i ].snapping = false;
1136
+ continue;
1137
+ }
1138
+
1139
+ if ( o.snapMode !== "inner" ) {
1140
+ ts = Math.abs( t - y2 ) <= d;
1141
+ bs = Math.abs( b - y1 ) <= d;
1142
+ ls = Math.abs( l - x2 ) <= d;
1143
+ rs = Math.abs( r - x1 ) <= d;
1144
+ if ( ts ) {
1145
+ ui.position.top = inst._convertPositionTo( "relative", {
1146
+ top: t - inst.helperProportions.height,
1147
+ left: 0
1148
+ } ).top;
1149
+ }
1150
+ if ( bs ) {
1151
+ ui.position.top = inst._convertPositionTo( "relative", {
1152
+ top: b,
1153
+ left: 0
1154
+ } ).top;
1155
+ }
1156
+ if ( ls ) {
1157
+ ui.position.left = inst._convertPositionTo( "relative", {
1158
+ top: 0,
1159
+ left: l - inst.helperProportions.width
1160
+ } ).left;
1161
+ }
1162
+ if ( rs ) {
1163
+ ui.position.left = inst._convertPositionTo( "relative", {
1164
+ top: 0,
1165
+ left: r
1166
+ } ).left;
1167
+ }
1168
+ }
1169
+
1170
+ first = ( ts || bs || ls || rs );
1171
+
1172
+ if ( o.snapMode !== "outer" ) {
1173
+ ts = Math.abs( t - y1 ) <= d;
1174
+ bs = Math.abs( b - y2 ) <= d;
1175
+ ls = Math.abs( l - x1 ) <= d;
1176
+ rs = Math.abs( r - x2 ) <= d;
1177
+ if ( ts ) {
1178
+ ui.position.top = inst._convertPositionTo( "relative", {
1179
+ top: t,
1180
+ left: 0
1181
+ } ).top;
1182
+ }
1183
+ if ( bs ) {
1184
+ ui.position.top = inst._convertPositionTo( "relative", {
1185
+ top: b - inst.helperProportions.height,
1186
+ left: 0
1187
+ } ).top;
1188
+ }
1189
+ if ( ls ) {
1190
+ ui.position.left = inst._convertPositionTo( "relative", {
1191
+ top: 0,
1192
+ left: l
1193
+ } ).left;
1194
+ }
1195
+ if ( rs ) {
1196
+ ui.position.left = inst._convertPositionTo( "relative", {
1197
+ top: 0,
1198
+ left: r - inst.helperProportions.width
1199
+ } ).left;
1200
+ }
1201
+ }
1202
+
1203
+ if ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {
1204
+ ( inst.options.snap.snap &&
1205
+ inst.options.snap.snap.call(
1206
+ inst.element,
1207
+ event,
1208
+ $.extend( inst._uiHash(), {
1209
+ snapItem: inst.snapElements[ i ].item
1210
+ } ) ) );
1211
+ }
1212
+ inst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );
1213
+
1214
+ }
1215
+
1216
+ }
1217
+ } );
1218
+
1219
+ $.ui.plugin.add( "draggable", "stack", {
1220
+ start: function( event, ui, instance ) {
1221
+ var min,
1222
+ o = instance.options,
1223
+ group = $.makeArray( $( o.stack ) ).sort( function( a, b ) {
1224
+ return ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) -
1225
+ ( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 );
1226
+ } );
1227
+
1228
+ if ( !group.length ) { return; }
1229
+
1230
+ min = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0;
1231
+ $( group ).each( function( i ) {
1232
+ $( this ).css( "zIndex", min + i );
1233
+ } );
1234
+ this.css( "zIndex", ( min + group.length ) );
1235
+ }
1236
+ } );
1237
+
1238
+ $.ui.plugin.add( "draggable", "zIndex", {
1239
+ start: function( event, ui, instance ) {
1240
+ var t = $( ui.helper ),
1241
+ o = instance.options;
1242
+
1243
+ if ( t.css( "zIndex" ) ) {
1244
+ o._zIndex = t.css( "zIndex" );
1245
+ }
1246
+ t.css( "zIndex", o.zIndex );
1247
+ },
1248
+ stop: function( event, ui, instance ) {
1249
+ var o = instance.options;
1250
+
1251
+ if ( o._zIndex ) {
1252
+ $( ui.helper ).css( "zIndex", o._zIndex );
1253
+ }
1254
+ }
1255
+ } );
1256
+
1257
+ return $.ui.draggable;
1258
+
1259
+ } ) );