activeadmin-rb 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (614) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +64 -0
  3. data/.github/ISSUE_TEMPLATE.md +20 -0
  4. data/.gitignore +21 -0
  5. data/.mdlrc +1 -0
  6. data/.rubocop.yml +84 -0
  7. data/.simplecov +13 -0
  8. data/.travis.yml +49 -0
  9. data/.yardopts +7 -0
  10. data/CHANGELOG.md +389 -0
  11. data/CODE_OF_CONDUCT.md +22 -0
  12. data/CONTRIBUTING.md +184 -0
  13. data/Gemfile +58 -0
  14. data/LICENSE +20 -0
  15. data/README.md +75 -0
  16. data/Rakefile +54 -0
  17. data/activeadmin-rb.gemspec +32 -0
  18. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  20. data/app/assets/images/active_admin/orderable.png +0 -0
  21. data/app/assets/javascripts/active_admin/base.js.coffee +13 -0
  22. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  23. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  24. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +11 -0
  25. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +14 -0
  26. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +26 -0
  27. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +7 -0
  28. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +42 -0
  29. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +46 -0
  30. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +104 -0
  31. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  32. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  33. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +45 -0
  34. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +46 -0
  35. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +22 -0
  36. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  37. data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
  38. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  39. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  40. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  41. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  42. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  43. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  44. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  45. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  46. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  47. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  48. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  49. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  50. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  51. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  52. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  53. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  54. data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
  55. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  56. data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  57. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
  58. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  59. data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
  60. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  61. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  71. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  72. data/app/assets/stylesheets/active_admin/print.scss +287 -0
  73. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  74. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  75. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
  76. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  77. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  78. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  79. data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  80. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  81. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  82. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  83. data/app/views/active_admin/devise/shared/_links.erb +33 -0
  84. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  85. data/app/views/active_admin/page/index.html.arb +1 -0
  86. data/app/views/active_admin/resource/edit.html.arb +1 -0
  87. data/app/views/active_admin/resource/index.html.arb +1 -0
  88. data/app/views/active_admin/resource/new.html.arb +1 -0
  89. data/app/views/active_admin/resource/show.html.arb +1 -0
  90. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  91. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  92. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  93. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  94. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  95. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  96. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  97. data/app/views/layouts/active_admin.html.arb +1 -0
  98. data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
  99. data/codecov.yml +25 -0
  100. data/config/i18n-tasks.yml +26 -0
  101. data/config/locales/ar.yml +134 -0
  102. data/config/locales/bg.yml +119 -0
  103. data/config/locales/bs.yml +120 -0
  104. data/config/locales/ca.yml +105 -0
  105. data/config/locales/cs.yml +108 -0
  106. data/config/locales/da.yml +136 -0
  107. data/config/locales/de-CH.yml +100 -0
  108. data/config/locales/de.yml +143 -0
  109. data/config/locales/el.yml +125 -0
  110. data/config/locales/en-CA.yml +138 -0
  111. data/config/locales/en-GB.yml +138 -0
  112. data/config/locales/en.yml +161 -0
  113. data/config/locales/eo.yml +144 -0
  114. data/config/locales/es-MX.yml +95 -0
  115. data/config/locales/es.yml +161 -0
  116. data/config/locales/fa.yml +118 -0
  117. data/config/locales/fi.yml +111 -0
  118. data/config/locales/fr.yml +140 -0
  119. data/config/locales/he.yml +141 -0
  120. data/config/locales/hr.yml +122 -0
  121. data/config/locales/hu.yml +97 -0
  122. data/config/locales/id.yml +134 -0
  123. data/config/locales/it.yml +143 -0
  124. data/config/locales/ja.yml +140 -0
  125. data/config/locales/ko.yml +119 -0
  126. data/config/locales/lt.yml +141 -0
  127. data/config/locales/lv.yml +91 -0
  128. data/config/locales/nb.yml +129 -0
  129. data/config/locales/nl.yml +143 -0
  130. data/config/locales/pl.yml +167 -0
  131. data/config/locales/pt-BR.yml +142 -0
  132. data/config/locales/pt-PT.yml +91 -0
  133. data/config/locales/ro.yml +95 -0
  134. data/config/locales/ru.yml +140 -0
  135. data/config/locales/sk.yml +108 -0
  136. data/config/locales/sv-SE.yml +134 -0
  137. data/config/locales/tr.yml +143 -0
  138. data/config/locales/uk.yml +135 -0
  139. data/config/locales/vi.yml +133 -0
  140. data/config/locales/zh-CN.yml +142 -0
  141. data/config/locales/zh-TW.yml +134 -0
  142. data/config/mdl_style.rb +9 -0
  143. data/cucumber.yml +6 -0
  144. data/docs/0-installation.md +118 -0
  145. data/docs/1-general-configuration.md +204 -0
  146. data/docs/10-custom-pages.md +150 -0
  147. data/docs/11-decorators.md +59 -0
  148. data/docs/12-arbre-components.md +203 -0
  149. data/docs/13-authorization-adapter.md +285 -0
  150. data/docs/14-gotchas.md +138 -0
  151. data/docs/2-resource-customization.md +466 -0
  152. data/docs/3-index-pages.md +328 -0
  153. data/docs/3-index-pages/custom-index.md +35 -0
  154. data/docs/3-index-pages/index-as-block.md +19 -0
  155. data/docs/3-index-pages/index-as-blog.md +69 -0
  156. data/docs/3-index-pages/index-as-grid.md +27 -0
  157. data/docs/3-index-pages/index-as-table.md +225 -0
  158. data/docs/4-csv-format.md +74 -0
  159. data/docs/5-forms.md +231 -0
  160. data/docs/6-show-pages.md +81 -0
  161. data/docs/7-sidebars.md +75 -0
  162. data/docs/8-custom-actions.md +177 -0
  163. data/docs/9-batch-actions.md +237 -0
  164. data/docs/CNAME +1 -0
  165. data/docs/Gemfile +2 -0
  166. data/docs/README.md +24 -0
  167. data/docs/_config.yml +2 -0
  168. data/docs/_includes/footer.html +8 -0
  169. data/docs/_includes/google-analytics.html +16 -0
  170. data/docs/_includes/head.html +7 -0
  171. data/docs/_includes/toc.html +98 -0
  172. data/docs/_includes/top-menu.html +9 -0
  173. data/docs/_layouts/default.html +21 -0
  174. data/docs/documentation.md +60 -0
  175. data/docs/images/activeadmin.png +0 -0
  176. data/docs/images/code-header.png +0 -0
  177. data/docs/images/divider.png +0 -0
  178. data/docs/images/features.png +0 -0
  179. data/docs/index.html +125 -0
  180. data/docs/stylesheets/main.css +1152 -0
  181. data/features/action_item.feature +73 -0
  182. data/features/authorization.feature +64 -0
  183. data/features/authorization_cancan.feature +52 -0
  184. data/features/authorization_pundit.feature +37 -0
  185. data/features/belongs_to.feature +124 -0
  186. data/features/breadcrumb.feature +76 -0
  187. data/features/comments/commenting.feature +178 -0
  188. data/features/comments/viewing_index.feature +19 -0
  189. data/features/create_another.feature +55 -0
  190. data/features/dashboard.feature +16 -0
  191. data/features/decorators.feature +43 -0
  192. data/features/development_reloading.feature +28 -0
  193. data/features/edit_page.feature +116 -0
  194. data/features/favicon.feature +20 -0
  195. data/features/first_boot.feature +16 -0
  196. data/features/footer.feature +29 -0
  197. data/features/global_navigation.feature +29 -0
  198. data/features/i18n.feature +55 -0
  199. data/features/index/batch_actions.feature +218 -0
  200. data/features/index/filters.feature +251 -0
  201. data/features/index/format_as_csv.feature +227 -0
  202. data/features/index/formats.feature +88 -0
  203. data/features/index/index_as_block.feature +15 -0
  204. data/features/index/index_as_blog.feature +69 -0
  205. data/features/index/index_as_grid.feature +45 -0
  206. data/features/index/index_as_table.feature +291 -0
  207. data/features/index/index_blank_slate.feature +83 -0
  208. data/features/index/index_parameters.feature +75 -0
  209. data/features/index/index_scope_to.feature +56 -0
  210. data/features/index/index_scopes.feature +325 -0
  211. data/features/index/page_title.feature +41 -0
  212. data/features/index/pagination.feature +63 -0
  213. data/features/index/switch_index_view.feature +73 -0
  214. data/features/menu.feature +85 -0
  215. data/features/meta_tags.feature +21 -0
  216. data/features/new_page.feature +136 -0
  217. data/features/registering_assets.feature +38 -0
  218. data/features/registering_pages.feature +237 -0
  219. data/features/registering_resources.feature +33 -0
  220. data/features/renamed_resource.feature +30 -0
  221. data/features/root_to.feature +18 -0
  222. data/features/show/attributes_table_title.feature +54 -0
  223. data/features/show/columns.feature +40 -0
  224. data/features/show/default_content.feature +44 -0
  225. data/features/show/page_title.feature +58 -0
  226. data/features/show/tabs.feature +33 -0
  227. data/features/sidebar_sections.feature +210 -0
  228. data/features/site_title.feature +47 -0
  229. data/features/specifying_actions.feature +118 -0
  230. data/features/step_definitions/action_item_steps.rb +7 -0
  231. data/features/step_definitions/action_link_steps.rb +19 -0
  232. data/features/step_definitions/additional_web_steps.rb +81 -0
  233. data/features/step_definitions/asset_steps.rb +15 -0
  234. data/features/step_definitions/attribute_steps.rb +18 -0
  235. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  236. data/features/step_definitions/batch_action_steps.rb +81 -0
  237. data/features/step_definitions/blog_steps.rb +3 -0
  238. data/features/step_definitions/breadcrumb_steps.rb +13 -0
  239. data/features/step_definitions/column_steps.rb +8 -0
  240. data/features/step_definitions/comment_steps.rb +32 -0
  241. data/features/step_definitions/configuration_steps.rb +100 -0
  242. data/features/step_definitions/dashboard_steps.rb +15 -0
  243. data/features/step_definitions/factory_steps.rb +35 -0
  244. data/features/step_definitions/filter_steps.rb +57 -0
  245. data/features/step_definitions/flash_steps.rb +11 -0
  246. data/features/step_definitions/footer_steps.rb +21 -0
  247. data/features/step_definitions/format_steps.rb +58 -0
  248. data/features/step_definitions/i18n_steps.rb +11 -0
  249. data/features/step_definitions/index_scope_steps.rb +42 -0
  250. data/features/step_definitions/index_views_steps.rb +3 -0
  251. data/features/step_definitions/layout_steps.rb +3 -0
  252. data/features/step_definitions/member_link_steps.rb +7 -0
  253. data/features/step_definitions/menu_steps.rb +11 -0
  254. data/features/step_definitions/meta_tag_steps.rb +3 -0
  255. data/features/step_definitions/pagination_steps.rb +15 -0
  256. data/features/step_definitions/root_steps.rb +9 -0
  257. data/features/step_definitions/sidebar_steps.rb +11 -0
  258. data/features/step_definitions/site_title_steps.rb +31 -0
  259. data/features/step_definitions/tab_steps.rb +8 -0
  260. data/features/step_definitions/table_steps.rb +116 -0
  261. data/features/step_definitions/user_steps.rb +52 -0
  262. data/features/step_definitions/web_steps.rb +86 -0
  263. data/features/sti_resource.feature +65 -0
  264. data/features/strong_parameters.feature +69 -0
  265. data/features/support/env.rb +121 -0
  266. data/features/support/paths.rb +73 -0
  267. data/features/support/regular_env.rb +7 -0
  268. data/features/support/reload_env.rb +7 -0
  269. data/features/support/selectors.rb +45 -0
  270. data/features/users/logging_in.feature +32 -0
  271. data/features/users/logging_out.feature +29 -0
  272. data/features/users/resetting_password.feature +30 -0
  273. data/gemfiles/rails_42.gemfile +11 -0
  274. data/gemfiles/rails_50.gemfile +11 -0
  275. data/gemfiles/rails_51.gemfile +11 -0
  276. data/gemfiles/rails_52.gemfile +12 -0
  277. data/lib/active_admin.rb +128 -0
  278. data/lib/active_admin/abstract_view_factory.rb +47 -0
  279. data/lib/active_admin/application.rb +241 -0
  280. data/lib/active_admin/application_settings.rb +39 -0
  281. data/lib/active_admin/asset_registration.rb +37 -0
  282. data/lib/active_admin/authorization_adapter.rb +129 -0
  283. data/lib/active_admin/base_controller.rb +81 -0
  284. data/lib/active_admin/base_controller/authorization.rb +128 -0
  285. data/lib/active_admin/base_controller/menu.rb +34 -0
  286. data/lib/active_admin/batch_actions.rb +16 -0
  287. data/lib/active_admin/batch_actions/controller.rb +40 -0
  288. data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
  289. data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
  290. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
  291. data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
  292. data/lib/active_admin/callbacks.rb +88 -0
  293. data/lib/active_admin/cancan_adapter.rb +36 -0
  294. data/lib/active_admin/component.rb +5 -0
  295. data/lib/active_admin/controller_action.rb +12 -0
  296. data/lib/active_admin/csv_builder.rb +131 -0
  297. data/lib/active_admin/dependency.rb +172 -0
  298. data/lib/active_admin/deprecation.rb +10 -0
  299. data/lib/active_admin/devise.rb +80 -0
  300. data/lib/active_admin/dsl.rb +167 -0
  301. data/lib/active_admin/dynamic_setting.rb +38 -0
  302. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  303. data/lib/active_admin/engine.rb +21 -0
  304. data/lib/active_admin/error.rb +62 -0
  305. data/lib/active_admin/event.rb +24 -0
  306. data/lib/active_admin/filters.rb +11 -0
  307. data/lib/active_admin/filters/active.rb +29 -0
  308. data/lib/active_admin/filters/active_filter.rb +123 -0
  309. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  310. data/lib/active_admin/filters/dsl.rb +21 -0
  311. data/lib/active_admin/filters/forms.rb +85 -0
  312. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  313. data/lib/active_admin/filters/resource_extension.rb +155 -0
  314. data/lib/active_admin/form_builder.rb +182 -0
  315. data/lib/active_admin/generators/boilerplate.rb +45 -0
  316. data/lib/active_admin/helpers/collection.rb +19 -0
  317. data/lib/active_admin/helpers/i18n.rb +7 -0
  318. data/lib/active_admin/helpers/optional_display.rb +38 -0
  319. data/lib/active_admin/helpers/output_safety_helper.rb +35 -0
  320. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  321. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  322. data/lib/active_admin/inputs.rb +21 -0
  323. data/lib/active_admin/inputs/datepicker_input.rb +27 -0
  324. data/lib/active_admin/inputs/filters/base.rb +44 -0
  325. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  326. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  327. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  328. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  329. data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
  330. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  331. data/lib/active_admin/inputs/filters/select_input.rb +58 -0
  332. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  333. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  334. data/lib/active_admin/localizers.rb +11 -0
  335. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  336. data/lib/active_admin/menu.rb +102 -0
  337. data/lib/active_admin/menu_collection.rb +91 -0
  338. data/lib/active_admin/menu_item.rb +69 -0
  339. data/lib/active_admin/namespace.rb +266 -0
  340. data/lib/active_admin/namespace_settings.rb +107 -0
  341. data/lib/active_admin/order_clause.rb +48 -0
  342. data/lib/active_admin/orm/active_record.rb +5 -0
  343. data/lib/active_admin/orm/active_record/comments.rb +101 -0
  344. data/lib/active_admin/orm/active_record/comments/comment.rb +31 -0
  345. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  346. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  347. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  348. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  349. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
  350. data/lib/active_admin/orm/mongoid.rb +1 -0
  351. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  352. data/lib/active_admin/page.rb +111 -0
  353. data/lib/active_admin/page_controller.rb +29 -0
  354. data/lib/active_admin/page_dsl.rb +32 -0
  355. data/lib/active_admin/page_presenter.rb +32 -0
  356. data/lib/active_admin/pundit_adapter.rb +68 -0
  357. data/lib/active_admin/reloader.rb +25 -0
  358. data/lib/active_admin/resource.rb +206 -0
  359. data/lib/active_admin/resource/action_items.rb +120 -0
  360. data/lib/active_admin/resource/attributes.rb +44 -0
  361. data/lib/active_admin/resource/belongs_to.rb +48 -0
  362. data/lib/active_admin/resource/controllers.rb +19 -0
  363. data/lib/active_admin/resource/includes.rb +12 -0
  364. data/lib/active_admin/resource/menu.rb +67 -0
  365. data/lib/active_admin/resource/naming.rb +62 -0
  366. data/lib/active_admin/resource/ordering.rb +11 -0
  367. data/lib/active_admin/resource/page_presenters.rb +82 -0
  368. data/lib/active_admin/resource/pagination.rb +23 -0
  369. data/lib/active_admin/resource/routes.rb +134 -0
  370. data/lib/active_admin/resource/scope_to.rb +74 -0
  371. data/lib/active_admin/resource/scopes.rb +52 -0
  372. data/lib/active_admin/resource/sidebars.rb +28 -0
  373. data/lib/active_admin/resource_collection.rb +72 -0
  374. data/lib/active_admin/resource_controller.rb +64 -0
  375. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  376. data/lib/active_admin/resource_controller/data_access.rb +322 -0
  377. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  378. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  379. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  380. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  381. data/lib/active_admin/resource_controller/streaming.rb +43 -0
  382. data/lib/active_admin/resource_dsl.rb +222 -0
  383. data/lib/active_admin/router.rb +113 -0
  384. data/lib/active_admin/scope.rb +60 -0
  385. data/lib/active_admin/settings_node.rb +19 -0
  386. data/lib/active_admin/sidebar_section.rb +37 -0
  387. data/lib/active_admin/version.rb +3 -0
  388. data/lib/active_admin/view_factory.rb +27 -0
  389. data/lib/active_admin/view_helpers.rb +20 -0
  390. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  391. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  392. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
  393. data/lib/active_admin/view_helpers/display_helper.rb +95 -0
  394. data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
  395. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  396. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  397. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  398. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
  399. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  400. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  401. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  402. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  403. data/lib/active_admin/views.rb +8 -0
  404. data/lib/active_admin/views/action_items.rb +17 -0
  405. data/lib/active_admin/views/components/active_admin_form.rb +149 -0
  406. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  407. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  408. data/lib/active_admin/views/components/columns.rb +161 -0
  409. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  410. data/lib/active_admin/views/components/index_list.rb +69 -0
  411. data/lib/active_admin/views/components/menu.rb +32 -0
  412. data/lib/active_admin/views/components/menu_item.rb +58 -0
  413. data/lib/active_admin/views/components/paginated_collection.rb +159 -0
  414. data/lib/active_admin/views/components/panel.rb +38 -0
  415. data/lib/active_admin/views/components/scopes.rb +72 -0
  416. data/lib/active_admin/views/components/sidebar.rb +13 -0
  417. data/lib/active_admin/views/components/sidebar_section.rb +37 -0
  418. data/lib/active_admin/views/components/site_title.rb +54 -0
  419. data/lib/active_admin/views/components/status_tag.rb +88 -0
  420. data/lib/active_admin/views/components/table_for.rb +209 -0
  421. data/lib/active_admin/views/components/tabs.rb +31 -0
  422. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  423. data/lib/active_admin/views/footer.rb +30 -0
  424. data/lib/active_admin/views/header.rb +19 -0
  425. data/lib/active_admin/views/index_as_block.rb +36 -0
  426. data/lib/active_admin/views/index_as_blog.rb +155 -0
  427. data/lib/active_admin/views/index_as_grid.rb +80 -0
  428. data/lib/active_admin/views/index_as_table.rb +389 -0
  429. data/lib/active_admin/views/pages/base.rb +123 -0
  430. data/lib/active_admin/views/pages/form.rb +64 -0
  431. data/lib/active_admin/views/pages/index.rb +163 -0
  432. data/lib/active_admin/views/pages/layout.rb +26 -0
  433. data/lib/active_admin/views/pages/page.rb +30 -0
  434. data/lib/active_admin/views/pages/show.rb +65 -0
  435. data/lib/active_admin/views/tabbed_navigation.rb +11 -0
  436. data/lib/active_admin/views/title_bar.rb +55 -0
  437. data/lib/activeadmin-rb.rb +1 -0
  438. data/lib/bug_report_templates/active_admin_master.rb +112 -0
  439. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  440. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  441. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  442. data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
  443. data/lib/generators/active_admin/install/install_generator.rb +45 -0
  444. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +293 -0
  445. data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  446. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  447. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +30 -0
  448. data/lib/generators/active_admin/page/USAGE +8 -0
  449. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  450. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  451. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  452. data/lib/generators/active_admin/resource/templates/admin.rb.erb +43 -0
  453. data/lib/ransack_ext.rb +20 -0
  454. data/spec/bug_report_templates_spec.rb +26 -0
  455. data/spec/changelog_spec.rb +15 -0
  456. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  457. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  458. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  459. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  460. data/spec/javascripts/fixtures/flashes.html +2 -0
  461. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  462. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  463. data/spec/javascripts/support/jasmine.yml +74 -0
  464. data/spec/javascripts/support/jasmine_runner.rb +19 -0
  465. data/spec/rails_helper.rb +60 -0
  466. data/spec/requests/default_namespace_spec.rb +81 -0
  467. data/spec/requests/memory_spec.rb +25 -0
  468. data/spec/requests/stylesheets_spec.rb +18 -0
  469. data/spec/spec_helper.rb +1 -0
  470. data/spec/support/active_admin_integration_spec_helper.rb +73 -0
  471. data/spec/support/active_admin_request_helpers.rb +39 -0
  472. data/spec/support/rails_template.rb +156 -0
  473. data/spec/support/rails_template_with_data.rb +327 -0
  474. data/spec/support/templates/admin/stores.rb +7 -0
  475. data/spec/support/templates/en.yml +8 -0
  476. data/spec/support/templates/manifest.js +3 -0
  477. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  478. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  479. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  480. data/spec/support/templates/policies/application_policy.rb +44 -0
  481. data/spec/support/templates/policies/category_policy.rb +7 -0
  482. data/spec/support/templates/policies/post_policy.rb +15 -0
  483. data/spec/support/templates/policies/store_policy.rb +11 -0
  484. data/spec/support/templates/policies/user_policy.rb +11 -0
  485. data/spec/support/templates/post_decorator.rb +24 -0
  486. data/spec/unit/abstract_view_factory_spec.rb +78 -0
  487. data/spec/unit/action_builder_spec.rb +158 -0
  488. data/spec/unit/active_admin_spec.rb +11 -0
  489. data/spec/unit/application_spec.rb +180 -0
  490. data/spec/unit/asset_registration_spec.rb +81 -0
  491. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  492. data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
  493. data/spec/unit/authorization/index_overriding_spec.rb +23 -0
  494. data/spec/unit/auto_link_spec.rb +93 -0
  495. data/spec/unit/batch_actions/resource_spec.rb +84 -0
  496. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  497. data/spec/unit/belongs_to_spec.rb +76 -0
  498. data/spec/unit/cancan_adapter_spec.rb +43 -0
  499. data/spec/unit/comments_spec.rb +189 -0
  500. data/spec/unit/component_spec.rb +18 -0
  501. data/spec/unit/config_shared_examples.rb +59 -0
  502. data/spec/unit/controller_filters_spec.rb +41 -0
  503. data/spec/unit/csv_builder_spec.rb +313 -0
  504. data/spec/unit/dependency_spec.rb +135 -0
  505. data/spec/unit/devise_spec.rb +110 -0
  506. data/spec/unit/dsl_spec.rb +120 -0
  507. data/spec/unit/dynamic_settings_spec.rb +28 -0
  508. data/spec/unit/filters/active_filter_spec.rb +218 -0
  509. data/spec/unit/filters/active_spec.rb +24 -0
  510. data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
  511. data/spec/unit/filters/resource_spec.rb +128 -0
  512. data/spec/unit/form_builder_spec.rb +1012 -0
  513. data/spec/unit/generators/install_spec.rb +31 -0
  514. data/spec/unit/helpers/collection_spec.rb +68 -0
  515. data/spec/unit/helpers/output_safety_helper_spec.rb +79 -0
  516. data/spec/unit/helpers/scope_chain_spec.rb +35 -0
  517. data/spec/unit/i18n_spec.rb +29 -0
  518. data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
  519. data/spec/unit/menu_collection_spec.rb +62 -0
  520. data/spec/unit/menu_item_spec.rb +82 -0
  521. data/spec/unit/menu_spec.rb +60 -0
  522. data/spec/unit/namespace/authorization_spec.rb +27 -0
  523. data/spec/unit/namespace/register_page_spec.rb +99 -0
  524. data/spec/unit/namespace/register_resource_spec.rb +162 -0
  525. data/spec/unit/namespace_spec.rb +126 -0
  526. data/spec/unit/order_clause_spec.rb +81 -0
  527. data/spec/unit/page_controller_spec.rb +5 -0
  528. data/spec/unit/page_spec.rb +128 -0
  529. data/spec/unit/pretty_format_spec.rb +82 -0
  530. data/spec/unit/pundit_adapter_spec.rb +98 -0
  531. data/spec/unit/resource/action_items_spec.rb +83 -0
  532. data/spec/unit/resource/attributes_spec.rb +49 -0
  533. data/spec/unit/resource/includes_spec.rb +21 -0
  534. data/spec/unit/resource/menu_spec.rb +18 -0
  535. data/spec/unit/resource/naming_spec.rb +120 -0
  536. data/spec/unit/resource/ordering_spec.rb +35 -0
  537. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  538. data/spec/unit/resource/pagination_spec.rb +38 -0
  539. data/spec/unit/resource/routes_spec.rb +125 -0
  540. data/spec/unit/resource/scopes_spec.rb +50 -0
  541. data/spec/unit/resource/sidebars_spec.rb +43 -0
  542. data/spec/unit/resource_collection_spec.rb +175 -0
  543. data/spec/unit/resource_controller/data_access_spec.rb +234 -0
  544. data/spec/unit/resource_controller/decorators_spec.rb +94 -0
  545. data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
  546. data/spec/unit/resource_controller_spec.rb +273 -0
  547. data/spec/unit/resource_registration_spec.rb +61 -0
  548. data/spec/unit/resource_spec.rb +320 -0
  549. data/spec/unit/routing_spec.rb +211 -0
  550. data/spec/unit/scope_spec.rb +225 -0
  551. data/spec/unit/settings_node_spec.rb +26 -0
  552. data/spec/unit/view_factory_spec.rb +19 -0
  553. data/spec/unit/view_helpers/breadcrumbs_spec.rb +253 -0
  554. data/spec/unit/view_helpers/display_helper_spec.rb +203 -0
  555. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  556. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  557. data/spec/unit/view_helpers/flash_helper_spec.rb +24 -0
  558. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  559. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
  560. data/spec/unit/views/components/attributes_table_spec.rb +271 -0
  561. data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
  562. data/spec/unit/views/components/blank_slate_spec.rb +27 -0
  563. data/spec/unit/views/components/columns_spec.rb +187 -0
  564. data/spec/unit/views/components/index_list_spec.rb +49 -0
  565. data/spec/unit/views/components/index_table_for_spec.rb +127 -0
  566. data/spec/unit/views/components/menu_item_spec.rb +29 -0
  567. data/spec/unit/views/components/menu_spec.rb +168 -0
  568. data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
  569. data/spec/unit/views/components/panel_spec.rb +58 -0
  570. data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
  571. data/spec/unit/views/components/sidebar_spec.rb +24 -0
  572. data/spec/unit/views/components/site_title_spec.rb +82 -0
  573. data/spec/unit/views/components/status_tag_spec.rb +265 -0
  574. data/spec/unit/views/components/table_for_spec.rb +441 -0
  575. data/spec/unit/views/components/tabs_spec.rb +71 -0
  576. data/spec/unit/views/components/unsupported_browser_spec.rb +39 -0
  577. data/spec/unit/views/index_as_blog_spec.rb +76 -0
  578. data/spec/unit/views/pages/base_spec.rb +14 -0
  579. data/spec/unit/views/pages/form_spec.rb +54 -0
  580. data/spec/unit/views/pages/index_spec.rb +60 -0
  581. data/spec/unit/views/pages/layout_spec.rb +59 -0
  582. data/spec/unit/views/pages/show_spec.rb +32 -0
  583. data/tasks/docs.rake +64 -0
  584. data/tasks/lint.rake +21 -0
  585. data/tasks/local.rake +25 -0
  586. data/tasks/parallel_tests.rake +66 -0
  587. data/tasks/test.rake +24 -0
  588. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  589. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  590. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  591. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  592. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  593. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  594. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  595. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  596. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  597. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  598. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  599. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  600. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  601. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  602. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  603. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  604. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +300 -0
  605. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  606. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  607. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  608. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  609. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  610. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  611. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  612. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  613. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  614. metadata +1037 -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
+ } ) );