alchemy_cms 7.0.8 → 7.1.0.pre.b2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (394) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +162 -0
  3. data/Gemfile +9 -11
  4. data/README.md +11 -9
  5. data/alchemy_cms.gemspec +4 -3
  6. data/app/assets/config/alchemy_manifest.js +3 -5
  7. data/app/assets/images/alchemy/missing-image.svg +1 -1
  8. data/app/assets/javascripts/alchemy/admin.js +1 -23
  9. data/app/assets/javascripts/alchemy/alchemy.confirm_dialog.js.coffee +2 -3
  10. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +19 -34
  11. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +38 -13
  12. data/app/assets/javascripts/alchemy/alchemy.file_progress.js.coffee +1 -1
  13. data/app/assets/javascripts/alchemy/alchemy.fixed_elements.js +32 -25
  14. data/app/assets/javascripts/alchemy/alchemy.growler.js.coffee +1 -1
  15. data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +3 -5
  16. data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +0 -57
  17. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +24 -65
  18. data/app/assets/javascripts/alchemy/alchemy.list_filter.js.coffee +2 -2
  19. data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +5 -4
  20. data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +5 -5
  21. data/app/assets/javascripts/alchemy/templates/index.js +0 -2
  22. data/app/assets/javascripts/alchemy/templates/node_folder.hbs +1 -1
  23. data/app/assets/javascripts/alchemy/templates/page.hbs +1 -1
  24. data/app/assets/javascripts/alchemy/templates/page_folder.hbs +2 -2
  25. data/app/assets/javascripts/tinymce/icons/remixicons/icons.js +93 -0
  26. data/app/assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js +37 -18
  27. data/app/assets/stylesheets/alchemy/_custom-properties.scss +82 -0
  28. data/app/assets/stylesheets/alchemy/_mixins.scss +38 -30
  29. data/app/assets/stylesheets/alchemy/_variables.scss +23 -8
  30. data/app/assets/stylesheets/alchemy/admin.scss +3 -4
  31. data/app/assets/stylesheets/alchemy/archive.scss +110 -50
  32. data/app/assets/stylesheets/alchemy/attachments.scss +5 -4
  33. data/app/assets/stylesheets/alchemy/buttons.scss +41 -166
  34. data/app/assets/stylesheets/alchemy/dashboard.scss +31 -6
  35. data/app/assets/stylesheets/alchemy/dialogs.scss +12 -28
  36. data/app/assets/stylesheets/alchemy/elements.scss +272 -282
  37. data/app/assets/stylesheets/alchemy/flash.scss +20 -12
  38. data/app/assets/stylesheets/alchemy/forms.scss +21 -34
  39. data/app/assets/stylesheets/alchemy/frame.scss +11 -32
  40. data/app/assets/stylesheets/alchemy/hints.scss +4 -62
  41. data/app/assets/stylesheets/alchemy/image_library.scss +36 -33
  42. data/app/assets/stylesheets/alchemy/menubar.scss +7 -6
  43. data/app/assets/stylesheets/alchemy/navigation.scss +27 -15
  44. data/app/assets/stylesheets/alchemy/nodes.scss +11 -7
  45. data/app/assets/stylesheets/alchemy/notices.scss +16 -4
  46. data/app/assets/stylesheets/alchemy/page-select.scss +10 -2
  47. data/app/assets/stylesheets/alchemy/pagination.scss +22 -13
  48. data/app/assets/stylesheets/alchemy/resource_info.scss +7 -5
  49. data/app/assets/stylesheets/alchemy/selects.scss +49 -42
  50. data/app/assets/stylesheets/alchemy/shoelace.scss +345 -0
  51. data/app/assets/stylesheets/alchemy/sitemap.scss +24 -14
  52. data/app/assets/stylesheets/alchemy/spinner.scss +9 -19
  53. data/app/assets/stylesheets/alchemy/tables.scss +16 -24
  54. data/app/assets/stylesheets/alchemy/tags.scss +4 -0
  55. data/app/assets/stylesheets/alchemy/toolbar.scss +29 -25
  56. data/app/assets/stylesheets/alchemy/upload.scss +140 -89
  57. data/app/assets/stylesheets/tinymce/skins/content/alchemy/content.min.scss +69 -0
  58. data/app/assets/stylesheets/tinymce/skins/skintool.json +38 -0
  59. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.css +711 -0
  60. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.inline.css +705 -0
  61. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.inline.min.css +7 -0
  62. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.min.css +7 -0
  63. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.mobile.css +29 -0
  64. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.mobile.min.css +7 -0
  65. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/fonts/tinymce-mobile.woff +0 -0
  66. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.min.scss +3798 -0
  67. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.mobile.css +677 -0
  68. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.mobile.min.css +7 -0
  69. data/app/components/alchemy/admin/node_select.rb +39 -0
  70. data/app/components/alchemy/admin/page_select.rb +42 -0
  71. data/app/controllers/alchemy/admin/base_controller.rb +5 -6
  72. data/app/controllers/alchemy/admin/elements_controller.rb +63 -35
  73. data/app/controllers/alchemy/admin/pages_controller.rb +9 -4
  74. data/app/controllers/alchemy/base_controller.rb +4 -2
  75. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +1 -1
  76. data/app/controllers/concerns/alchemy/site_redirects.rb +1 -1
  77. data/app/decorators/alchemy/element_editor.rb +0 -2
  78. data/app/helpers/alchemy/admin/attachments_helper.rb +6 -5
  79. data/app/helpers/alchemy/admin/base_helper.rb +17 -12
  80. data/app/helpers/alchemy/admin/ingredients_helper.rb +4 -1
  81. data/app/helpers/alchemy/admin/pages_helper.rb +5 -11
  82. data/app/helpers/alchemy/base_helper.rb +47 -13
  83. data/app/javascript/alchemy_admin/clipboard.js +16 -0
  84. data/app/javascript/alchemy_admin/components/alchemy_html_element.js +129 -0
  85. data/app/javascript/alchemy_admin/components/button.js +59 -0
  86. data/app/javascript/alchemy_admin/components/char_counter.js +40 -0
  87. data/app/javascript/alchemy_admin/components/datepicker.js +39 -0
  88. data/app/javascript/alchemy_admin/components/dialog_link.js +45 -0
  89. data/app/javascript/alchemy_admin/components/element_editor/publish_element_button.js +36 -0
  90. data/app/javascript/alchemy_admin/components/element_editor.js +553 -0
  91. data/app/javascript/alchemy_admin/components/ingredient_group.js +54 -0
  92. data/app/javascript/alchemy_admin/components/link_buttons/link_button.js +48 -0
  93. data/app/javascript/alchemy_admin/components/link_buttons/unlink_button.js +38 -0
  94. data/app/javascript/alchemy_admin/components/link_buttons.js +79 -0
  95. data/app/javascript/alchemy_admin/components/node_select.js +45 -0
  96. data/app/javascript/alchemy_admin/components/overlay.js +18 -0
  97. data/app/javascript/alchemy_admin/components/page_select.js +63 -0
  98. data/app/javascript/alchemy_admin/components/remote_select.js +134 -0
  99. data/app/javascript/alchemy_admin/components/select.js +12 -0
  100. data/app/javascript/alchemy_admin/components/spinner.js +31 -0
  101. data/app/javascript/alchemy_admin/components/tinymce.js +134 -0
  102. data/app/javascript/alchemy_admin/components/uploader/file_upload.js +266 -0
  103. data/app/javascript/alchemy_admin/components/uploader/progress.js +258 -0
  104. data/app/javascript/alchemy_admin/components/uploader.js +132 -0
  105. data/app/javascript/alchemy_admin/dirty.js +49 -0
  106. data/app/javascript/alchemy_admin/file_editors.js +1 -1
  107. data/app/javascript/alchemy_admin/gui.js +14 -0
  108. data/app/javascript/alchemy_admin/i18n.js +12 -8
  109. data/app/javascript/alchemy_admin/image_cropper.js +6 -3
  110. data/app/javascript/alchemy_admin/image_loader.js +7 -15
  111. data/app/javascript/alchemy_admin/ingredient_anchor_link.js +2 -5
  112. data/app/javascript/alchemy_admin/initializer.js +65 -0
  113. data/app/javascript/alchemy_admin/locales/en.js +31 -0
  114. data/app/javascript/alchemy_admin/picture_editors.js +6 -4
  115. data/app/javascript/alchemy_admin/picture_selector.js +38 -0
  116. data/app/javascript/alchemy_admin/please_wait_overlay.js +8 -0
  117. data/app/javascript/alchemy_admin/sortable_elements.js +78 -0
  118. data/app/javascript/alchemy_admin/spinner.js +36 -0
  119. data/app/javascript/alchemy_admin/tags_autocomplete.js +46 -0
  120. data/app/javascript/alchemy_admin/utils/ajax.js +6 -5
  121. data/app/javascript/alchemy_admin/utils/debounce.js +10 -0
  122. data/app/javascript/alchemy_admin/utils/dom_helpers.js +20 -0
  123. data/app/javascript/alchemy_admin/utils/format.js +11 -0
  124. data/app/javascript/alchemy_admin/utils/max.js +3 -0
  125. data/app/javascript/alchemy_admin/utils/string_conversions.js +10 -0
  126. data/app/javascript/alchemy_admin.js +64 -13
  127. data/app/javascript/menubar.js +10 -0
  128. data/app/models/alchemy/attachment.rb +9 -11
  129. data/app/models/alchemy/element.rb +11 -0
  130. data/app/models/alchemy/ingredients/richtext.rb +1 -10
  131. data/app/models/alchemy/node.rb +4 -0
  132. data/app/models/alchemy/page/page_naming.rb +7 -0
  133. data/app/models/alchemy/page/page_natures.rb +10 -2
  134. data/app/models/alchemy/page.rb +11 -51
  135. data/app/models/alchemy/picture/url.rb +1 -9
  136. data/app/models/alchemy/picture_variant.rb +11 -2
  137. data/app/models/concerns/alchemy/picture_thumbnails.rb +1 -1
  138. data/app/serializers/alchemy/page_tree_serializer.rb +2 -1
  139. data/app/services/alchemy/copy_page.rb +98 -0
  140. data/app/views/alchemy/_menubar.html.erb +17 -13
  141. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +14 -10
  142. data/app/views/alchemy/admin/attachments/_attachment.html.erb +44 -36
  143. data/app/views/alchemy/admin/attachments/_replace_button.html.erb +15 -21
  144. data/app/views/alchemy/admin/attachments/archive_overlay.js.erb +0 -1
  145. data/app/views/alchemy/admin/attachments/assign.js.erb +1 -1
  146. data/app/views/alchemy/admin/attachments/index.html.erb +6 -4
  147. data/app/views/alchemy/admin/attachments/show.html.erb +10 -23
  148. data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
  149. data/app/views/alchemy/admin/clipboard/index.html.erb +3 -7
  150. data/app/views/alchemy/admin/clipboard/insert.js.erb +1 -1
  151. data/app/views/alchemy/admin/crop.html.erb +1 -1
  152. data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +1 -1
  153. data/app/views/alchemy/admin/dashboard/index.html.erb +13 -11
  154. data/app/views/alchemy/admin/dashboard/info.html.erb +7 -7
  155. data/app/views/alchemy/admin/elements/_add_nested_element_form.html.erb +21 -23
  156. data/app/views/alchemy/admin/elements/_element.html.erb +52 -44
  157. data/app/views/alchemy/admin/elements/_footer.html.erb +1 -1
  158. data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
  159. data/app/views/alchemy/admin/elements/_header.html.erb +11 -12
  160. data/app/views/alchemy/admin/elements/_toolbar.html.erb +33 -45
  161. data/app/views/alchemy/admin/elements/create.js.erb +7 -15
  162. data/app/views/alchemy/admin/elements/destroy.js.erb +0 -2
  163. data/app/views/alchemy/admin/elements/index.html.erb +27 -24
  164. data/app/views/alchemy/admin/elements/new.html.erb +9 -11
  165. data/app/views/alchemy/admin/ingredients/_file_fields.html.erb +2 -2
  166. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +3 -3
  167. data/app/views/alchemy/admin/ingredients/_video_fields.html.erb +1 -2
  168. data/app/views/alchemy/admin/languages/_form.html.erb +2 -3
  169. data/app/views/alchemy/admin/languages/_language.html.erb +15 -8
  170. data/app/views/alchemy/admin/languages/_table.html.erb +1 -0
  171. data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +28 -16
  172. data/app/views/alchemy/admin/layoutpages/index.html.erb +2 -2
  173. data/app/views/alchemy/admin/legacy_page_urls/_legacy_page_url.html.erb +12 -8
  174. data/app/views/alchemy/admin/legacy_page_urls/_new.html.erb +1 -1
  175. data/app/views/alchemy/admin/nodes/_form.html.erb +20 -21
  176. data/app/views/alchemy/admin/nodes/_node.html.erb +39 -34
  177. data/app/views/alchemy/admin/nodes/index.html.erb +1 -1
  178. data/app/views/alchemy/admin/pages/_anchor_link.html.erb +4 -4
  179. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +2 -2
  180. data/app/views/alchemy/admin/pages/_current_page.html.erb +1 -1
  181. data/app/views/alchemy/admin/pages/_external_link.html.erb +4 -4
  182. data/app/views/alchemy/admin/pages/_file_link.html.erb +5 -5
  183. data/app/views/alchemy/admin/pages/_form.html.erb +10 -21
  184. data/app/views/alchemy/admin/pages/_internal_link.html.erb +4 -4
  185. data/app/views/alchemy/admin/pages/_locked_page.html.erb +2 -2
  186. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +4 -17
  187. data/app/views/alchemy/admin/pages/_page.html.erb +76 -72
  188. data/app/views/alchemy/admin/pages/_page_infos.html.erb +23 -7
  189. data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +2 -1
  190. data/app/views/alchemy/admin/pages/_page_status.html.erb +11 -21
  191. data/app/views/alchemy/admin/pages/_publication_fields.html.erb +2 -5
  192. data/app/views/alchemy/admin/pages/_table.html.erb +1 -1
  193. data/app/views/alchemy/admin/pages/_table_row.html.erb +43 -39
  194. data/app/views/alchemy/admin/pages/_toolbar.html.erb +43 -38
  195. data/app/views/alchemy/admin/pages/configure.html.erb +12 -14
  196. data/app/views/alchemy/admin/pages/edit.html.erb +80 -103
  197. data/app/views/alchemy/admin/pages/info.html.erb +20 -11
  198. data/app/views/alchemy/admin/pages/link.html.erb +22 -16
  199. data/app/views/alchemy/admin/pages/new.html.erb +9 -11
  200. data/app/views/alchemy/admin/pages/unlock.js.erb +10 -3
  201. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +15 -13
  202. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +3 -5
  203. data/app/views/alchemy/admin/partials/_routes.html.erb +10 -2
  204. data/app/views/alchemy/admin/partials/_site_select.html.erb +6 -5
  205. data/app/views/alchemy/admin/partials/_toolbar_button.html.erb +28 -23
  206. data/app/views/alchemy/admin/pictures/_archive.html.erb +5 -5
  207. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +1 -1
  208. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +21 -23
  209. data/app/views/alchemy/admin/pictures/_infos.html.erb +2 -6
  210. data/app/views/alchemy/admin/pictures/_picture.html.erb +17 -21
  211. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +17 -16
  212. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +1 -1
  213. data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +1 -1
  214. data/app/views/alchemy/admin/pictures/assign.js.erb +1 -1
  215. data/app/views/alchemy/admin/pictures/index.html.erb +34 -30
  216. data/app/views/alchemy/admin/pictures/show.html.erb +3 -3
  217. data/app/views/alchemy/admin/resources/_filter.html.erb +2 -2
  218. data/app/views/alchemy/admin/resources/_form.html.erb +2 -2
  219. data/app/views/alchemy/admin/resources/_per_page_select.html.erb +1 -1
  220. data/app/views/alchemy/admin/resources/_resource.html.erb +16 -9
  221. data/app/views/alchemy/admin/resources/_table.html.erb +4 -1
  222. data/app/views/alchemy/admin/resources/index.html.erb +22 -19
  223. data/app/views/alchemy/admin/sites/index.html.erb +2 -1
  224. data/app/views/alchemy/admin/styleguide/index.html.erb +54 -28
  225. data/app/views/alchemy/admin/tags/_tag.html.erb +16 -14
  226. data/app/views/alchemy/admin/tags/index.html.erb +15 -12
  227. data/app/views/alchemy/admin/tinymce/_setup.html.erb +28 -0
  228. data/app/views/alchemy/admin/uploader/_button.html.erb +23 -29
  229. data/app/views/alchemy/admin/uploader/_setup.html.erb +3 -8
  230. data/app/views/alchemy/base/500.html.erb +1 -1
  231. data/app/views/alchemy/base/error_notice.js.erb +0 -1
  232. data/app/views/alchemy/ingredients/_boolean_editor.html.erb +1 -1
  233. data/app/views/alchemy/ingredients/_datetime_editor.html.erb +1 -1
  234. data/app/views/alchemy/ingredients/_file_editor.html.erb +5 -5
  235. data/app/views/alchemy/ingredients/_link_editor.html.erb +1 -1
  236. data/app/views/alchemy/ingredients/_node_editor.html.erb +6 -19
  237. data/app/views/alchemy/ingredients/_page_editor.html.erb +7 -19
  238. data/app/views/alchemy/ingredients/_picture_editor.html.erb +2 -2
  239. data/app/views/alchemy/ingredients/_richtext_editor.html.erb +6 -15
  240. data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -1
  241. data/app/views/alchemy/ingredients/_text_editor.html.erb +1 -1
  242. data/app/views/alchemy/ingredients/shared/_anchor.html.erb +1 -1
  243. data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +10 -20
  244. data/app/views/alchemy/ingredients/shared/_picture_tools.html.erb +42 -49
  245. data/app/views/kaminari/alchemy/_first_page.html.erb +4 -2
  246. data/app/views/kaminari/alchemy/_gap.html.erb +1 -1
  247. data/app/views/kaminari/alchemy/_last_page.html.erb +4 -2
  248. data/app/views/kaminari/alchemy/_next_page.html.erb +4 -2
  249. data/app/views/kaminari/alchemy/_prev_page.html.erb +4 -2
  250. data/app/views/layouts/alchemy/admin.html.erb +10 -29
  251. data/bundles/shoelace.js +10 -0
  252. data/bundles/tinymce.js +20 -0
  253. data/config/alchemy/config.yml +11 -10
  254. data/config/alchemy/modules.yml +30 -30
  255. data/config/brakeman.ignore +0 -34
  256. data/config/importmap.rb +9 -5
  257. data/config/initializers/dragonfly.rb +1 -0
  258. data/config/initializers/rails_live_reload.rb +13 -0
  259. data/config/locales/alchemy.en.yml +25 -9
  260. data/config/routes.rb +2 -1
  261. data/lib/alchemy/auth_accessors.rb +6 -1
  262. data/lib/alchemy/config.rb +24 -2
  263. data/lib/alchemy/dev_support/live_reload_watcher.rb +5 -0
  264. data/lib/alchemy/engine.rb +10 -3
  265. data/lib/alchemy/forms/builder.rb +18 -12
  266. data/lib/alchemy/resources_helper.rb +3 -3
  267. data/lib/alchemy/test_support/capybara_helpers.rb +8 -5
  268. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +6 -6
  269. data/lib/alchemy/test_support/rspec_matchers.rb +14 -0
  270. data/lib/alchemy/test_support/shared_uploader_examples.rb +1 -1
  271. data/lib/alchemy/tinymce.rb +19 -3
  272. data/lib/alchemy/version.rb +1 -1
  273. data/package.json +30 -9
  274. data/rollup.config.mjs +65 -0
  275. data/vendor/assets/fonts/remixicon.eot +0 -0
  276. data/vendor/assets/fonts/remixicon.svg +7816 -0
  277. data/vendor/assets/fonts/remixicon.ttf +0 -0
  278. data/vendor/assets/fonts/remixicon.woff +0 -0
  279. data/vendor/assets/fonts/remixicon.woff2 +0 -0
  280. data/vendor/assets/stylesheets/remixicon.scss +10480 -0
  281. data/vendor/assets/stylesheets/tinymce/skins/content/default/content.min.css +1 -0
  282. data/vendor/javascript/clipboard.min.js +7 -0
  283. data/vendor/javascript/flatpickr.min.js +1 -0
  284. data/vendor/javascript/keymaster.min.js +1 -0
  285. data/vendor/javascript/rails-ujs.min.js +1 -0
  286. data/vendor/javascript/shoelace.min.js +995 -0
  287. data/vendor/javascript/sortable.min.js +7 -0
  288. data/vendor/javascript/tinymce.min.js +1 -0
  289. data/vendor/javascript/ungap-custom-elements.min.js +3 -0
  290. metadata +111 -124
  291. data/.codeclimate.yml +0 -35
  292. data/.editorconfig +0 -23
  293. data/.github/FUNDING.yml +0 -4
  294. data/.github/ISSUE_TEMPLATE/Bug_report.md +0 -22
  295. data/.github/ISSUE_TEMPLATE/Feature_request.md +0 -17
  296. data/.github/PULL_REQUEST_TEMPLATE.md +0 -18
  297. data/.github/workflows/brakeman-analysis.yml +0 -46
  298. data/.github/workflows/lint.yml +0 -37
  299. data/.github/workflows/stale.yml +0 -33
  300. data/.github/workflows/test.yml +0 -124
  301. data/.gitignore +0 -31
  302. data/.hound.yml +0 -9
  303. data/.localeapp/config.rb +0 -8
  304. data/.prettierrc +0 -6
  305. data/.rspec +0 -1
  306. data/.rubocop.yml +0 -7
  307. data/.standard.yml +0 -4
  308. data/.yardopts +0 -5
  309. data/app/assets/javascripts/alchemy/alchemy.autocomplete.js.coffee +0 -30
  310. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +0 -53
  311. data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +0 -45
  312. data/app/assets/javascripts/alchemy/alchemy.char_counter.js.coffee +0 -19
  313. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +0 -59
  314. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +0 -79
  315. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +0 -267
  316. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -27
  317. data/app/assets/javascripts/alchemy/alchemy.spinner.js +0 -32
  318. data/app/assets/javascripts/alchemy/alchemy.tooltips.coffee +0 -10
  319. data/app/assets/javascripts/alchemy/alchemy.uploader.js.coffee +0 -131
  320. data/app/assets/javascripts/alchemy/menubar.js.coffee +0 -8
  321. data/app/assets/javascripts/alchemy/node_select.js +0 -39
  322. data/app/assets/javascripts/alchemy/page_select.js +0 -46
  323. data/app/assets/javascripts/alchemy/templates/node.hbs +0 -16
  324. data/app/assets/javascripts/alchemy/templates/spinner.hbs +0 -7
  325. data/app/assets/stylesheets/alchemy/jquery-ui.scss +0 -435
  326. data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +0 -94
  327. data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce-small.svg +0 -63
  328. data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce-small.ttf +0 -0
  329. data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce-small.woff +0 -0
  330. data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce.svg +0 -129
  331. data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce.ttf +0 -0
  332. data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce.woff +0 -0
  333. data/app/assets/stylesheets/tinymce/skins/alchemy/img/anchor.gif +0 -0
  334. data/app/assets/stylesheets/tinymce/skins/alchemy/img/loader.gif +0 -0
  335. data/app/assets/stylesheets/tinymce/skins/alchemy/img/object.gif +0 -0
  336. data/app/assets/stylesheets/tinymce/skins/alchemy/img/trans.gif +0 -0
  337. data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +0 -2105
  338. data/app/javascript/alchemy_admin/datepicker.js +0 -33
  339. data/app/javascript/alchemy_admin/tinymce.js +0 -146
  340. data/app/javascript/alchemy_admin/translations.js +0 -32
  341. data/app/views/alchemy/admin/elements/fold.js.erb +0 -33
  342. data/app/views/alchemy/admin/elements/order.js.erb +0 -11
  343. data/app/views/alchemy/admin/elements/publish.js.erb +0 -21
  344. data/app/views/alchemy/admin/elements/update.js.erb +0 -27
  345. data/vendor/assets/fonts/fa-regular-400.eot +0 -0
  346. data/vendor/assets/fonts/fa-regular-400.svg +0 -803
  347. data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
  348. data/vendor/assets/fonts/fa-regular-400.woff +0 -0
  349. data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
  350. data/vendor/assets/fonts/fa-solid-900.eot +0 -0
  351. data/vendor/assets/fonts/fa-solid-900.svg +0 -4938
  352. data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
  353. data/vendor/assets/fonts/fa-solid-900.woff +0 -0
  354. data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
  355. data/vendor/assets/javascripts/clipboard.min.js +0 -7
  356. data/vendor/assets/javascripts/fileupload/jquery.fileupload-process.js +0 -178
  357. data/vendor/assets/javascripts/fileupload/jquery.fileupload-validate.js +0 -125
  358. data/vendor/assets/javascripts/fileupload/jquery.fileupload.js +0 -1502
  359. data/vendor/assets/javascripts/fileupload/jquery.iframe-transport.js +0 -224
  360. data/vendor/assets/javascripts/jquery-ui/data.js +0 -45
  361. data/vendor/assets/javascripts/jquery-ui/ie.js +0 -20
  362. data/vendor/assets/javascripts/jquery-ui/keycode.js +0 -51
  363. data/vendor/assets/javascripts/jquery-ui/plugin.js +0 -49
  364. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +0 -46
  365. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +0 -27
  366. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +0 -50
  367. data/vendor/assets/javascripts/jquery-ui/unique-id.js +0 -54
  368. data/vendor/assets/javascripts/jquery-ui/version.js +0 -20
  369. data/vendor/assets/javascripts/jquery-ui/widget.js +0 -754
  370. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +0 -1268
  371. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +0 -241
  372. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +0 -1623
  373. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +0 -931
  374. data/vendor/assets/javascripts/jquery_plugins/jquery.scrollTo.min.js +0 -7
  375. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +0 -296
  376. data/vendor/assets/javascripts/keymaster.js +0 -296
  377. data/vendor/assets/javascripts/requestAnimationFrame.js +0 -31
  378. data/vendor/assets/javascripts/tinymce/license.txt +0 -504
  379. data/vendor/assets/javascripts/tinymce/tinymce.min.js +0 -2
  380. data/vendor/assets/stylesheets/fontawesome/_animated.scss +0 -20
  381. data/vendor/assets/stylesheets/fontawesome/_bordered-pulled.scss +0 -20
  382. data/vendor/assets/stylesheets/fontawesome/_core.scss +0 -21
  383. data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +0 -6
  384. data/vendor/assets/stylesheets/fontawesome/_icons.scss +0 -1441
  385. data/vendor/assets/stylesheets/fontawesome/_larger.scss +0 -23
  386. data/vendor/assets/stylesheets/fontawesome/_list.scss +0 -18
  387. data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -56
  388. data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +0 -24
  389. data/vendor/assets/stylesheets/fontawesome/_screen-reader.scss +0 -5
  390. data/vendor/assets/stylesheets/fontawesome/_stacked.scss +0 -31
  391. data/vendor/assets/stylesheets/fontawesome/_variables.scss +0 -1458
  392. data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +0 -16
  393. data/vendor/assets/stylesheets/fontawesome/regular.scss +0 -23
  394. data/vendor/assets/stylesheets/fontawesome/solid.scss +0 -24
@@ -1,754 +0,0 @@
1
- //= require jquery-ui/version
2
-
3
- /*!
4
- * jQuery UI Widget 1.13.0
5
- * http://jqueryui.com
6
- *
7
- * Copyright jQuery Foundation and other contributors
8
- * Released under the MIT license.
9
- * http://jquery.org/license
10
- */
11
-
12
- //>>label: Widget
13
- //>>group: Core
14
- //>>description: Provides a factory for creating stateful widgets with a common API.
15
- //>>docs: http://api.jqueryui.com/jQuery.widget/
16
- //>>demos: http://jqueryui.com/widget/
17
-
18
- ( function( factory ) {
19
- "use strict";
20
-
21
- if ( typeof define === "function" && define.amd ) {
22
-
23
- // AMD. Register as an anonymous module.
24
- define( [ "jquery", "./version" ], factory );
25
- } else {
26
-
27
- // Browser globals
28
- factory( jQuery );
29
- }
30
- } )( function( $ ) {
31
- "use strict";
32
-
33
- var widgetUuid = 0;
34
- var widgetHasOwnProperty = Array.prototype.hasOwnProperty;
35
- var widgetSlice = Array.prototype.slice;
36
-
37
- $.cleanData = ( function( orig ) {
38
- return function( elems ) {
39
- var events, elem, i;
40
- for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
41
-
42
- // Only trigger remove when necessary to save time
43
- events = $._data( elem, "events" );
44
- if ( events && events.remove ) {
45
- $( elem ).triggerHandler( "remove" );
46
- }
47
- }
48
- orig( elems );
49
- };
50
- } )( $.cleanData );
51
-
52
- $.widget = function( name, base, prototype ) {
53
- var existingConstructor, constructor, basePrototype;
54
-
55
- // ProxiedPrototype allows the provided prototype to remain unmodified
56
- // so that it can be used as a mixin for multiple widgets (#8876)
57
- var proxiedPrototype = {};
58
-
59
- var namespace = name.split( "." )[ 0 ];
60
- name = name.split( "." )[ 1 ];
61
- var fullName = namespace + "-" + name;
62
-
63
- if ( !prototype ) {
64
- prototype = base;
65
- base = $.Widget;
66
- }
67
-
68
- if ( Array.isArray( prototype ) ) {
69
- prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
70
- }
71
-
72
- // Create selector for plugin
73
- $.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {
74
- return !!$.data( elem, fullName );
75
- };
76
-
77
- $[ namespace ] = $[ namespace ] || {};
78
- existingConstructor = $[ namespace ][ name ];
79
- constructor = $[ namespace ][ name ] = function( options, element ) {
80
-
81
- // Allow instantiation without "new" keyword
82
- if ( !this._createWidget ) {
83
- return new constructor( options, element );
84
- }
85
-
86
- // Allow instantiation without initializing for simple inheritance
87
- // must use "new" keyword (the code above always passes args)
88
- if ( arguments.length ) {
89
- this._createWidget( options, element );
90
- }
91
- };
92
-
93
- // Extend with the existing constructor to carry over any static properties
94
- $.extend( constructor, existingConstructor, {
95
- version: prototype.version,
96
-
97
- // Copy the object used to create the prototype in case we need to
98
- // redefine the widget later
99
- _proto: $.extend( {}, prototype ),
100
-
101
- // Track widgets that inherit from this widget in case this widget is
102
- // redefined after a widget inherits from it
103
- _childConstructors: []
104
- } );
105
-
106
- basePrototype = new base();
107
-
108
- // We need to make the options hash a property directly on the new instance
109
- // otherwise we'll modify the options hash on the prototype that we're
110
- // inheriting from
111
- basePrototype.options = $.widget.extend( {}, basePrototype.options );
112
- $.each( prototype, function( prop, value ) {
113
- if ( typeof value !== "function" ) {
114
- proxiedPrototype[ prop ] = value;
115
- return;
116
- }
117
- proxiedPrototype[ prop ] = ( function() {
118
- function _super() {
119
- return base.prototype[ prop ].apply( this, arguments );
120
- }
121
-
122
- function _superApply( args ) {
123
- return base.prototype[ prop ].apply( this, args );
124
- }
125
-
126
- return function() {
127
- var __super = this._super;
128
- var __superApply = this._superApply;
129
- var returnValue;
130
-
131
- this._super = _super;
132
- this._superApply = _superApply;
133
-
134
- returnValue = value.apply( this, arguments );
135
-
136
- this._super = __super;
137
- this._superApply = __superApply;
138
-
139
- return returnValue;
140
- };
141
- } )();
142
- } );
143
- constructor.prototype = $.widget.extend( basePrototype, {
144
-
145
- // TODO: remove support for widgetEventPrefix
146
- // always use the name + a colon as the prefix, e.g., draggable:start
147
- // don't prefix for widgets that aren't DOM-based
148
- widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
149
- }, proxiedPrototype, {
150
- constructor: constructor,
151
- namespace: namespace,
152
- widgetName: name,
153
- widgetFullName: fullName
154
- } );
155
-
156
- // If this widget is being redefined then we need to find all widgets that
157
- // are inheriting from it and redefine all of them so that they inherit from
158
- // the new version of this widget. We're essentially trying to replace one
159
- // level in the prototype chain.
160
- if ( existingConstructor ) {
161
- $.each( existingConstructor._childConstructors, function( i, child ) {
162
- var childPrototype = child.prototype;
163
-
164
- // Redefine the child widget using the same prototype that was
165
- // originally used, but inherit from the new version of the base
166
- $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
167
- child._proto );
168
- } );
169
-
170
- // Remove the list of existing child constructors from the old constructor
171
- // so the old child constructors can be garbage collected
172
- delete existingConstructor._childConstructors;
173
- } else {
174
- base._childConstructors.push( constructor );
175
- }
176
-
177
- $.widget.bridge( name, constructor );
178
-
179
- return constructor;
180
- };
181
-
182
- $.widget.extend = function( target ) {
183
- var input = widgetSlice.call( arguments, 1 );
184
- var inputIndex = 0;
185
- var inputLength = input.length;
186
- var key;
187
- var value;
188
-
189
- for ( ; inputIndex < inputLength; inputIndex++ ) {
190
- for ( key in input[ inputIndex ] ) {
191
- value = input[ inputIndex ][ key ];
192
- if ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {
193
-
194
- // Clone objects
195
- if ( $.isPlainObject( value ) ) {
196
- target[ key ] = $.isPlainObject( target[ key ] ) ?
197
- $.widget.extend( {}, target[ key ], value ) :
198
-
199
- // Don't extend strings, arrays, etc. with objects
200
- $.widget.extend( {}, value );
201
-
202
- // Copy everything else by reference
203
- } else {
204
- target[ key ] = value;
205
- }
206
- }
207
- }
208
- }
209
- return target;
210
- };
211
-
212
- $.widget.bridge = function( name, object ) {
213
- var fullName = object.prototype.widgetFullName || name;
214
- $.fn[ name ] = function( options ) {
215
- var isMethodCall = typeof options === "string";
216
- var args = widgetSlice.call( arguments, 1 );
217
- var returnValue = this;
218
-
219
- if ( isMethodCall ) {
220
-
221
- // If this is an empty collection, we need to have the instance method
222
- // return undefined instead of the jQuery instance
223
- if ( !this.length && options === "instance" ) {
224
- returnValue = undefined;
225
- } else {
226
- this.each( function() {
227
- var methodValue;
228
- var instance = $.data( this, fullName );
229
-
230
- if ( options === "instance" ) {
231
- returnValue = instance;
232
- return false;
233
- }
234
-
235
- if ( !instance ) {
236
- return $.error( "cannot call methods on " + name +
237
- " prior to initialization; " +
238
- "attempted to call method '" + options + "'" );
239
- }
240
-
241
- if ( typeof instance[ options ] !== "function" ||
242
- options.charAt( 0 ) === "_" ) {
243
- return $.error( "no such method '" + options + "' for " + name +
244
- " widget instance" );
245
- }
246
-
247
- methodValue = instance[ options ].apply( instance, args );
248
-
249
- if ( methodValue !== instance && methodValue !== undefined ) {
250
- returnValue = methodValue && methodValue.jquery ?
251
- returnValue.pushStack( methodValue.get() ) :
252
- methodValue;
253
- return false;
254
- }
255
- } );
256
- }
257
- } else {
258
-
259
- // Allow multiple hashes to be passed on init
260
- if ( args.length ) {
261
- options = $.widget.extend.apply( null, [ options ].concat( args ) );
262
- }
263
-
264
- this.each( function() {
265
- var instance = $.data( this, fullName );
266
- if ( instance ) {
267
- instance.option( options || {} );
268
- if ( instance._init ) {
269
- instance._init();
270
- }
271
- } else {
272
- $.data( this, fullName, new object( options, this ) );
273
- }
274
- } );
275
- }
276
-
277
- return returnValue;
278
- };
279
- };
280
-
281
- $.Widget = function( /* options, element */ ) {};
282
- $.Widget._childConstructors = [];
283
-
284
- $.Widget.prototype = {
285
- widgetName: "widget",
286
- widgetEventPrefix: "",
287
- defaultElement: "<div>",
288
-
289
- options: {
290
- classes: {},
291
- disabled: false,
292
-
293
- // Callbacks
294
- create: null
295
- },
296
-
297
- _createWidget: function( options, element ) {
298
- element = $( element || this.defaultElement || this )[ 0 ];
299
- this.element = $( element );
300
- this.uuid = widgetUuid++;
301
- this.eventNamespace = "." + this.widgetName + this.uuid;
302
-
303
- this.bindings = $();
304
- this.hoverable = $();
305
- this.focusable = $();
306
- this.classesElementLookup = {};
307
-
308
- if ( element !== this ) {
309
- $.data( element, this.widgetFullName, this );
310
- this._on( true, this.element, {
311
- remove: function( event ) {
312
- if ( event.target === element ) {
313
- this.destroy();
314
- }
315
- }
316
- } );
317
- this.document = $( element.style ?
318
-
319
- // Element within the document
320
- element.ownerDocument :
321
-
322
- // Element is window or document
323
- element.document || element );
324
- this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
325
- }
326
-
327
- this.options = $.widget.extend( {},
328
- this.options,
329
- this._getCreateOptions(),
330
- options );
331
-
332
- this._create();
333
-
334
- if ( this.options.disabled ) {
335
- this._setOptionDisabled( this.options.disabled );
336
- }
337
-
338
- this._trigger( "create", null, this._getCreateEventData() );
339
- this._init();
340
- },
341
-
342
- _getCreateOptions: function() {
343
- return {};
344
- },
345
-
346
- _getCreateEventData: $.noop,
347
-
348
- _create: $.noop,
349
-
350
- _init: $.noop,
351
-
352
- destroy: function() {
353
- var that = this;
354
-
355
- this._destroy();
356
- $.each( this.classesElementLookup, function( key, value ) {
357
- that._removeClass( value, key );
358
- } );
359
-
360
- // We can probably remove the unbind calls in 2.0
361
- // all event bindings should go through this._on()
362
- this.element
363
- .off( this.eventNamespace )
364
- .removeData( this.widgetFullName );
365
- this.widget()
366
- .off( this.eventNamespace )
367
- .removeAttr( "aria-disabled" );
368
-
369
- // Clean up events and states
370
- this.bindings.off( this.eventNamespace );
371
- },
372
-
373
- _destroy: $.noop,
374
-
375
- widget: function() {
376
- return this.element;
377
- },
378
-
379
- option: function( key, value ) {
380
- var options = key;
381
- var parts;
382
- var curOption;
383
- var i;
384
-
385
- if ( arguments.length === 0 ) {
386
-
387
- // Don't return a reference to the internal hash
388
- return $.widget.extend( {}, this.options );
389
- }
390
-
391
- if ( typeof key === "string" ) {
392
-
393
- // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
394
- options = {};
395
- parts = key.split( "." );
396
- key = parts.shift();
397
- if ( parts.length ) {
398
- curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
399
- for ( i = 0; i < parts.length - 1; i++ ) {
400
- curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
401
- curOption = curOption[ parts[ i ] ];
402
- }
403
- key = parts.pop();
404
- if ( arguments.length === 1 ) {
405
- return curOption[ key ] === undefined ? null : curOption[ key ];
406
- }
407
- curOption[ key ] = value;
408
- } else {
409
- if ( arguments.length === 1 ) {
410
- return this.options[ key ] === undefined ? null : this.options[ key ];
411
- }
412
- options[ key ] = value;
413
- }
414
- }
415
-
416
- this._setOptions( options );
417
-
418
- return this;
419
- },
420
-
421
- _setOptions: function( options ) {
422
- var key;
423
-
424
- for ( key in options ) {
425
- this._setOption( key, options[ key ] );
426
- }
427
-
428
- return this;
429
- },
430
-
431
- _setOption: function( key, value ) {
432
- if ( key === "classes" ) {
433
- this._setOptionClasses( value );
434
- }
435
-
436
- this.options[ key ] = value;
437
-
438
- if ( key === "disabled" ) {
439
- this._setOptionDisabled( value );
440
- }
441
-
442
- return this;
443
- },
444
-
445
- _setOptionClasses: function( value ) {
446
- var classKey, elements, currentElements;
447
-
448
- for ( classKey in value ) {
449
- currentElements = this.classesElementLookup[ classKey ];
450
- if ( value[ classKey ] === this.options.classes[ classKey ] ||
451
- !currentElements ||
452
- !currentElements.length ) {
453
- continue;
454
- }
455
-
456
- // We are doing this to create a new jQuery object because the _removeClass() call
457
- // on the next line is going to destroy the reference to the current elements being
458
- // tracked. We need to save a copy of this collection so that we can add the new classes
459
- // below.
460
- elements = $( currentElements.get() );
461
- this._removeClass( currentElements, classKey );
462
-
463
- // We don't use _addClass() here, because that uses this.options.classes
464
- // for generating the string of classes. We want to use the value passed in from
465
- // _setOption(), this is the new value of the classes option which was passed to
466
- // _setOption(). We pass this value directly to _classes().
467
- elements.addClass( this._classes( {
468
- element: elements,
469
- keys: classKey,
470
- classes: value,
471
- add: true
472
- } ) );
473
- }
474
- },
475
-
476
- _setOptionDisabled: function( value ) {
477
- this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
478
-
479
- // If the widget is becoming disabled, then nothing is interactive
480
- if ( value ) {
481
- this._removeClass( this.hoverable, null, "ui-state-hover" );
482
- this._removeClass( this.focusable, null, "ui-state-focus" );
483
- }
484
- },
485
-
486
- enable: function() {
487
- return this._setOptions( { disabled: false } );
488
- },
489
-
490
- disable: function() {
491
- return this._setOptions( { disabled: true } );
492
- },
493
-
494
- _classes: function( options ) {
495
- var full = [];
496
- var that = this;
497
-
498
- options = $.extend( {
499
- element: this.element,
500
- classes: this.options.classes || {}
501
- }, options );
502
-
503
- function bindRemoveEvent() {
504
- options.element.each( function( _, element ) {
505
- var isTracked = $.map( that.classesElementLookup, function( elements ) {
506
- return elements;
507
- } )
508
- .some( function( elements ) {
509
- return elements.is( element );
510
- } );
511
-
512
- if ( !isTracked ) {
513
- that._on( $( element ), {
514
- remove: "_untrackClassesElement"
515
- } );
516
- }
517
- } );
518
- }
519
-
520
- function processClassString( classes, checkOption ) {
521
- var current, i;
522
- for ( i = 0; i < classes.length; i++ ) {
523
- current = that.classesElementLookup[ classes[ i ] ] || $();
524
- if ( options.add ) {
525
- bindRemoveEvent();
526
- current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );
527
- } else {
528
- current = $( current.not( options.element ).get() );
529
- }
530
- that.classesElementLookup[ classes[ i ] ] = current;
531
- full.push( classes[ i ] );
532
- if ( checkOption && options.classes[ classes[ i ] ] ) {
533
- full.push( options.classes[ classes[ i ] ] );
534
- }
535
- }
536
- }
537
-
538
- if ( options.keys ) {
539
- processClassString( options.keys.match( /\S+/g ) || [], true );
540
- }
541
- if ( options.extra ) {
542
- processClassString( options.extra.match( /\S+/g ) || [] );
543
- }
544
-
545
- return full.join( " " );
546
- },
547
-
548
- _untrackClassesElement: function( event ) {
549
- var that = this;
550
- $.each( that.classesElementLookup, function( key, value ) {
551
- if ( $.inArray( event.target, value ) !== -1 ) {
552
- that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
553
- }
554
- } );
555
-
556
- this._off( $( event.target ) );
557
- },
558
-
559
- _removeClass: function( element, keys, extra ) {
560
- return this._toggleClass( element, keys, extra, false );
561
- },
562
-
563
- _addClass: function( element, keys, extra ) {
564
- return this._toggleClass( element, keys, extra, true );
565
- },
566
-
567
- _toggleClass: function( element, keys, extra, add ) {
568
- add = ( typeof add === "boolean" ) ? add : extra;
569
- var shift = ( typeof element === "string" || element === null ),
570
- options = {
571
- extra: shift ? keys : extra,
572
- keys: shift ? element : keys,
573
- element: shift ? this.element : element,
574
- add: add
575
- };
576
- options.element.toggleClass( this._classes( options ), add );
577
- return this;
578
- },
579
-
580
- _on: function( suppressDisabledCheck, element, handlers ) {
581
- var delegateElement;
582
- var instance = this;
583
-
584
- // No suppressDisabledCheck flag, shuffle arguments
585
- if ( typeof suppressDisabledCheck !== "boolean" ) {
586
- handlers = element;
587
- element = suppressDisabledCheck;
588
- suppressDisabledCheck = false;
589
- }
590
-
591
- // No element argument, shuffle and use this.element
592
- if ( !handlers ) {
593
- handlers = element;
594
- element = this.element;
595
- delegateElement = this.widget();
596
- } else {
597
- element = delegateElement = $( element );
598
- this.bindings = this.bindings.add( element );
599
- }
600
-
601
- $.each( handlers, function( event, handler ) {
602
- function handlerProxy() {
603
-
604
- // Allow widgets to customize the disabled handling
605
- // - disabled as an array instead of boolean
606
- // - disabled class as method for disabling individual parts
607
- if ( !suppressDisabledCheck &&
608
- ( instance.options.disabled === true ||
609
- $( this ).hasClass( "ui-state-disabled" ) ) ) {
610
- return;
611
- }
612
- return ( typeof handler === "string" ? instance[ handler ] : handler )
613
- .apply( instance, arguments );
614
- }
615
-
616
- // Copy the guid so direct unbinding works
617
- if ( typeof handler !== "string" ) {
618
- handlerProxy.guid = handler.guid =
619
- handler.guid || handlerProxy.guid || $.guid++;
620
- }
621
-
622
- var match = event.match( /^([\w:-]*)\s*(.*)$/ );
623
- var eventName = match[ 1 ] + instance.eventNamespace;
624
- var selector = match[ 2 ];
625
-
626
- if ( selector ) {
627
- delegateElement.on( eventName, selector, handlerProxy );
628
- } else {
629
- element.on( eventName, handlerProxy );
630
- }
631
- } );
632
- },
633
-
634
- _off: function( element, eventName ) {
635
- eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
636
- this.eventNamespace;
637
- element.off( eventName );
638
-
639
- // Clear the stack to avoid memory leaks (#10056)
640
- this.bindings = $( this.bindings.not( element ).get() );
641
- this.focusable = $( this.focusable.not( element ).get() );
642
- this.hoverable = $( this.hoverable.not( element ).get() );
643
- },
644
-
645
- _delay: function( handler, delay ) {
646
- function handlerProxy() {
647
- return ( typeof handler === "string" ? instance[ handler ] : handler )
648
- .apply( instance, arguments );
649
- }
650
- var instance = this;
651
- return setTimeout( handlerProxy, delay || 0 );
652
- },
653
-
654
- _hoverable: function( element ) {
655
- this.hoverable = this.hoverable.add( element );
656
- this._on( element, {
657
- mouseenter: function( event ) {
658
- this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
659
- },
660
- mouseleave: function( event ) {
661
- this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
662
- }
663
- } );
664
- },
665
-
666
- _focusable: function( element ) {
667
- this.focusable = this.focusable.add( element );
668
- this._on( element, {
669
- focusin: function( event ) {
670
- this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
671
- },
672
- focusout: function( event ) {
673
- this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
674
- }
675
- } );
676
- },
677
-
678
- _trigger: function( type, event, data ) {
679
- var prop, orig;
680
- var callback = this.options[ type ];
681
-
682
- data = data || {};
683
- event = $.Event( event );
684
- event.type = ( type === this.widgetEventPrefix ?
685
- type :
686
- this.widgetEventPrefix + type ).toLowerCase();
687
-
688
- // The original event may come from any element
689
- // so we need to reset the target on the new event
690
- event.target = this.element[ 0 ];
691
-
692
- // Copy original event properties over to the new event
693
- orig = event.originalEvent;
694
- if ( orig ) {
695
- for ( prop in orig ) {
696
- if ( !( prop in event ) ) {
697
- event[ prop ] = orig[ prop ];
698
- }
699
- }
700
- }
701
-
702
- this.element.trigger( event, data );
703
- return !( typeof callback === "function" &&
704
- callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
705
- event.isDefaultPrevented() );
706
- }
707
- };
708
-
709
- $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
710
- $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
711
- if ( typeof options === "string" ) {
712
- options = { effect: options };
713
- }
714
-
715
- var hasOptions;
716
- var effectName = !options ?
717
- method :
718
- options === true || typeof options === "number" ?
719
- defaultEffect :
720
- options.effect || defaultEffect;
721
-
722
- options = options || {};
723
- if ( typeof options === "number" ) {
724
- options = { duration: options };
725
- } else if ( options === true ) {
726
- options = {};
727
- }
728
-
729
- hasOptions = !$.isEmptyObject( options );
730
- options.complete = callback;
731
-
732
- if ( options.delay ) {
733
- element.delay( options.delay );
734
- }
735
-
736
- if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
737
- element[ method ]( options );
738
- } else if ( effectName !== method && element[ effectName ] ) {
739
- element[ effectName ]( options.duration, options.easing, callback );
740
- } else {
741
- element.queue( function( next ) {
742
- $( this )[ method ]();
743
- if ( callback ) {
744
- callback.call( element[ 0 ] );
745
- }
746
- next();
747
- } );
748
- }
749
- };
750
- } );
751
-
752
- return $.widget;
753
-
754
- } );