browsercms 3.1.5 → 3.3.0.beta

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 (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