browsercms 3.1.5 → 3.3.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (425) hide show
  1. data/app/controllers/cms/base_controller.rb +3 -3
  2. data/app/controllers/cms/content_block_controller.rb +2 -2
  3. data/app/controllers/cms/content_controller.rb +5 -4
  4. data/app/controllers/cms/error_handling.rb +1 -1
  5. data/app/controllers/cms/routes_controller.rb +4 -5
  6. data/app/controllers/cms/section_nodes_controller.rb +1 -6
  7. data/app/controllers/cms/sections_controller.rb +2 -3
  8. data/app/controllers/cms/tasks_controller.rb +3 -0
  9. data/app/controllers/cms/users_controller.rb +1 -1
  10. data/app/helpers/cms/application_helper.rb +137 -34
  11. data/app/helpers/cms/form_builder.rb +33 -21
  12. data/app/helpers/cms/page_helper.rb +43 -10
  13. data/app/helpers/cms/path_helper.rb +1 -1
  14. data/app/helpers/cms/rendering_helper.rb +3 -4
  15. data/app/helpers/cms/section_nodes_helper.rb +5 -43
  16. data/app/models/abstract_file_block.rb +1 -16
  17. data/app/models/attachment.rb +57 -22
  18. data/app/models/category.rb +4 -4
  19. data/app/models/category_type.rb +2 -2
  20. data/app/models/cms/view_context.rb +46 -0
  21. data/app/models/connector.rb +7 -6
  22. data/app/models/content_type.rb +3 -3
  23. data/app/models/dynamic_view.rb +1 -1
  24. data/app/models/email_message.rb +2 -2
  25. data/app/models/file_block.rb +12 -0
  26. data/app/models/group.rb +4 -4
  27. data/app/models/group_type.rb +4 -4
  28. data/app/models/html_block.rb +1 -1
  29. data/app/models/image_block.rb +12 -0
  30. data/app/models/link.rb +22 -5
  31. data/app/models/page.rb +87 -46
  32. data/app/models/page_route.rb +61 -6
  33. data/app/models/permission.rb +1 -1
  34. data/app/models/portlet.rb +14 -4
  35. data/app/models/section.rb +48 -86
  36. data/app/models/section_node.rb +25 -40
  37. data/app/models/site.rb +1 -1
  38. data/app/models/tag.rb +1 -1
  39. data/app/models/task.rb +8 -7
  40. data/app/models/user.rb +2 -7
  41. data/app/portlets/forgot_password_portlet.rb +6 -2
  42. data/app/portlets/reset_password_portlet.rb +1 -1
  43. data/app/views/cms/blocks/_toolbar.html.erb +1 -1
  44. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +3 -6
  45. data/app/views/cms/blocks/_toolbar_for_member.html.erb +3 -5
  46. data/app/views/cms/blocks/edit.html.erb +4 -4
  47. data/app/views/cms/blocks/index.html.erb +7 -7
  48. data/app/views/cms/blocks/new.html.erb +4 -4
  49. data/app/views/cms/blocks/show.html.erb +2 -2
  50. data/app/views/cms/blocks/usages.html.erb +2 -2
  51. data/app/views/cms/blocks/versions.html.erb +4 -4
  52. data/app/views/cms/cache/show.html.erb +2 -2
  53. data/app/views/cms/categories/_form.html.erb +2 -2
  54. data/app/views/cms/connectors/new.html.erb +6 -8
  55. data/app/views/cms/content/no_page.html.erb +1 -1
  56. data/app/views/cms/content/show.html.erb +2 -7
  57. data/app/views/cms/dashboard/_page_drafts.html.erb +1 -1
  58. data/app/views/cms/dashboard/_tasks.html.erb +1 -1
  59. data/app/views/cms/dashboard/index.html.erb +1 -1
  60. data/app/views/cms/dynamic_views/_form.html.erb +2 -2
  61. data/app/views/cms/dynamic_views/index.html.erb +7 -10
  62. data/app/views/cms/email_messages/show.html.erb +2 -2
  63. data/app/views/cms/file_blocks/_form.html.erb +4 -4
  64. data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +2 -2
  65. data/app/views/cms/form_builder/_cms_file_field.html.erb +2 -2
  66. data/app/views/cms/form_builder/_cms_tag_list.html.erb +2 -2
  67. data/app/views/cms/form_builder/_cms_text_editor.html.erb +2 -2
  68. data/app/views/cms/groups/_form.html.erb +5 -5
  69. data/app/views/cms/groups/_permissions.html.erb +4 -4
  70. data/app/views/cms/groups/_sections.html.erb +1 -2
  71. data/app/views/cms/groups/index.html.erb +1 -1
  72. data/app/views/cms/html_blocks/render.html.erb +1 -1
  73. data/app/views/cms/image_blocks/_form.html.erb +4 -5
  74. data/app/views/cms/links/_form.html.erb +1 -1
  75. data/app/views/cms/links/edit.html.erb +2 -2
  76. data/app/views/cms/links/new.html.erb +2 -2
  77. data/app/views/cms/page_routes/_form.html.erb +2 -2
  78. data/app/views/cms/page_routes/index.html.erb +6 -9
  79. data/app/views/cms/page_routes/show.html.erb +5 -8
  80. data/app/views/cms/pages/_edit_connector.html.erb +1 -1
  81. data/app/views/cms/pages/_form.html.erb +3 -3
  82. data/app/views/cms/pages/edit.html.erb +2 -2
  83. data/app/views/cms/pages/new.html.erb +7 -7
  84. data/app/views/cms/pages/versions.html.erb +4 -4
  85. data/app/views/cms/redirects/_form.html.erb +2 -2
  86. data/app/views/cms/redirects/index.html.erb +8 -7
  87. data/app/views/cms/routes/index.html.erb +2 -2
  88. data/app/views/cms/section_nodes/_link.html.erb +3 -6
  89. data/app/views/cms/section_nodes/_node.html.erb +4 -13
  90. data/app/views/cms/section_nodes/_page.html.erb +7 -13
  91. data/app/views/cms/section_nodes/_section.html.erb +8 -24
  92. data/app/views/cms/section_nodes/_section_node.html.erb +10 -0
  93. data/app/views/cms/section_nodes/index.html.erb +18 -30
  94. data/app/views/cms/sections/_form.html.erb +4 -6
  95. data/app/views/cms/sections/edit.html.erb +2 -2
  96. data/app/views/cms/sections/index.html.erb +3 -3
  97. data/app/views/cms/sections/new.html.erb +3 -3
  98. data/app/views/cms/sessions/new.html.erb +3 -3
  99. data/app/views/cms/shared/_pagination.html.erb +1 -1
  100. data/app/views/cms/shared/error.html.erb +1 -1
  101. data/app/views/cms/tags/render.html.erb +2 -2
  102. data/app/views/cms/tasks/new.html.erb +4 -4
  103. data/app/views/cms/users/_form.html.erb +3 -3
  104. data/app/views/cms/users/_toolbar.html.erb +3 -3
  105. data/app/views/cms/users/change_password.html.erb +5 -5
  106. data/app/views/cms/users/edit.html.erb +2 -2
  107. data/app/views/cms/users/index.html.erb +4 -4
  108. data/app/views/cms/users/new.html.erb +2 -2
  109. data/app/views/cms/users/show.html.erb +16 -16
  110. data/app/views/layouts/_cms_toolbar.html.erb +5 -5
  111. data/app/views/layouts/_page_toolbar.html.erb +11 -11
  112. data/app/views/layouts/cms/_footer.erb +1 -1
  113. data/app/views/layouts/cms/_head.html.erb +2 -6
  114. data/app/views/layouts/cms/administration.html.erb +32 -32
  115. data/app/views/layouts/cms/content_library.html.erb +5 -5
  116. data/app/views/layouts/cms/toolbar.html.erb +1 -1
  117. data/app/views/portlets/email_page/render.html.erb +2 -2
  118. data/app/views/portlets/forgot_password/render.html.erb +1 -1
  119. data/app/views/portlets/login/render.html.erb +4 -2
  120. data/app/views/portlets/reset_password/render.html.erb +1 -1
  121. data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
  122. data/bin/bcms +0 -0
  123. data/bin/bcms-upgrade +232 -0
  124. data/bin/browsercms +2 -2
  125. data/browsercms.gemspec +16 -14
  126. data/db/migrate/20100705083859_browsercms_3_3_0.rb +56 -0
  127. data/db/seeds.rb +58 -0
  128. data/doc/guides/html/authentication.html +448 -192
  129. data/doc/guides/html/build_it_yourself.html +454 -175
  130. data/doc/guides/html/building_modules.html +451 -220
  131. data/doc/guides/html/building_templates.html +448 -498
  132. data/doc/guides/html/content_blocks.html +450 -470
  133. data/doc/guides/html/customizing_browsercms.html +453 -169
  134. data/doc/guides/html/deployment_guide.html +443 -82
  135. data/doc/guides/html/files/bcmsorg.js +28 -0
  136. data/doc/guides/html/files/clearfix.css +8 -0
  137. data/doc/guides/html/files/cufon.js +7 -0
  138. data/doc/guides/html/files/global.css +190 -0
  139. data/doc/guides/html/files/helvetica.js +91 -0
  140. data/doc/guides/html/files/jquery.js +11 -0
  141. data/doc/guides/html/getting_started.html +454 -213
  142. data/doc/guides/html/index.html +454 -174
  143. data/doc/guides/html/installing_modules.html +454 -186
  144. data/doc/guides/html/portlets.html +451 -232
  145. data/doc/guides/html/user_guide.html +452 -270
  146. data/doc/guides/html/writing_guides.html +454 -161
  147. data/lib/acts_as_list.rb +1 -1
  148. data/lib/browsercms.rb +10 -6
  149. data/lib/cms/acts.rb +7 -0
  150. data/lib/cms/authentication.rb +4 -0
  151. data/lib/cms/authentication/controller.rb +1 -1
  152. data/lib/cms/behaviors.rb +1 -1
  153. data/lib/cms/behaviors/archiving.rb +2 -2
  154. data/lib/cms/behaviors/attaching.rb +28 -43
  155. data/lib/cms/behaviors/categorizing.rb +1 -1
  156. data/lib/cms/behaviors/connecting.rb +27 -12
  157. data/lib/cms/behaviors/dynamic_attributes.rb +8 -5
  158. data/lib/cms/behaviors/hiding.rb +2 -2
  159. data/lib/cms/behaviors/publishing.rb +32 -22
  160. data/lib/cms/behaviors/rendering.rb +41 -18
  161. data/lib/cms/behaviors/searching.rb +1 -1
  162. data/lib/cms/behaviors/soft_deleting.rb +58 -29
  163. data/lib/cms/behaviors/taggable.rb +1 -1
  164. data/lib/cms/behaviors/userstamping.rb +5 -4
  165. data/lib/cms/behaviors/versioning.rb +192 -111
  166. data/lib/cms/content_rendering_support.rb +3 -3
  167. data/lib/cms/date_picker.rb +23 -0
  168. data/lib/cms/engine.rb +46 -0
  169. data/lib/cms/extensions.rb +1 -1
  170. data/lib/cms/extensions/active_record/errors.rb +2 -2
  171. data/lib/cms/extensions/hash.rb +4 -2
  172. data/lib/cms/extensions/string.rb +7 -2
  173. data/lib/cms/init.rb +32 -21
  174. data/lib/cms/module.rb +22 -0
  175. data/lib/cms/module_installation.rb +38 -0
  176. data/lib/cms/routes.rb +127 -115
  177. data/lib/cms/version.rb +2 -2
  178. data/lib/generators/browser_cms.rb +12 -0
  179. data/lib/generators/browser_cms/cms/USAGE +2 -0
  180. data/lib/generators/browser_cms/cms/cms_generator.rb +36 -0
  181. data/{rails_generators/browser_cms → lib/generators/browser_cms/cms}/templates/README +0 -0
  182. data/{rails_generators/browser_cms_demo_site → lib/generators/browser_cms/demo_site}/USAGE +0 -0
  183. data/lib/generators/browser_cms/demo_site/demo_site_generator.rb +138 -0
  184. data/lib/generators/browser_cms/demo_site/templates/demo_site.rake +11 -0
  185. data/{rails_generators/browser_cms_demo_site/templates/migration.rb → lib/generators/browser_cms/demo_site/templates/migration.erb} +2 -8
  186. data/lib/generators/cms/content_block/USAGE +22 -0
  187. data/lib/generators/cms/content_block/content_block_generator.rb +55 -0
  188. data/{rails_generators → lib/generators/cms}/content_block/templates/_form.html.erb +0 -0
  189. data/{rails_generators → lib/generators/cms}/content_block/templates/content_block.rb +0 -0
  190. data/{rails_generators → lib/generators/cms}/content_block/templates/controller.rb +0 -0
  191. data/{rails_generators → lib/generators/cms}/content_block/templates/functional_test.erb +0 -0
  192. data/{rails_generators/content_block/templates/migration.rb → lib/generators/cms/content_block/templates/migration.erb} +1 -1
  193. data/{rails_generators → lib/generators/cms}/content_block/templates/render.html.erb +0 -0
  194. data/{rails_generators → lib/generators/cms}/content_block/templates/unit_test.erb +0 -0
  195. data/lib/generators/cms/install/USAGE +8 -0
  196. data/lib/generators/cms/install/install_generator.rb +20 -0
  197. data/{rails_generators → lib/generators/cms}/portlet/USAGE +3 -16
  198. data/lib/generators/cms/portlet/portlet_generator.rb +38 -0
  199. data/{rails_generators → lib/generators/cms}/portlet/templates/_form.html.erb +0 -0
  200. data/{rails_generators → lib/generators/cms}/portlet/templates/portlet.rb +0 -0
  201. data/{rails_generators → lib/generators/cms}/portlet/templates/portlet_helper.rb +0 -0
  202. data/{rails_generators → lib/generators/cms}/portlet/templates/render.html.erb +0 -0
  203. data/{rails_generators → lib/generators/cms}/portlet/templates/unit_test.erb +0 -0
  204. data/{rails_generators → lib/generators/cms}/template/USAGE +1 -1
  205. data/lib/generators/cms/template/template_generator.rb +18 -0
  206. data/lib/generators/cms/template/templates/template.erb +2 -0
  207. data/lib/generators/cms/upgrade_module/README.txt +3 -0
  208. data/lib/generators/cms/upgrade_module/templates/20100705083859_browsercms_3_3_0.rb +56 -0
  209. data/lib/generators/cms/upgrade_module/templates/README +1 -0
  210. data/lib/generators/cms/upgrade_module/templates/USAGE.erb +10 -0
  211. data/lib/generators/cms/upgrade_module/templates/build_gem.rake +5 -0
  212. data/lib/generators/cms/upgrade_module/templates/engine.erb +7 -0
  213. data/lib/generators/cms/upgrade_module/templates/gemspec.erb +25 -0
  214. data/lib/generators/cms/upgrade_module/templates/gitignore.erb +11 -0
  215. data/lib/generators/cms/upgrade_module/templates/install.erb +9 -0
  216. data/lib/generators/cms/upgrade_module/templates/module_file.erb +3 -0
  217. data/lib/generators/cms/upgrade_module/templates/routes.erb +7 -0
  218. data/lib/generators/cms/upgrade_module/upgrade_module_generator.rb +61 -0
  219. data/lib/tasks/build_gem.rake +1 -0
  220. data/lib/tasks/cms.rake +34 -6
  221. data/lib/tasks/cucumber.rake +53 -0
  222. data/lib/tasks/db.rake +2 -2
  223. data/public/javascripts/cms/application.js +144 -135
  224. data/public/javascripts/cms/sitemap.js +383 -357
  225. data/public/javascripts/jquery-ui.js +782 -591
  226. data/public/javascripts/jquery.cookie.js +38 -43
  227. data/public/javascripts/jquery.js +13 -8
  228. data/public/javascripts/jquery.taglist.js +7 -0
  229. data/public/stylesheets/cms/date_picker.css +49 -40
  230. data/rails/init.rb +2 -3
  231. data/templates/blank.rb +13 -7
  232. data/templates/demo.rb +15 -7
  233. data/templates/module.rb +12 -75
  234. metadata +87 -407
  235. data/app/helpers/cms/content_block_helper.rb +0 -27
  236. data/app/views/layouts/cms/thickbox.html.erb +0 -24
  237. data/db/migrate/20120117144039_browsercms315.rb +0 -94
  238. data/db/migrate/20121114172307_load_seeds.rb +0 -70
  239. data/lib/cms/addressable.rb +0 -83
  240. data/lib/cms/error_pages.rb +0 -8
  241. data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
  242. data/public/images/cms/thickbox/macFFBgHack.png +0 -0
  243. data/public/javascripts/jquery.contextMenu.js +0 -211
  244. data/public/javascripts/jquery.dimensions.js +0 -119
  245. data/public/javascripts/jquery.thickbox.js +0 -10
  246. data/public/stylesheets/cms/jquery.contextMenu.css +0 -61
  247. data/public/stylesheets/cms/thickbox.css +0 -163
  248. data/rails_generators/browser_cms/USAGE +0 -2
  249. data/rails_generators/browser_cms/browser_cms_generator.rb +0 -35
  250. data/rails_generators/browser_cms_demo_site/browser_cms_demo_site_generator.rb +0 -63
  251. data/rails_generators/content_block/USAGE +0 -32
  252. data/rails_generators/content_block/content_block_generator.rb +0 -69
  253. data/rails_generators/portlet/portlet_generator.rb +0 -35
  254. data/rails_generators/template/template_generator.rb +0 -18
  255. data/rails_generators/template/templates/template.erb +0 -3
  256. data/test/custom_assertions.rb +0 -74
  257. data/test/factories.rb +0 -111
  258. data/test/factories/sitemap_factories.rb +0 -28
  259. data/test/fixtures/connectors.yml +0 -97
  260. data/test/fixtures/content_type_groups.yml +0 -13
  261. data/test/fixtures/content_types.yml +0 -50
  262. data/test/fixtures/dynamic_view_versions.yml +0 -26
  263. data/test/fixtures/dynamic_views.yml +0 -26
  264. data/test/fixtures/group_permissions.yml +0 -16
  265. data/test/fixtures/group_sections.yml +0 -31
  266. data/test/fixtures/group_type_permissions.yml +0 -11
  267. data/test/fixtures/group_types.yml +0 -25
  268. data/test/fixtures/groups.yml +0 -25
  269. data/test/fixtures/html_block_versions.yml +0 -67
  270. data/test/fixtures/html_blocks.yml +0 -63
  271. data/test/fixtures/page_versions.yml +0 -265
  272. data/test/fixtures/pages.yml +0 -85
  273. data/test/fixtures/permissions.yml +0 -28
  274. data/test/fixtures/section_nodes.yml +0 -46
  275. data/test/fixtures/sections.yml +0 -19
  276. data/test/fixtures/sites.yml +0 -9
  277. data/test/fixtures/user_group_memberships.yml +0 -11
  278. data/test/fixtures/users.yml +0 -15
  279. data/test/functional/cms/cache_controller_test.rb +0 -14
  280. data/test/functional/cms/categories_controller_test.rb +0 -25
  281. data/test/functional/cms/connectors_controller_test.rb +0 -60
  282. data/test/functional/cms/content_block_controller_test.rb +0 -120
  283. data/test/functional/cms/content_controller_test.rb +0 -439
  284. data/test/functional/cms/content_types_controller_test.rb +0 -18
  285. data/test/functional/cms/dashboard_controller_test.rb +0 -16
  286. data/test/functional/cms/dynamic_views_controller_test.rb +0 -52
  287. data/test/functional/cms/file_blocks_controller_test.rb +0 -52
  288. data/test/functional/cms/groups_controller_test.rb +0 -50
  289. data/test/functional/cms/home_controller_test.rb +0 -156
  290. data/test/functional/cms/html_blocks_controller_test.rb +0 -164
  291. data/test/functional/cms/image_blocks_controller_test.rb +0 -82
  292. data/test/functional/cms/links_controller_test.rb +0 -148
  293. data/test/functional/cms/pages_controller_test.rb +0 -227
  294. data/test/functional/cms/portlets_controller_test.rb +0 -67
  295. data/test/functional/cms/section_nodes_controller_test.rb +0 -112
  296. data/test/functional/cms/sections_controller_test.rb +0 -227
  297. data/test/functional/cms/sessions_controller_test.rb +0 -76
  298. data/test/functional/cms/toolbar_controller_test.rb +0 -64
  299. data/test/functional/cms/users_controller_test.rb +0 -231
  300. data/test/functional/tests/pretend_controller_test.rb +0 -57
  301. data/test/integration/cms/ckeditor_test.rb +0 -30
  302. data/test/integration/cms/password_management_test.rb +0 -56
  303. data/test/integration/login_test.rb +0 -14
  304. data/test/integration/sitemap_performance_test.rb +0 -26
  305. data/test/selenium-core/Blank.html +0 -7
  306. data/test/selenium-core/InjectedRemoteRunner.html +0 -8
  307. data/test/selenium-core/RemoteRunner.html +0 -110
  308. data/test/selenium-core/SeleniumLog.html +0 -109
  309. data/test/selenium-core/TestPrompt.html +0 -145
  310. data/test/selenium-core/TestRunner-splash.html +0 -55
  311. data/test/selenium-core/TestRunner.hta +0 -176
  312. data/test/selenium-core/TestRunner.html +0 -176
  313. data/test/selenium-core/domviewer/butmin.gif +0 -0
  314. data/test/selenium-core/domviewer/butplus.gif +0 -0
  315. data/test/selenium-core/domviewer/domviewer.css +0 -298
  316. data/test/selenium-core/domviewer/domviewer.html +0 -16
  317. data/test/selenium-core/domviewer/selenium-domviewer.js +0 -205
  318. data/test/selenium-core/icons/all.png +0 -0
  319. data/test/selenium-core/icons/continue.png +0 -0
  320. data/test/selenium-core/icons/continue_disabled.png +0 -0
  321. data/test/selenium-core/icons/pause.png +0 -0
  322. data/test/selenium-core/icons/pause_disabled.png +0 -0
  323. data/test/selenium-core/icons/selected.png +0 -0
  324. data/test/selenium-core/icons/step.png +0 -0
  325. data/test/selenium-core/icons/step_disabled.png +0 -0
  326. data/test/selenium-core/iedoc-core.xml +0 -1515
  327. data/test/selenium-core/iedoc.xml +0 -1469
  328. data/test/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
  329. data/test/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  330. data/test/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  331. data/test/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  332. data/test/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
  333. data/test/selenium-core/lib/prototype.js +0 -2006
  334. data/test/selenium-core/lib/scriptaculous/builder.js +0 -101
  335. data/test/selenium-core/lib/scriptaculous/controls.js +0 -815
  336. data/test/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
  337. data/test/selenium-core/lib/scriptaculous/effects.js +0 -958
  338. data/test/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
  339. data/test/selenium-core/lib/scriptaculous/slider.js +0 -283
  340. data/test/selenium-core/lib/scriptaculous/unittest.js +0 -383
  341. data/test/selenium-core/scripts/find_matching_child.js +0 -69
  342. data/test/selenium-core/scripts/htmlutils.js +0 -894
  343. data/test/selenium-core/scripts/injection.html +0 -72
  344. data/test/selenium-core/scripts/js2html.js +0 -70
  345. data/test/selenium-core/scripts/narcissus-defs.js +0 -175
  346. data/test/selenium-core/scripts/narcissus-exec.js +0 -1054
  347. data/test/selenium-core/scripts/narcissus-parse.js +0 -1003
  348. data/test/selenium-core/scripts/se2html.js +0 -63
  349. data/test/selenium-core/scripts/selenium-api.js +0 -2409
  350. data/test/selenium-core/scripts/selenium-browserbot.js +0 -2203
  351. data/test/selenium-core/scripts/selenium-browserdetect.js +0 -150
  352. data/test/selenium-core/scripts/selenium-commandhandlers.js +0 -377
  353. data/test/selenium-core/scripts/selenium-executionloop.js +0 -175
  354. data/test/selenium-core/scripts/selenium-logging.js +0 -147
  355. data/test/selenium-core/scripts/selenium-remoterunner.js +0 -571
  356. data/test/selenium-core/scripts/selenium-testrunner.js +0 -1333
  357. data/test/selenium-core/scripts/selenium-version.js +0 -5
  358. data/test/selenium-core/scripts/user-extensions.js +0 -3
  359. data/test/selenium-core/scripts/user-extensions.js.sample +0 -75
  360. data/test/selenium-core/scripts/xmlextras.js +0 -153
  361. data/test/selenium-core/selenium-logo.png +0 -0
  362. data/test/selenium-core/selenium-test.css +0 -43
  363. data/test/selenium-core/selenium.css +0 -299
  364. data/test/selenium-core/xpath/dom.js +0 -428
  365. data/test/selenium-core/xpath/misc.js +0 -252
  366. data/test/selenium-core/xpath/xpath.js +0 -2223
  367. data/test/selenium/_login_as_cmsadmin.rsel +0 -4
  368. data/test/selenium/dashboard.rsel +0 -5
  369. data/test/selenium/html_blocks.rsel +0 -4
  370. data/test/selenium/login/failed_login.rsel +0 -8
  371. data/test/selenium/login/successful_login.rsel +0 -9
  372. data/test/selenium/page_templates.rsel +0 -12
  373. data/test/selenium/pages/edit_properties.rsel +0 -5
  374. data/test/selenium/site/view_home_page.rsel +0 -4
  375. data/test/selenium/sitemap/move_page.rsel +0 -9
  376. data/test/selenium/sitemap/open_section.rsel +0 -6
  377. data/test/selenium/sitemap/select_page.rsel +0 -12
  378. data/test/selenium/sitemap/select_section.rsel +0 -17
  379. data/test/test_helper.rb +0 -193
  380. data/test/test_logging.rb +0 -67
  381. data/test/unit/behaviors/attaching_test.rb +0 -357
  382. data/test/unit/behaviors/connectable_test.rb +0 -29
  383. data/test/unit/behaviors/dynamic_attributes_test.rb +0 -38
  384. data/test/unit/behaviors/publishable_test.rb +0 -84
  385. data/test/unit/behaviors/searching_test.rb +0 -102
  386. data/test/unit/behaviors/taggable_test.rb +0 -109
  387. data/test/unit/behaviors/versioning_test.rb +0 -36
  388. data/test/unit/extensions/active_record/base_test.rb +0 -10
  389. data/test/unit/extensions/hash_test.rb +0 -17
  390. data/test/unit/extensions/integer_test.rb +0 -10
  391. data/test/unit/helpers/application_helper_test.rb +0 -77
  392. data/test/unit/helpers/form_builder_test.rb +0 -36
  393. data/test/unit/helpers/menu_helper_test.rb +0 -242
  394. data/test/unit/helpers/page_helper_test.rb +0 -67
  395. data/test/unit/helpers/path_helper_test.rb +0 -57
  396. data/test/unit/lib/acts_as_content_page_test.rb +0 -72
  397. data/test/unit/lib/cms/authentication/controller_test.rb +0 -20
  398. data/test/unit/lib/cms/sitemap_test.rb +0 -206
  399. data/test/unit/lib/cms_domain_support_test.rb +0 -43
  400. data/test/unit/lib/command_line_test.rb +0 -70
  401. data/test/unit/lib/content_block_test.rb +0 -203
  402. data/test/unit/lib/content_rendering_support_test.rb +0 -40
  403. data/test/unit/lib/generators_test.rb +0 -40
  404. data/test/unit/lib/routes_test.rb +0 -57
  405. data/test/unit/models/attachment_test.rb +0 -116
  406. data/test/unit/models/category_test.rb +0 -40
  407. data/test/unit/models/category_type_test.rb +0 -8
  408. data/test/unit/models/connector_test.rb +0 -152
  409. data/test/unit/models/content_type_test.rb +0 -56
  410. data/test/unit/models/email_page_portlet_test.rb +0 -14
  411. data/test/unit/models/file_block_test.rb +0 -230
  412. data/test/unit/models/group_test.rb +0 -13
  413. data/test/unit/models/html_block_test.rb +0 -102
  414. data/test/unit/models/link_test.rb +0 -52
  415. data/test/unit/models/page_partial_test.rb +0 -29
  416. data/test/unit/models/page_route_test.rb +0 -29
  417. data/test/unit/models/page_template_test.rb +0 -40
  418. data/test/unit/models/page_test.rb +0 -792
  419. data/test/unit/models/permission_test.rb +0 -10
  420. data/test/unit/models/portlet_test.rb +0 -69
  421. data/test/unit/models/sections_test.rb +0 -264
  422. data/test/unit/models/site_test.rb +0 -50
  423. data/test/unit/models/task_test.rb +0 -141
  424. data/test/unit/models/user_test.rb +0 -352
  425. data/test/unit/schema_statements_test.rb +0 -41
@@ -6,8 +6,8 @@ class Cms::BaseController < Cms::ApplicationController
6
6
 
7
7
  layout 'cms/application'
8
8
 
9
- verify :method => :post, :only => [:create]
10
- verify :method => :put, :only => [:update]
11
- verify :method => :delete, :only => [:destroy]
9
+ # verify :method => :post, :only => [:create]
10
+ # verify :method => :put, :only => [:update]
11
+ # verify :method => :delete, :only => [:destroy]
12
12
 
13
13
  end
@@ -121,8 +121,8 @@ class Cms::ContentBlockController < Cms::BaseController
121
121
  def load_blocks
122
122
  options = {}
123
123
  if params[:section_id] && params[:section_id] != 'all'
124
- options[:include] = { :attachment => :section_node }
125
- options[:conditions] = ["section_nodes.ancestry = ?", Section.find(params[:section_id]).ancestry_path]
124
+ options[:include] = { :attachment => { :section_node => :section }}
125
+ options[:conditions] = ["sections.id = ?", params[:section_id]]
126
126
  end
127
127
  options[:page] = params[:page]
128
128
  options[:order] = model_class.default_order if model_class.respond_to?(:default_order)
@@ -51,8 +51,8 @@ class Cms::ContentController < Cms::ApplicationController
51
51
 
52
52
  # ----- Before Filters -------------------------------------------------------
53
53
  def construct_path
54
- @paths = params[:page_path] || params[:path] || []
55
- @path = "/#{@paths.join("/")}"
54
+ @path = "/#{params[:path]}"
55
+ @paths = @path.split("/")
56
56
  end
57
57
 
58
58
  def construct_path_from_route
@@ -90,7 +90,7 @@ class Cms::ContentController < Cms::ApplicationController
90
90
 
91
91
  def try_to_redirect
92
92
  if redirect = Redirect.find_by_from_path(@path)
93
- redirect_to redirect.to_path, :status=>:moved_permanently
93
+ redirect_to redirect.to_path
94
94
  end
95
95
  end
96
96
 
@@ -111,6 +111,7 @@ class Cms::ContentController < Cms::ApplicationController
111
111
 
112
112
  #Stream the file if it exists
113
113
  if @path != "/" && File.exists?(@file)
114
+ logger.warn "Sending file #{@file}"
114
115
  send_file(@file,
115
116
  :filename => @attachment.file_name,
116
117
  :type => @attachment.file_type,
@@ -125,7 +126,7 @@ class Cms::ContentController < Cms::ApplicationController
125
126
  def check_access_to_page
126
127
  set_page_mode
127
128
  if current_user.able_to?(:edit_content, :publish_content, :administrate)
128
- logger.info "..... Displaying draft version of page"
129
+ logger.debug "Displaying draft version of page"
129
130
  if page = Page.first(:conditions => {:path => @path})
130
131
  @page = page.as_of_draft_version
131
132
  else
@@ -2,7 +2,7 @@ module Cms
2
2
  module ErrorHandling
3
3
  def self.included(controller)
4
4
  controller.class_eval do
5
- rescue_from Exception, :with => :handle_server_error unless RAILS_ENV == "test"
5
+ rescue_from Exception, :with => :handle_server_error unless Rails.env == "test"
6
6
  rescue_from Cms::Errors::AccessDenied, :with => :handle_access_denied
7
7
  end
8
8
  end
@@ -10,11 +10,10 @@ class Cms::RoutesController < Cms::BaseController
10
10
  @route = ActionController::Routing::Routes.recognize_path(@path)
11
11
  end
12
12
 
13
- @routes = ActionController::Routing::Routes.routes.collect do |route|
14
- name = ActionController::Routing::Routes.named_routes.routes.index(route).to_s
15
- verb = route.conditions[:method].to_s.upcase
16
- segs = route.segments.inject("") { |str,s| str << s.to_s }
17
- segs.chop! if segs.length > 1
13
+ @routes = Rails.application.routes.routes.collect do |route|
14
+ name = route.name.to_s
15
+ verb = route.verb
16
+ segs = route.path
18
17
  reqs = route.requirements.empty? ? "" : route.requirements.inspect
19
18
  {:name => name, :verb => verb, :segs => segs, :reqs => reqs}
20
19
  end
@@ -3,12 +3,7 @@ class Cms::SectionNodesController < Cms::BaseController
3
3
 
4
4
  def index
5
5
  @toolbar_tab = :sitemap
6
- @modifiable_sections = current_user.modifiable_sections
7
- @public_sections = Group.guest.sections.all # Load once here so that every section doesn't need to.
8
-
9
- @sitemap = Section.sitemap
10
- @root_section_node = @sitemap.keys.first
11
- @section = @root_section_node.node
6
+ @section = Section.root.first
12
7
  end
13
8
  def move_before
14
9
  move(:before)
@@ -16,7 +16,7 @@ class Cms::SectionsController < Cms::BaseController
16
16
  end
17
17
 
18
18
  def new
19
- @section = @parent.build_section
19
+ @section = @parent.sections.build
20
20
  @section.groups = @parent.groups
21
21
  end
22
22
 
@@ -104,7 +104,6 @@ class Cms::SectionsController < Cms::BaseController
104
104
  end
105
105
 
106
106
  def render_file_browser
107
- headers['Content-Type'] = "text/xml"
108
107
  @files = case params[:Type].downcase
109
108
  when "file"
110
109
  FileBlock.by_section(@section)
@@ -117,7 +116,7 @@ class Cms::SectionsController < Cms::BaseController
117
116
  end
118
117
 
119
118
  def public_groups
120
- @public_groups ||= Group.public.all(:order => "groups.name")
119
+ @public_groups ||= Group.public_groups.all(:order => "groups.name")
121
120
  end
122
121
 
123
122
  def cms_groups
@@ -38,6 +38,9 @@ class Cms::TasksController < Cms::BaseController
38
38
  end
39
39
  redirect_to @task.page.path
40
40
  end
41
+ rescue ActiveRecord::RecordNotFound
42
+ flash[:error] = "No tasks were marked for completion"
43
+ redirect_to cms_dashboard_path
41
44
  end
42
45
 
43
46
  private
@@ -8,7 +8,7 @@ class Cms::UsersController < Cms::ResourceController
8
8
  after_filter :update_group_membership, :only => [:update, :create]
9
9
  after_filter :update_flash, :only => [ :update, :create ]
10
10
 
11
- verify :method => :put, :only => [ :enable, :disable, :update_password ]
11
+ # verify :method => :put, :only => [ :enable, :disable, :update_password ]
12
12
 
13
13
  def index
14
14
  query, conditions = [], []
@@ -4,7 +4,7 @@ module Cms
4
4
 
5
5
  def require_stylesheet_link(sources=(), content_area=:html_head)
6
6
  @required_stylesheet_links ||= []
7
- new_links = sources.to_a - @required_stylesheet_links
7
+ new_links = Array(sources) - @required_stylesheet_links
8
8
  if !new_links.empty?
9
9
  @required_stylesheet_links |= new_links
10
10
  content_for(content_area, stylesheet_link_tag(new_links))
@@ -13,17 +13,17 @@ module Cms
13
13
 
14
14
  def require_javascript_include(sources=(), content_area=:html_head)
15
15
  @required_javascript_includes ||= []
16
- new_links = sources.to_a - @required_javascript_includes
16
+ new_links = Array(sources) - @required_javascript_includes
17
17
  if !new_links.empty?
18
18
  @required_javascript_includes |= new_links
19
19
  content_for(content_area, javascript_include_tag(new_links))
20
20
  end
21
21
  end
22
-
22
+
23
23
  def searchable_sections(selected = nil)
24
- root = Section.root.first
24
+ root = Section.root.first
25
25
  options = [['All sections', 'all'], [root.name, root.id]]
26
- root.master_section_list.each { |s| options << [s.full_path, s.id] }
26
+ root.all_children_with_name.each { |s| options << [s.full_path, s.id] }
27
27
  options_for_select(options, selected.to_i)
28
28
  end
29
29
 
@@ -33,10 +33,10 @@ module Cms
33
33
  end
34
34
 
35
35
  def page_versions(page)
36
- text = select_tag(:version,
37
- options_for_select(page.versions.all(:order => "version desc").map { |r|
38
- ["v#{r.version}: #{r.version_comment} by #{r.updated_by.login} at #{time_on_date(r.updated_at)}", r.version]
39
- }, page.version),
36
+ text = select_tag(:version,
37
+ options_for_select(page.versions.all(:order => "version desc").map { |r|
38
+ ["v#{r.version}: #{r.version_comment} by #{r.updated_by.login} at #{time_on_date(r.updated_at)}", r.version]
39
+ }, page.version),
40
40
  :onchange => 'this.form.submit(); return false')
41
41
  text << javascript_tag("$('version').selectedIndex = 0") if page.live?
42
42
  text
@@ -45,7 +45,7 @@ module Cms
45
45
  def action_icon_src(name)
46
46
  "cms/icons/actions/#{name}.png"
47
47
  end
48
-
48
+
49
49
  def action_icon(name, options={})
50
50
  image_tag action_icon_src(name), {:alt => name.to_s.titleize}.merge(options)
51
51
  end
@@ -53,7 +53,7 @@ module Cms
53
53
  def status_icon(status, options={})
54
54
  image_tag "cms/icons/status/#{status.to_s.underscore}.gif", {:alt => status.to_s.titleize}.merge(options)
55
55
  end
56
-
56
+
57
57
  def link_to_usages(block)
58
58
  count = block.connected_pages.count
59
59
  if count > 0
@@ -64,7 +64,7 @@ module Cms
64
64
  count
65
65
  end
66
66
  end
67
-
67
+
68
68
  def time_on_date(time)
69
69
  time && "#{time.strftime("%l:%M %p")} on #{time.strftime("%b %e, %Y")}"
70
70
  end
@@ -72,21 +72,69 @@ module Cms
72
72
  def format_date(time)
73
73
  time && "#{time.strftime("%b %e, %Y")}"
74
74
  end
75
-
75
+
76
+ # Renders two links that will check/uncheck a set of checkboxes.
77
+ #
78
+ # @param [String] selector The CSS selector for the checkboxes that should be mass checked/unchecked.
79
+ def check_uncheck_tag(selector)
80
+ check_id = to_id(selector, "check")
81
+ uncheck_id = to_id(selector, "uncheck")
82
+ content_for :html_head do
83
+ html = <<HTML
84
+ jQuery(function($) {
85
+ $('a##{check_id}').click(function() {
86
+ $('#{selector}').attr('checked', true);
87
+ });
88
+
89
+ $('a##{uncheck_id}').click(function() {
90
+ $('#{selector}').attr('checked', false);
91
+ });
92
+ })
93
+ HTML
94
+ javascript_tag html
95
+ end
96
+
97
+ "#{link_to "Check All", '#', :id=>check_id}, #{link_to "Uncheck All", '#', :id=>uncheck_id}".html_safe
98
+ end
99
+
100
+ # @deprecated Use check_uncheck_tag instead. Retained for backwards compatibility w/ CMS implementations.
76
101
  def link_to_check_all(selector, name="Check All")
77
- link_to_function name, "$('#{selector}').attr('checked', true)"
102
+ id = to_id(selector, "check")
103
+ content_for :html_head do
104
+ html = <<HTML
105
+ jQuery(function($) {
106
+ $('a##{id}').click(function() {
107
+ $('#{selector}').attr('checked', true);
108
+ });
109
+ })
110
+ HTML
111
+ javascript_tag html
112
+ end
113
+ link_to name, '#', :id=>id
78
114
  end
79
115
 
116
+ # @deprecated Use check_uncheck_tag instead. Retained for backwards compatibility w/ CMS implementations.
80
117
  def link_to_uncheck_all(selector, name="Uncheck All")
81
- link_to_function name, "$('#{selector}').attr('checked', false)"
118
+ id = to_id(selector, "uncheck")
119
+ content_for :html_head do
120
+ html = <<HTML
121
+ jQuery(function($) {
122
+ $('a##{id}').click(function() {
123
+ $('#{selector}').attr('checked', false);
124
+ });
125
+ })
126
+ HTML
127
+ javascript_tag html
128
+ end
129
+ link_to name, '#', :id=>id
82
130
  end
83
-
84
-
131
+
85
132
  def span_tag(content)
86
133
  content_tag :span, content
87
134
  end
135
+
88
136
  def lt_button_wrapper(content)
89
- <<LBW
137
+ button = <<LBW
90
138
  <div class="lt_button">
91
139
  <img src="/images/cms/lt_button_l.gif" alt="" />
92
140
  <div class="lt_button_content">
@@ -95,50 +143,52 @@ module Cms
95
143
  <img src="/images/cms/lt_button_r.gif" alt="" style="margin-right: 10px;" />
96
144
  </div>
97
145
  LBW
146
+ button.html_safe
98
147
  end
99
148
 
100
149
  def dk_button_wrapper(content)
101
- lt_button_wrapper(content).gsub("lt_button_","dk_button_")
150
+ lt_button_wrapper(content).gsub("lt_button_", "dk_button_")
102
151
  end
152
+
103
153
  def group_ids
104
154
  (params[:group_ids] || @user.group_ids).collect { |g| g.to_i }
105
155
  end
106
156
 
107
157
  def group_filter
108
158
  select_tag("group_id", options_from_collection_for_select(Group.all.insert(0, Group.new(:id => nil, :name => "Show All Groups")), "id", "name", params[:group_id].to_i))
109
- end
110
-
159
+ end
160
+
111
161
  def categories_for(category_type_name, order="name")
112
162
  cat_type = CategoryType.named(category_type_name).first
113
163
  cat_type ? cat_type.category_list(order) : []
114
- end
115
-
164
+ end
165
+
116
166
  def render_pagination(collection, collection_name, options={})
117
167
  if collection.blank?
118
168
  content_tag(:div, "No Content", :class => "pagination")
119
169
  else
120
170
  render :partial => "cms/shared/pagination", :locals => {
121
- :collection => collection,
122
- :first_page_path => send("cms_#{collection_name}_path", {:page => 1}.merge(options)),
123
- :previous_page_path => send("cms_#{collection_name}_path", {:page => collection.previous_page ? collection.previous_page : 1}.merge(options)),
124
- :current_page_path => send("cms_#{collection_name}_path", options),
125
- :next_page_path => send("cms_#{collection_name}_path", {:page => collection.next_page ? collection.next_page : collection.current_page}.merge(options)),
126
- :last_page_path => send("cms_#{collection_name}_path", {:page => collection.total_pages}.merge(options))
171
+ :collection => collection,
172
+ :first_page_path => send("cms_#{collection_name}_path", {:page => 1}.merge(options)),
173
+ :previous_page_path => send("cms_#{collection_name}_path", {:page => collection.previous_page ? collection.previous_page : 1}.merge(options)),
174
+ :current_page_path => send("cms_#{collection_name}_path", options),
175
+ :next_page_path => send("cms_#{collection_name}_path", {:page => collection.next_page ? collection.next_page : collection.current_page}.merge(options)),
176
+ :last_page_path => send("cms_#{collection_name}_path", {:page => collection.total_pages}.merge(options))
127
177
  }
128
178
  end
129
- end
179
+ end
130
180
 
131
181
  def url_with_mode(url, mode)
132
182
  uri = URI.parse(url)
133
183
  if uri.query =~ /mode=[^&]*/
134
- "#{uri.path}?#{uri.query.gsub(/((^|&)mode=)[^&]*/) {|s| "#{$1}#{mode}" }}"
184
+ "#{uri.path}?#{uri.query.gsub(/((^|&)mode=)[^&]*/) { |s| "#{$1}#{mode}" }}"
135
185
  elsif uri.query
136
186
  "#{uri.path}?#{uri.query}&mode=#{mode}"
137
187
  else
138
188
  "#{uri.path}?mode=#{mode}"
139
189
  end
140
190
  end
141
-
191
+
142
192
  def determine_order(current_order, order)
143
193
  if current_order == order
144
194
  if order =~ / desc$/i
@@ -148,8 +198,61 @@ LBW
148
198
  end
149
199
  else
150
200
  order
151
- end
201
+ end
202
+ end
203
+
204
+ # Render a CMS styled 'X Delete' button. This button will appear on tool bars, typically set apart visually from other buttons.
205
+ # Has a 'confirm?' popup attached to it as well.
206
+ # Assumes that javascript code to handle the 'confirm' has already been included in the page.
207
+ #
208
+ # @param [Hash] options The options for this tag
209
+ # @option options [String or Boolean] :title Title for 'confirm' popup. If specified as 'true' or with a string value a standard 'confirm yes/no' window should be used. If true is specified, its assume that the javascript popup handles the title.
210
+ # @option options [Path] :path The path or URL to link_to. Takes same types at url_for or link_to. Defaults to '#' if not specified.
211
+ # @option options [Boolean] :enabled If false, the button will be marked disabled. Default to false.
212
+ def delete_button(options={})
213
+ classes = "button"
214
+ classes << " disabled" if !options[:enabled]
215
+ classes << " delete_button"
216
+ classes << " http_delete confirm_with_title" if options[:title]
217
+
218
+ link_to_path = options[:path] ? options[:path] : "#"
219
+
220
+ span_options = {:id => 'delete_button', :class => classes}
221
+ span_options[:title] = options[:title] if (!options[:title].blank? && options[:title].class == String)
222
+ link_to span_tag("<span class=\"delete_img\">&nbsp;</span>Delete".html_safe), link_to_path, span_options
223
+ end
224
+
225
+ # Render a CMS styled 'Edit' button. This button will appear on tool bars, typically set apart visually from other buttons.
226
+ #
227
+ # @param [Hash] options The options for this tag
228
+ # @option options [Path] :path The path or URL to link_to. Takes same types at url_for or link_to. Defaults to '#' if not specified.
229
+ # @option options [Boolean] :enabled If false, the button will be marked disabled. Default to false.
230
+ def edit_button(options={})
231
+ classes = "button"
232
+ classes << " disabled" if !options[:enabled]
233
+
234
+ link_to_path = options[:path] ? options[:path] : "#"
235
+ span_options = {:id => 'edit_button', :class => classes}
236
+ link_to span_tag("&nbsp;Edit&nbsp;".html_safe), link_to_path, span_options
237
+
238
+ end
239
+
240
+ # Render a CMS styled 'Add' button. This button will appear on tool bars, typically set apart visually from other buttons.
241
+ #
242
+ # @param [Path] The path or URL to link_to. Takes same types at url_for or link_to.
243
+ def add_button(path, options={})
244
+ classes = "button"
245
+ span_options = {:class => classes}
246
+ link_to span_tag("&nbsp;Add&nbsp;".html_safe), path, span_options
247
+ end
248
+
249
+ private
250
+
251
+ # Converts a CSS jQuery selector into something that can be suitably used as a CSS id element.
252
+ def to_id(selector, suffix=nil)
253
+ id = selector.gsub(".", "_")
254
+ id = id + "_#{suffix}" if suffix
255
+ id
152
256
  end
153
-
154
257
  end
155
258
  end
@@ -12,21 +12,21 @@ class Cms::FormBuilder < ActionView::Helpers::FormBuilder
12
12
  # * :width - The width for the select (defaults to 455px).
13
13
  #
14
14
  def drop_down(method, choices, options = {}, html_options = {})
15
- select_class = "#{@object_name}_#{method}"
16
- h_opts = add_tabindex!(@default_options.merge(html_options))
15
+ select_class = "#{@object_name}_#{method}"
16
+ h_opts = add_tabindex!(@default_options.merge(html_options))
17
17
  h_opts[:class] = select_class
18
18
 
19
- opts = objectify_options(options)
19
+ opts = objectify_options(options)
20
20
  set_default_value!(method, options)
21
- cms_options = options.extract!(:default_value, :width)
21
+ cms_options = options.extract_only!(:default_value, :width)
22
22
  render_cms_form_partial :fancy_drop_down,
23
23
  :object_name => @object_name, :method => method,
24
- :choices => choices, :options => opts,
24
+ :choices => choices, :options => opts,
25
25
  :cms_options => cms_options, :html_options => h_opts
26
26
  end
27
27
 
28
28
  def date_picker(method, options={})
29
- text_field(method, {:size => 10, :class => "date_picker"}.merge(options))
29
+ text_field(method, {:size => 10, :class => "date_picker", :value=>Cms::DatePicker.format_for_ui(@object.send(method))}.merge(options))
30
30
  end
31
31
 
32
32
  def tag_list(options={})
@@ -54,17 +54,17 @@ class Cms::FormBuilder < ActionView::Helpers::FormBuilder
54
54
  def cms_drop_down(method, choices, options={}, html_options={})
55
55
  add_tabindex!(html_options)
56
56
  set_default_value!(method, options)
57
- cms_options = options.extract!(:label, :instructions, :default_value)
57
+ cms_options = options.extract_only!(:label, :instructions, :default_value)
58
58
  render_cms_form_partial :drop_down,
59
59
  :object_name => @object_name, :method => method,
60
- :choices => choices, :options => options,
60
+ :choices => choices, :options => options,
61
61
  :cms_options => cms_options, :html_options => html_options
62
62
  end
63
63
 
64
64
  def cms_tag_list(options={})
65
65
  add_tabindex!(options)
66
66
  set_default_value!(:tag_list, options)
67
- cms_options = options.extract!(:label, :instructions, :default_value)
67
+ cms_options = options.extract_only!(:label, :instructions, :default_value)
68
68
  render_cms_form_partial :tag_list,
69
69
  :options => options, :cms_options => cms_options
70
70
  end
@@ -74,22 +74,22 @@ class Cms::FormBuilder < ActionView::Helpers::FormBuilder
74
74
  #
75
75
  def text_editor(method, options = {})
76
76
  @template.send(
77
- "text_editor",
78
- @object_name,
79
- method,
80
- objectify_options(options))
77
+ "text_editor",
78
+ @object_name,
79
+ method,
80
+ objectify_options(options))
81
81
  end
82
82
 
83
83
  # Renders a WYWIWYG editor with the 'type' selector.
84
84
  def cms_text_editor(method, options = {})
85
85
  add_tabindex!(options)
86
86
  set_default_value!(method, options)
87
- cms_options = options.extract!(:label, :instructions, :default_value)
87
+ cms_options = options.extract_only!(:label, :instructions, :default_value)
88
88
  render_cms_form_partial :text_editor,
89
- :id => (options[:id] || "#{@object_name}_#{method}"),
89
+ :id => (options[:id] || "#{@object_name}_#{method}"),
90
90
  :editor_enabled => (cookies["editorEnabled"].blank? ? true : (cookies["editorEnabled"] == 'true' || cookies["editorEnabled"] == ['true'])),
91
- :object_name => @object_name, :method => method,
92
- :options => options, :cms_options => cms_options
91
+ :object_name => @object_name, :method => method,
92
+ :options => options, :cms_options => cms_options
93
93
  end
94
94
 
95
95
  # Renders instructions for a given field below the field itself. Instructions can be used to provide helpful
@@ -114,7 +114,7 @@ class Cms::FormBuilder < ActionView::Helpers::FormBuilder
114
114
  def cms_check_box(method, options={})
115
115
  add_tabindex!(options)
116
116
  set_default_value!(method, options)
117
- cms_options = options.extract!(:label, :instructions, :default_value)
117
+ cms_options = options.extract_only!(:label, :instructions, :default_value)
118
118
  render_cms_form_partial "check_box", :method=>method, :options => options, :cms_options => cms_options
119
119
  end
120
120
 
@@ -139,14 +139,26 @@ class Cms::FormBuilder < ActionView::Helpers::FormBuilder
139
139
  set_default_value!(method, options)
140
140
  options[:default_handler] = "erb" unless options[:default_handler]
141
141
 
142
- cms_options = options.extract!(:label, :instructions)
143
- dropdown_options = options.extract!(:default_handler)
142
+ cms_options = options.extract_only!(:label, :instructions)
143
+ dropdown_options = options.extract_only!(:default_handler)
144
144
  add_tabindex!(options)
145
145
  render_cms_form_partial :template_editor, :method=>method, :dropdown_options=>dropdown_options, :options => options, :cms_options=>cms_options
146
146
  end
147
147
  end
148
148
 
149
149
 
150
+ # Basic replacement for the error_messages provided by Rails 2, which were deprecated/removed in Rails 3.
151
+ def cms_error_messages
152
+ return unless object.respond_to?(:errors) && object.errors.any?
153
+
154
+ errors_list = ""
155
+ errors_list << @template.content_tag(:h2, "#{object.errors.size} error prohibited this #{object_name.humanize} from being saved.".html_safe)
156
+ errors_list << @template.content_tag(:p, "There were problems with the following fields:")
157
+ errors_list << @template.content_tag(:ul, object.errors.full_messages.map { |message| @template.content_tag(:li, message).html_safe }.join("\n").html_safe).html_safe
158
+
159
+ @template.content_tag(:div, errors_list.html_safe, :class => "errorExplanation", :id=>"errorExplanation")
160
+ end
161
+
150
162
  private
151
163
 
152
164
  def set_default_value!(method, options={})
@@ -171,7 +183,7 @@ class Cms::FormBuilder < ActionView::Helpers::FormBuilder
171
183
 
172
184
  def render_cms_form_partial(field_type_name, locals)
173
185
  @template.render :partial => "cms/form_builder/cms_#{field_type_name}",
174
- :locals => {:f => self}.merge(locals)
186
+ :locals => {:f => self}.merge(locals)
175
187
  end
176
188
 
177
189
  end