refinerycms 0.9.5.13 → 0.9.5.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. data/Rakefile +6 -1
  2. data/app/controllers/admin/base_controller.rb +2 -2
  3. data/app/controllers/application.rb +1 -1
  4. data/app/controllers/application_controller.rb +2 -2
  5. data/app/helpers/application_helper.rb +2 -2
  6. data/config/environment.rb +6 -6
  7. data/config/environments/development.rb +1 -1
  8. data/config/initializers/inflections.rb +1 -1
  9. data/config/preinitializer.rb +3 -3
  10. data/config/routes.rb +5 -5
  11. data/db/migrate/20091109012126_add_missing_indexes.rb +4 -4
  12. data/db/schema.rb +1 -2
  13. data/db/seeds.rb +35 -35
  14. data/lib/refinery_initializer.rb +2 -2
  15. data/public/404.html +15 -15
  16. data/public/422.html +8 -8
  17. data/public/500.html +8 -8
  18. data/public/images/refinery/logo-large.png +0 -0
  19. data/public/images/refinery/logo-medium.png +0 -0
  20. data/public/images/refinery/logo-small-medium.png +0 -0
  21. data/public/images/refinery/logo-small.png +0 -0
  22. data/public/images/refinery/resolve_digital_footer_logo.png +0 -0
  23. data/public/javascripts/builder.js +97 -97
  24. data/public/javascripts/controls.js +655 -655
  25. data/public/javascripts/dragdrop.js +936 -936
  26. data/public/javascripts/effects.js +713 -713
  27. data/public/javascripts/jquery/GPL-LICENSE.txt +96 -96
  28. data/public/javascripts/jquery/jquery.js +168 -168
  29. data/public/javascripts/lightbox.js +397 -397
  30. data/public/javascripts/livepipe.js +146 -146
  31. data/public/javascripts/prototype.js +2996 -2996
  32. data/public/javascripts/refinery/admin.js +20 -20
  33. data/public/javascripts/refinery/boot_wym.js +110 -110
  34. data/public/javascripts/refinery/dialog.js +1 -1
  35. data/public/javascripts/refinery/parse_url.js +27 -27
  36. data/public/javascripts/refinery/prototype.enhancements.js +17 -17
  37. data/public/javascripts/refinery/tooltips.js +34 -34
  38. data/public/javascripts/scriptaculous.js +22 -22
  39. data/public/javascripts/slider.js +239 -239
  40. data/public/javascripts/tabs.js +130 -130
  41. data/public/javascripts/thickbox.js +23 -23
  42. data/public/javascripts/wymeditor/jquery.refinery.wymeditor.js +23 -23
  43. data/public/javascripts/wymeditor/lang/ca.js +42 -42
  44. data/public/javascripts/wymeditor/lang/cs.js +42 -42
  45. data/public/javascripts/wymeditor/lang/de.js +42 -42
  46. data/public/javascripts/wymeditor/lang/en.js +44 -44
  47. data/public/javascripts/wymeditor/lang/es.js +42 -42
  48. data/public/javascripts/wymeditor/lang/fa.js +42 -42
  49. data/public/javascripts/wymeditor/lang/fr.js +42 -42
  50. data/public/javascripts/wymeditor/lang/he.js +42 -42
  51. data/public/javascripts/wymeditor/lang/hu.js +42 -42
  52. data/public/javascripts/wymeditor/lang/it.js +42 -42
  53. data/public/javascripts/wymeditor/lang/nb.js +42 -42
  54. data/public/javascripts/wymeditor/lang/nl.js +42 -42
  55. data/public/javascripts/wymeditor/lang/nn.js +42 -42
  56. data/public/javascripts/wymeditor/lang/pl.js +42 -42
  57. data/public/javascripts/wymeditor/lang/pt-br.js +42 -42
  58. data/public/javascripts/wymeditor/lang/pt.js +42 -42
  59. data/public/javascripts/wymeditor/lang/ru.js +42 -42
  60. data/public/javascripts/wymeditor/lang/sv.js +42 -42
  61. data/public/javascripts/wymeditor/lang/tr.js +42 -42
  62. data/public/javascripts/wymeditor/lang/zh_cn.js +44 -44
  63. data/public/javascripts/wymeditor/skins/refinery/skin.js +31 -31
  64. data/public/stylesheets/application.css +3 -3
  65. data/public/stylesheets/formatting.css +3 -3
  66. data/public/stylesheets/home.css +2 -2
  67. data/public/stylesheets/lightbox.css +1 -1
  68. data/public/stylesheets/refinery/application.css +13 -13
  69. data/public/stylesheets/refinery/formatting.css +3 -3
  70. data/public/stylesheets/refinery/refinery.css +49 -44
  71. data/public/stylesheets/refinery/theme.css +1 -1
  72. data/public/stylesheets/refinery/thickbox.css +4 -4
  73. data/public/stylesheets/wymeditor/skins/refinery/skin.css +115 -115
  74. data/public/stylesheets/wymeditor/skins/refinery/wymiframe.css +66 -66
  75. data/public/wymeditor/GPL-license.txt +96 -96
  76. data/script/performance/benchmarker +3 -0
  77. data/vendor/plugins/acts_as_indexed/lib/acts_as_indexed.rb +12 -12
  78. data/vendor/plugins/acts_as_indexed/lib/search_atom.rb +7 -7
  79. data/vendor/plugins/acts_as_indexed/lib/search_index.rb +7 -7
  80. data/vendor/plugins/acts_as_indexed/lib/will_paginate_search.rb +1 -1
  81. data/vendor/plugins/acts_as_indexed/test/abstract_unit.rb +5 -5
  82. data/vendor/plugins/acts_as_indexed/test/acts_as_indexed_test.rb +2 -2
  83. data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +140 -140
  84. data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +18 -18
  85. data/vendor/plugins/attachment_fu/install.rb +1 -1
  86. data/vendor/plugins/attachment_fu/lib/geometry.rb +2 -2
  87. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/cloud_file_backend.rb +3 -3
  88. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/db_file_backend.rb +4 -4
  89. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/file_system_backend.rb +11 -11
  90. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/s3_backend.rb +7 -7
  91. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/core_image_processor.rb +5 -5
  92. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/gd2_processor.rb +4 -4
  93. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb +1 -1
  94. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb +11 -11
  95. data/vendor/plugins/attachment_fu/test/backends/db_file_test.rb +2 -2
  96. data/vendor/plugins/attachment_fu/test/backends/file_system_test.rb +24 -24
  97. data/vendor/plugins/attachment_fu/test/backends/remote/cloudfiles_test.rb +14 -14
  98. data/vendor/plugins/attachment_fu/test/backends/remote/s3_test.rb +7 -7
  99. data/vendor/plugins/attachment_fu/test/base_attachment_tests.rb +10 -10
  100. data/vendor/plugins/attachment_fu/test/basic_test.rb +10 -10
  101. data/vendor/plugins/attachment_fu/test/extra_attachment_test.rb +9 -9
  102. data/vendor/plugins/attachment_fu/test/fixtures/attachment.rb +10 -10
  103. data/vendor/plugins/attachment_fu/test/geometry_test.rb +12 -12
  104. data/vendor/plugins/attachment_fu/test/processors/core_image_test.rb +6 -6
  105. data/vendor/plugins/attachment_fu/test/processors/gd2_test.rb +4 -4
  106. data/vendor/plugins/attachment_fu/test/processors/image_science_test.rb +4 -4
  107. data/vendor/plugins/attachment_fu/test/processors/mini_magick_test.rb +13 -13
  108. data/vendor/plugins/attachment_fu/test/processors/rmagick_test.rb +33 -33
  109. data/vendor/plugins/attachment_fu/test/schema.rb +14 -14
  110. data/vendor/plugins/attachment_fu/test/test_helper.rb +11 -11
  111. data/vendor/plugins/attachment_fu/test/validation_test.rb +7 -7
  112. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/color.rb +7 -7
  113. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/effects.rb +7 -7
  114. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/perspective.rb +5 -5
  115. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/quality.rb +7 -7
  116. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/scale.rb +5 -5
  117. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/watermark.rb +6 -6
  118. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/processor.rb +16 -16
  119. data/vendor/plugins/authentication/app/controllers/admin/users_controller.rb +30 -30
  120. data/vendor/plugins/authentication/app/controllers/sessions_controller.rb +4 -4
  121. data/vendor/plugins/authentication/app/controllers/users_controller.rb +7 -7
  122. data/vendor/plugins/authentication/app/helpers/sessions_helper.rb +1 -1
  123. data/vendor/plugins/authentication/app/helpers/users_helper.rb +1 -1
  124. data/vendor/plugins/authentication/app/models/user.rb +56 -56
  125. data/vendor/plugins/authentication/app/models/user_mailer.rb +6 -6
  126. data/vendor/plugins/authentication/app/models/user_observer.rb +2 -2
  127. data/vendor/plugins/authentication/app/models/user_plugin.rb +4 -4
  128. data/vendor/plugins/authentication/app/views/admin/users/_form.html.erb +36 -36
  129. data/vendor/plugins/authentication/app/views/admin/users/edit.html.erb +1 -1
  130. data/vendor/plugins/authentication/app/views/admin/users/index.html.erb +1 -1
  131. data/vendor/plugins/authentication/app/views/admin/users/new.html.erb +1 -1
  132. data/vendor/plugins/authentication/app/views/sessions/new.html.erb +19 -19
  133. data/vendor/plugins/authentication/app/views/user_mailer/activation.html.erb +1 -1
  134. data/vendor/plugins/authentication/app/views/user_mailer/signup_notification.html.erb +1 -1
  135. data/vendor/plugins/authentication/app/views/users/new.html.erb +3 -3
  136. data/vendor/plugins/authentication/config/routes.rb +1 -1
  137. data/vendor/plugins/authentication/init.rb +5 -5
  138. data/vendor/plugins/authentication/lib/authenticated_system.rb +1 -1
  139. data/vendor/plugins/authentication/test/functional/sessions_controller_test.rb +2 -2
  140. data/vendor/plugins/authentication/test/functional/users_controller_test.rb +3 -3
  141. data/vendor/plugins/authentication/test/test_helper.rb +1 -1
  142. data/vendor/plugins/dashboard/app/controllers/admin/dashboard_controller.rb +1 -1
  143. data/vendor/plugins/dashboard/app/helpers/admin/dashboard_helper.rb +1 -1
  144. data/vendor/plugins/dashboard/app/views/admin/dashboard/_recent_activity.html.erb +10 -10
  145. data/vendor/plugins/dashboard/app/views/admin/dashboard/index.html.erb +30 -30
  146. data/vendor/plugins/dashboard/config/routes.rb +2 -2
  147. data/vendor/plugins/dashboard/init.rb +6 -6
  148. data/vendor/plugins/images/app/controllers/admin/images_controller.rb +28 -28
  149. data/vendor/plugins/images/app/helpers/admin/images_helper.rb +14 -14
  150. data/vendor/plugins/images/app/models/image.rb +11 -11
  151. data/vendor/plugins/images/app/views/admin/images/_form.html.erb +21 -21
  152. data/vendor/plugins/images/app/views/admin/images/_grid_view.html.erb +13 -13
  153. data/vendor/plugins/images/app/views/admin/images/_list_view.html.erb +1 -1
  154. data/vendor/plugins/images/app/views/admin/images/_list_view_image.html.erb +2 -2
  155. data/vendor/plugins/images/app/views/admin/images/edit.html.erb +1 -1
  156. data/vendor/plugins/images/app/views/admin/images/index.html.erb +15 -15
  157. data/vendor/plugins/images/app/views/admin/images/insert.html.erb +91 -91
  158. data/vendor/plugins/images/app/views/admin/images/new.html.erb +1 -1
  159. data/vendor/plugins/images/config/routes.rb +2 -2
  160. data/vendor/plugins/images/init.rb +7 -7
  161. data/vendor/plugins/inquiries/app/controllers/admin/inquiries_controller.rb +4 -4
  162. data/vendor/plugins/inquiries/app/controllers/admin/inquiry_settings_controller.rb +5 -5
  163. data/vendor/plugins/inquiries/app/controllers/inquiries_controller.rb +3 -3
  164. data/vendor/plugins/inquiries/app/helpers/inquiries_helper.rb +3 -3
  165. data/vendor/plugins/inquiries/app/models/inquiry.rb +6 -6
  166. data/vendor/plugins/inquiries/app/models/inquiry_mailer.rb +1 -1
  167. data/vendor/plugins/inquiries/app/models/inquiry_setting.rb +3 -3
  168. data/vendor/plugins/inquiries/app/views/admin/inquiries/_inquiry.html.erb +19 -19
  169. data/vendor/plugins/inquiries/app/views/admin/inquiries/index.html.erb +27 -27
  170. data/vendor/plugins/inquiries/app/views/admin/inquiries/show.html.erb +59 -59
  171. data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/_confirmation_email_form.html.erb +44 -44
  172. data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/_notification_recipients_form.html.erb +15 -15
  173. data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/edit.html.erb +3 -3
  174. data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/index.html.erb +29 -29
  175. data/vendor/plugins/inquiries/app/views/inquiries/new.html.erb +32 -32
  176. data/vendor/plugins/inquiries/app/views/inquiries/thank_you.html.erb +8 -8
  177. data/vendor/plugins/inquiries/app/views/inquiry_mailer/confirmation.html.erb +1 -1
  178. data/vendor/plugins/inquiries/app/views/inquiry_mailer/notification.html.erb +1 -1
  179. data/vendor/plugins/inquiries/config/routes.rb +3 -3
  180. data/vendor/plugins/inquiries/init.rb +10 -10
  181. data/vendor/plugins/news/app/controllers/admin/news_items_controller.rb +3 -3
  182. data/vendor/plugins/news/app/controllers/news_items_controller.rb +2 -2
  183. data/vendor/plugins/news/app/models/news_item.rb +5 -5
  184. data/vendor/plugins/news/app/views/admin/news_items/_form.html.erb +16 -16
  185. data/vendor/plugins/news/app/views/admin/news_items/_news_item.html.erb +14 -14
  186. data/vendor/plugins/news/app/views/admin/news_items/edit.html.erb +1 -1
  187. data/vendor/plugins/news/app/views/admin/news_items/index.html.erb +25 -25
  188. data/vendor/plugins/news/app/views/admin/news_items/new.html.erb +1 -1
  189. data/vendor/plugins/news/app/views/news_items/_recent_posts.html.erb +6 -6
  190. data/vendor/plugins/news/app/views/news_items/index.html.erb +20 -20
  191. data/vendor/plugins/news/app/views/news_items/show.html.erb +16 -16
  192. data/vendor/plugins/news/config/routes.rb +3 -3
  193. data/vendor/plugins/news/init.rb +7 -7
  194. data/vendor/plugins/pages/app/controllers/admin/page_dialogs_controller.rb +10 -10
  195. data/vendor/plugins/pages/app/controllers/admin/page_parts_controller.rb +4 -4
  196. data/vendor/plugins/pages/app/controllers/admin/pages_controller.rb +4 -4
  197. data/vendor/plugins/pages/app/controllers/pages_controller.rb +3 -3
  198. data/vendor/plugins/pages/app/helpers/pages_helper.rb +1 -1
  199. data/vendor/plugins/pages/app/models/page.rb +95 -95
  200. data/vendor/plugins/pages/app/models/page_part.rb +5 -5
  201. data/vendor/plugins/pages/app/views/admin/page_dialogs/_page_link.html.erb +1 -1
  202. data/vendor/plugins/pages/app/views/admin/page_dialogs/link_to.html.erb +222 -222
  203. data/vendor/plugins/pages/app/views/admin/pages/_form.html.erb +232 -232
  204. data/vendor/plugins/pages/app/views/admin/pages/_list.html.erb +26 -26
  205. data/vendor/plugins/pages/app/views/admin/pages/_page_part_field.html.erb +3 -3
  206. data/vendor/plugins/pages/app/views/admin/pages/_sortable_list.html.erb +2 -2
  207. data/vendor/plugins/pages/app/views/admin/pages/edit.html.erb +1 -1
  208. data/vendor/plugins/pages/app/views/admin/pages/index.html.erb +37 -37
  209. data/vendor/plugins/pages/app/views/admin/pages/new.html.erb +1 -1
  210. data/vendor/plugins/pages/app/views/pages/home.html.erb +8 -8
  211. data/vendor/plugins/pages/app/views/pages/show.html.erb +11 -11
  212. data/vendor/plugins/pages/config/routes.rb +5 -5
  213. data/vendor/plugins/pages/init.rb +7 -7
  214. data/vendor/plugins/refinery/app/controllers/admin/refinery_core_controller.rb +7 -7
  215. data/vendor/plugins/refinery/app/views/admin/_head.html.erb +30 -30
  216. data/vendor/plugins/refinery/app/views/admin/_menu.html.erb +61 -61
  217. data/vendor/plugins/refinery/app/views/layouts/admin.html.erb +32 -32
  218. data/vendor/plugins/refinery/app/views/layouts/application.html.erb +28 -28
  219. data/vendor/plugins/refinery/app/views/shared/_footer.html.erb +4 -4
  220. data/vendor/plugins/refinery/app/views/shared/_google_analytics.html.erb +11 -11
  221. data/vendor/plugins/refinery/app/views/shared/_header.html.erb +3 -3
  222. data/vendor/plugins/refinery/app/views/shared/_ie6check.html.erb +1 -1
  223. data/vendor/plugins/refinery/app/views/shared/_menu.html.erb +14 -14
  224. data/vendor/plugins/refinery/app/views/shared/_menu_branch.html.erb +21 -21
  225. data/vendor/plugins/refinery/app/views/shared/_message.html.erb +8 -8
  226. data/vendor/plugins/refinery/app/views/shared/_submenu.html.erb +2 -2
  227. data/vendor/plugins/refinery/app/views/shared/_submenu_branch.html.erb +7 -7
  228. data/vendor/plugins/refinery/app/views/shared/admin/_continue_editing.html.erb +41 -41
  229. data/vendor/plugins/refinery/app/views/shared/admin/_error_messages_for.html.erb +1 -1
  230. data/vendor/plugins/refinery/app/views/shared/admin/_form_actions.html.erb +13 -13
  231. data/vendor/plugins/refinery/app/views/shared/admin/_image_picker.html.erb +31 -31
  232. data/vendor/plugins/refinery/app/views/shared/admin/_make_sortable.html.erb +65 -65
  233. data/vendor/plugins/refinery/app/views/shared/admin/_resource_picker.html.erb +16 -16
  234. data/vendor/plugins/refinery/app/views/shared/admin/_search.html.erb +5 -5
  235. data/vendor/plugins/refinery/app/views/shared/admin/_sortable_list.html.erb +8 -8
  236. data/vendor/plugins/refinery/app/views/welcome.html.erb +1 -1
  237. data/vendor/plugins/refinery/app/views/wymiframe.html.erb +6 -6
  238. data/vendor/plugins/refinery/config/routes.rb +5 -5
  239. data/vendor/plugins/refinery/init.rb +8 -8
  240. data/vendor/plugins/refinery/lib/crud.rb +17 -17
  241. data/vendor/plugins/refinery/lib/generators/refinery/install.rb +1 -1
  242. data/vendor/plugins/refinery/lib/generators/refinery/refinery_generator.rb +17 -17
  243. data/vendor/plugins/refinery/lib/generators/refinery/templates/config/routes.rb +3 -3
  244. data/vendor/plugins/refinery/lib/generators/refinery/templates/controller.rb +2 -2
  245. data/vendor/plugins/refinery/lib/generators/refinery/templates/init.rb +6 -6
  246. data/vendor/plugins/refinery/lib/generators/refinery/templates/migration.rb +22 -22
  247. data/vendor/plugins/refinery/lib/generators/refinery/templates/model.rb +4 -4
  248. data/vendor/plugins/refinery/lib/generators/refinery/templates/public_controller.rb +10 -10
  249. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_form.html.erb +3 -3
  250. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_singular_name.html.erb +15 -15
  251. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_sortable_list.html.erb +1 -1
  252. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/edit.html.erb +1 -1
  253. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/index.html.erb +33 -33
  254. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/new.html.erb +1 -1
  255. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/index.html.erb +14 -14
  256. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/show.html.erb +21 -21
  257. data/vendor/plugins/refinery/lib/indexer.rb +29 -29
  258. data/vendor/plugins/refinery/lib/refinery.rb +10 -10
  259. data/vendor/plugins/refinery/lib/refinery/activity.rb +5 -5
  260. data/vendor/plugins/refinery/lib/refinery/admin_base_controller.rb +15 -15
  261. data/vendor/plugins/refinery/lib/refinery/application_controller.rb +39 -39
  262. data/vendor/plugins/refinery/lib/refinery/application_helper.rb +69 -69
  263. data/vendor/plugins/refinery/lib/refinery/form_helpers.rb +18 -18
  264. data/vendor/plugins/refinery/lib/refinery/html_truncation_helper.rb +5 -5
  265. data/vendor/plugins/refinery/lib/refinery/initializer.rb +2 -2
  266. data/vendor/plugins/refinery/lib/refinery/link_renderer.rb +13 -13
  267. data/vendor/plugins/refinery/lib/refinery/plugin.rb +24 -24
  268. data/vendor/plugins/refinery/lib/refinery/plugins.rb +2 -2
  269. data/vendor/plugins/refinery_dialogs/app/controllers/admin/dialogs_controller.rb +8 -8
  270. data/vendor/plugins/refinery_dialogs/app/views/admin/dialogs/show.html.erb +19 -19
  271. data/vendor/plugins/refinery_dialogs/app/views/layouts/admin_dialog.html.erb +29 -29
  272. data/vendor/plugins/refinery_dialogs/config/routes.rb +2 -2
  273. data/vendor/plugins/refinery_dialogs/init.rb +7 -7
  274. data/vendor/plugins/refinery_settings/app/controllers/admin/refinery_settings_controller.rb +2 -2
  275. data/vendor/plugins/refinery_settings/app/models/refinery_setting.rb +52 -52
  276. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_form.html.erb +11 -11
  277. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_make_sortable.html.erb +3 -3
  278. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_refinery_setting.html.erb +12 -12
  279. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/edit.html.erb +2 -2
  280. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/index.html.erb +19 -19
  281. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/new.html.erb +1 -1
  282. data/vendor/plugins/refinery_settings/config/routes.rb +3 -3
  283. data/vendor/plugins/refinery_settings/init.rb +8 -8
  284. data/vendor/plugins/resources/app/controllers/admin/resources_controller.rb +48 -48
  285. data/vendor/plugins/resources/app/models/resource.rb +12 -12
  286. data/vendor/plugins/resources/app/views/admin/resources/_form.html.erb +21 -21
  287. data/vendor/plugins/resources/app/views/admin/resources/_resource.html.erb +15 -15
  288. data/vendor/plugins/resources/app/views/admin/resources/edit.html.erb +1 -1
  289. data/vendor/plugins/resources/app/views/admin/resources/index.html.erb +19 -19
  290. data/vendor/plugins/resources/app/views/admin/resources/insert.html.erb +86 -86
  291. data/vendor/plugins/resources/app/views/admin/resources/new.html.erb +1 -1
  292. data/vendor/plugins/resources/config/routes.rb +2 -2
  293. data/vendor/plugins/resources/init.rb +6 -6
  294. metadata +31 -23
@@ -7,130 +7,130 @@
7
7
 
8
8
  var Builder = {
9
9
  NODEMAP: {
10
- AREA: 'map',
11
- CAPTION: 'table',
12
- COL: 'table',
13
- COLGROUP: 'table',
14
- LEGEND: 'fieldset',
15
- OPTGROUP: 'select',
16
- OPTION: 'select',
17
- PARAM: 'object',
18
- TBODY: 'table',
19
- TD: 'table',
20
- TFOOT: 'table',
21
- TH: 'table',
22
- THEAD: 'table',
23
- TR: 'table'
10
+ AREA: 'map',
11
+ CAPTION: 'table',
12
+ COL: 'table',
13
+ COLGROUP: 'table',
14
+ LEGEND: 'fieldset',
15
+ OPTGROUP: 'select',
16
+ OPTION: 'select',
17
+ PARAM: 'object',
18
+ TBODY: 'table',
19
+ TD: 'table',
20
+ TFOOT: 'table',
21
+ TH: 'table',
22
+ THEAD: 'table',
23
+ TR: 'table'
24
24
  },
25
25
  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
26
- // due to a Firefox bug
26
+ // due to a Firefox bug
27
27
  node: function(elementName) {
28
- elementName = elementName.toUpperCase();
28
+ elementName = elementName.toUpperCase();
29
29
 
30
- // try innerHTML approach
31
- var parentTag = this.NODEMAP[elementName] || 'div';
32
- var parentElement = document.createElement(parentTag);
33
- try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
34
- parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
35
- } catch(e) {}
36
- var element = parentElement.firstChild || null;
30
+ // try innerHTML approach
31
+ var parentTag = this.NODEMAP[elementName] || 'div';
32
+ var parentElement = document.createElement(parentTag);
33
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
34
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
35
+ } catch(e) {}
36
+ var element = parentElement.firstChild || null;
37
37
 
38
- // see if browser added wrapping tags
39
- if(element && (element.tagName.toUpperCase() != elementName))
40
- element = element.getElementsByTagName(elementName)[0];
38
+ // see if browser added wrapping tags
39
+ if(element && (element.tagName.toUpperCase() != elementName))
40
+ element = element.getElementsByTagName(elementName)[0];
41
41
 
42
- // fallback to createElement approach
43
- if(!element) element = document.createElement(elementName);
42
+ // fallback to createElement approach
43
+ if(!element) element = document.createElement(elementName);
44
44
 
45
- // abort if nothing could be created
46
- if(!element) return;
45
+ // abort if nothing could be created
46
+ if(!element) return;
47
47
 
48
- // attributes (or text)
49
- if(arguments[1])
50
- if(this._isStringOrNumber(arguments[1]) ||
51
- (arguments[1] instanceof Array) ||
52
- arguments[1].tagName) {
53
- this._children(element, arguments[1]);
54
- } else {
55
- var attrs = this._attributes(arguments[1]);
56
- if(attrs.length) {
57
- try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
58
- parentElement.innerHTML = "<" +elementName + " " +
59
- attrs + "></" + elementName + ">";
60
- } catch(e) {}
61
- element = parentElement.firstChild || null;
62
- // workaround firefox 1.0.X bug
63
- if(!element) {
64
- element = document.createElement(elementName);
65
- for(attr in arguments[1])
66
- element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
67
- }
68
- if(element.tagName.toUpperCase() != elementName)
69
- element = parentElement.getElementsByTagName(elementName)[0];
70
- }
71
- }
48
+ // attributes (or text)
49
+ if(arguments[1])
50
+ if(this._isStringOrNumber(arguments[1]) ||
51
+ (arguments[1] instanceof Array) ||
52
+ arguments[1].tagName) {
53
+ this._children(element, arguments[1]);
54
+ } else {
55
+ var attrs = this._attributes(arguments[1]);
56
+ if(attrs.length) {
57
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
58
+ parentElement.innerHTML = "<" +elementName + " " +
59
+ attrs + "></" + elementName + ">";
60
+ } catch(e) {}
61
+ element = parentElement.firstChild || null;
62
+ // workaround firefox 1.0.X bug
63
+ if(!element) {
64
+ element = document.createElement(elementName);
65
+ for(attr in arguments[1])
66
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
67
+ }
68
+ if(element.tagName.toUpperCase() != elementName)
69
+ element = parentElement.getElementsByTagName(elementName)[0];
70
+ }
71
+ }
72
72
 
73
- // text, or array of children
74
- if(arguments[2])
75
- this._children(element, arguments[2]);
73
+ // text, or array of children
74
+ if(arguments[2])
75
+ this._children(element, arguments[2]);
76
76
 
77
- return $(element);
77
+ return $(element);
78
78
  },
79
79
  _text: function(text) {
80
- return document.createTextNode(text);
80
+ return document.createTextNode(text);
81
81
  },
82
82
 
83
83
  ATTR_MAP: {
84
- 'className': 'class',
85
- 'htmlFor': 'for'
84
+ 'className': 'class',
85
+ 'htmlFor': 'for'
86
86
  },
87
87
 
88
88
  _attributes: function(attributes) {
89
- var attrs = [];
90
- for(attribute in attributes)
91
- attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
92
- '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
93
- return attrs.join(" ");
89
+ var attrs = [];
90
+ for(attribute in attributes)
91
+ attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
92
+ '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
93
+ return attrs.join(" ");
94
94
  },
95
95
  _children: function(element, children) {
96
- if(children.tagName) {
97
- element.appendChild(children);
98
- return;
99
- }
100
- if(typeof children=='object') { // array can hold nodes and text
101
- children.flatten().each( function(e) {
102
- if(typeof e=='object')
103
- element.appendChild(e);
104
- else
105
- if(Builder._isStringOrNumber(e))
106
- element.appendChild(Builder._text(e));
107
- });
108
- } else
109
- if(Builder._isStringOrNumber(children))
110
- element.appendChild(Builder._text(children));
96
+ if(children.tagName) {
97
+ element.appendChild(children);
98
+ return;
99
+ }
100
+ if(typeof children=='object') { // array can hold nodes and text
101
+ children.flatten().each( function(e) {
102
+ if(typeof e=='object')
103
+ element.appendChild(e);
104
+ else
105
+ if(Builder._isStringOrNumber(e))
106
+ element.appendChild(Builder._text(e));
107
+ });
108
+ } else
109
+ if(Builder._isStringOrNumber(children))
110
+ element.appendChild(Builder._text(children));
111
111
  },
112
112
  _isStringOrNumber: function(param) {
113
- return(typeof param=='string' || typeof param=='number');
113
+ return(typeof param=='string' || typeof param=='number');
114
114
  },
115
115
  build: function(html) {
116
- var element = this.node('div');
117
- $(element).update(html.strip());
118
- return element.down();
116
+ var element = this.node('div');
117
+ $(element).update(html.strip());
118
+ return element.down();
119
119
  },
120
120
  dump: function(scope) {
121
- if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
121
+ if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
122
122
 
123
- var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
124
- "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
125
- "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
126
- "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
127
- "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
128
- "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
123
+ var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
124
+ "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
125
+ "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
126
+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
127
+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
128
+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
129
129
 
130
- tags.each( function(tag){
131
- scope[tag] = function() {
132
- return Builder.node.apply(Builder, [tag].concat($A(arguments)));
133
- };
134
- });
130
+ tags.each( function(tag){
131
+ scope[tag] = function() {
132
+ return Builder.node.apply(Builder, [tag].concat($A(arguments)));
133
+ };
134
+ });
135
135
  }
136
136
  };
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
2
- // (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
3
- // (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
2
+ // (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
3
+ // (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
4
4
  // Contributors:
5
5
  // Richard Livsey
6
6
  // Rahul Bhargava
@@ -40,332 +40,332 @@ if(typeof Effect == 'undefined')
40
40
  var Autocompleter = { };
41
41
  Autocompleter.Base = Class.create({
42
42
  baseInitialize: function(element, update, options) {
43
- element = $(element);
44
- this.element = element;
45
- this.update = $(update);
46
- this.hasFocus = false;
47
- this.changed = false;
48
- this.active = false;
49
- this.index = 0;
50
- this.entryCount = 0;
51
- this.oldElementValue = this.element.value;
52
-
53
- if(this.setOptions)
54
- this.setOptions(options);
55
- else
56
- this.options = options || { };
57
-
58
- this.options.paramName = this.options.paramName || this.element.name;
59
- this.options.tokens = this.options.tokens || [];
60
- this.options.frequency = this.options.frequency || 0.4;
61
- this.options.minChars = this.options.minChars || 1;
62
- this.options.onShow = this.options.onShow ||
63
- function(element, update){
64
- if(!update.style.position || update.style.position=='absolute') {
65
- update.style.position = 'absolute';
66
- Position.clone(element, update, {
67
- setHeight: false,
68
- offsetTop: element.offsetHeight
69
- });
70
- }
71
- Effect.Appear(update,{duration:0.15});
72
- };
73
- this.options.onHide = this.options.onHide ||
74
- function(element, update){ new Effect.Fade(update,{duration:0.15}) };
43
+ element = $(element);
44
+ this.element = element;
45
+ this.update = $(update);
46
+ this.hasFocus = false;
47
+ this.changed = false;
48
+ this.active = false;
49
+ this.index = 0;
50
+ this.entryCount = 0;
51
+ this.oldElementValue = this.element.value;
52
+
53
+ if(this.setOptions)
54
+ this.setOptions(options);
55
+ else
56
+ this.options = options || { };
57
+
58
+ this.options.paramName = this.options.paramName || this.element.name;
59
+ this.options.tokens = this.options.tokens || [];
60
+ this.options.frequency = this.options.frequency || 0.4;
61
+ this.options.minChars = this.options.minChars || 1;
62
+ this.options.onShow = this.options.onShow ||
63
+ function(element, update){
64
+ if(!update.style.position || update.style.position=='absolute') {
65
+ update.style.position = 'absolute';
66
+ Position.clone(element, update, {
67
+ setHeight: false,
68
+ offsetTop: element.offsetHeight
69
+ });
70
+ }
71
+ Effect.Appear(update,{duration:0.15});
72
+ };
73
+ this.options.onHide = this.options.onHide ||
74
+ function(element, update){ new Effect.Fade(update,{duration:0.15}) };
75
75
 
76
- if(typeof(this.options.tokens) == 'string')
77
- this.options.tokens = new Array(this.options.tokens);
78
- // Force carriage returns as token delimiters anyway
79
- if (!this.options.tokens.include('\n'))
80
- this.options.tokens.push('\n');
76
+ if(typeof(this.options.tokens) == 'string')
77
+ this.options.tokens = new Array(this.options.tokens);
78
+ // Force carriage returns as token delimiters anyway
79
+ if (!this.options.tokens.include('\n'))
80
+ this.options.tokens.push('\n');
81
81
 
82
- this.observer = null;
82
+ this.observer = null;
83
83
 
84
- this.element.setAttribute('autocomplete','off');
84
+ this.element.setAttribute('autocomplete','off');
85
85
 
86
- Element.hide(this.update);
86
+ Element.hide(this.update);
87
87
 
88
- Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
89
- Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
88
+ Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
89
+ Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
90
90
  },
91
91
 
92
92
  show: function() {
93
- if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
94
- if(!this.iefix &&
95
- (Prototype.Browser.IE) &&
96
- (Element.getStyle(this.update, 'position')=='absolute')) {
97
- new Insertion.After(this.update,
98
- '<iframe id="' + this.update.id + '_iefix" '+
99
- 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
100
- 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
101
- this.iefix = $(this.update.id+'_iefix');
102
- }
103
- if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
93
+ if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
94
+ if(!this.iefix &&
95
+ (Prototype.Browser.IE) &&
96
+ (Element.getStyle(this.update, 'position')=='absolute')) {
97
+ new Insertion.After(this.update,
98
+ '<iframe id="' + this.update.id + '_iefix" '+
99
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
100
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
101
+ this.iefix = $(this.update.id+'_iefix');
102
+ }
103
+ if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
104
104
  },
105
105
 
106
106
  fixIEOverlapping: function() {
107
- Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
108
- this.iefix.style.zIndex = 1;
109
- this.update.style.zIndex = 2;
110
- Element.show(this.iefix);
107
+ Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
108
+ this.iefix.style.zIndex = 1;
109
+ this.update.style.zIndex = 2;
110
+ Element.show(this.iefix);
111
111
  },
112
112
 
113
113
  hide: function() {
114
- this.stopIndicator();
115
- if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
116
- if(this.iefix) Element.hide(this.iefix);
114
+ this.stopIndicator();
115
+ if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
116
+ if(this.iefix) Element.hide(this.iefix);
117
117
  },
118
118
 
119
119
  startIndicator: function() {
120
- if(this.options.indicator) Element.show(this.options.indicator);
120
+ if(this.options.indicator) Element.show(this.options.indicator);
121
121
  },
122
122
 
123
123
  stopIndicator: function() {
124
- if(this.options.indicator) Element.hide(this.options.indicator);
124
+ if(this.options.indicator) Element.hide(this.options.indicator);
125
125
  },
126
126
 
127
127
  onKeyPress: function(event) {
128
- if(this.active)
129
- switch(event.keyCode) {
130
- case Event.KEY_TAB:
131
- case Event.KEY_RETURN:
132
- this.selectEntry();
133
- Event.stop(event);
134
- case Event.KEY_ESC:
135
- this.hide();
136
- this.active = false;
137
- Event.stop(event);
138
- return;
139
- case Event.KEY_LEFT:
140
- case Event.KEY_RIGHT:
141
- return;
142
- case Event.KEY_UP:
143
- this.markPrevious();
144
- this.render();
145
- Event.stop(event);
146
- return;
147
- case Event.KEY_DOWN:
148
- this.markNext();
149
- this.render();
150
- Event.stop(event);
151
- return;
152
- }
153
- else
154
- if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
155
- (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
128
+ if(this.active)
129
+ switch(event.keyCode) {
130
+ case Event.KEY_TAB:
131
+ case Event.KEY_RETURN:
132
+ this.selectEntry();
133
+ Event.stop(event);
134
+ case Event.KEY_ESC:
135
+ this.hide();
136
+ this.active = false;
137
+ Event.stop(event);
138
+ return;
139
+ case Event.KEY_LEFT:
140
+ case Event.KEY_RIGHT:
141
+ return;
142
+ case Event.KEY_UP:
143
+ this.markPrevious();
144
+ this.render();
145
+ Event.stop(event);
146
+ return;
147
+ case Event.KEY_DOWN:
148
+ this.markNext();
149
+ this.render();
150
+ Event.stop(event);
151
+ return;
152
+ }
153
+ else
154
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
155
+ (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
156
156
 
157
- this.changed = true;
158
- this.hasFocus = true;
157
+ this.changed = true;
158
+ this.hasFocus = true;
159
159
 
160
- if(this.observer) clearTimeout(this.observer);
161
- this.observer =
162
- setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
160
+ if(this.observer) clearTimeout(this.observer);
161
+ this.observer =
162
+ setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
163
163
  },
164
164
 
165
165
  activate: function() {
166
- this.changed = false;
167
- this.hasFocus = true;
168
- this.getUpdatedChoices();
166
+ this.changed = false;
167
+ this.hasFocus = true;
168
+ this.getUpdatedChoices();
169
169
  },
170
170
 
171
171
  onHover: function(event) {
172
- var element = Event.findElement(event, 'LI');
173
- if(this.index != element.autocompleteIndex)
174
- {
175
- this.index = element.autocompleteIndex;
176
- this.render();
177
- }
178
- Event.stop(event);
172
+ var element = Event.findElement(event, 'LI');
173
+ if(this.index != element.autocompleteIndex)
174
+ {
175
+ this.index = element.autocompleteIndex;
176
+ this.render();
177
+ }
178
+ Event.stop(event);
179
179
  },
180
180
 
181
181
  onClick: function(event) {
182
- var element = Event.findElement(event, 'LI');
183
- this.index = element.autocompleteIndex;
184
- this.selectEntry();
185
- this.hide();
182
+ var element = Event.findElement(event, 'LI');
183
+ this.index = element.autocompleteIndex;
184
+ this.selectEntry();
185
+ this.hide();
186
186
  },
187
187
 
188
188
  onBlur: function(event) {
189
- // needed to make click events working
190
- setTimeout(this.hide.bind(this), 250);
191
- this.hasFocus = false;
192
- this.active = false;
189
+ // needed to make click events working
190
+ setTimeout(this.hide.bind(this), 250);
191
+ this.hasFocus = false;
192
+ this.active = false;
193
193
  },
194
194
 
195
195
  render: function() {
196
- if(this.entryCount > 0) {
197
- for (var i = 0; i < this.entryCount; i++)
198
- this.index==i ?
199
- Element.addClassName(this.getEntry(i),"selected") :
200
- Element.removeClassName(this.getEntry(i),"selected");
201
- if(this.hasFocus) {
202
- this.show();
203
- this.active = true;
204
- }
205
- } else {
206
- this.active = false;
207
- this.hide();
196
+ if(this.entryCount > 0) {
197
+ for (var i = 0; i < this.entryCount; i++)
198
+ this.index==i ?
199
+ Element.addClassName(this.getEntry(i),"selected") :
200
+ Element.removeClassName(this.getEntry(i),"selected");
201
+ if(this.hasFocus) {
202
+ this.show();
203
+ this.active = true;
208
204
  }
205
+ } else {
206
+ this.active = false;
207
+ this.hide();
208
+ }
209
209
  },
210
210
 
211
211
  markPrevious: function() {
212
- if(this.index > 0) this.index--;
213
- else this.index = this.entryCount-1;
214
- this.getEntry(this.index).scrollIntoView(true);
212
+ if(this.index > 0) this.index--;
213
+ else this.index = this.entryCount-1;
214
+ this.getEntry(this.index).scrollIntoView(true);
215
215
  },
216
216
 
217
217
  markNext: function() {
218
- if(this.index < this.entryCount-1) this.index++;
219
- else this.index = 0;
220
- this.getEntry(this.index).scrollIntoView(false);
218
+ if(this.index < this.entryCount-1) this.index++;
219
+ else this.index = 0;
220
+ this.getEntry(this.index).scrollIntoView(false);
221
221
  },
222
222
 
223
223
  getEntry: function(index) {
224
- return this.update.firstChild.childNodes[index];
224
+ return this.update.firstChild.childNodes[index];
225
225
  },
226
226
 
227
227
  getCurrentEntry: function() {
228
- return this.getEntry(this.index);
228
+ return this.getEntry(this.index);
229
229
  },
230
230
 
231
231
  selectEntry: function() {
232
- this.active = false;
233
- this.updateElement(this.getCurrentEntry());
232
+ this.active = false;
233
+ this.updateElement(this.getCurrentEntry());
234
234
  },
235
235
 
236
236
  updateElement: function(selectedElement) {
237
- if (this.options.updateElement) {
238
- this.options.updateElement(selectedElement);
239
- return;
240
- }
241
- var value = '';
242
- if (this.options.select) {
243
- var nodes = $(selectedElement).select('.' + this.options.select) || [];
244
- if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
245
- } else
246
- value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
247
-
248
- var bounds = this.getTokenBounds();
249
- if (bounds[0] != -1) {
250
- var newValue = this.element.value.substr(0, bounds[0]);
251
- var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
252
- if (whitespace)
253
- newValue += whitespace[0];
254
- this.element.value = newValue + value + this.element.value.substr(bounds[1]);
255
- } else {
256
- this.element.value = value;
257
- }
258
- this.oldElementValue = this.element.value;
259
- this.element.focus();
237
+ if (this.options.updateElement) {
238
+ this.options.updateElement(selectedElement);
239
+ return;
240
+ }
241
+ var value = '';
242
+ if (this.options.select) {
243
+ var nodes = $(selectedElement).select('.' + this.options.select) || [];
244
+ if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
245
+ } else
246
+ value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
247
+
248
+ var bounds = this.getTokenBounds();
249
+ if (bounds[0] != -1) {
250
+ var newValue = this.element.value.substr(0, bounds[0]);
251
+ var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
252
+ if (whitespace)
253
+ newValue += whitespace[0];
254
+ this.element.value = newValue + value + this.element.value.substr(bounds[1]);
255
+ } else {
256
+ this.element.value = value;
257
+ }
258
+ this.oldElementValue = this.element.value;
259
+ this.element.focus();
260
260
 
261
- if (this.options.afterUpdateElement)
262
- this.options.afterUpdateElement(this.element, selectedElement);
261
+ if (this.options.afterUpdateElement)
262
+ this.options.afterUpdateElement(this.element, selectedElement);
263
263
  },
264
264
 
265
265
  updateChoices: function(choices) {
266
- if(!this.changed && this.hasFocus) {
267
- this.update.innerHTML = choices;
268
- Element.cleanWhitespace(this.update);
269
- Element.cleanWhitespace(this.update.down());
270
-
271
- if(this.update.firstChild && this.update.down().childNodes) {
272
- this.entryCount =
273
- this.update.down().childNodes.length;
274
- for (var i = 0; i < this.entryCount; i++) {
275
- var entry = this.getEntry(i);
276
- entry.autocompleteIndex = i;
277
- this.addObservers(entry);
278
- }
279
- } else {
280
- this.entryCount = 0;
281
- }
266
+ if(!this.changed && this.hasFocus) {
267
+ this.update.innerHTML = choices;
268
+ Element.cleanWhitespace(this.update);
269
+ Element.cleanWhitespace(this.update.down());
270
+
271
+ if(this.update.firstChild && this.update.down().childNodes) {
272
+ this.entryCount =
273
+ this.update.down().childNodes.length;
274
+ for (var i = 0; i < this.entryCount; i++) {
275
+ var entry = this.getEntry(i);
276
+ entry.autocompleteIndex = i;
277
+ this.addObservers(entry);
278
+ }
279
+ } else {
280
+ this.entryCount = 0;
281
+ }
282
282
 
283
- this.stopIndicator();
284
- this.index = 0;
283
+ this.stopIndicator();
284
+ this.index = 0;
285
285
 
286
- if(this.entryCount==1 && this.options.autoSelect) {
287
- this.selectEntry();
288
- this.hide();
289
- } else {
290
- this.render();
291
- }
286
+ if(this.entryCount==1 && this.options.autoSelect) {
287
+ this.selectEntry();
288
+ this.hide();
289
+ } else {
290
+ this.render();
292
291
  }
292
+ }
293
293
  },
294
294
 
295
295
  addObservers: function(element) {
296
- Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
297
- Event.observe(element, "click", this.onClick.bindAsEventListener(this));
296
+ Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
297
+ Event.observe(element, "click", this.onClick.bindAsEventListener(this));
298
298
  },
299
299
 
300
300
  onObserverEvent: function() {
301
- this.changed = false;
302
- this.tokenBounds = null;
303
- if(this.getToken().length>=this.options.minChars) {
304
- this.getUpdatedChoices();
305
- } else {
306
- this.active = false;
307
- this.hide();
308
- }
309
- this.oldElementValue = this.element.value;
301
+ this.changed = false;
302
+ this.tokenBounds = null;
303
+ if(this.getToken().length>=this.options.minChars) {
304
+ this.getUpdatedChoices();
305
+ } else {
306
+ this.active = false;
307
+ this.hide();
308
+ }
309
+ this.oldElementValue = this.element.value;
310
310
  },
311
311
 
312
312
  getToken: function() {
313
- var bounds = this.getTokenBounds();
314
- return this.element.value.substring(bounds[0], bounds[1]).strip();
313
+ var bounds = this.getTokenBounds();
314
+ return this.element.value.substring(bounds[0], bounds[1]).strip();
315
315
  },
316
316
 
317
317
  getTokenBounds: function() {
318
- if (null != this.tokenBounds) return this.tokenBounds;
319
- var value = this.element.value;
320
- if (value.strip().empty()) return [-1, 0];
321
- var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
322
- var offset = (diff == this.oldElementValue.length ? 1 : 0);
323
- var prevTokenPos = -1, nextTokenPos = value.length;
324
- var tp;
325
- for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
326
- tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
327
- if (tp > prevTokenPos) prevTokenPos = tp;
328
- tp = value.indexOf(this.options.tokens[index], diff + offset);
329
- if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
330
- }
331
- return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
318
+ if (null != this.tokenBounds) return this.tokenBounds;
319
+ var value = this.element.value;
320
+ if (value.strip().empty()) return [-1, 0];
321
+ var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
322
+ var offset = (diff == this.oldElementValue.length ? 1 : 0);
323
+ var prevTokenPos = -1, nextTokenPos = value.length;
324
+ var tp;
325
+ for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
326
+ tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
327
+ if (tp > prevTokenPos) prevTokenPos = tp;
328
+ tp = value.indexOf(this.options.tokens[index], diff + offset);
329
+ if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
330
+ }
331
+ return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
332
332
  }
333
333
  });
334
334
 
335
335
  Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
336
336
  var boundary = Math.min(newS.length, oldS.length);
337
337
  for (var index = 0; index < boundary; ++index)
338
- if (newS[index] != oldS[index])
339
- return index;
338
+ if (newS[index] != oldS[index])
339
+ return index;
340
340
  return boundary;
341
341
  };
342
342
 
343
343
  Ajax.Autocompleter = Class.create(Autocompleter.Base, {
344
344
  initialize: function(element, update, url, options) {
345
- this.baseInitialize(element, update, options);
346
- this.options.asynchronous = true;
347
- this.options.onComplete = this.onComplete.bind(this);
348
- this.options.defaultParams = this.options.parameters || null;
349
- this.url = url;
345
+ this.baseInitialize(element, update, options);
346
+ this.options.asynchronous = true;
347
+ this.options.onComplete = this.onComplete.bind(this);
348
+ this.options.defaultParams = this.options.parameters || null;
349
+ this.url = url;
350
350
  },
351
351
 
352
352
  getUpdatedChoices: function() {
353
- this.startIndicator();
353
+ this.startIndicator();
354
354
 
355
- var entry = encodeURIComponent(this.options.paramName) + '=' +
356
- encodeURIComponent(this.getToken());
355
+ var entry = encodeURIComponent(this.options.paramName) + '=' +
356
+ encodeURIComponent(this.getToken());
357
357
 
358
- this.options.parameters = this.options.callback ?
359
- this.options.callback(this.element, entry) : entry;
358
+ this.options.parameters = this.options.callback ?
359
+ this.options.callback(this.element, entry) : entry;
360
360
 
361
- if(this.options.defaultParams)
362
- this.options.parameters += '&' + this.options.defaultParams;
361
+ if(this.options.defaultParams)
362
+ this.options.parameters += '&' + this.options.defaultParams;
363
363
 
364
- new Ajax.Request(this.url, this.options);
364
+ new Ajax.Request(this.url, this.options);
365
365
  },
366
366
 
367
367
  onComplete: function(request) {
368
- this.updateChoices(request.responseText);
368
+ this.updateChoices(request.responseText);
369
369
  }
370
370
  });
371
371
 
@@ -382,22 +382,22 @@ Ajax.Autocompleter = Class.create(Autocompleter.Base, {
382
382
  // - choices - How many autocompletion choices to offer
383
383
  //
384
384
  // - partialSearch - If false, the autocompleter will match entered
385
- // text only at the beginning of strings in the
386
- // autocomplete array. Defaults to true, which will
387
- // match text at the beginning of any *word* in the
388
- // strings in the autocomplete array. If you want to
389
- // search anywhere in the string, additionally set
390
- // the option fullSearch to true (default: off).
385
+ // text only at the beginning of strings in the
386
+ // autocomplete array. Defaults to true, which will
387
+ // match text at the beginning of any *word* in the
388
+ // strings in the autocomplete array. If you want to
389
+ // search anywhere in the string, additionally set
390
+ // the option fullSearch to true (default: off).
391
391
  //
392
392
  // - fullSsearch - Search anywhere in autocomplete array strings.
393
393
  //
394
394
  // - partialChars - How many characters to enter before triggering
395
- // a partial match (unlike minChars, which defines
396
- // how many characters are required to do any match
397
- // at all). Defaults to 2.
395
+ // a partial match (unlike minChars, which defines
396
+ // how many characters are required to do any match
397
+ // at all). Defaults to 2.
398
398
  //
399
399
  // - ignoreCase - Whether to ignore case when autocompleting.
400
- // Defaults to true.
400
+ // Defaults to true.
401
401
  //
402
402
  // It's possible to pass in a custom function as the 'selector'
403
403
  // option, if you prefer to write your own autocompletion logic.
@@ -406,61 +406,61 @@ Ajax.Autocompleter = Class.create(Autocompleter.Base, {
406
406
 
407
407
  Autocompleter.Local = Class.create(Autocompleter.Base, {
408
408
  initialize: function(element, update, array, options) {
409
- this.baseInitialize(element, update, options);
410
- this.options.array = array;
409
+ this.baseInitialize(element, update, options);
410
+ this.options.array = array;
411
411
  },
412
412
 
413
413
  getUpdatedChoices: function() {
414
- this.updateChoices(this.options.selector(this));
414
+ this.updateChoices(this.options.selector(this));
415
415
  },
416
416
 
417
417
  setOptions: function(options) {
418
- this.options = Object.extend({
419
- choices: 10,
420
- partialSearch: true,
421
- partialChars: 2,
422
- ignoreCase: true,
423
- fullSearch: false,
424
- selector: function(instance) {
425
- var ret = []; // Beginning matches
426
- var partial = []; // Inside matches
427
- var entry = instance.getToken();
428
- var count = 0;
429
-
430
- for (var i = 0; i < instance.options.array.length &&
431
- ret.length < instance.options.choices ; i++) {
432
-
433
- var elem = instance.options.array[i];
434
- var foundPos = instance.options.ignoreCase ?
435
- elem.toLowerCase().indexOf(entry.toLowerCase()) :
436
- elem.indexOf(entry);
437
-
438
- while (foundPos != -1) {
439
- if (foundPos == 0 && elem.length != entry.length) {
440
- ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
441
- elem.substr(entry.length) + "</li>");
442
- break;
443
- } else if (entry.length >= instance.options.partialChars &&
444
- instance.options.partialSearch && foundPos != -1) {
445
- if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
446
- partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
447
- elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
448
- foundPos + entry.length) + "</li>");
449
- break;
450
- }
451
- }
452
-
453
- foundPos = instance.options.ignoreCase ?
454
- elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
455
- elem.indexOf(entry, foundPos + 1);
456
-
457
- }
418
+ this.options = Object.extend({
419
+ choices: 10,
420
+ partialSearch: true,
421
+ partialChars: 2,
422
+ ignoreCase: true,
423
+ fullSearch: false,
424
+ selector: function(instance) {
425
+ var ret = []; // Beginning matches
426
+ var partial = []; // Inside matches
427
+ var entry = instance.getToken();
428
+ var count = 0;
429
+
430
+ for (var i = 0; i < instance.options.array.length &&
431
+ ret.length < instance.options.choices ; i++) {
432
+
433
+ var elem = instance.options.array[i];
434
+ var foundPos = instance.options.ignoreCase ?
435
+ elem.toLowerCase().indexOf(entry.toLowerCase()) :
436
+ elem.indexOf(entry);
437
+
438
+ while (foundPos != -1) {
439
+ if (foundPos == 0 && elem.length != entry.length) {
440
+ ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
441
+ elem.substr(entry.length) + "</li>");
442
+ break;
443
+ } else if (entry.length >= instance.options.partialChars &&
444
+ instance.options.partialSearch && foundPos != -1) {
445
+ if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
446
+ partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
447
+ elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
448
+ foundPos + entry.length) + "</li>");
449
+ break;
458
450
  }
459
- if (partial.length)
460
- ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
461
- return "<ul>" + ret.join('') + "</ul>";
462
451
  }
463
- }, options || { });
452
+
453
+ foundPos = instance.options.ignoreCase ?
454
+ elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
455
+ elem.indexOf(entry, foundPos + 1);
456
+
457
+ }
458
+ }
459
+ if (partial.length)
460
+ ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
461
+ return "<ul>" + ret.join('') + "</ul>";
462
+ }
463
+ }, options || { });
464
464
  }
465
465
  });
466
466
 
@@ -472,278 +472,278 @@ Autocompleter.Local = Class.create(Autocompleter.Base, {
472
472
  // waits 1 ms (with setTimeout) until it does the activation
473
473
  Field.scrollFreeActivate = function(field) {
474
474
  setTimeout(function() {
475
- Field.activate(field);
475
+ Field.activate(field);
476
476
  }, 1);
477
477
  };
478
478
 
479
479
  Ajax.InPlaceEditor = Class.create({
480
480
  initialize: function(element, url, options) {
481
- this.url = url;
482
- this.element = element = $(element);
483
- this.prepareOptions();
484
- this._controls = { };
485
- arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
486
- Object.extend(this.options, options || { });
487
- if (!this.options.formId && this.element.id) {
488
- this.options.formId = this.element.id + '-inplaceeditor';
489
- if ($(this.options.formId))
490
- this.options.formId = '';
491
- }
492
- if (this.options.externalControl)
493
- this.options.externalControl = $(this.options.externalControl);
494
- if (!this.options.externalControl)
495
- this.options.externalControlOnly = false;
496
- this._originalBackground = this.element.getStyle('background-color') || 'transparent';
497
- this.element.title = this.options.clickToEditText;
498
- this._boundCancelHandler = this.handleFormCancellation.bind(this);
499
- this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
500
- this._boundFailureHandler = this.handleAJAXFailure.bind(this);
501
- this._boundSubmitHandler = this.handleFormSubmission.bind(this);
502
- this._boundWrapperHandler = this.wrapUp.bind(this);
503
- this.registerListeners();
481
+ this.url = url;
482
+ this.element = element = $(element);
483
+ this.prepareOptions();
484
+ this._controls = { };
485
+ arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
486
+ Object.extend(this.options, options || { });
487
+ if (!this.options.formId && this.element.id) {
488
+ this.options.formId = this.element.id + '-inplaceeditor';
489
+ if ($(this.options.formId))
490
+ this.options.formId = '';
491
+ }
492
+ if (this.options.externalControl)
493
+ this.options.externalControl = $(this.options.externalControl);
494
+ if (!this.options.externalControl)
495
+ this.options.externalControlOnly = false;
496
+ this._originalBackground = this.element.getStyle('background-color') || 'transparent';
497
+ this.element.title = this.options.clickToEditText;
498
+ this._boundCancelHandler = this.handleFormCancellation.bind(this);
499
+ this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
500
+ this._boundFailureHandler = this.handleAJAXFailure.bind(this);
501
+ this._boundSubmitHandler = this.handleFormSubmission.bind(this);
502
+ this._boundWrapperHandler = this.wrapUp.bind(this);
503
+ this.registerListeners();
504
504
  },
505
505
  checkForEscapeOrReturn: function(e) {
506
- if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
507
- if (Event.KEY_ESC == e.keyCode)
508
- this.handleFormCancellation(e);
509
- else if (Event.KEY_RETURN == e.keyCode)
510
- this.handleFormSubmission(e);
506
+ if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
507
+ if (Event.KEY_ESC == e.keyCode)
508
+ this.handleFormCancellation(e);
509
+ else if (Event.KEY_RETURN == e.keyCode)
510
+ this.handleFormSubmission(e);
511
511
  },
512
512
  createControl: function(mode, handler, extraClasses) {
513
- var control = this.options[mode + 'Control'];
514
- var text = this.options[mode + 'Text'];
515
- if ('button' == control) {
516
- var btn = document.createElement('input');
517
- btn.type = 'submit';
518
- btn.value = text;
519
- btn.className = 'editor_' + mode + '_button';
520
- if ('cancel' == mode)
521
- btn.onclick = this._boundCancelHandler;
522
- this._form.appendChild(btn);
523
- this._controls[mode] = btn;
524
- } else if ('link' == control) {
525
- var link = document.createElement('a');
526
- link.href = '#';
527
- link.appendChild(document.createTextNode(text));
528
- link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
529
- link.className = 'editor_' + mode + '_link';
530
- if (extraClasses)
531
- link.className += ' ' + extraClasses;
532
- this._form.appendChild(link);
533
- this._controls[mode] = link;
534
- }
513
+ var control = this.options[mode + 'Control'];
514
+ var text = this.options[mode + 'Text'];
515
+ if ('button' == control) {
516
+ var btn = document.createElement('input');
517
+ btn.type = 'submit';
518
+ btn.value = text;
519
+ btn.className = 'editor_' + mode + '_button';
520
+ if ('cancel' == mode)
521
+ btn.onclick = this._boundCancelHandler;
522
+ this._form.appendChild(btn);
523
+ this._controls[mode] = btn;
524
+ } else if ('link' == control) {
525
+ var link = document.createElement('a');
526
+ link.href = '#';
527
+ link.appendChild(document.createTextNode(text));
528
+ link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
529
+ link.className = 'editor_' + mode + '_link';
530
+ if (extraClasses)
531
+ link.className += ' ' + extraClasses;
532
+ this._form.appendChild(link);
533
+ this._controls[mode] = link;
534
+ }
535
535
  },
536
536
  createEditField: function() {
537
- var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
538
- var fld;
539
- if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
540
- fld = document.createElement('input');
541
- fld.type = 'text';
542
- var size = this.options.size || this.options.cols || 0;
543
- if (0 < size) fld.size = size;
544
- } else {
545
- fld = document.createElement('textarea');
546
- fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
547
- fld.cols = this.options.cols || 40;
548
- }
549
- fld.name = this.options.paramName;
550
- fld.value = text; // No HTML breaks conversion anymore
551
- fld.className = 'editor_field';
552
- if (this.options.submitOnBlur)
553
- fld.onblur = this._boundSubmitHandler;
554
- this._controls.editor = fld;
555
- if (this.options.loadTextURL)
556
- this.loadExternalText();
557
- this._form.appendChild(this._controls.editor);
537
+ var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
538
+ var fld;
539
+ if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
540
+ fld = document.createElement('input');
541
+ fld.type = 'text';
542
+ var size = this.options.size || this.options.cols || 0;
543
+ if (0 < size) fld.size = size;
544
+ } else {
545
+ fld = document.createElement('textarea');
546
+ fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
547
+ fld.cols = this.options.cols || 40;
548
+ }
549
+ fld.name = this.options.paramName;
550
+ fld.value = text; // No HTML breaks conversion anymore
551
+ fld.className = 'editor_field';
552
+ if (this.options.submitOnBlur)
553
+ fld.onblur = this._boundSubmitHandler;
554
+ this._controls.editor = fld;
555
+ if (this.options.loadTextURL)
556
+ this.loadExternalText();
557
+ this._form.appendChild(this._controls.editor);
558
558
  },
559
559
  createForm: function() {
560
- var ipe = this;
561
- function addText(mode, condition) {
562
- var text = ipe.options['text' + mode + 'Controls'];
563
- if (!text || condition === false) return;
564
- ipe._form.appendChild(document.createTextNode(text));
565
- };
566
- this._form = $(document.createElement('form'));
567
- this._form.id = this.options.formId;
568
- this._form.addClassName(this.options.formClassName);
569
- this._form.onsubmit = this._boundSubmitHandler;
570
- this.createEditField();
571
- if ('textarea' == this._controls.editor.tagName.toLowerCase())
572
- this._form.appendChild(document.createElement('br'));
573
- if (this.options.onFormCustomization)
574
- this.options.onFormCustomization(this, this._form);
575
- addText('Before', this.options.okControl || this.options.cancelControl);
576
- this.createControl('ok', this._boundSubmitHandler);
577
- addText('Between', this.options.okControl && this.options.cancelControl);
578
- this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
579
- addText('After', this.options.okControl || this.options.cancelControl);
560
+ var ipe = this;
561
+ function addText(mode, condition) {
562
+ var text = ipe.options['text' + mode + 'Controls'];
563
+ if (!text || condition === false) return;
564
+ ipe._form.appendChild(document.createTextNode(text));
565
+ };
566
+ this._form = $(document.createElement('form'));
567
+ this._form.id = this.options.formId;
568
+ this._form.addClassName(this.options.formClassName);
569
+ this._form.onsubmit = this._boundSubmitHandler;
570
+ this.createEditField();
571
+ if ('textarea' == this._controls.editor.tagName.toLowerCase())
572
+ this._form.appendChild(document.createElement('br'));
573
+ if (this.options.onFormCustomization)
574
+ this.options.onFormCustomization(this, this._form);
575
+ addText('Before', this.options.okControl || this.options.cancelControl);
576
+ this.createControl('ok', this._boundSubmitHandler);
577
+ addText('Between', this.options.okControl && this.options.cancelControl);
578
+ this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
579
+ addText('After', this.options.okControl || this.options.cancelControl);
580
580
  },
581
581
  destroy: function() {
582
- if (this._oldInnerHTML)
583
- this.element.innerHTML = this._oldInnerHTML;
584
- this.leaveEditMode();
585
- this.unregisterListeners();
582
+ if (this._oldInnerHTML)
583
+ this.element.innerHTML = this._oldInnerHTML;
584
+ this.leaveEditMode();
585
+ this.unregisterListeners();
586
586
  },
587
587
  enterEditMode: function(e) {
588
- if (this._saving || this._editing) return;
589
- this._editing = true;
590
- this.triggerCallback('onEnterEditMode');
591
- if (this.options.externalControl)
592
- this.options.externalControl.hide();
593
- this.element.hide();
594
- this.createForm();
595
- this.element.parentNode.insertBefore(this._form, this.element);
596
- if (!this.options.loadTextURL)
597
- this.postProcessEditField();
598
- if (e) Event.stop(e);
588
+ if (this._saving || this._editing) return;
589
+ this._editing = true;
590
+ this.triggerCallback('onEnterEditMode');
591
+ if (this.options.externalControl)
592
+ this.options.externalControl.hide();
593
+ this.element.hide();
594
+ this.createForm();
595
+ this.element.parentNode.insertBefore(this._form, this.element);
596
+ if (!this.options.loadTextURL)
597
+ this.postProcessEditField();
598
+ if (e) Event.stop(e);
599
599
  },
600
600
  enterHover: function(e) {
601
- if (this.options.hoverClassName)
602
- this.element.addClassName(this.options.hoverClassName);
603
- if (this._saving) return;
604
- this.triggerCallback('onEnterHover');
601
+ if (this.options.hoverClassName)
602
+ this.element.addClassName(this.options.hoverClassName);
603
+ if (this._saving) return;
604
+ this.triggerCallback('onEnterHover');
605
605
  },
606
606
  getText: function() {
607
- return this.element.innerHTML.unescapeHTML();
607
+ return this.element.innerHTML.unescapeHTML();
608
608
  },
609
609
  handleAJAXFailure: function(transport) {
610
- this.triggerCallback('onFailure', transport);
611
- if (this._oldInnerHTML) {
612
- this.element.innerHTML = this._oldInnerHTML;
613
- this._oldInnerHTML = null;
614
- }
610
+ this.triggerCallback('onFailure', transport);
611
+ if (this._oldInnerHTML) {
612
+ this.element.innerHTML = this._oldInnerHTML;
613
+ this._oldInnerHTML = null;
614
+ }
615
615
  },
616
616
  handleFormCancellation: function(e) {
617
- this.wrapUp();
618
- if (e) Event.stop(e);
617
+ this.wrapUp();
618
+ if (e) Event.stop(e);
619
619
  },
620
620
  handleFormSubmission: function(e) {
621
- var form = this._form;
622
- var value = $F(this._controls.editor);
623
- this.prepareSubmission();
624
- var params = this.options.callback(form, value) || '';
625
- if (Object.isString(params))
626
- params = params.toQueryParams();
627
- params.editorId = this.element.id;
628
- if (this.options.htmlResponse) {
629
- var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
630
- Object.extend(options, {
631
- parameters: params,
632
- onComplete: this._boundWrapperHandler,
633
- onFailure: this._boundFailureHandler
634
- });
635
- new Ajax.Updater({ success: this.element }, this.url, options);
636
- } else {
637
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
638
- Object.extend(options, {
639
- parameters: params,
640
- onComplete: this._boundWrapperHandler,
641
- onFailure: this._boundFailureHandler
642
- });
643
- new Ajax.Request(this.url, options);
644
- }
645
- if (e) Event.stop(e);
621
+ var form = this._form;
622
+ var value = $F(this._controls.editor);
623
+ this.prepareSubmission();
624
+ var params = this.options.callback(form, value) || '';
625
+ if (Object.isString(params))
626
+ params = params.toQueryParams();
627
+ params.editorId = this.element.id;
628
+ if (this.options.htmlResponse) {
629
+ var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
630
+ Object.extend(options, {
631
+ parameters: params,
632
+ onComplete: this._boundWrapperHandler,
633
+ onFailure: this._boundFailureHandler
634
+ });
635
+ new Ajax.Updater({ success: this.element }, this.url, options);
636
+ } else {
637
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
638
+ Object.extend(options, {
639
+ parameters: params,
640
+ onComplete: this._boundWrapperHandler,
641
+ onFailure: this._boundFailureHandler
642
+ });
643
+ new Ajax.Request(this.url, options);
644
+ }
645
+ if (e) Event.stop(e);
646
646
  },
647
647
  leaveEditMode: function() {
648
- this.element.removeClassName(this.options.savingClassName);
649
- this.removeForm();
650
- this.leaveHover();
651
- this.element.style.backgroundColor = this._originalBackground;
652
- this.element.show();
653
- if (this.options.externalControl)
654
- this.options.externalControl.show();
655
- this._saving = false;
656
- this._editing = false;
657
- this._oldInnerHTML = null;
658
- this.triggerCallback('onLeaveEditMode');
648
+ this.element.removeClassName(this.options.savingClassName);
649
+ this.removeForm();
650
+ this.leaveHover();
651
+ this.element.style.backgroundColor = this._originalBackground;
652
+ this.element.show();
653
+ if (this.options.externalControl)
654
+ this.options.externalControl.show();
655
+ this._saving = false;
656
+ this._editing = false;
657
+ this._oldInnerHTML = null;
658
+ this.triggerCallback('onLeaveEditMode');
659
659
  },
660
660
  leaveHover: function(e) {
661
- if (this.options.hoverClassName)
662
- this.element.removeClassName(this.options.hoverClassName);
663
- if (this._saving) return;
664
- this.triggerCallback('onLeaveHover');
661
+ if (this.options.hoverClassName)
662
+ this.element.removeClassName(this.options.hoverClassName);
663
+ if (this._saving) return;
664
+ this.triggerCallback('onLeaveHover');
665
665
  },
666
666
  loadExternalText: function() {
667
- this._form.addClassName(this.options.loadingClassName);
668
- this._controls.editor.disabled = true;
669
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
670
- Object.extend(options, {
671
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
672
- onComplete: Prototype.emptyFunction,
673
- onSuccess: function(transport) {
674
- this._form.removeClassName(this.options.loadingClassName);
675
- var text = transport.responseText;
676
- if (this.options.stripLoadedTextTags)
677
- text = text.stripTags();
678
- this._controls.editor.value = text;
679
- this._controls.editor.disabled = false;
680
- this.postProcessEditField();
681
- }.bind(this),
682
- onFailure: this._boundFailureHandler
683
- });
684
- new Ajax.Request(this.options.loadTextURL, options);
667
+ this._form.addClassName(this.options.loadingClassName);
668
+ this._controls.editor.disabled = true;
669
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
670
+ Object.extend(options, {
671
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
672
+ onComplete: Prototype.emptyFunction,
673
+ onSuccess: function(transport) {
674
+ this._form.removeClassName(this.options.loadingClassName);
675
+ var text = transport.responseText;
676
+ if (this.options.stripLoadedTextTags)
677
+ text = text.stripTags();
678
+ this._controls.editor.value = text;
679
+ this._controls.editor.disabled = false;
680
+ this.postProcessEditField();
681
+ }.bind(this),
682
+ onFailure: this._boundFailureHandler
683
+ });
684
+ new Ajax.Request(this.options.loadTextURL, options);
685
685
  },
686
686
  postProcessEditField: function() {
687
- var fpc = this.options.fieldPostCreation;
688
- if (fpc)
689
- $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
687
+ var fpc = this.options.fieldPostCreation;
688
+ if (fpc)
689
+ $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
690
690
  },
691
691
  prepareOptions: function() {
692
- this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
693
- Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
694
- [this._extraDefaultOptions].flatten().compact().each(function(defs) {
695
- Object.extend(this.options, defs);
696
- }.bind(this));
692
+ this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
693
+ Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
694
+ [this._extraDefaultOptions].flatten().compact().each(function(defs) {
695
+ Object.extend(this.options, defs);
696
+ }.bind(this));
697
697
  },
698
698
  prepareSubmission: function() {
699
- this._saving = true;
700
- this.removeForm();
701
- this.leaveHover();
702
- this.showSaving();
699
+ this._saving = true;
700
+ this.removeForm();
701
+ this.leaveHover();
702
+ this.showSaving();
703
703
  },
704
704
  registerListeners: function() {
705
- this._listeners = { };
706
- var listener;
707
- $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
708
- listener = this[pair.value].bind(this);
709
- this._listeners[pair.key] = listener;
710
- if (!this.options.externalControlOnly)
711
- this.element.observe(pair.key, listener);
712
- if (this.options.externalControl)
713
- this.options.externalControl.observe(pair.key, listener);
714
- }.bind(this));
705
+ this._listeners = { };
706
+ var listener;
707
+ $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
708
+ listener = this[pair.value].bind(this);
709
+ this._listeners[pair.key] = listener;
710
+ if (!this.options.externalControlOnly)
711
+ this.element.observe(pair.key, listener);
712
+ if (this.options.externalControl)
713
+ this.options.externalControl.observe(pair.key, listener);
714
+ }.bind(this));
715
715
  },
716
716
  removeForm: function() {
717
- if (!this._form) return;
718
- this._form.remove();
719
- this._form = null;
720
- this._controls = { };
717
+ if (!this._form) return;
718
+ this._form.remove();
719
+ this._form = null;
720
+ this._controls = { };
721
721
  },
722
722
  showSaving: function() {
723
- this._oldInnerHTML = this.element.innerHTML;
724
- this.element.innerHTML = this.options.savingText;
725
- this.element.addClassName(this.options.savingClassName);
726
- this.element.style.backgroundColor = this._originalBackground;
727
- this.element.show();
723
+ this._oldInnerHTML = this.element.innerHTML;
724
+ this.element.innerHTML = this.options.savingText;
725
+ this.element.addClassName(this.options.savingClassName);
726
+ this.element.style.backgroundColor = this._originalBackground;
727
+ this.element.show();
728
728
  },
729
729
  triggerCallback: function(cbName, arg) {
730
- if ('function' == typeof this.options[cbName]) {
731
- this.options[cbName](this, arg);
732
- }
730
+ if ('function' == typeof this.options[cbName]) {
731
+ this.options[cbName](this, arg);
732
+ }
733
733
  },
734
734
  unregisterListeners: function() {
735
- $H(this._listeners).each(function(pair) {
736
- if (!this.options.externalControlOnly)
737
- this.element.stopObserving(pair.key, pair.value);
738
- if (this.options.externalControl)
739
- this.options.externalControl.stopObserving(pair.key, pair.value);
740
- }.bind(this));
735
+ $H(this._listeners).each(function(pair) {
736
+ if (!this.options.externalControlOnly)
737
+ this.element.stopObserving(pair.key, pair.value);
738
+ if (this.options.externalControl)
739
+ this.options.externalControl.stopObserving(pair.key, pair.value);
740
+ }.bind(this));
741
741
  },
742
742
  wrapUp: function(transport) {
743
- this.leaveEditMode();
744
- // Can't use triggerCallback due to backward compatibility: requires
745
- // binding + direct element
746
- this._boundComplete(transport, this.element);
743
+ this.leaveEditMode();
744
+ // Can't use triggerCallback due to backward compatibility: requires
745
+ // binding + direct element
746
+ this._boundComplete(transport, this.element);
747
747
  }
748
748
  });
749
749
 
@@ -753,183 +753,183 @@ Object.extend(Ajax.InPlaceEditor.prototype, {
753
753
 
754
754
  Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
755
755
  initialize: function($super, element, url, options) {
756
- this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
757
- $super(element, url, options);
756
+ this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
757
+ $super(element, url, options);
758
758
  },
759
759
 
760
760
  createEditField: function() {
761
- var list = document.createElement('select');
762
- list.name = this.options.paramName;
763
- list.size = 1;
764
- this._controls.editor = list;
765
- this._collection = this.options.collection || [];
766
- if (this.options.loadCollectionURL)
767
- this.loadCollection();
768
- else
769
- this.checkForExternalText();
770
- this._form.appendChild(this._controls.editor);
761
+ var list = document.createElement('select');
762
+ list.name = this.options.paramName;
763
+ list.size = 1;
764
+ this._controls.editor = list;
765
+ this._collection = this.options.collection || [];
766
+ if (this.options.loadCollectionURL)
767
+ this.loadCollection();
768
+ else
769
+ this.checkForExternalText();
770
+ this._form.appendChild(this._controls.editor);
771
771
  },
772
772
 
773
773
  loadCollection: function() {
774
- this._form.addClassName(this.options.loadingClassName);
775
- this.showLoadingText(this.options.loadingCollectionText);
776
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
777
- Object.extend(options, {
778
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
779
- onComplete: Prototype.emptyFunction,
780
- onSuccess: function(transport) {
781
- var js = transport.responseText.strip();
782
- if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
783
- throw('Server returned an invalid collection representation.');
784
- this._collection = eval(js);
785
- this.checkForExternalText();
786
- }.bind(this),
787
- onFailure: this.onFailure
788
- });
789
- new Ajax.Request(this.options.loadCollectionURL, options);
774
+ this._form.addClassName(this.options.loadingClassName);
775
+ this.showLoadingText(this.options.loadingCollectionText);
776
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
777
+ Object.extend(options, {
778
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
779
+ onComplete: Prototype.emptyFunction,
780
+ onSuccess: function(transport) {
781
+ var js = transport.responseText.strip();
782
+ if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
783
+ throw('Server returned an invalid collection representation.');
784
+ this._collection = eval(js);
785
+ this.checkForExternalText();
786
+ }.bind(this),
787
+ onFailure: this.onFailure
788
+ });
789
+ new Ajax.Request(this.options.loadCollectionURL, options);
790
790
  },
791
791
 
792
792
  showLoadingText: function(text) {
793
- this._controls.editor.disabled = true;
794
- var tempOption = this._controls.editor.firstChild;
795
- if (!tempOption) {
796
- tempOption = document.createElement('option');
797
- tempOption.value = '';
798
- this._controls.editor.appendChild(tempOption);
799
- tempOption.selected = true;
800
- }
801
- tempOption.update((text || '').stripScripts().stripTags());
793
+ this._controls.editor.disabled = true;
794
+ var tempOption = this._controls.editor.firstChild;
795
+ if (!tempOption) {
796
+ tempOption = document.createElement('option');
797
+ tempOption.value = '';
798
+ this._controls.editor.appendChild(tempOption);
799
+ tempOption.selected = true;
800
+ }
801
+ tempOption.update((text || '').stripScripts().stripTags());
802
802
  },
803
803
 
804
804
  checkForExternalText: function() {
805
- this._text = this.getText();
806
- if (this.options.loadTextURL)
807
- this.loadExternalText();
808
- else
809
- this.buildOptionList();
805
+ this._text = this.getText();
806
+ if (this.options.loadTextURL)
807
+ this.loadExternalText();
808
+ else
809
+ this.buildOptionList();
810
810
  },
811
811
 
812
812
  loadExternalText: function() {
813
- this.showLoadingText(this.options.loadingText);
814
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
815
- Object.extend(options, {
816
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
817
- onComplete: Prototype.emptyFunction,
818
- onSuccess: function(transport) {
819
- this._text = transport.responseText.strip();
820
- this.buildOptionList();
821
- }.bind(this),
822
- onFailure: this.onFailure
823
- });
824
- new Ajax.Request(this.options.loadTextURL, options);
813
+ this.showLoadingText(this.options.loadingText);
814
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
815
+ Object.extend(options, {
816
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
817
+ onComplete: Prototype.emptyFunction,
818
+ onSuccess: function(transport) {
819
+ this._text = transport.responseText.strip();
820
+ this.buildOptionList();
821
+ }.bind(this),
822
+ onFailure: this.onFailure
823
+ });
824
+ new Ajax.Request(this.options.loadTextURL, options);
825
825
  },
826
826
 
827
827
  buildOptionList: function() {
828
- this._form.removeClassName(this.options.loadingClassName);
829
- this._collection = this._collection.map(function(entry) {
830
- return 2 === entry.length ? entry : [entry, entry].flatten();
831
- });
832
- var marker = ('value' in this.options) ? this.options.value : this._text;
833
- var textFound = this._collection.any(function(entry) {
834
- return entry[0] == marker;
835
- }.bind(this));
836
- this._controls.editor.update('');
837
- var option;
838
- this._collection.each(function(entry, index) {
839
- option = document.createElement('option');
840
- option.value = entry[0];
841
- option.selected = textFound ? entry[0] == marker : 0 == index;
842
- option.appendChild(document.createTextNode(entry[1]));
843
- this._controls.editor.appendChild(option);
844
- }.bind(this));
845
- this._controls.editor.disabled = false;
846
- Field.scrollFreeActivate(this._controls.editor);
828
+ this._form.removeClassName(this.options.loadingClassName);
829
+ this._collection = this._collection.map(function(entry) {
830
+ return 2 === entry.length ? entry : [entry, entry].flatten();
831
+ });
832
+ var marker = ('value' in this.options) ? this.options.value : this._text;
833
+ var textFound = this._collection.any(function(entry) {
834
+ return entry[0] == marker;
835
+ }.bind(this));
836
+ this._controls.editor.update('');
837
+ var option;
838
+ this._collection.each(function(entry, index) {
839
+ option = document.createElement('option');
840
+ option.value = entry[0];
841
+ option.selected = textFound ? entry[0] == marker : 0 == index;
842
+ option.appendChild(document.createTextNode(entry[1]));
843
+ this._controls.editor.appendChild(option);
844
+ }.bind(this));
845
+ this._controls.editor.disabled = false;
846
+ Field.scrollFreeActivate(this._controls.editor);
847
847
  }
848
848
  });
849
849
 
850
850
  //**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
851
851
  //**** This only exists for a while, in order to let ****
852
852
  //**** users adapt to the new API. Read up on the new ****
853
- //**** API and convert your code to it ASAP! ****
853
+ //**** API and convert your code to it ASAP! ****
854
854
 
855
855
  Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
856
856
  if (!options) return;
857
857
  function fallback(name, expr) {
858
- if (name in options || expr === undefined) return;
859
- options[name] = expr;
858
+ if (name in options || expr === undefined) return;
859
+ options[name] = expr;
860
860
  };
861
861
  fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
862
- options.cancelLink == options.cancelButton == false ? false : undefined)));
862
+ options.cancelLink == options.cancelButton == false ? false : undefined)));
863
863
  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
864
- options.okLink == options.okButton == false ? false : undefined)));
864
+ options.okLink == options.okButton == false ? false : undefined)));
865
865
  fallback('highlightColor', options.highlightcolor);
866
866
  fallback('highlightEndColor', options.highlightendcolor);
867
867
  };
868
868
 
869
869
  Object.extend(Ajax.InPlaceEditor, {
870
870
  DefaultOptions: {
871
- ajaxOptions: { },
872
- autoRows: 3, // Use when multi-line w/ rows == 1
873
- cancelControl: 'link', // 'link'|'button'|false
874
- cancelText: 'cancel',
875
- clickToEditText: 'Click to edit',
876
- externalControl: null, // id|elt
877
- externalControlOnly: false,
878
- fieldPostCreation: 'activate', // 'activate'|'focus'|false
879
- formClassName: 'inplaceeditor-form',
880
- formId: null, // id|elt
881
- highlightColor: '#ffff99',
882
- highlightEndColor: '#ffffff',
883
- hoverClassName: '',
884
- htmlResponse: true,
885
- loadingClassName: 'inplaceeditor-loading',
886
- loadingText: 'Loading...',
887
- okControl: 'button', // 'link'|'button'|false
888
- okText: 'ok',
889
- paramName: 'value',
890
- rows: 1, // If 1 and multi-line, uses autoRows
891
- savingClassName: 'inplaceeditor-saving',
892
- savingText: 'Saving...',
893
- size: 0,
894
- stripLoadedTextTags: false,
895
- submitOnBlur: false,
896
- textAfterControls: '',
897
- textBeforeControls: '',
898
- textBetweenControls: ''
871
+ ajaxOptions: { },
872
+ autoRows: 3, // Use when multi-line w/ rows == 1
873
+ cancelControl: 'link', // 'link'|'button'|false
874
+ cancelText: 'cancel',
875
+ clickToEditText: 'Click to edit',
876
+ externalControl: null, // id|elt
877
+ externalControlOnly: false,
878
+ fieldPostCreation: 'activate', // 'activate'|'focus'|false
879
+ formClassName: 'inplaceeditor-form',
880
+ formId: null, // id|elt
881
+ highlightColor: '#ffff99',
882
+ highlightEndColor: '#ffffff',
883
+ hoverClassName: '',
884
+ htmlResponse: true,
885
+ loadingClassName: 'inplaceeditor-loading',
886
+ loadingText: 'Loading...',
887
+ okControl: 'button', // 'link'|'button'|false
888
+ okText: 'ok',
889
+ paramName: 'value',
890
+ rows: 1, // If 1 and multi-line, uses autoRows
891
+ savingClassName: 'inplaceeditor-saving',
892
+ savingText: 'Saving...',
893
+ size: 0,
894
+ stripLoadedTextTags: false,
895
+ submitOnBlur: false,
896
+ textAfterControls: '',
897
+ textBeforeControls: '',
898
+ textBetweenControls: ''
899
899
  },
900
900
  DefaultCallbacks: {
901
- callback: function(form) {
902
- return Form.serialize(form);
903
- },
904
- onComplete: function(transport, element) {
905
- // For backward compatibility, this one is bound to the IPE, and passes
906
- // the element directly. It was too often customized, so we don't break it.
907
- new Effect.Highlight(element, {
908
- startcolor: this.options.highlightColor, keepBackgroundImage: true });
909
- },
910
- onEnterEditMode: null,
911
- onEnterHover: function(ipe) {
912
- ipe.element.style.backgroundColor = ipe.options.highlightColor;
913
- if (ipe._effect)
914
- ipe._effect.cancel();
915
- },
916
- onFailure: function(transport, ipe) {
917
- alert('Error communication with the server: ' + transport.responseText.stripTags());
918
- },
919
- onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
920
- onLeaveEditMode: null,
921
- onLeaveHover: function(ipe) {
922
- ipe._effect = new Effect.Highlight(ipe.element, {
923
- startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
924
- restorecolor: ipe._originalBackground, keepBackgroundImage: true
925
- });
926
- }
901
+ callback: function(form) {
902
+ return Form.serialize(form);
903
+ },
904
+ onComplete: function(transport, element) {
905
+ // For backward compatibility, this one is bound to the IPE, and passes
906
+ // the element directly. It was too often customized, so we don't break it.
907
+ new Effect.Highlight(element, {
908
+ startcolor: this.options.highlightColor, keepBackgroundImage: true });
909
+ },
910
+ onEnterEditMode: null,
911
+ onEnterHover: function(ipe) {
912
+ ipe.element.style.backgroundColor = ipe.options.highlightColor;
913
+ if (ipe._effect)
914
+ ipe._effect.cancel();
915
+ },
916
+ onFailure: function(transport, ipe) {
917
+ alert('Error communication with the server: ' + transport.responseText.stripTags());
918
+ },
919
+ onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
920
+ onLeaveEditMode: null,
921
+ onLeaveHover: function(ipe) {
922
+ ipe._effect = new Effect.Highlight(ipe.element, {
923
+ startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
924
+ restorecolor: ipe._originalBackground, keepBackgroundImage: true
925
+ });
926
+ }
927
927
  },
928
928
  Listeners: {
929
- click: 'enterEditMode',
930
- keydown: 'checkForEscapeOrReturn',
931
- mouseover: 'enterHover',
932
- mouseout: 'leaveHover'
929
+ click: 'enterEditMode',
930
+ keydown: 'checkForEscapeOrReturn',
931
+ mouseover: 'enterHover',
932
+ mouseout: 'leaveHover'
933
933
  }
934
934
  });
935
935
 
@@ -943,21 +943,21 @@ Ajax.InPlaceCollectionEditor.DefaultOptions = {
943
943
 
944
944
  Form.Element.DelayedObserver = Class.create({
945
945
  initialize: function(element, delay, callback) {
946
- this.delay = delay || 0.5;
947
- this.element = $(element);
948
- this.callback = callback;
949
- this.timer = null;
950
- this.lastValue = $F(this.element);
951
- Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
946
+ this.delay = delay || 0.5;
947
+ this.element = $(element);
948
+ this.callback = callback;
949
+ this.timer = null;
950
+ this.lastValue = $F(this.element);
951
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
952
952
  },
953
953
  delayedListener: function(event) {
954
- if(this.lastValue == $F(this.element)) return;
955
- if(this.timer) clearTimeout(this.timer);
956
- this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
957
- this.lastValue = $F(this.element);
954
+ if(this.lastValue == $F(this.element)) return;
955
+ if(this.timer) clearTimeout(this.timer);
956
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
957
+ this.lastValue = $F(this.element);
958
958
  },
959
959
  onTimerEvent: function() {
960
- this.timer = null;
961
- this.callback(this.element, $F(this.element));
960
+ this.timer = null;
961
+ this.callback(this.element, $F(this.element));
962
962
  }
963
963
  });