activeadmin 1.0.0 → 2.13.1

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 (618) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +851 -68
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +80 -82
  5. data/README.md +73 -19
  6. data/app/assets/javascripts/active_admin/base.js +524 -0
  7. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  8. data/app/assets/stylesheets/active_admin/_forms.scss +7 -35
  9. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  10. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  11. data/app/assets/stylesheets/active_admin/_normalize.scss +349 -0
  12. data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +3 -4
  13. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
  14. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  15. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  16. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
  17. data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
  18. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  19. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -4
  20. data/app/assets/stylesheets/active_admin/components/_tables.scss +5 -3
  21. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  22. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -10
  23. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +17 -0
  25. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  26. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  27. data/app/javascript/active_admin/base.js +28 -0
  28. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  29. data/app/javascript/active_admin/ext/jquery.js +9 -0
  30. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  31. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  32. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  33. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  34. data/app/javascript/active_admin/initializers/filters.js +10 -0
  35. data/app/javascript/active_admin/initializers/has-many.js +98 -0
  36. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  37. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  38. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  39. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  40. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  41. data/app/javascript/active_admin/lib/filters.js +39 -0
  42. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  43. data/app/javascript/active_admin/lib/per-page.js +38 -0
  44. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  45. data/app/javascript/active_admin/lib/utils.js +40 -0
  46. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  47. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  48. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  49. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  50. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  51. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  52. data/app/views/active_admin/devise/sessions/new.html.erb +2 -2
  53. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  54. data/app/views/active_admin/devise/shared/_links.erb +12 -6
  55. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  56. data/app/views/active_admin/page/index.html.arb +1 -0
  57. data/app/views/active_admin/resource/edit.html.arb +1 -0
  58. data/app/views/active_admin/resource/index.html.arb +1 -0
  59. data/app/views/active_admin/resource/new.html.arb +1 -0
  60. data/app/views/active_admin/resource/show.html.arb +1 -0
  61. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  62. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  63. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  64. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  65. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  66. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  67. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  68. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  69. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  70. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  71. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  72. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  73. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  74. data/app/views/layouts/active_admin.html.arb +1 -0
  75. data/app/views/layouts/active_admin_logged_out.html.erb +17 -7
  76. data/config/locales/ar.yml +10 -11
  77. data/config/locales/az.yml +138 -0
  78. data/config/locales/bg.yml +1 -3
  79. data/config/locales/bs.yml +1 -2
  80. data/config/locales/ca.yml +1 -3
  81. data/config/locales/cs.yml +1 -2
  82. data/config/locales/da.yml +2 -3
  83. data/config/locales/de-CH.yml +2 -3
  84. data/config/locales/de.yml +30 -3
  85. data/config/locales/el.yml +2 -3
  86. data/config/locales/en-CA.yml +139 -0
  87. data/config/locales/en-GB.yml +46 -5
  88. data/config/locales/en.yml +32 -8
  89. data/config/locales/eo.yml +145 -0
  90. data/config/locales/es-MX.yml +6 -3
  91. data/config/locales/es.yml +36 -10
  92. data/config/locales/fa.yml +1 -2
  93. data/config/locales/fi.yml +2 -3
  94. data/config/locales/fr.yml +15 -7
  95. data/config/locales/he.yml +53 -7
  96. data/config/locales/hr.yml +1 -2
  97. data/config/locales/hu.yml +5 -2
  98. data/config/locales/id.yml +2 -3
  99. data/config/locales/it.yml +33 -7
  100. data/config/locales/ja.yml +9 -5
  101. data/config/locales/ko.yml +2 -3
  102. data/config/locales/lt.yml +27 -6
  103. data/config/locales/lv.yml +3 -4
  104. data/config/locales/mk.yml +134 -0
  105. data/config/locales/nb.yml +16 -7
  106. data/config/locales/nl.yml +14 -4
  107. data/config/locales/pl.yml +75 -5
  108. data/config/locales/pt-BR.yml +10 -3
  109. data/config/locales/pt-PT.yml +1 -2
  110. data/config/locales/ro.yml +4 -4
  111. data/config/locales/ru.yml +4 -3
  112. data/config/locales/sk.yml +60 -2
  113. data/config/locales/sv-SE.yml +4 -3
  114. data/config/locales/tr.yml +10 -2
  115. data/config/locales/uk.yml +4 -3
  116. data/config/locales/vi.yml +53 -12
  117. data/config/locales/zh-CN.yml +34 -7
  118. data/config/locales/zh-TW.yml +2 -3
  119. data/docs/.gitignore +1 -0
  120. data/docs/0-installation.md +42 -15
  121. data/docs/1-general-configuration.md +46 -4
  122. data/docs/10-custom-pages.md +24 -5
  123. data/docs/11-decorators.md +17 -5
  124. data/docs/12-arbre-components.md +47 -9
  125. data/docs/13-authorization-adapter.md +69 -35
  126. data/docs/14-gotchas.md +41 -22
  127. data/docs/2-resource-customization.md +57 -20
  128. data/docs/3-index-pages/custom-index.md +2 -1
  129. data/docs/3-index-pages/index-as-block.md +0 -5
  130. data/docs/3-index-pages/index-as-blog.md +1 -6
  131. data/docs/3-index-pages/index-as-grid.md +0 -5
  132. data/docs/3-index-pages/index-as-table.md +13 -14
  133. data/docs/3-index-pages.md +47 -12
  134. data/docs/4-csv-format.md +2 -1
  135. data/docs/5-forms.md +68 -24
  136. data/docs/6-show-pages.md +14 -1
  137. data/docs/7-sidebars.md +2 -1
  138. data/docs/8-custom-actions.md +16 -2
  139. data/docs/9-batch-actions.md +5 -3
  140. data/docs/CNAME +1 -1
  141. data/docs/Gemfile +4 -2
  142. data/docs/Gemfile.lock +283 -0
  143. data/docs/_config.yml +3 -1
  144. data/docs/_includes/toc.html +1 -1
  145. data/docs/_includes/top-menu.html +9 -1
  146. data/docs/documentation.md +21 -23
  147. data/docs/images/tidelift.svg +14 -0
  148. data/docs/index.html +110 -9
  149. data/docs/stylesheets/main.css +55 -2
  150. data/lib/active_admin/abstract_view_factory.rb +14 -51
  151. data/lib/active_admin/application.rb +65 -170
  152. data/lib/active_admin/application_settings.rb +43 -0
  153. data/lib/active_admin/asset_registration.rb +1 -0
  154. data/lib/active_admin/authorization_adapter.rb +4 -6
  155. data/lib/active_admin/base_controller/authorization.rb +18 -19
  156. data/lib/active_admin/base_controller/menu.rb +10 -9
  157. data/lib/active_admin/base_controller.rb +12 -12
  158. data/lib/active_admin/batch_actions/controller.rb +6 -5
  159. data/lib/active_admin/batch_actions/resource_extension.rb +16 -10
  160. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  161. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  162. data/lib/active_admin/batch_actions/views/selection_cells.rb +8 -6
  163. data/lib/active_admin/batch_actions.rb +1 -0
  164. data/lib/active_admin/callbacks.rb +2 -1
  165. data/lib/active_admin/cancan_adapter.rb +2 -1
  166. data/lib/active_admin/collection_decorator.rb +32 -0
  167. data/lib/active_admin/component.rb +1 -0
  168. data/lib/active_admin/controller_action.rb +3 -1
  169. data/lib/active_admin/csv_builder.rb +17 -23
  170. data/lib/active_admin/dependency.rb +15 -78
  171. data/lib/active_admin/deprecation.rb +1 -25
  172. data/lib/active_admin/devise.rb +18 -7
  173. data/lib/active_admin/dsl.rb +5 -11
  174. data/lib/active_admin/dynamic_setting.rb +39 -0
  175. data/lib/active_admin/dynamic_settings_node.rb +29 -0
  176. data/lib/active_admin/engine.rb +16 -7
  177. data/lib/active_admin/error.rb +5 -4
  178. data/lib/active_admin/filters/active.rb +14 -14
  179. data/lib/active_admin/filters/active_filter.rb +124 -0
  180. data/lib/active_admin/filters/active_sidebar.rb +28 -0
  181. data/lib/active_admin/filters/dsl.rb +1 -0
  182. data/lib/active_admin/filters/forms.rb +12 -9
  183. data/lib/active_admin/filters/formtastic_addons.rb +3 -7
  184. data/lib/active_admin/filters/resource_extension.rb +32 -35
  185. data/lib/active_admin/filters.rb +8 -5
  186. data/lib/active_admin/form_builder.rb +110 -70
  187. data/lib/active_admin/generators/boilerplate.rb +13 -4
  188. data/lib/active_admin/helpers/collection.rb +2 -0
  189. data/lib/active_admin/helpers/i18n.rb +1 -0
  190. data/lib/active_admin/helpers/optional_display.rb +3 -2
  191. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  192. data/lib/active_admin/helpers/scope_chain.rb +2 -0
  193. data/lib/active_admin/inputs/datepicker_input.rb +14 -6
  194. data/lib/active_admin/inputs/filters/base/search_method_select.rb +7 -6
  195. data/lib/active_admin/inputs/filters/base.rb +2 -1
  196. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  197. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  198. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  199. data/lib/active_admin/inputs/filters/date_range_input.rb +24 -12
  200. data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
  201. data/lib/active_admin/inputs/filters/select_input.rb +8 -3
  202. data/lib/active_admin/inputs/filters/string_input.rb +1 -0
  203. data/lib/active_admin/inputs/filters/text_input.rb +1 -1
  204. data/lib/active_admin/inputs.rb +1 -0
  205. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  206. data/lib/active_admin/localizers.rb +2 -1
  207. data/lib/active_admin/menu.rb +13 -15
  208. data/lib/active_admin/menu_collection.rb +1 -2
  209. data/lib/active_admin/menu_item.rb +11 -38
  210. data/lib/active_admin/namespace.rb +34 -21
  211. data/lib/active_admin/namespace_settings.rb +127 -0
  212. data/lib/active_admin/order_clause.rb +4 -3
  213. data/lib/active_admin/orm/active_record/comments/comment.rb +6 -9
  214. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  215. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  216. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  217. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +37 -24
  218. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  219. data/lib/active_admin/orm/active_record/comments.rb +35 -23
  220. data/lib/active_admin/orm/active_record.rb +2 -1
  221. data/lib/active_admin/orm/mongoid.rb +1 -0
  222. data/lib/active_admin/page.rb +2 -1
  223. data/lib/active_admin/page_controller.rb +2 -1
  224. data/lib/active_admin/page_dsl.rb +2 -1
  225. data/lib/active_admin/page_presenter.rb +3 -1
  226. data/lib/active_admin/pundit_adapter.rb +73 -16
  227. data/lib/active_admin/resource/action_items.rb +16 -6
  228. data/lib/active_admin/resource/attributes.rb +10 -6
  229. data/lib/active_admin/resource/belongs_to.rb +9 -3
  230. data/lib/active_admin/resource/controllers.rb +2 -1
  231. data/lib/active_admin/resource/includes.rb +1 -0
  232. data/lib/active_admin/resource/menu.rb +6 -5
  233. data/lib/active_admin/resource/model.rb +16 -0
  234. data/lib/active_admin/resource/naming.rb +6 -5
  235. data/lib/active_admin/resource/ordering.rb +1 -0
  236. data/lib/active_admin/resource/page_presenters.rb +2 -1
  237. data/lib/active_admin/resource/pagination.rb +1 -0
  238. data/lib/active_admin/resource/routes.rb +26 -15
  239. data/lib/active_admin/resource/scope_to.rb +8 -7
  240. data/lib/active_admin/resource/scopes.rb +5 -3
  241. data/lib/active_admin/resource/sidebars.rb +3 -2
  242. data/lib/active_admin/resource.rb +37 -22
  243. data/lib/active_admin/resource_collection.rb +3 -2
  244. data/lib/active_admin/resource_controller/action_builder.rb +11 -0
  245. data/lib/active_admin/resource_controller/data_access.rb +43 -14
  246. data/lib/active_admin/resource_controller/decorators.rb +10 -31
  247. data/lib/active_admin/resource_controller/polymorphic_routes.rb +38 -0
  248. data/lib/active_admin/resource_controller/resource_class_methods.rb +3 -0
  249. data/lib/active_admin/resource_controller/scoping.rb +2 -1
  250. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  251. data/lib/active_admin/resource_controller/streaming.rb +9 -7
  252. data/lib/active_admin/resource_controller.rb +15 -11
  253. data/lib/active_admin/resource_dsl.rb +18 -28
  254. data/lib/active_admin/router.rb +91 -84
  255. data/lib/active_admin/scope.rb +22 -13
  256. data/lib/active_admin/settings_node.rb +20 -0
  257. data/lib/active_admin/sidebar_section.rb +4 -1
  258. data/lib/active_admin/version.rb +2 -1
  259. data/lib/active_admin/view_factory.rb +18 -17
  260. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  261. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -0
  262. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +6 -5
  263. data/lib/active_admin/view_helpers/display_helper.rb +26 -9
  264. data/lib/active_admin/view_helpers/download_format_links_helper.rb +3 -1
  265. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  266. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  267. data/lib/active_admin/view_helpers/form_helper.rb +2 -1
  268. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +4 -0
  269. data/lib/active_admin/view_helpers/scope_name_helper.rb +17 -0
  270. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  271. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  272. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  273. data/lib/active_admin/view_helpers.rb +3 -1
  274. data/lib/active_admin/views/action_items.rb +2 -1
  275. data/lib/active_admin/views/components/active_admin_form.rb +15 -9
  276. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  277. data/lib/active_admin/views/components/attributes_table.rb +9 -8
  278. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  279. data/lib/active_admin/views/components/columns.rb +1 -0
  280. data/lib/active_admin/views/components/dropdown_menu.rb +9 -11
  281. data/lib/active_admin/views/components/index_list.rb +4 -5
  282. data/lib/active_admin/views/components/menu.rb +33 -0
  283. data/lib/active_admin/views/components/menu_item.rb +59 -0
  284. data/lib/active_admin/views/components/paginated_collection.rb +22 -20
  285. data/lib/active_admin/views/components/panel.rb +2 -1
  286. data/lib/active_admin/views/components/scopes.rb +19 -17
  287. data/lib/active_admin/views/components/sidebar.rb +14 -0
  288. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  289. data/lib/active_admin/views/components/site_title.rb +7 -7
  290. data/lib/active_admin/views/components/status_tag.rb +19 -23
  291. data/lib/active_admin/views/components/table_for.rb +22 -29
  292. data/lib/active_admin/views/components/tabs.rb +18 -5
  293. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  294. data/lib/active_admin/views/footer.rb +6 -8
  295. data/lib/active_admin/views/header.rb +4 -16
  296. data/lib/active_admin/views/index_as_block.rb +1 -0
  297. data/lib/active_admin/views/index_as_blog.rb +4 -4
  298. data/lib/active_admin/views/index_as_grid.rb +27 -26
  299. data/lib/active_admin/views/index_as_table.rb +53 -26
  300. data/lib/active_admin/views/pages/base.rb +47 -63
  301. data/lib/active_admin/views/pages/form.rb +1 -0
  302. data/lib/active_admin/views/pages/index.rb +16 -13
  303. data/lib/active_admin/views/pages/layout.rb +1 -0
  304. data/lib/active_admin/views/pages/page.rb +1 -0
  305. data/lib/active_admin/views/pages/show.rb +7 -1
  306. data/lib/active_admin/views/tabbed_navigation.rb +5 -59
  307. data/lib/active_admin/views/title_bar.rb +6 -5
  308. data/lib/active_admin/views.rb +2 -1
  309. data/lib/active_admin.rb +70 -68
  310. data/lib/activeadmin.rb +2 -1
  311. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  312. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  313. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  314. data/lib/generators/active_admin/devise/devise_generator.rb +7 -6
  315. data/lib/generators/active_admin/install/install_generator.rb +19 -8
  316. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +45 -3
  317. data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +1 -1
  318. data/lib/generators/active_admin/install/templates/dashboard.rb +3 -3
  319. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  320. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  321. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  322. data/lib/generators/active_admin/resource/resource_generator.rb +5 -4
  323. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  324. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  325. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  326. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  327. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  328. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  329. data/lib/ransack_ext.rb +10 -9
  330. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  331. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  332. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  333. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  334. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  335. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  336. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  337. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  338. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  339. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  340. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  341. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  342. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  343. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  344. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  345. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  346. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  347. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  348. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  349. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +291 -0
  350. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  351. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  352. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  353. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  354. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  355. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  356. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  357. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  358. metadata +158 -580
  359. data/.gitignore +0 -49
  360. data/.hound.yml +0 -14
  361. data/.rubocop.yml +0 -27
  362. data/.travis.yml +0 -66
  363. data/.yardopts +0 -8
  364. data/Appraisals +0 -41
  365. data/Gemfile +0 -49
  366. data/Rakefile +0 -65
  367. data/activeadmin.gemspec +0 -34
  368. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  369. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  370. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  371. data/app/assets/images/active_admin/orderable.png +0 -0
  372. data/app/assets/javascripts/active_admin/base.js.coffee +0 -9
  373. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  374. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  375. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -7
  376. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -10
  377. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -22
  378. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -3
  379. data/app/assets/javascripts/active_admin/jquery_ui.js.erb +0 -18
  380. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -39
  381. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -44
  382. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -101
  383. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  384. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  385. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  386. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -42
  387. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -24
  388. data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
  389. data/codecov.yml +0 -23
  390. data/cucumber.yml +0 -3
  391. data/features/action_item.feature +0 -73
  392. data/features/authorization.feature +0 -64
  393. data/features/authorization_cancan.feature +0 -52
  394. data/features/authorization_pundit.feature +0 -37
  395. data/features/belongs_to.feature +0 -124
  396. data/features/breadcrumb.feature +0 -75
  397. data/features/comments/commenting.feature +0 -158
  398. data/features/comments/viewing_index.feature +0 -19
  399. data/features/create_another.feature +0 -55
  400. data/features/dashboard.feature +0 -16
  401. data/features/decorators.feature +0 -43
  402. data/features/development_reloading.feature +0 -28
  403. data/features/edit_page.feature +0 -116
  404. data/features/favicon.feature +0 -20
  405. data/features/first_boot.feature +0 -16
  406. data/features/footer.feature +0 -28
  407. data/features/global_navigation.feature +0 -29
  408. data/features/i18n.feature +0 -55
  409. data/features/index/batch_actions.feature +0 -218
  410. data/features/index/filters.feature +0 -199
  411. data/features/index/format_as_csv.feature +0 -203
  412. data/features/index/formats.feature +0 -88
  413. data/features/index/index_as_block.feature +0 -15
  414. data/features/index/index_as_blog.feature +0 -69
  415. data/features/index/index_as_grid.feature +0 -45
  416. data/features/index/index_as_table.feature +0 -291
  417. data/features/index/index_blank_slate.feature +0 -83
  418. data/features/index/index_parameters.feature +0 -75
  419. data/features/index/index_scope_to.feature +0 -56
  420. data/features/index/index_scopes.feature +0 -270
  421. data/features/index/page_title.feature +0 -41
  422. data/features/index/pagination.feature +0 -63
  423. data/features/index/switch_index_view.feature +0 -73
  424. data/features/menu.feature +0 -72
  425. data/features/meta_tags.feature +0 -21
  426. data/features/new_page.feature +0 -107
  427. data/features/registering_assets.feature +0 -34
  428. data/features/registering_pages.feature +0 -237
  429. data/features/registering_resources.feature +0 -33
  430. data/features/renamed_resource.feature +0 -30
  431. data/features/root_to.feature +0 -17
  432. data/features/show/columns.feature +0 -40
  433. data/features/show/default_content.feature +0 -44
  434. data/features/show/page_title.feature +0 -58
  435. data/features/show/tabs.feature +0 -27
  436. data/features/sidebar_sections.feature +0 -210
  437. data/features/site_title.feature +0 -47
  438. data/features/specifying_actions.feature +0 -118
  439. data/features/step_definitions/action_item_steps.rb +0 -7
  440. data/features/step_definitions/action_link_steps.rb +0 -20
  441. data/features/step_definitions/additional_web_steps.rb +0 -81
  442. data/features/step_definitions/asset_steps.rb +0 -15
  443. data/features/step_definitions/attribute_steps.rb +0 -18
  444. data/features/step_definitions/batch_action_steps.rb +0 -81
  445. data/features/step_definitions/blog_steps.rb +0 -3
  446. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  447. data/features/step_definitions/column_steps.rb +0 -8
  448. data/features/step_definitions/comment_steps.rb +0 -12
  449. data/features/step_definitions/configuration_steps.rb +0 -100
  450. data/features/step_definitions/dashboard_steps.rb +0 -15
  451. data/features/step_definitions/factory_steps.rb +0 -35
  452. data/features/step_definitions/filter_steps.rb +0 -39
  453. data/features/step_definitions/flash_steps.rb +0 -11
  454. data/features/step_definitions/footer_steps.rb +0 -11
  455. data/features/step_definitions/format_steps.rb +0 -56
  456. data/features/step_definitions/i18n_steps.rb +0 -11
  457. data/features/step_definitions/index_scope_steps.rb +0 -25
  458. data/features/step_definitions/index_views_steps.rb +0 -3
  459. data/features/step_definitions/layout_steps.rb +0 -3
  460. data/features/step_definitions/member_link_steps.rb +0 -7
  461. data/features/step_definitions/menu_steps.rb +0 -11
  462. data/features/step_definitions/meta_tag_steps.rb +0 -3
  463. data/features/step_definitions/pagination_steps.rb +0 -15
  464. data/features/step_definitions/sidebar_steps.rb +0 -11
  465. data/features/step_definitions/site_title_steps.rb +0 -17
  466. data/features/step_definitions/tab_steps.rb +0 -8
  467. data/features/step_definitions/table_steps.rb +0 -116
  468. data/features/step_definitions/user_steps.rb +0 -52
  469. data/features/step_definitions/web_steps.rb +0 -86
  470. data/features/sti_resource.feature +0 -65
  471. data/features/strong_parameters.feature +0 -69
  472. data/features/support/env.rb +0 -121
  473. data/features/support/paths.rb +0 -73
  474. data/features/support/selectors.rb +0 -45
  475. data/features/users/logging_in.feature +0 -36
  476. data/features/users/logging_out.feature +0 -13
  477. data/features/users/resetting_password.feature +0 -34
  478. data/gemfiles/rails_42.gemfile +0 -45
  479. data/gemfiles/rails_50.gemfile +0 -45
  480. data/gemfiles/rails_51.gemfile +0 -45
  481. data/lib/active_admin/event.rb +0 -24
  482. data/lib/active_admin/filters/humanized.rb +0 -68
  483. data/lib/active_admin/helpers/settings.rb +0 -115
  484. data/lib/active_admin/reloader.rb +0 -25
  485. data/lib/bug_report_templates/rails_5_master.rb +0 -118
  486. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  487. data/spec/bug_report_templates_spec.rb +0 -27
  488. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  489. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  490. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  491. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  492. data/spec/javascripts/fixtures/flashes.html +0 -2
  493. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  494. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  495. data/spec/javascripts/support/jasmine.yml +0 -74
  496. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  497. data/spec/rails_helper.rb +0 -62
  498. data/spec/requests/default_namespace_spec.rb +0 -81
  499. data/spec/requests/javascript_spec.rb +0 -22
  500. data/spec/requests/memory_spec.rb +0 -25
  501. data/spec/requests/stylesheets_spec.rb +0 -18
  502. data/spec/spec_helper.rb +0 -12
  503. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  504. data/spec/support/active_admin_request_helpers.rb +0 -39
  505. data/spec/support/jslint.yml +0 -80
  506. data/spec/support/rails_template.rb +0 -182
  507. data/spec/support/rails_template_with_data.rb +0 -68
  508. data/spec/support/templates/admin/stores.rb +0 -7
  509. data/spec/support/templates/en.yml +0 -8
  510. data/spec/support/templates/manifest.js +0 -3
  511. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  512. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  513. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  514. data/spec/support/templates/policies/application_policy.rb +0 -45
  515. data/spec/support/templates/policies/category_policy.rb +0 -7
  516. data/spec/support/templates/policies/post_policy.rb +0 -15
  517. data/spec/support/templates/policies/store_policy.rb +0 -11
  518. data/spec/support/templates/policies/user_policy.rb +0 -11
  519. data/spec/support/templates/post_decorator.rb +0 -11
  520. data/spec/unit/abstract_view_factory_spec.rb +0 -79
  521. data/spec/unit/action_builder_spec.rb +0 -125
  522. data/spec/unit/active_admin_spec.rb +0 -11
  523. data/spec/unit/application_spec.rb +0 -180
  524. data/spec/unit/asset_registration_spec.rb +0 -52
  525. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  526. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  527. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  528. data/spec/unit/auto_link_spec.rb +0 -93
  529. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  530. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  531. data/spec/unit/belongs_to_spec.rb +0 -77
  532. data/spec/unit/cancan_adapter_spec.rb +0 -43
  533. data/spec/unit/comments_spec.rb +0 -176
  534. data/spec/unit/component_spec.rb +0 -18
  535. data/spec/unit/config_shared_examples.rb +0 -59
  536. data/spec/unit/controller_filters_spec.rb +0 -41
  537. data/spec/unit/csv_builder_spec.rb +0 -306
  538. data/spec/unit/dependency_spec.rb +0 -135
  539. data/spec/unit/devise_spec.rb +0 -110
  540. data/spec/unit/dsl_spec.rb +0 -122
  541. data/spec/unit/filters/active_spec.rb +0 -14
  542. data/spec/unit/filters/filter_form_builder_spec.rb +0 -500
  543. data/spec/unit/filters/humanized_spec.rb +0 -64
  544. data/spec/unit/filters/resource_spec.rb +0 -128
  545. data/spec/unit/form_builder_spec.rb +0 -990
  546. data/spec/unit/generators/install_spec.rb +0 -31
  547. data/spec/unit/helpers/collection_spec.rb +0 -68
  548. data/spec/unit/helpers/scope_chain_spec.rb +0 -36
  549. data/spec/unit/helpers/settings_spec.rb +0 -30
  550. data/spec/unit/i18n_spec.rb +0 -12
  551. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  552. data/spec/unit/menu_collection_spec.rb +0 -62
  553. data/spec/unit/menu_item_spec.rb +0 -143
  554. data/spec/unit/menu_spec.rb +0 -71
  555. data/spec/unit/namespace/authorization_spec.rb +0 -27
  556. data/spec/unit/namespace/register_page_spec.rb +0 -99
  557. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  558. data/spec/unit/namespace_spec.rb +0 -125
  559. data/spec/unit/order_clause_spec.rb +0 -81
  560. data/spec/unit/page_controller_spec.rb +0 -5
  561. data/spec/unit/page_spec.rb +0 -131
  562. data/spec/unit/pretty_format_spec.rb +0 -82
  563. data/spec/unit/pundit_adapter_spec.rb +0 -98
  564. data/spec/unit/resource/action_items_spec.rb +0 -65
  565. data/spec/unit/resource/attributes_spec.rb +0 -50
  566. data/spec/unit/resource/includes_spec.rb +0 -21
  567. data/spec/unit/resource/menu_spec.rb +0 -18
  568. data/spec/unit/resource/naming_spec.rb +0 -122
  569. data/spec/unit/resource/ordering_spec.rb +0 -38
  570. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  571. data/spec/unit/resource/pagination_spec.rb +0 -38
  572. data/spec/unit/resource/routes_spec.rb +0 -125
  573. data/spec/unit/resource/scopes_spec.rb +0 -50
  574. data/spec/unit/resource/sidebars_spec.rb +0 -43
  575. data/spec/unit/resource_collection_spec.rb +0 -175
  576. data/spec/unit/resource_controller/data_access_spec.rb +0 -230
  577. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  578. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  579. data/spec/unit/resource_controller_spec.rb +0 -274
  580. data/spec/unit/resource_registration_spec.rb +0 -61
  581. data/spec/unit/resource_spec.rb +0 -313
  582. data/spec/unit/routing_spec.rb +0 -213
  583. data/spec/unit/scope_spec.rb +0 -209
  584. data/spec/unit/settings_spec.rb +0 -118
  585. data/spec/unit/view_factory_spec.rb +0 -19
  586. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -252
  587. data/spec/unit/view_helpers/display_helper_spec.rb +0 -195
  588. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  589. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  590. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -25
  591. data/spec/unit/view_helpers/form_helper_spec.rb +0 -43
  592. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -139
  593. data/spec/unit/views/components/attributes_table_spec.rb +0 -272
  594. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  595. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  596. data/spec/unit/views/components/columns_spec.rb +0 -189
  597. data/spec/unit/views/components/index_list_spec.rb +0 -49
  598. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  599. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  600. data/spec/unit/views/components/panel_spec.rb +0 -58
  601. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  602. data/spec/unit/views/components/site_title_spec.rb +0 -78
  603. data/spec/unit/views/components/status_tag_spec.rb +0 -249
  604. data/spec/unit/views/components/table_for_spec.rb +0 -436
  605. data/spec/unit/views/components/tabs_spec.rb +0 -39
  606. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  607. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  608. data/spec/unit/views/pages/form_spec.rb +0 -54
  609. data/spec/unit/views/pages/index_spec.rb +0 -60
  610. data/spec/unit/views/pages/layout_spec.rb +0 -59
  611. data/spec/unit/views/pages/show_spec.rb +0 -32
  612. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  613. data/tasks/docs.rake +0 -37
  614. data/tasks/lint.rake +0 -8
  615. data/tasks/local.rake +0 -25
  616. data/tasks/parallel_tests.rake +0 -66
  617. data/tasks/test.rake +0 -46
  618. data/tasks/yard.rake +0 -9
@@ -0,0 +1,1207 @@
1
+ //= require jquery-ui/widgets/mouse
2
+ //= require jquery-ui/disable-selection
3
+ //= require jquery-ui/plugin
4
+ //= require jquery-ui/version
5
+ //= require jquery-ui/widget
6
+
7
+ /*!
8
+ * jQuery UI Resizable 1.12.1
9
+ * http://jqueryui.com
10
+ *
11
+ * Copyright jQuery Foundation and other contributors
12
+ * Released under the MIT license.
13
+ * http://jquery.org/license
14
+ */
15
+
16
+ //>>label: Resizable
17
+ //>>group: Interactions
18
+ //>>description: Enables resize functionality for any element.
19
+ //>>docs: http://api.jqueryui.com/resizable/
20
+ //>>demos: http://jqueryui.com/resizable/
21
+ //>>css.structure: ../../themes/base/core.css
22
+ //>>css.structure: ../../themes/base/resizable.css
23
+ //>>css.theme: ../../themes/base/theme.css
24
+
25
+ ( function( factory ) {
26
+ if ( typeof define === "function" && define.amd ) {
27
+
28
+ // AMD. Register as an anonymous module.
29
+ define( [
30
+ "jquery",
31
+ "./mouse",
32
+ "../disable-selection",
33
+ "../plugin",
34
+ "../version",
35
+ "../widget"
36
+ ], factory );
37
+ } else {
38
+
39
+ // Browser globals
40
+ factory( jQuery );
41
+ }
42
+ }( function( $ ) {
43
+
44
+ $.widget( "ui.resizable", $.ui.mouse, {
45
+ version: "1.12.1",
46
+ widgetEventPrefix: "resize",
47
+ options: {
48
+ alsoResize: false,
49
+ animate: false,
50
+ animateDuration: "slow",
51
+ animateEasing: "swing",
52
+ aspectRatio: false,
53
+ autoHide: false,
54
+ classes: {
55
+ "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
56
+ },
57
+ containment: false,
58
+ ghost: false,
59
+ grid: false,
60
+ handles: "e,s,se",
61
+ helper: false,
62
+ maxHeight: null,
63
+ maxWidth: null,
64
+ minHeight: 10,
65
+ minWidth: 10,
66
+
67
+ // See #7960
68
+ zIndex: 90,
69
+
70
+ // Callbacks
71
+ resize: null,
72
+ start: null,
73
+ stop: null
74
+ },
75
+
76
+ _num: function( value ) {
77
+ return parseFloat( value ) || 0;
78
+ },
79
+
80
+ _isNumber: function( value ) {
81
+ return !isNaN( parseFloat( value ) );
82
+ },
83
+
84
+ _hasScroll: function( el, a ) {
85
+
86
+ if ( $( el ).css( "overflow" ) === "hidden" ) {
87
+ return false;
88
+ }
89
+
90
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
91
+ has = false;
92
+
93
+ if ( el[ scroll ] > 0 ) {
94
+ return true;
95
+ }
96
+
97
+ // TODO: determine which cases actually cause this to happen
98
+ // if the element doesn't have the scroll set, see if it's possible to
99
+ // set the scroll
100
+ el[ scroll ] = 1;
101
+ has = ( el[ scroll ] > 0 );
102
+ el[ scroll ] = 0;
103
+ return has;
104
+ },
105
+
106
+ _create: function() {
107
+
108
+ var margins,
109
+ o = this.options,
110
+ that = this;
111
+ this._addClass( "ui-resizable" );
112
+
113
+ $.extend( this, {
114
+ _aspectRatio: !!( o.aspectRatio ),
115
+ aspectRatio: o.aspectRatio,
116
+ originalElement: this.element,
117
+ _proportionallyResizeElements: [],
118
+ _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
119
+ } );
120
+
121
+ // Wrap the element if it cannot hold child nodes
122
+ if ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {
123
+
124
+ this.element.wrap(
125
+ $( "<div class='ui-wrapper' style='overflow: hidden;'></div>" ).css( {
126
+ position: this.element.css( "position" ),
127
+ width: this.element.outerWidth(),
128
+ height: this.element.outerHeight(),
129
+ top: this.element.css( "top" ),
130
+ left: this.element.css( "left" )
131
+ } )
132
+ );
133
+
134
+ this.element = this.element.parent().data(
135
+ "ui-resizable", this.element.resizable( "instance" )
136
+ );
137
+
138
+ this.elementIsWrapper = true;
139
+
140
+ margins = {
141
+ marginTop: this.originalElement.css( "marginTop" ),
142
+ marginRight: this.originalElement.css( "marginRight" ),
143
+ marginBottom: this.originalElement.css( "marginBottom" ),
144
+ marginLeft: this.originalElement.css( "marginLeft" )
145
+ };
146
+
147
+ this.element.css( margins );
148
+ this.originalElement.css( "margin", 0 );
149
+
150
+ // support: Safari
151
+ // Prevent Safari textarea resize
152
+ this.originalResizeStyle = this.originalElement.css( "resize" );
153
+ this.originalElement.css( "resize", "none" );
154
+
155
+ this._proportionallyResizeElements.push( this.originalElement.css( {
156
+ position: "static",
157
+ zoom: 1,
158
+ display: "block"
159
+ } ) );
160
+
161
+ // Support: IE9
162
+ // avoid IE jump (hard set the margin)
163
+ this.originalElement.css( margins );
164
+
165
+ this._proportionallyResize();
166
+ }
167
+
168
+ this._setupHandles();
169
+
170
+ if ( o.autoHide ) {
171
+ $( this.element )
172
+ .on( "mouseenter", function() {
173
+ if ( o.disabled ) {
174
+ return;
175
+ }
176
+ that._removeClass( "ui-resizable-autohide" );
177
+ that._handles.show();
178
+ } )
179
+ .on( "mouseleave", function() {
180
+ if ( o.disabled ) {
181
+ return;
182
+ }
183
+ if ( !that.resizing ) {
184
+ that._addClass( "ui-resizable-autohide" );
185
+ that._handles.hide();
186
+ }
187
+ } );
188
+ }
189
+
190
+ this._mouseInit();
191
+ },
192
+
193
+ _destroy: function() {
194
+
195
+ this._mouseDestroy();
196
+
197
+ var wrapper,
198
+ _destroy = function( exp ) {
199
+ $( exp )
200
+ .removeData( "resizable" )
201
+ .removeData( "ui-resizable" )
202
+ .off( ".resizable" )
203
+ .find( ".ui-resizable-handle" )
204
+ .remove();
205
+ };
206
+
207
+ // TODO: Unwrap at same DOM position
208
+ if ( this.elementIsWrapper ) {
209
+ _destroy( this.element );
210
+ wrapper = this.element;
211
+ this.originalElement.css( {
212
+ position: wrapper.css( "position" ),
213
+ width: wrapper.outerWidth(),
214
+ height: wrapper.outerHeight(),
215
+ top: wrapper.css( "top" ),
216
+ left: wrapper.css( "left" )
217
+ } ).insertAfter( wrapper );
218
+ wrapper.remove();
219
+ }
220
+
221
+ this.originalElement.css( "resize", this.originalResizeStyle );
222
+ _destroy( this.originalElement );
223
+
224
+ return this;
225
+ },
226
+
227
+ _setOption: function( key, value ) {
228
+ this._super( key, value );
229
+
230
+ switch ( key ) {
231
+ case "handles":
232
+ this._removeHandles();
233
+ this._setupHandles();
234
+ break;
235
+ default:
236
+ break;
237
+ }
238
+ },
239
+
240
+ _setupHandles: function() {
241
+ var o = this.options, handle, i, n, hname, axis, that = this;
242
+ this.handles = o.handles ||
243
+ ( !$( ".ui-resizable-handle", this.element ).length ?
244
+ "e,s,se" : {
245
+ n: ".ui-resizable-n",
246
+ e: ".ui-resizable-e",
247
+ s: ".ui-resizable-s",
248
+ w: ".ui-resizable-w",
249
+ se: ".ui-resizable-se",
250
+ sw: ".ui-resizable-sw",
251
+ ne: ".ui-resizable-ne",
252
+ nw: ".ui-resizable-nw"
253
+ } );
254
+
255
+ this._handles = $();
256
+ if ( this.handles.constructor === String ) {
257
+
258
+ if ( this.handles === "all" ) {
259
+ this.handles = "n,e,s,w,se,sw,ne,nw";
260
+ }
261
+
262
+ n = this.handles.split( "," );
263
+ this.handles = {};
264
+
265
+ for ( i = 0; i < n.length; i++ ) {
266
+
267
+ handle = $.trim( n[ i ] );
268
+ hname = "ui-resizable-" + handle;
269
+ axis = $( "<div>" );
270
+ this._addClass( axis, "ui-resizable-handle " + hname );
271
+
272
+ axis.css( { zIndex: o.zIndex } );
273
+
274
+ this.handles[ handle ] = ".ui-resizable-" + handle;
275
+ this.element.append( axis );
276
+ }
277
+
278
+ }
279
+
280
+ this._renderAxis = function( target ) {
281
+
282
+ var i, axis, padPos, padWrapper;
283
+
284
+ target = target || this.element;
285
+
286
+ for ( i in this.handles ) {
287
+
288
+ if ( this.handles[ i ].constructor === String ) {
289
+ this.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();
290
+ } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
291
+ this.handles[ i ] = $( this.handles[ i ] );
292
+ this._on( this.handles[ i ], { "mousedown": that._mouseDown } );
293
+ }
294
+
295
+ if ( this.elementIsWrapper &&
296
+ this.originalElement[ 0 ]
297
+ .nodeName
298
+ .match( /^(textarea|input|select|button)$/i ) ) {
299
+ axis = $( this.handles[ i ], this.element );
300
+
301
+ padWrapper = /sw|ne|nw|se|n|s/.test( i ) ?
302
+ axis.outerHeight() :
303
+ axis.outerWidth();
304
+
305
+ padPos = [ "padding",
306
+ /ne|nw|n/.test( i ) ? "Top" :
307
+ /se|sw|s/.test( i ) ? "Bottom" :
308
+ /^e$/.test( i ) ? "Right" : "Left" ].join( "" );
309
+
310
+ target.css( padPos, padWrapper );
311
+
312
+ this._proportionallyResize();
313
+ }
314
+
315
+ this._handles = this._handles.add( this.handles[ i ] );
316
+ }
317
+ };
318
+
319
+ // TODO: make renderAxis a prototype function
320
+ this._renderAxis( this.element );
321
+
322
+ this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
323
+ this._handles.disableSelection();
324
+
325
+ this._handles.on( "mouseover", function() {
326
+ if ( !that.resizing ) {
327
+ if ( this.className ) {
328
+ axis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );
329
+ }
330
+ that.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se";
331
+ }
332
+ } );
333
+
334
+ if ( o.autoHide ) {
335
+ this._handles.hide();
336
+ this._addClass( "ui-resizable-autohide" );
337
+ }
338
+ },
339
+
340
+ _removeHandles: function() {
341
+ this._handles.remove();
342
+ },
343
+
344
+ _mouseCapture: function( event ) {
345
+ var i, handle,
346
+ capture = false;
347
+
348
+ for ( i in this.handles ) {
349
+ handle = $( this.handles[ i ] )[ 0 ];
350
+ if ( handle === event.target || $.contains( handle, event.target ) ) {
351
+ capture = true;
352
+ }
353
+ }
354
+
355
+ return !this.options.disabled && capture;
356
+ },
357
+
358
+ _mouseStart: function( event ) {
359
+
360
+ var curleft, curtop, cursor,
361
+ o = this.options,
362
+ el = this.element;
363
+
364
+ this.resizing = true;
365
+
366
+ this._renderProxy();
367
+
368
+ curleft = this._num( this.helper.css( "left" ) );
369
+ curtop = this._num( this.helper.css( "top" ) );
370
+
371
+ if ( o.containment ) {
372
+ curleft += $( o.containment ).scrollLeft() || 0;
373
+ curtop += $( o.containment ).scrollTop() || 0;
374
+ }
375
+
376
+ this.offset = this.helper.offset();
377
+ this.position = { left: curleft, top: curtop };
378
+
379
+ this.size = this._helper ? {
380
+ width: this.helper.width(),
381
+ height: this.helper.height()
382
+ } : {
383
+ width: el.width(),
384
+ height: el.height()
385
+ };
386
+
387
+ this.originalSize = this._helper ? {
388
+ width: el.outerWidth(),
389
+ height: el.outerHeight()
390
+ } : {
391
+ width: el.width(),
392
+ height: el.height()
393
+ };
394
+
395
+ this.sizeDiff = {
396
+ width: el.outerWidth() - el.width(),
397
+ height: el.outerHeight() - el.height()
398
+ };
399
+
400
+ this.originalPosition = { left: curleft, top: curtop };
401
+ this.originalMousePosition = { left: event.pageX, top: event.pageY };
402
+
403
+ this.aspectRatio = ( typeof o.aspectRatio === "number" ) ?
404
+ o.aspectRatio :
405
+ ( ( this.originalSize.width / this.originalSize.height ) || 1 );
406
+
407
+ cursor = $( ".ui-resizable-" + this.axis ).css( "cursor" );
408
+ $( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor );
409
+
410
+ this._addClass( "ui-resizable-resizing" );
411
+ this._propagate( "start", event );
412
+ return true;
413
+ },
414
+
415
+ _mouseDrag: function( event ) {
416
+
417
+ var data, props,
418
+ smp = this.originalMousePosition,
419
+ a = this.axis,
420
+ dx = ( event.pageX - smp.left ) || 0,
421
+ dy = ( event.pageY - smp.top ) || 0,
422
+ trigger = this._change[ a ];
423
+
424
+ this._updatePrevProperties();
425
+
426
+ if ( !trigger ) {
427
+ return false;
428
+ }
429
+
430
+ data = trigger.apply( this, [ event, dx, dy ] );
431
+
432
+ this._updateVirtualBoundaries( event.shiftKey );
433
+ if ( this._aspectRatio || event.shiftKey ) {
434
+ data = this._updateRatio( data, event );
435
+ }
436
+
437
+ data = this._respectSize( data, event );
438
+
439
+ this._updateCache( data );
440
+
441
+ this._propagate( "resize", event );
442
+
443
+ props = this._applyChanges();
444
+
445
+ if ( !this._helper && this._proportionallyResizeElements.length ) {
446
+ this._proportionallyResize();
447
+ }
448
+
449
+ if ( !$.isEmptyObject( props ) ) {
450
+ this._updatePrevProperties();
451
+ this._trigger( "resize", event, this.ui() );
452
+ this._applyChanges();
453
+ }
454
+
455
+ return false;
456
+ },
457
+
458
+ _mouseStop: function( event ) {
459
+
460
+ this.resizing = false;
461
+ var pr, ista, soffseth, soffsetw, s, left, top,
462
+ o = this.options, that = this;
463
+
464
+ if ( this._helper ) {
465
+
466
+ pr = this._proportionallyResizeElements;
467
+ ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );
468
+ soffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height;
469
+ soffsetw = ista ? 0 : that.sizeDiff.width;
470
+
471
+ s = {
472
+ width: ( that.helper.width() - soffsetw ),
473
+ height: ( that.helper.height() - soffseth )
474
+ };
475
+ left = ( parseFloat( that.element.css( "left" ) ) +
476
+ ( that.position.left - that.originalPosition.left ) ) || null;
477
+ top = ( parseFloat( that.element.css( "top" ) ) +
478
+ ( that.position.top - that.originalPosition.top ) ) || null;
479
+
480
+ if ( !o.animate ) {
481
+ this.element.css( $.extend( s, { top: top, left: left } ) );
482
+ }
483
+
484
+ that.helper.height( that.size.height );
485
+ that.helper.width( that.size.width );
486
+
487
+ if ( this._helper && !o.animate ) {
488
+ this._proportionallyResize();
489
+ }
490
+ }
491
+
492
+ $( "body" ).css( "cursor", "auto" );
493
+
494
+ this._removeClass( "ui-resizable-resizing" );
495
+
496
+ this._propagate( "stop", event );
497
+
498
+ if ( this._helper ) {
499
+ this.helper.remove();
500
+ }
501
+
502
+ return false;
503
+
504
+ },
505
+
506
+ _updatePrevProperties: function() {
507
+ this.prevPosition = {
508
+ top: this.position.top,
509
+ left: this.position.left
510
+ };
511
+ this.prevSize = {
512
+ width: this.size.width,
513
+ height: this.size.height
514
+ };
515
+ },
516
+
517
+ _applyChanges: function() {
518
+ var props = {};
519
+
520
+ if ( this.position.top !== this.prevPosition.top ) {
521
+ props.top = this.position.top + "px";
522
+ }
523
+ if ( this.position.left !== this.prevPosition.left ) {
524
+ props.left = this.position.left + "px";
525
+ }
526
+ if ( this.size.width !== this.prevSize.width ) {
527
+ props.width = this.size.width + "px";
528
+ }
529
+ if ( this.size.height !== this.prevSize.height ) {
530
+ props.height = this.size.height + "px";
531
+ }
532
+
533
+ this.helper.css( props );
534
+
535
+ return props;
536
+ },
537
+
538
+ _updateVirtualBoundaries: function( forceAspectRatio ) {
539
+ var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
540
+ o = this.options;
541
+
542
+ b = {
543
+ minWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,
544
+ maxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,
545
+ minHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,
546
+ maxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity
547
+ };
548
+
549
+ if ( this._aspectRatio || forceAspectRatio ) {
550
+ pMinWidth = b.minHeight * this.aspectRatio;
551
+ pMinHeight = b.minWidth / this.aspectRatio;
552
+ pMaxWidth = b.maxHeight * this.aspectRatio;
553
+ pMaxHeight = b.maxWidth / this.aspectRatio;
554
+
555
+ if ( pMinWidth > b.minWidth ) {
556
+ b.minWidth = pMinWidth;
557
+ }
558
+ if ( pMinHeight > b.minHeight ) {
559
+ b.minHeight = pMinHeight;
560
+ }
561
+ if ( pMaxWidth < b.maxWidth ) {
562
+ b.maxWidth = pMaxWidth;
563
+ }
564
+ if ( pMaxHeight < b.maxHeight ) {
565
+ b.maxHeight = pMaxHeight;
566
+ }
567
+ }
568
+ this._vBoundaries = b;
569
+ },
570
+
571
+ _updateCache: function( data ) {
572
+ this.offset = this.helper.offset();
573
+ if ( this._isNumber( data.left ) ) {
574
+ this.position.left = data.left;
575
+ }
576
+ if ( this._isNumber( data.top ) ) {
577
+ this.position.top = data.top;
578
+ }
579
+ if ( this._isNumber( data.height ) ) {
580
+ this.size.height = data.height;
581
+ }
582
+ if ( this._isNumber( data.width ) ) {
583
+ this.size.width = data.width;
584
+ }
585
+ },
586
+
587
+ _updateRatio: function( data ) {
588
+
589
+ var cpos = this.position,
590
+ csize = this.size,
591
+ a = this.axis;
592
+
593
+ if ( this._isNumber( data.height ) ) {
594
+ data.width = ( data.height * this.aspectRatio );
595
+ } else if ( this._isNumber( data.width ) ) {
596
+ data.height = ( data.width / this.aspectRatio );
597
+ }
598
+
599
+ if ( a === "sw" ) {
600
+ data.left = cpos.left + ( csize.width - data.width );
601
+ data.top = null;
602
+ }
603
+ if ( a === "nw" ) {
604
+ data.top = cpos.top + ( csize.height - data.height );
605
+ data.left = cpos.left + ( csize.width - data.width );
606
+ }
607
+
608
+ return data;
609
+ },
610
+
611
+ _respectSize: function( data ) {
612
+
613
+ var o = this._vBoundaries,
614
+ a = this.axis,
615
+ ismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),
616
+ ismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),
617
+ isminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),
618
+ isminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),
619
+ dw = this.originalPosition.left + this.originalSize.width,
620
+ dh = this.originalPosition.top + this.originalSize.height,
621
+ cw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );
622
+ if ( isminw ) {
623
+ data.width = o.minWidth;
624
+ }
625
+ if ( isminh ) {
626
+ data.height = o.minHeight;
627
+ }
628
+ if ( ismaxw ) {
629
+ data.width = o.maxWidth;
630
+ }
631
+ if ( ismaxh ) {
632
+ data.height = o.maxHeight;
633
+ }
634
+
635
+ if ( isminw && cw ) {
636
+ data.left = dw - o.minWidth;
637
+ }
638
+ if ( ismaxw && cw ) {
639
+ data.left = dw - o.maxWidth;
640
+ }
641
+ if ( isminh && ch ) {
642
+ data.top = dh - o.minHeight;
643
+ }
644
+ if ( ismaxh && ch ) {
645
+ data.top = dh - o.maxHeight;
646
+ }
647
+
648
+ // Fixing jump error on top/left - bug #2330
649
+ if ( !data.width && !data.height && !data.left && data.top ) {
650
+ data.top = null;
651
+ } else if ( !data.width && !data.height && !data.top && data.left ) {
652
+ data.left = null;
653
+ }
654
+
655
+ return data;
656
+ },
657
+
658
+ _getPaddingPlusBorderDimensions: function( element ) {
659
+ var i = 0,
660
+ widths = [],
661
+ borders = [
662
+ element.css( "borderTopWidth" ),
663
+ element.css( "borderRightWidth" ),
664
+ element.css( "borderBottomWidth" ),
665
+ element.css( "borderLeftWidth" )
666
+ ],
667
+ paddings = [
668
+ element.css( "paddingTop" ),
669
+ element.css( "paddingRight" ),
670
+ element.css( "paddingBottom" ),
671
+ element.css( "paddingLeft" )
672
+ ];
673
+
674
+ for ( ; i < 4; i++ ) {
675
+ widths[ i ] = ( parseFloat( borders[ i ] ) || 0 );
676
+ widths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );
677
+ }
678
+
679
+ return {
680
+ height: widths[ 0 ] + widths[ 2 ],
681
+ width: widths[ 1 ] + widths[ 3 ]
682
+ };
683
+ },
684
+
685
+ _proportionallyResize: function() {
686
+
687
+ if ( !this._proportionallyResizeElements.length ) {
688
+ return;
689
+ }
690
+
691
+ var prel,
692
+ i = 0,
693
+ element = this.helper || this.element;
694
+
695
+ for ( ; i < this._proportionallyResizeElements.length; i++ ) {
696
+
697
+ prel = this._proportionallyResizeElements[ i ];
698
+
699
+ // TODO: Seems like a bug to cache this.outerDimensions
700
+ // considering that we are in a loop.
701
+ if ( !this.outerDimensions ) {
702
+ this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
703
+ }
704
+
705
+ prel.css( {
706
+ height: ( element.height() - this.outerDimensions.height ) || 0,
707
+ width: ( element.width() - this.outerDimensions.width ) || 0
708
+ } );
709
+
710
+ }
711
+
712
+ },
713
+
714
+ _renderProxy: function() {
715
+
716
+ var el = this.element, o = this.options;
717
+ this.elementOffset = el.offset();
718
+
719
+ if ( this._helper ) {
720
+
721
+ this.helper = this.helper || $( "<div style='overflow:hidden;'></div>" );
722
+
723
+ this._addClass( this.helper, this._helper );
724
+ this.helper.css( {
725
+ width: this.element.outerWidth(),
726
+ height: this.element.outerHeight(),
727
+ position: "absolute",
728
+ left: this.elementOffset.left + "px",
729
+ top: this.elementOffset.top + "px",
730
+ zIndex: ++o.zIndex //TODO: Don't modify option
731
+ } );
732
+
733
+ this.helper
734
+ .appendTo( "body" )
735
+ .disableSelection();
736
+
737
+ } else {
738
+ this.helper = this.element;
739
+ }
740
+
741
+ },
742
+
743
+ _change: {
744
+ e: function( event, dx ) {
745
+ return { width: this.originalSize.width + dx };
746
+ },
747
+ w: function( event, dx ) {
748
+ var cs = this.originalSize, sp = this.originalPosition;
749
+ return { left: sp.left + dx, width: cs.width - dx };
750
+ },
751
+ n: function( event, dx, dy ) {
752
+ var cs = this.originalSize, sp = this.originalPosition;
753
+ return { top: sp.top + dy, height: cs.height - dy };
754
+ },
755
+ s: function( event, dx, dy ) {
756
+ return { height: this.originalSize.height + dy };
757
+ },
758
+ se: function( event, dx, dy ) {
759
+ return $.extend( this._change.s.apply( this, arguments ),
760
+ this._change.e.apply( this, [ event, dx, dy ] ) );
761
+ },
762
+ sw: function( event, dx, dy ) {
763
+ return $.extend( this._change.s.apply( this, arguments ),
764
+ this._change.w.apply( this, [ event, dx, dy ] ) );
765
+ },
766
+ ne: function( event, dx, dy ) {
767
+ return $.extend( this._change.n.apply( this, arguments ),
768
+ this._change.e.apply( this, [ event, dx, dy ] ) );
769
+ },
770
+ nw: function( event, dx, dy ) {
771
+ return $.extend( this._change.n.apply( this, arguments ),
772
+ this._change.w.apply( this, [ event, dx, dy ] ) );
773
+ }
774
+ },
775
+
776
+ _propagate: function( n, event ) {
777
+ $.ui.plugin.call( this, n, [ event, this.ui() ] );
778
+ ( n !== "resize" && this._trigger( n, event, this.ui() ) );
779
+ },
780
+
781
+ plugins: {},
782
+
783
+ ui: function() {
784
+ return {
785
+ originalElement: this.originalElement,
786
+ element: this.element,
787
+ helper: this.helper,
788
+ position: this.position,
789
+ size: this.size,
790
+ originalSize: this.originalSize,
791
+ originalPosition: this.originalPosition
792
+ };
793
+ }
794
+
795
+ } );
796
+
797
+ /*
798
+ * Resizable Extensions
799
+ */
800
+
801
+ $.ui.plugin.add( "resizable", "animate", {
802
+
803
+ stop: function( event ) {
804
+ var that = $( this ).resizable( "instance" ),
805
+ o = that.options,
806
+ pr = that._proportionallyResizeElements,
807
+ ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),
808
+ soffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height,
809
+ soffsetw = ista ? 0 : that.sizeDiff.width,
810
+ style = {
811
+ width: ( that.size.width - soffsetw ),
812
+ height: ( that.size.height - soffseth )
813
+ },
814
+ left = ( parseFloat( that.element.css( "left" ) ) +
815
+ ( that.position.left - that.originalPosition.left ) ) || null,
816
+ top = ( parseFloat( that.element.css( "top" ) ) +
817
+ ( that.position.top - that.originalPosition.top ) ) || null;
818
+
819
+ that.element.animate(
820
+ $.extend( style, top && left ? { top: top, left: left } : {} ), {
821
+ duration: o.animateDuration,
822
+ easing: o.animateEasing,
823
+ step: function() {
824
+
825
+ var data = {
826
+ width: parseFloat( that.element.css( "width" ) ),
827
+ height: parseFloat( that.element.css( "height" ) ),
828
+ top: parseFloat( that.element.css( "top" ) ),
829
+ left: parseFloat( that.element.css( "left" ) )
830
+ };
831
+
832
+ if ( pr && pr.length ) {
833
+ $( pr[ 0 ] ).css( { width: data.width, height: data.height } );
834
+ }
835
+
836
+ // Propagating resize, and updating values for each animation step
837
+ that._updateCache( data );
838
+ that._propagate( "resize", event );
839
+
840
+ }
841
+ }
842
+ );
843
+ }
844
+
845
+ } );
846
+
847
+ $.ui.plugin.add( "resizable", "containment", {
848
+
849
+ start: function() {
850
+ var element, p, co, ch, cw, width, height,
851
+ that = $( this ).resizable( "instance" ),
852
+ o = that.options,
853
+ el = that.element,
854
+ oc = o.containment,
855
+ ce = ( oc instanceof $ ) ?
856
+ oc.get( 0 ) :
857
+ ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
858
+
859
+ if ( !ce ) {
860
+ return;
861
+ }
862
+
863
+ that.containerElement = $( ce );
864
+
865
+ if ( /document/.test( oc ) || oc === document ) {
866
+ that.containerOffset = {
867
+ left: 0,
868
+ top: 0
869
+ };
870
+ that.containerPosition = {
871
+ left: 0,
872
+ top: 0
873
+ };
874
+
875
+ that.parentData = {
876
+ element: $( document ),
877
+ left: 0,
878
+ top: 0,
879
+ width: $( document ).width(),
880
+ height: $( document ).height() || document.body.parentNode.scrollHeight
881
+ };
882
+ } else {
883
+ element = $( ce );
884
+ p = [];
885
+ $( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) {
886
+ p[ i ] = that._num( element.css( "padding" + name ) );
887
+ } );
888
+
889
+ that.containerOffset = element.offset();
890
+ that.containerPosition = element.position();
891
+ that.containerSize = {
892
+ height: ( element.innerHeight() - p[ 3 ] ),
893
+ width: ( element.innerWidth() - p[ 1 ] )
894
+ };
895
+
896
+ co = that.containerOffset;
897
+ ch = that.containerSize.height;
898
+ cw = that.containerSize.width;
899
+ width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
900
+ height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
901
+
902
+ that.parentData = {
903
+ element: ce,
904
+ left: co.left,
905
+ top: co.top,
906
+ width: width,
907
+ height: height
908
+ };
909
+ }
910
+ },
911
+
912
+ resize: function( event ) {
913
+ var woset, hoset, isParent, isOffsetRelative,
914
+ that = $( this ).resizable( "instance" ),
915
+ o = that.options,
916
+ co = that.containerOffset,
917
+ cp = that.position,
918
+ pRatio = that._aspectRatio || event.shiftKey,
919
+ cop = {
920
+ top: 0,
921
+ left: 0
922
+ },
923
+ ce = that.containerElement,
924
+ continueResize = true;
925
+
926
+ if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
927
+ cop = co;
928
+ }
929
+
930
+ if ( cp.left < ( that._helper ? co.left : 0 ) ) {
931
+ that.size.width = that.size.width +
932
+ ( that._helper ?
933
+ ( that.position.left - co.left ) :
934
+ ( that.position.left - cop.left ) );
935
+
936
+ if ( pRatio ) {
937
+ that.size.height = that.size.width / that.aspectRatio;
938
+ continueResize = false;
939
+ }
940
+ that.position.left = o.helper ? co.left : 0;
941
+ }
942
+
943
+ if ( cp.top < ( that._helper ? co.top : 0 ) ) {
944
+ that.size.height = that.size.height +
945
+ ( that._helper ?
946
+ ( that.position.top - co.top ) :
947
+ that.position.top );
948
+
949
+ if ( pRatio ) {
950
+ that.size.width = that.size.height * that.aspectRatio;
951
+ continueResize = false;
952
+ }
953
+ that.position.top = that._helper ? co.top : 0;
954
+ }
955
+
956
+ isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
957
+ isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
958
+
959
+ if ( isParent && isOffsetRelative ) {
960
+ that.offset.left = that.parentData.left + that.position.left;
961
+ that.offset.top = that.parentData.top + that.position.top;
962
+ } else {
963
+ that.offset.left = that.element.offset().left;
964
+ that.offset.top = that.element.offset().top;
965
+ }
966
+
967
+ woset = Math.abs( that.sizeDiff.width +
968
+ ( that._helper ?
969
+ that.offset.left - cop.left :
970
+ ( that.offset.left - co.left ) ) );
971
+
972
+ hoset = Math.abs( that.sizeDiff.height +
973
+ ( that._helper ?
974
+ that.offset.top - cop.top :
975
+ ( that.offset.top - co.top ) ) );
976
+
977
+ if ( woset + that.size.width >= that.parentData.width ) {
978
+ that.size.width = that.parentData.width - woset;
979
+ if ( pRatio ) {
980
+ that.size.height = that.size.width / that.aspectRatio;
981
+ continueResize = false;
982
+ }
983
+ }
984
+
985
+ if ( hoset + that.size.height >= that.parentData.height ) {
986
+ that.size.height = that.parentData.height - hoset;
987
+ if ( pRatio ) {
988
+ that.size.width = that.size.height * that.aspectRatio;
989
+ continueResize = false;
990
+ }
991
+ }
992
+
993
+ if ( !continueResize ) {
994
+ that.position.left = that.prevPosition.left;
995
+ that.position.top = that.prevPosition.top;
996
+ that.size.width = that.prevSize.width;
997
+ that.size.height = that.prevSize.height;
998
+ }
999
+ },
1000
+
1001
+ stop: function() {
1002
+ var that = $( this ).resizable( "instance" ),
1003
+ o = that.options,
1004
+ co = that.containerOffset,
1005
+ cop = that.containerPosition,
1006
+ ce = that.containerElement,
1007
+ helper = $( that.helper ),
1008
+ ho = helper.offset(),
1009
+ w = helper.outerWidth() - that.sizeDiff.width,
1010
+ h = helper.outerHeight() - that.sizeDiff.height;
1011
+
1012
+ if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
1013
+ $( this ).css( {
1014
+ left: ho.left - cop.left - co.left,
1015
+ width: w,
1016
+ height: h
1017
+ } );
1018
+ }
1019
+
1020
+ if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
1021
+ $( this ).css( {
1022
+ left: ho.left - cop.left - co.left,
1023
+ width: w,
1024
+ height: h
1025
+ } );
1026
+ }
1027
+ }
1028
+ } );
1029
+
1030
+ $.ui.plugin.add( "resizable", "alsoResize", {
1031
+
1032
+ start: function() {
1033
+ var that = $( this ).resizable( "instance" ),
1034
+ o = that.options;
1035
+
1036
+ $( o.alsoResize ).each( function() {
1037
+ var el = $( this );
1038
+ el.data( "ui-resizable-alsoresize", {
1039
+ width: parseFloat( el.width() ), height: parseFloat( el.height() ),
1040
+ left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) )
1041
+ } );
1042
+ } );
1043
+ },
1044
+
1045
+ resize: function( event, ui ) {
1046
+ var that = $( this ).resizable( "instance" ),
1047
+ o = that.options,
1048
+ os = that.originalSize,
1049
+ op = that.originalPosition,
1050
+ delta = {
1051
+ height: ( that.size.height - os.height ) || 0,
1052
+ width: ( that.size.width - os.width ) || 0,
1053
+ top: ( that.position.top - op.top ) || 0,
1054
+ left: ( that.position.left - op.left ) || 0
1055
+ };
1056
+
1057
+ $( o.alsoResize ).each( function() {
1058
+ var el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {},
1059
+ css = el.parents( ui.originalElement[ 0 ] ).length ?
1060
+ [ "width", "height" ] :
1061
+ [ "width", "height", "top", "left" ];
1062
+
1063
+ $.each( css, function( i, prop ) {
1064
+ var sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );
1065
+ if ( sum && sum >= 0 ) {
1066
+ style[ prop ] = sum || null;
1067
+ }
1068
+ } );
1069
+
1070
+ el.css( style );
1071
+ } );
1072
+ },
1073
+
1074
+ stop: function() {
1075
+ $( this ).removeData( "ui-resizable-alsoresize" );
1076
+ }
1077
+ } );
1078
+
1079
+ $.ui.plugin.add( "resizable", "ghost", {
1080
+
1081
+ start: function() {
1082
+
1083
+ var that = $( this ).resizable( "instance" ), cs = that.size;
1084
+
1085
+ that.ghost = that.originalElement.clone();
1086
+ that.ghost.css( {
1087
+ opacity: 0.25,
1088
+ display: "block",
1089
+ position: "relative",
1090
+ height: cs.height,
1091
+ width: cs.width,
1092
+ margin: 0,
1093
+ left: 0,
1094
+ top: 0
1095
+ } );
1096
+
1097
+ that._addClass( that.ghost, "ui-resizable-ghost" );
1098
+
1099
+ // DEPRECATED
1100
+ // TODO: remove after 1.12
1101
+ if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) {
1102
+
1103
+ // Ghost option
1104
+ that.ghost.addClass( this.options.ghost );
1105
+ }
1106
+
1107
+ that.ghost.appendTo( that.helper );
1108
+
1109
+ },
1110
+
1111
+ resize: function() {
1112
+ var that = $( this ).resizable( "instance" );
1113
+ if ( that.ghost ) {
1114
+ that.ghost.css( {
1115
+ position: "relative",
1116
+ height: that.size.height,
1117
+ width: that.size.width
1118
+ } );
1119
+ }
1120
+ },
1121
+
1122
+ stop: function() {
1123
+ var that = $( this ).resizable( "instance" );
1124
+ if ( that.ghost && that.helper ) {
1125
+ that.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );
1126
+ }
1127
+ }
1128
+
1129
+ } );
1130
+
1131
+ $.ui.plugin.add( "resizable", "grid", {
1132
+
1133
+ resize: function() {
1134
+ var outerDimensions,
1135
+ that = $( this ).resizable( "instance" ),
1136
+ o = that.options,
1137
+ cs = that.size,
1138
+ os = that.originalSize,
1139
+ op = that.originalPosition,
1140
+ a = that.axis,
1141
+ grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
1142
+ gridX = ( grid[ 0 ] || 1 ),
1143
+ gridY = ( grid[ 1 ] || 1 ),
1144
+ ox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,
1145
+ oy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,
1146
+ newWidth = os.width + ox,
1147
+ newHeight = os.height + oy,
1148
+ isMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),
1149
+ isMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),
1150
+ isMinWidth = o.minWidth && ( o.minWidth > newWidth ),
1151
+ isMinHeight = o.minHeight && ( o.minHeight > newHeight );
1152
+
1153
+ o.grid = grid;
1154
+
1155
+ if ( isMinWidth ) {
1156
+ newWidth += gridX;
1157
+ }
1158
+ if ( isMinHeight ) {
1159
+ newHeight += gridY;
1160
+ }
1161
+ if ( isMaxWidth ) {
1162
+ newWidth -= gridX;
1163
+ }
1164
+ if ( isMaxHeight ) {
1165
+ newHeight -= gridY;
1166
+ }
1167
+
1168
+ if ( /^(se|s|e)$/.test( a ) ) {
1169
+ that.size.width = newWidth;
1170
+ that.size.height = newHeight;
1171
+ } else if ( /^(ne)$/.test( a ) ) {
1172
+ that.size.width = newWidth;
1173
+ that.size.height = newHeight;
1174
+ that.position.top = op.top - oy;
1175
+ } else if ( /^(sw)$/.test( a ) ) {
1176
+ that.size.width = newWidth;
1177
+ that.size.height = newHeight;
1178
+ that.position.left = op.left - ox;
1179
+ } else {
1180
+ if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {
1181
+ outerDimensions = that._getPaddingPlusBorderDimensions( this );
1182
+ }
1183
+
1184
+ if ( newHeight - gridY > 0 ) {
1185
+ that.size.height = newHeight;
1186
+ that.position.top = op.top - oy;
1187
+ } else {
1188
+ newHeight = gridY - outerDimensions.height;
1189
+ that.size.height = newHeight;
1190
+ that.position.top = op.top + os.height - newHeight;
1191
+ }
1192
+ if ( newWidth - gridX > 0 ) {
1193
+ that.size.width = newWidth;
1194
+ that.position.left = op.left - ox;
1195
+ } else {
1196
+ newWidth = gridX - outerDimensions.width;
1197
+ that.size.width = newWidth;
1198
+ that.position.left = op.left + os.width - newWidth;
1199
+ }
1200
+ }
1201
+ }
1202
+
1203
+ } );
1204
+
1205
+ return $.ui.resizable;
1206
+
1207
+ } ) );