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
data/browsercms.gemspec CHANGED
@@ -1,19 +1,25 @@
1
+ # This file is now managed directly, rather than generated by Jeweler.
2
+ #
1
3
  require File.dirname(__FILE__) + "/lib/cms/version.rb"
2
4
 
3
5
  Gem::Specification.new do |s|
6
+ s.platform = Gem::Platform::RUBY
4
7
  s.name = %q{browsercms}
5
8
  s.version = Cms::VERSION
6
9
 
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
7
11
  s.authors = ["BrowserMedia"]
8
- s.description = %q{General purpose Web Content Management in Rails.}
9
- s.summary = %Q{BrowserCMS is a general purpose, open source Web Content Management System (CMS) written in Ruby on Rails. Designed for web developers who want to create great looking websites while using standard Rails tools for customizing it. }
10
-
12
+ s.date = %q{2011-03-15}
13
+ s.summary = %q{BrowserCMS is a a general purpose, open source Web Content Management System (CMS), written using Ruby on Rails.}
14
+ s.description = %q{Web Content Management in Rails.}
11
15
  s.email = %q{github@browsermedia.com}
12
- s.executables = ["browsercms", "bcms"]
16
+ s.executables = ["browsercms", "bcms", "bcms-upgrade"]
13
17
  s.extra_rdoc_files = [
14
18
  "LICENSE.txt",
15
19
  "README.markdown"
16
20
  ]
21
+ s.required_ruby_version = '>= 1.9.2'
22
+
17
23
  s.files = Dir["rails/*.rb"]
18
24
  s.files += Dir["browsercms.gemspec"]
19
25
  s.files += Dir["doc/app/**/*"]
@@ -21,9 +27,8 @@ Gem::Specification.new do |s|
21
27
  s.files += Dir["app/**/*"]
22
28
  s.files += Dir["db/migrate/[0-9]*_*.rb"]
23
29
  s.files += Dir["db/demo/**/*"]
30
+ s.files += Dir["db/seeds.rb"]
24
31
  s.files += Dir["lib/**/*"]
25
- s.files -= Dir["lib/tasks/data.rake"]
26
- s.files += Dir["rails_generators/**/*"]
27
32
  s.files += Dir["public/stylesheets/cms/**/*"]
28
33
  s.files += Dir["public/javascripts/jquery*"]
29
34
  s.files += Dir["public/javascripts/cms/**/*"]
@@ -32,15 +37,12 @@ Gem::Specification.new do |s|
32
37
  s.files += Dir["public/images/cms/**/*"]
33
38
  s.files += Dir["public/themes/**/*"]
34
39
  s.files += Dir["templates/*.rb"]
40
+ s.files -= Dir['test/dummy/*']
41
+
42
+ s.add_dependency('rails', "~> 3.0.5")
35
43
 
36
- s.homepage = %q{http://www.browsercms.org}
37
- s.require_paths = ["lib"]
38
- s.rubyforge_project = %q{browsercms}
39
- s.rubygems_version = %q{1.3.7}
40
- s.summary = %q{BrowserCMS is a general purpose, open source Web Content Management System (CMS) written in Ruby on Rails. Designed for web developers who want to create great looking websites while using standard Rails tools for customizing it.}
41
- s.test_files = Dir["test/**/*"]
44
+ # Required only for bcms-upgrade
45
+ s.add_dependency('term-ansicolor')
42
46
 
43
- s.add_dependency "rails", "~> 2.3.14"
44
- s.add_dependency "ancestry", "~> 1.2.4"
45
47
  end
46
48
 
@@ -0,0 +1,56 @@
1
+ class Browsercms330 < ActiveRecord::Migration
2
+ def self.up
3
+
4
+ # patch required for LH345
5
+ cant_fix = []
6
+ to_fix = []
7
+ # find all pages whose path ends in slash and is not root
8
+ Page.find(:all, :conditions => "path LIKE '/%/'").each do |pt_page|
9
+ # make sure no extant page has this path
10
+ if Page.count(:conditions => ["path = ?", pt_page.path.sub(/(.+)\/+$/, '\1')]) > 0
11
+ cant_fix << pt_page
12
+ else
13
+ to_fix << pt_page
14
+ end
15
+ end
16
+ version_cant_fix = []
17
+ version_to_fix = []
18
+ # find all page versions whose path ends in slash and is not root
19
+ Page::Version.find(:all, :conditions => "path LIKE '/%/'").each do |pt_page|
20
+ # make sure no extant page has this path
21
+ if Page.count(:conditions => ["path = ?", pt_page.path.sub(/(.+)\/+$/, '\1')]) > 0
22
+ version_cant_fix << pt_page
23
+ else
24
+ version_to_fix << pt_page
25
+ end
26
+ end
27
+
28
+ # raise an error if there are pages (*not* page versions) that will duplicate an extant path if the ending slash is dropped
29
+ if cant_fix.length > 0
30
+ raise "Cannot remove trailing slashes from pages with ID(s) (#{cant_fix.map(&:id).join(', ')}). Other pages already exist with their correct path. The offending path may be in an unpublished page version, newer than the current public version. These needed to be corrected manually in your DBMS before running this migration"
31
+ end
32
+
33
+ to_fix.each do |fix_page|
34
+ # change the path of all pages with a trailing slash to not have one
35
+ # using sql updates to prevent unwanted callbacks
36
+ new_path = fix_page.path.to_s.sub(/(.+)\/+$/, '\1')
37
+ execute "UPDATE pages SET path = '#{new_path}' WHERE id = #{fix_page.id};"
38
+ end
39
+ version_to_fix.each do |fix_page|
40
+ # change the path of all fixable page versions with a trailing slash to not have one
41
+ # using sql updates to prevent unwanted callbacks
42
+ new_path = fix_page.path.to_s.sub(/(.+)\/+$/, '\1')
43
+ execute "UPDATE page_versions SET path = '#{new_path}' WHERE id = #{fix_page.id};"
44
+ end
45
+ # end patch for LH345
46
+ end
47
+
48
+ def self.down
49
+
50
+ # Cannot restore paths with trailing slash - raise error or show message
51
+ #
52
+ # raise IrreversibleMigration, "Cannot reverse migration which removes trailing slash from page paths"
53
+ puts "Page paths which had trailing slashes removed cannot be restored to their original state."
54
+
55
+ end
56
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,58 @@
1
+ require 'cms/data_loader'
2
+ extend Cms::DataLoader
3
+
4
+ if %w[development test dev local].include?(Rails.env)
5
+ pwd = "cmsadmin"
6
+ else
7
+ pwd = (0..8).inject(""){|s,i| s << (('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a).rand}
8
+ end
9
+ User.current = create_user(:cmsadmin, :login => "cmsadmin", :first_name => "CMS", :last_name => "Administrator", :email => "cmsadmin@example.com", :password => pwd, :password_confirmation => pwd)
10
+
11
+ create_permission(:administrate, :name => "administrate", :full_name => "Administer CMS" , :description => "Allows users to administer the CMS, including adding users and groups.")
12
+ create_permission(:edit_content, :name => "edit_content", :full_name => "Edit Content" , :description => "Allows users to Add, Edit and Delete both Pages and Blocks. Can Save (but not Publish) and Assign them as well.")
13
+ create_permission(:publish_content, :name => "publish_content", :full_name => "Publish Content" , :description => "Allows users to Save and Publish, Hide and Archive both Pages and Blocks.")
14
+
15
+ create_group_type(:guest_group_type, :name => "Guest", :guest => true)
16
+ create_group_type(:registered_public_user, :name => "Registered Public User")
17
+ create_group_type(:cms_user, :name => "CMS User", :cms_access => true)
18
+ group_types(:cms_user).permissions<<permissions(:edit_content)
19
+ group_types(:cms_user).permissions<<permissions(:publish_content)
20
+
21
+ create_group(:guest, :name => 'Guest', :code => 'guest', :group_type => group_types(:guest_group_type))
22
+ create_group(:content_admin, :name => 'Cms Administrators', :code => 'cms-admin', :group_type => group_types(:cms_user))
23
+ create_group(:content_editor, :name => 'Content Editors', :code => 'content-editor', :group_type => group_types(:cms_user))
24
+ users(:cmsadmin).groups << groups(:content_admin)
25
+ users(:cmsadmin).groups << groups(:content_editor)
26
+
27
+ groups(:content_admin).permissions<<permissions(:administrate)
28
+ groups(:content_editor).permissions<<permissions(:edit_content)
29
+ groups(:content_editor).permissions<<permissions(:publish_content)
30
+
31
+ create_site(:default, :name => "Default", :domain => "example.com")
32
+ create_section(:root, :name => "My Site", :path => "/", :root => true)
33
+ create_section(:system, :name => "system", :parent => sections(:root), :path => "/system", :hidden => true)
34
+
35
+ Group.all.each{|g| g.sections = Section.all }
36
+
37
+ create_page(:home, :name => "Home", :path => "/", :section => sections(:root), :template_file_name => "default.html.erb", :cacheable => true)
38
+ create_page(:not_found, :name => "Page Not Found", :path => "/system/not_found", :section => sections(:system), :template_file_name => "default.html.erb", :publish_on_save => true, :hidden => true, :cacheable => true)
39
+ create_page(:access_denied, :name => "Access Denied", :path => "/system/access_denied", :section => sections(:system), :template_file_name => "default.html.erb", :publish_on_save => true, :hidden => true, :cacheable => true)
40
+ create_page(:server_error, :name => "Server Error", :path => "/system/server_error", :section => sections(:system), :template_file_name => "default.html.erb", :publish_on_save => true, :hidden => true, :cacheable => true)
41
+
42
+ create_html_block(:page_not_found, :name => "Page Not Found", :content => "<p>The page you tried to access does not exist on this server.</p>", :publish_on_save => true)
43
+ pages(:not_found).create_connector(html_blocks(:page_not_found), "main")
44
+ pages(:not_found).publish!
45
+
46
+ create_html_block(:access_denied, :name => "Access Denied", :content => "<p>You have tried to reach a resource or page which you do not have permission to view.</p>", :publish_on_save => true)
47
+ pages(:access_denied).create_connector(html_blocks(:access_denied), "main")
48
+ pages(:access_denied).publish!
49
+
50
+ create_html_block(:server_error, :name => "Server Error", :content => "<p>The server encountered an unexpected condition that prevented it from fulfilling the request.</p>", :publish_on_save => true)
51
+ pages(:server_error).create_connector(html_blocks(:server_error), "main")
52
+ pages(:server_error).publish!
53
+ pages(:home).publish!
54
+
55
+ puts "*************************************************"
56
+ puts "* YOUR CMS username/password is: cmsadmin/#{pwd}"
57
+ puts "*************************************************"
58
+
@@ -1,201 +1,457 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
- <title></title>
6
- <link rel="stylesheet" type="text/css" href="files/stylesheets/syntax.css" />
7
- <script type="text/javascript" src="files/javascripts/code_highlighter.js"></script>
8
- <script type="text/javascript" src="files/javascripts/highlighters.js"></script>
9
- <style type="text/css">
10
- body {
11
- background: #FFFFFF url(images/bg.png) repeat-x scroll 0 0;
12
- font-family: "Trebuchet MS", Helvetica, Verdana, Arial, sans-serif;
13
- margin: 0;
14
- padding: 0;
15
- }
16
-
17
- #page {
18
- margin: 0 auto;
19
- text-align: left;
20
- width: 1000px;
21
- }
22
-
23
- #header {
24
- height: 110px;
25
- }
26
-
27
- div.top_cap {
28
- background: transparent url(images/top_cap.png) no-repeat scroll 0 0;
29
- height: 10px;
30
- }
31
-
32
- #contentwrap {
33
- background: transparent url(images/dot.png) repeat scroll 0 0;
34
- float: left;
35
- width: 1000px;
36
- }
37
-
38
- div.bottom_cap {
39
- background: transparent url(images/bottom_cap.png) no-repeat scroll 0 0;
40
- height: 9px;
41
- }
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html class="cufon-active cufon-ready" xml:lang="en"
3
+ xmlns="http://www.w3.org/1999/xhtml" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6
+ <meta name="keywords" content="">
7
+ <meta name="description" content="">
8
+ <link href="files/clearfix.css" media="screen,projection" rel="stylesheet" type="text/css">
9
+ <link href="files/global.css" media="screen,projection" rel="stylesheet" type="text/css">
10
+ <script src="files/jquery.js" type="text/javascript"></script>
11
+ <script src="files/cufon.js" type="text/javascript"></script>
12
+ <style type="text/css">cufon {
13
+ text-indent: 0 !important;
14
+ }
42
15
 
43
- div.top_cap_content {
44
- background: transparent url(images/top_cap_content.png) no-repeat scroll 0 0;
45
- height: 5px;
46
- }
47
-
48
- #content {
49
- background-color: #FFFFFF;
50
- margin: 0 5px;
51
- padding: 0 10px;
52
- }
53
-
54
- div.title {
55
- padding: 20px;
56
- }
57
-
58
- div.title h1 {
59
- border-bottom: 3px solid #505358;
60
- color: #FFFFFF;
61
- font-size: 24pt;
62
- font-weight: normal;
63
- line-height: 1;
64
- margin: 0 0 10px;
65
- padding-bottom: 10px;
66
- }
67
-
68
- td.sidebar {
69
- font-size: 8pt;
70
- width: 165px;
71
- padding: 5px;
72
- }
73
-
74
- td.sidebar ol {
75
- margin-left: 20px;
76
- padding: 0;
77
- line-height: 1.5;
78
- }
79
-
80
- td.sidebar ol li {
81
- margin: 0;
82
- padding: 0;
83
- }
84
-
85
- td.sidebar ol li ul {
86
- list-style-type: none;
87
- padding-left: 10px;
88
- }
89
-
90
- td.guides {
91
- font-size: 10pt;
92
- width: 800px;
93
- padding: 10px;
94
- }
95
-
96
- .code_container {
97
- padding: 10px;
98
- background: #eee;
99
- border: 1px solid #ccc;
100
- overflow: auto;
101
- width: 760px;
102
- }
103
-
104
- pre, code {
105
- overflow: auto;
106
- white-space:pre;
107
- }
108
- .note {
109
- -moz-background-clip:border;
110
- -moz-background-inline-policy:continuous;
111
- -moz-background-origin:padding;
112
- background:#FFF9D8 url(../images/tab_note.gif) no-repeat scroll left top;
113
- border:medium none;
114
- margin:0.25em 0 1.5em;
115
- padding:1em 1em 0.25em 48px;
116
- }
117
- </style>
118
- </head>
119
- <body>
120
- <div id="page">
121
- <div id="header">
122
- <a href="index.html"><img style="border:0px" src="images/browsercms_logo.png" alt="BrowserCMS"/></a>
123
- </div>
124
- <div id="main">
125
- <div class="top_cap"></div>
126
- <div id="contentwrap">
127
- <div class="title">
128
- <h1></h1>
129
- </div>
130
- <div class="top_cap_content"></div>
131
- <div id="content">
132
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
133
- <tr>
134
- <td class="sidebar" valign="top">
135
- <div id="subCol">
136
- <h3 class="chapter"><img src="images/chapters_icon.gif" alt="" />Chapters</h3>
137
- <ol class="chapters">
138
- </ol></div>
139
- </td>
140
- <td class="guides">
141
-
142
- <h2>Using <span class="caps">CMS</span> Authentication</h2>
143
- <p>When you create public controllers, you may want to take advantage of the <span class="caps">CMS</span> authentication system. Create an action that
144
- looks like this:</p>
145
- <div class="code_container"><code class="ruby">class MyNewController &lt; ApplicationController
16
+ @media screen, projection {
17
+ cufon {
18
+ display: inline !important;
19
+ display: inline-block !important;
20
+ position: relative !important;
21
+ vertical-align: middle !important;
22
+ font-size: 1px !important;
23
+ line-height: 1px !important;
24
+ }
146
25
 
147
- # This adds methods to your controller to work with the authenticated user.
148
- include Cms::Authentication::Controller
26
+ cufon cufontext {
27
+ display: -moz-inline-box !important;
28
+ display: inline-block !important;
29
+ width: 0 !important;
30
+ height: 0 !important;
31
+ overflow: hidden !important;
32
+ text-indent: -10000in !important;
33
+ }
149
34
 
150
- def do_something_interesting
151
- # The current_user method looks up the user based on either a cookie, or session variable.
152
- user = current_user
35
+ cufon canvas {
36
+ position: relative !important;
37
+ }
38
+ }
153
39
 
154
- if user.guest?
155
- redirect_to &quot;/system/access-denied&quot;
156
- else
157
- redirect_to &quot;/my_target/page&quot;
158
- end
159
- end
160
- end</code></div>
161
- <p>The current_user method is also available in Portlets (maybe), as well as in the view files for both portlets and templates.</p>
162
- <h3>Understanding Guest users
163
- Many visitors to a <span class="caps">CMS</span> site will not be logged in. These users are considered to be members of a special group, called &#8216;Guest&#8217;. This
164
- group allows staff to set permissions for denying entry to specific sections. When you call the following:</h3>
165
- <div class="code_container"><code class="ruby">user = current_user</code></div>
166
- <p>if there the user is not logged in, a
167
- dirty_workaround_for_notextile_2
168
- object will be returned. This user has all the permissions of the guest group, which are
169
- usually limited to viewing public sections.</p>
170
- <h2>Working with the Content <span class="caps">API</span>
171
- One of the central features that the content <span class="caps">API</span> adds to models is versioning and publishing. Each content block can either be published or in draft. The data for a block is split between two tables, the primary table and it&#8217;s version table. The primary table
172
- stores the &#8216;live&#8217; version of a block, typically the last &#8216;Published&#8217; version of a block. The versions table stores all other versions, including future edits which are unpublished.</h2>
173
- <h3>Differences between ActiveRecord and Content <span class="caps">API</span>
174
- This can cause some confusion when using basic ActiveRecord operations, where you might not get what you expect. For example, suppose we create an Event Block</h3>
175
- <div class="code_container"><code class="ruby">class Event &lt; ActiveRecord::Base
176
- acts_as_content_block
177
- end
40
+ @media print {
41
+ cufon {
42
+ padding: 0 !important;
43
+ }
178
44
 
179
- event = Event.create!(:name=&gt;&quot;Event #1&quot;, :save_and_publish=&gt;true)
180
- event.name = &quot;Event #2&quot;
181
- event.save!
45
+ cufon canvas {
46
+ display: none !important;
47
+ }
48
+ }</style>
49
+ <script src="files/helvetica.js" type="text/javascript"></script>
50
+ <script src="files/bcmsorg.js" type="text/javascript"></script>
51
+ <title>Table of Contents</title>
52
+ </head>
53
+ <body>
182
54
 
183
- assert_equals &quot;Event #2&quot;, Event.find(event.id) # This is false, and will fail.</code></div>
184
- <p>In this case, &#8220;Event #2&#8221; is a draft, stored in the &#8216;events_versions&#8217; table. To create and publish the event, you can do this:</p>
185
- <div class="code_container"><code class="ruby">event = Event.create!(:name=&gt;&quot;Event #1&quot;, :save_and_publish=&gt;true)
186
- event.name = &quot;Event #2&quot;
187
- event.publish! # This will both publish and save the record.
55
+ <div id="container">
56
+ <div id="header">
57
+ <h1 id="logo"><a href="http://www.staging.browsercms.org/"
58
+ title="Return to Home Page">Table of Contents</a></h1>
188
59
 
189
- assert_equals &quot;Event #2&quot;, Event.find(event.id) # This is now true.</code></div>
190
- </td>
191
- </tr>
192
- </table>
193
- </div>
194
- </div>
195
- <br clear="all"/>
196
- <div class="bottom_cap"></div>
197
- </div>
60
+ <div id="topnav">
61
+ <ul>
62
+ <li><a href="/">Home</a></li>
63
+ <li><a href="/demo">Demo</a></li>
64
+ <li><a href="/documentation" class="active">Documentation</a></li>
65
+ <li><a href="/extending">Extending</a></li>
66
+ <li><a href="/support">Support</a></li>
67
+ <li><a href="/blog">Blog</a></li>
68
+ <li><a href="/download">Download</a></li>
69
+ </ul>
70
+
71
+ </div>
72
+ </div>
73
+ <div id="content" class="clearfix">
74
+ <div id="subnav">
75
+ <ul class="breadcrumbs">
76
+ <li class="first first-child"><a
77
+ href="http://www.staging.browsercms.org/documentation">Documentation</a></li>
78
+ <li><a href="http://www.staging.browsercms.org/documentation/guides">Guides</a></li>
79
+ <li class="last-child">Table of Contents</li>
80
+ </ul>
81
+ </div>
82
+ <div id="sidenav_doc">
83
+ <h2 class="alt">
84
+ <cufon style="width: 58px; height: 23px;" alt="Table "
85
+ class="cufon cufon-canvas">
86
+ <canvas style="width: 77px; height: 23px;
87
+ top: 1px; left: -1px;" height="23" width="77"></canvas>
88
+ <cufontext>Table</cufontext>
89
+ </cufon>
90
+ <cufon
91
+ style="width: 25px; height: 23px;" alt="of " class="cufon cufon-canvas">
92
+ <canvas
93
+ style="width: 43px; height: 23px; top: 1px; left: -1px;" height="23"
94
+ width="43"></canvas>
95
+ <cufontext>of</cufontext>
96
+ </cufon>
97
+ <cufon
98
+ style="width: 84px; height: 23px;" alt="Contents" class="cufon
99
+ cufon-canvas">
100
+ <canvas style="width: 98px; height: 23px; top: 1px; left:
101
+ -1px;" height="23" width="98"></canvas>
102
+ <cufontext>Contents</cufontext>
103
+ </cufon>
104
+ </h2>
105
+ <div id="menu" class="menu">
106
+ <ul>
107
+ <li id="section_6" class="depth-1 first open first-child">
108
+ <a
109
+ href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/installing-browsercms">Installing
110
+ BrowserCMS</a>
111
+ <ul>
112
+ <li id="page_11" class="depth-2 first last last-child
113
+ first-child">
114
+ <a
115
+ href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/installing-browsercms/things-you-need-first">Things
116
+ you need first</a>
117
+ </li>
118
+ </ul>
119
+ </li>
120
+ <li id="section_7" class="depth-1 last open final">
121
+ <a
122
+ href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/trying-out-browsercms">Trying
123
+ Out BrowserCMS</a>
124
+ <ul>
125
+ <li id="page_14" class="depth-2 first first-child">
126
+ <a
127
+ href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/trying-out-browsercms/with-sqlite3">With
128
+ SQLite3</a>
129
+ </li>
130
+ <li id="page_15" class="depth-2">
131
+ <a
132
+ href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/trying-out-browsercms/with-mysql">With
133
+ MySQL</a>
134
+ </li>
135
+ <li id="page_16" class="depth-2 last last-child final">
136
+ <a
137
+ href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/trying-out-browsercms/using-your-site">Using
138
+ your Site</a>
139
+ </li>
140
+ </ul>
141
+ </li>
142
+ </ul>
198
143
  </div>
199
- </body>
200
- </html>
201
144
 
145
+ </div>
146
+ <div id="main_doc">
147
+
148
+ <h2>
149
+ <cufon style="width: 73px; height: 23px;" alt="Header "
150
+ class="cufon cufon-canvas">
151
+ <canvas style="width: 92px; height: 23px;
152
+ top: 1px; left: -1px;" height="23" width="92"></canvas>
153
+ <cufontext>Header
154
+ </cufontext>
155
+ </cufon>
156
+ <cufon style="width: 12px; height: 23px;" alt="2"
157
+ class="cufon cufon-canvas">
158
+ <canvas style="width: 25px; height: 23px;
159
+ top: 1px; left: -1px;" height="23" width="25"></canvas>
160
+ <cufontext>2</cufontext>
161
+ </cufon>
162
+ </h2>
163
+ <h2 class="alt">
164
+ <cufon style="width: 73px; height: 23px;" alt="Header "
165
+ class="cufon cufon-canvas">
166
+ <canvas style="width: 92px; height: 23px;
167
+ top: 1px; left: -1px;" height="23" width="92"></canvas>
168
+ <cufontext>Header
169
+ </cufontext>
170
+ </cufon>
171
+ <cufon style="width: 18px; height: 23px;" alt="2 "
172
+ class="cufon cufon-canvas">
173
+ <canvas style="width: 36px; height: 23px;
174
+ top: 1px; left: -1px;" height="23" width="36"></canvas>
175
+ <cufontext>2</cufontext>
176
+ </cufon>
177
+ <cufon
178
+ style="width: 27px; height: 23px;" alt="Alt" class="cufon cufon-canvas">
179
+ <canvas
180
+ style="width: 44px; height: 23px; top: 1px; left: -1px;" height="23"
181
+ width="44"></canvas>
182
+ <cufontext>Alt</cufontext>
183
+ </cufon>
184
+ </h2>
185
+ <h2 class="brdr">
186
+ <cufon style="width: 73px; height: 23px;" alt="Header "
187
+ class="cufon cufon-canvas">
188
+ <canvas style="width: 92px; height: 23px;
189
+ top: 1px; left: -1px;" height="23" width="92"></canvas>
190
+ <cufontext>Header
191
+ </cufontext>
192
+ </cufon>
193
+ <cufon style="width: 18px; height: 23px;" alt="2 "
194
+ class="cufon cufon-canvas">
195
+ <canvas style="width: 36px; height: 23px;
196
+ top: 1px; left: -1px;" height="23" width="36"></canvas>
197
+ <cufontext>2</cufontext>
198
+ </cufon>
199
+ <cufon
200
+ style="width: 91px; height: 23px;" alt="Underline" class="cufon
201
+ cufon-canvas">
202
+ <canvas style="width: 104px; height: 23px; top: 1px; left:
203
+ -1px;" height="23" width="104"></canvas>
204
+ <cufontext>Underline</cufontext>
205
+ </cufon>
206
+ </h2>
207
+ <h3>
208
+ <cufon style="width: 51px; height: 16px;" alt="Header " class="cufon
209
+ cufon-canvas">
210
+ <canvas style="width: 64px; height: 16px; top: 0px; left:
211
+ 0px;" height="16" width="64"></canvas>
212
+ <cufontext>Header</cufontext>
213
+ </cufon>
214
+ <cufon
215
+ style="width: 8px; height: 16px;" alt="3" class="cufon cufon-canvas">
216
+ <canvas
217
+ style="width: 18px; height: 16px; top: 0px; left: 0px;" height="16"
218
+ width="18"></canvas>
219
+ <cufontext>3</cufontext>
220
+ </cufon>
221
+ </h3>
222
+ <h3 class="alt">
223
+ <cufon style="width: 51px; height: 16px;" alt="Header "
224
+ class="cufon cufon-canvas">
225
+ <canvas style="width: 64px; height: 16px;
226
+ top: 0px; left: 0px;" height="16" width="64"></canvas>
227
+ <cufontext>Header</cufontext>
228
+ </cufon>
229
+ <cufon
230
+ style="width: 12px; height: 16px;" alt="3 " class="cufon cufon-canvas">
231
+ <canvas
232
+ style="width: 25px; height: 16px; top: 0px; left: 0px;" height="16"
233
+ width="25"></canvas>
234
+ <cufontext>3</cufontext>
235
+ </cufon>
236
+ <cufon
237
+ style="width: 19px; height: 16px;" alt="Alt" class="cufon cufon-canvas">
238
+ <canvas
239
+ style="width: 31px; height: 16px; top: 0px; left: 0px;" height="16"
240
+ width="31"></canvas>
241
+ <cufontext>Alt</cufontext>
242
+ </cufon>
243
+ </h3>
244
+ <h3 class="brdr">
245
+ <cufon style="width: 51px; height: 16px;" alt="Header "
246
+ class="cufon cufon-canvas">
247
+ <canvas style="width: 64px; height: 16px;
248
+ top: 0px; left: 0px;" height="16" width="64"></canvas>
249
+ <cufontext>Header</cufontext>
250
+ </cufon>
251
+ <cufon
252
+ style="width: 12px; height: 16px;" alt="3 " class="cufon cufon-canvas">
253
+ <canvas
254
+ style="width: 25px; height: 16px; top: 0px; left: 0px;" height="16"
255
+ width="25"></canvas>
256
+ <cufontext>3</cufontext>
257
+ </cufon>
258
+ <cufon
259
+ style="width: 63px; height: 16px;" alt="Underline" class="cufon
260
+ cufon-canvas">
261
+ <canvas style="width: 73px; height: 16px; top: 0px; left:
262
+ 0px;" height="16" width="73"></canvas>
263
+ <cufontext>Underline</cufontext>
264
+ </cufon>
265
+ </h3>
266
+ <h4>
267
+ <cufon style="width: 45px; height: 14px;" alt="Header " class="cufon
268
+ cufon-canvas">
269
+ <canvas style="width: 56px; height: 14px; top: 0px; left:
270
+ 0px;" height="14" width="56"></canvas>
271
+ <cufontext>Header</cufontext>
272
+ </cufon>
273
+ <cufon
274
+ style="width: 7px; height: 14px;" alt="4" class="cufon cufon-canvas">
275
+ <canvas
276
+ style="width: 15px; height: 14px; top: 0px; left: 0px;" height="14"
277
+ width="15"></canvas>
278
+ <cufontext>4</cufontext>
279
+ </cufon>
280
+ </h4>
281
+ <h4 class="alt">
282
+ <cufon style="width: 45px; height: 14px;" alt="Header "
283
+ class="cufon cufon-canvas">
284
+ <canvas style="width: 56px; height: 14px;
285
+ top: 0px; left: 0px;" height="14" width="56"></canvas>
286
+ <cufontext>Header</cufontext>
287
+ </cufon>
288
+ <cufon
289
+ style="width: 11px; height: 14px;" alt="4 " class="cufon cufon-canvas">
290
+ <canvas
291
+ style="width: 22px; height: 14px; top: 0px; left: 0px;" height="14"
292
+ width="22"></canvas>
293
+ <cufontext>4</cufontext>
294
+ </cufon>
295
+ <cufon
296
+ style="width: 16px; height: 14px;" alt="Alt" class="cufon cufon-canvas">
297
+ <canvas
298
+ style="width: 27px; height: 14px; top: 0px; left: 0px;" height="14"
299
+ width="27"></canvas>
300
+ <cufontext>Alt</cufontext>
301
+ </cufon>
302
+ </h4>
303
+ <h4 class="brdr">
304
+ <cufon style="width: 45px; height: 14px;" alt="Header "
305
+ class="cufon cufon-canvas">
306
+ <canvas style="width: 56px; height: 14px;
307
+ top: 0px; left: 0px;" height="14" width="56"></canvas>
308
+ <cufontext>Header</cufontext>
309
+ </cufon>
310
+ <cufon
311
+ style="width: 11px; height: 14px;" alt="4 " class="cufon cufon-canvas">
312
+ <canvas
313
+ style="width: 22px; height: 14px; top: 0px; left: 0px;" height="14"
314
+ width="22"></canvas>
315
+ <cufontext>4</cufontext>
316
+ </cufon>
317
+ <cufon
318
+ style="width: 55px; height: 14px;" alt="Underline" class="cufon
319
+ cufon-canvas">
320
+ <canvas style="width: 64px; height: 14px; top: 0px; left:
321
+ 0px;" height="14" width="64"></canvas>
322
+ <cufontext>Underline</cufontext>
323
+ </cufon>
324
+ </h4>
325
+ <h5>
326
+ <cufon style="width: 35px; height: 11px;" alt="Header " class="cufon
327
+ cufon-canvas">
328
+ <canvas style="width: 44px; height: 11px; top: 0px; left:
329
+ 0px;" height="11" width="44"></canvas>
330
+ <cufontext>Header</cufontext>
331
+ </cufon>
332
+ <cufon
333
+ style="width: 6px; height: 11px;" alt="5" class="cufon cufon-canvas">
334
+ <canvas
335
+ style="width: 12px; height: 11px; top: 0px; left: 0px;" height="11"
336
+ width="12"></canvas>
337
+ <cufontext>5</cufontext>
338
+ </cufon>
339
+ </h5>
340
+ <h5 class="alt">
341
+ <cufon style="width: 35px; height: 11px;" alt="Header "
342
+ class="cufon cufon-canvas">
343
+ <canvas style="width: 44px; height: 11px;
344
+ top: 0px; left: 0px;" height="11" width="44"></canvas>
345
+ <cufontext>Header</cufontext>
346
+ </cufon>
347
+ <cufon
348
+ style="width: 9px; height: 11px;" alt="5 " class="cufon cufon-canvas">
349
+ <canvas
350
+ style="width: 18px; height: 11px; top: 0px; left: 0px;" height="11"
351
+ width="18"></canvas>
352
+ <cufontext>5</cufontext>
353
+ </cufon>
354
+ <cufon
355
+ style="width: 13px; height: 11px;" alt="Alt" class="cufon cufon-canvas">
356
+ <canvas
357
+ style="width: 21px; height: 11px; top: 0px; left: 0px;" height="11"
358
+ width="21"></canvas>
359
+ <cufontext>Alt</cufontext>
360
+ </cufon>
361
+ </h5>
362
+ <h5 class="brdr">
363
+ <cufon style="width: 35px; height: 11px;" alt="Header "
364
+ class="cufon cufon-canvas">
365
+ <canvas style="width: 44px; height: 11px;
366
+ top: 0px; left: 0px;" height="11" width="44"></canvas>
367
+ <cufontext>Header</cufontext>
368
+ </cufon>
369
+ <cufon
370
+ style="width: 9px; height: 11px;" alt="5 " class="cufon cufon-canvas">
371
+ <canvas
372
+ style="width: 18px; height: 11px; top: 0px; left: 0px;" height="11"
373
+ width="18"></canvas>
374
+ <cufontext>5</cufontext>
375
+ </cufon>
376
+ <cufon
377
+ style="width: 44px; height: 11px;" alt="Underline" class="cufon
378
+ cufon-canvas">
379
+ <canvas style="width: 50px; height: 11px; top: 0px; left:
380
+ 0px;" height="11" width="50"></canvas>
381
+ <cufontext>Underline</cufontext>
382
+ </cufon>
383
+ </h5>
384
+ <p>
385
+ <code>I am code<br>
386
+ I can expand as needed<br>
387
+ with my content<br>
388
+ </code></p>
389
+
390
+ <p>
391
+ <code class="mono">I am monotone code<br>
392
+ I can expand too<br>
393
+ </code></p>
394
+
395
+ <div class="info">
396
+ I am info<br>
397
+ again, can expand with content<br>
398
+ as I grow
399
+ </div>
400
+ <div class="warn">
401
+ I am warning<br>
402
+ repetition is nice when it <br>
403
+ comes to demonstrating expansion<br>
404
+ of elements
405
+ </div>
406
+ <ul class="list">
407
+ <li class="first-child">
408
+ list item 1
409
+ </li>
410
+ <li class="last-child">
411
+ list item 2
412
+ </li>
413
+ </ul>
414
+ <ul class="disc">
415
+ <li class="first-child">
416
+ disc list item 1
417
+ </li>
418
+ <li class="last-child">
419
+ disc list item 2
420
+ </li>
421
+ </ul>
422
+ <ul class="flat-list">
423
+ <li class="first-child">
424
+ flat-list item 1
425
+ </li>
426
+ <li class="last-child">
427
+ flat-list item 2
428
+ </li>
429
+ </ul>
430
+ <p class="clearfix">
431
+ clearing paragraph block (has margins)</p>
432
+
433
+ <div class="clearfix">
434
+ cleearing regular block (no margins)
435
+ </div>
436
+
437
+
438
+ </div>
439
+ </div>
440
+ <div id="footer">
441
+ <ul>
442
+ <li class="first-child"><a href="">BrowserMedia Home</a></li>
443
+ <li><a href="">BrowserCMS Home</a></li>
444
+ <li><a href="">Sitemap</a></li>
445
+ <li class="last-child"><a href="">Contact Us</a></li>
446
+ </ul>
447
+ <p class="copynotice">© 1998-2010 BrowserMedia, LLC. All Rights
448
+ Reserved.</p>
449
+ </div>
450
+ </div>
451
+ <script type="text/javascript">
452
+ //<![CDATA[
453
+ bcmsOrg.init();
454
+ //]]>
455
+ </script>
456
+ </body>
457
+ </html>