browsercms 3.0.0

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 (896) hide show
  1. data/LICENSE.txt +165 -0
  2. data/README.markdown +56 -0
  3. data/app/controllers/application_controller.rb +14 -0
  4. data/app/controllers/cms/application_controller.rb +78 -0
  5. data/app/controllers/cms/attachments_controller.rb +11 -0
  6. data/app/controllers/cms/base_controller.rb +13 -0
  7. data/app/controllers/cms/cache_controller.rb +22 -0
  8. data/app/controllers/cms/categories_controller.rb +2 -0
  9. data/app/controllers/cms/category_types_controller.rb +5 -0
  10. data/app/controllers/cms/connectors_controller.rb +63 -0
  11. data/app/controllers/cms/content_block_controller.rb +262 -0
  12. data/app/controllers/cms/content_controller.rb +227 -0
  13. data/app/controllers/cms/content_types_controller.rb +7 -0
  14. data/app/controllers/cms/dashboard_controller.rb +9 -0
  15. data/app/controllers/cms/dynamic_views_controller.rb +65 -0
  16. data/app/controllers/cms/email_messages_controller.rb +14 -0
  17. data/app/controllers/cms/error_handling.rb +18 -0
  18. data/app/controllers/cms/file_blocks_controller.rb +2 -0
  19. data/app/controllers/cms/groups_controller.rb +26 -0
  20. data/app/controllers/cms/home_controller.rb +5 -0
  21. data/app/controllers/cms/html_blocks_controller.rb +2 -0
  22. data/app/controllers/cms/image_blocks_controller.rb +2 -0
  23. data/app/controllers/cms/links_controller.rb +65 -0
  24. data/app/controllers/cms/page_route_conditions_controller.rb +2 -0
  25. data/app/controllers/cms/page_route_options_controller.rb +56 -0
  26. data/app/controllers/cms/page_route_requirements_controller.rb +2 -0
  27. data/app/controllers/cms/page_routes_controller.rb +45 -0
  28. data/app/controllers/cms/pages_controller.rb +129 -0
  29. data/app/controllers/cms/portlet_controller.rb +12 -0
  30. data/app/controllers/cms/portlets_controller.rb +40 -0
  31. data/app/controllers/cms/redirects_controller.rb +19 -0
  32. data/app/controllers/cms/resource_controller.rb +108 -0
  33. data/app/controllers/cms/routes_controller.rb +23 -0
  34. data/app/controllers/cms/section_nodes_controller.rb +40 -0
  35. data/app/controllers/cms/sections_controller.rb +125 -0
  36. data/app/controllers/cms/sessions_controller.rb +64 -0
  37. data/app/controllers/cms/tags_controller.rb +9 -0
  38. data/app/controllers/cms/tasks_controller.rb +52 -0
  39. data/app/controllers/cms/toolbar_controller.rb +12 -0
  40. data/app/controllers/cms/users_controller.rb +98 -0
  41. data/app/helpers/application_helper.rb +3 -0
  42. data/app/helpers/cms/application_helper.rb +190 -0
  43. data/app/helpers/cms/form_builder.rb +98 -0
  44. data/app/helpers/cms/form_tag_helper.rb +32 -0
  45. data/app/helpers/cms/menu_helper.rb +172 -0
  46. data/app/helpers/cms/page_helper.rb +60 -0
  47. data/app/helpers/cms/path_helper.rb +48 -0
  48. data/app/helpers/cms/section_nodes_helper.rb +13 -0
  49. data/app/models/abstract_file_block.rb +13 -0
  50. data/app/models/attachment.rb +193 -0
  51. data/app/models/category.rb +40 -0
  52. data/app/models/category_type.rb +34 -0
  53. data/app/models/connector.rb +76 -0
  54. data/app/models/content_type.rb +95 -0
  55. data/app/models/content_type_group.rb +3 -0
  56. data/app/models/dynamic_view.rb +82 -0
  57. data/app/models/email_message.rb +31 -0
  58. data/app/models/email_message_mailer.rb +11 -0
  59. data/app/models/file_block.rb +21 -0
  60. data/app/models/group.rb +30 -0
  61. data/app/models/group_permission.rb +7 -0
  62. data/app/models/group_section.rb +4 -0
  63. data/app/models/group_type.rb +12 -0
  64. data/app/models/group_type_permission.rb +4 -0
  65. data/app/models/guest_user.rb +39 -0
  66. data/app/models/html_block.rb +40 -0
  67. data/app/models/image_block.rb +22 -0
  68. data/app/models/link.rb +35 -0
  69. data/app/models/page.rb +275 -0
  70. data/app/models/page_partial.rb +22 -0
  71. data/app/models/page_route.rb +58 -0
  72. data/app/models/page_route_condition.rb +2 -0
  73. data/app/models/page_route_option.rb +3 -0
  74. data/app/models/page_route_requirement.rb +2 -0
  75. data/app/models/page_template.rb +48 -0
  76. data/app/models/permission.rb +10 -0
  77. data/app/models/portlet.rb +144 -0
  78. data/app/models/redirect.rb +4 -0
  79. data/app/models/section.rb +140 -0
  80. data/app/models/section_node.rb +93 -0
  81. data/app/models/site.rb +41 -0
  82. data/app/models/tag.rb +62 -0
  83. data/app/models/tagging.rb +9 -0
  84. data/app/models/task.rb +67 -0
  85. data/app/models/user.rb +125 -0
  86. data/app/models/user_group_membership.rb +4 -0
  87. data/app/portlets/dynamic_portlet.rb +7 -0
  88. data/app/portlets/email_page_portlet.rb +24 -0
  89. data/app/portlets/login_portlet.rb +10 -0
  90. data/app/portlets/tag_cloud_portlet.rb +13 -0
  91. data/app/views/cms/blocks/_hidden_fields.html.erb +10 -0
  92. data/app/views/cms/blocks/_toolbar.html.erb +9 -0
  93. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +26 -0
  94. data/app/views/cms/blocks/_toolbar_for_member.html.erb +38 -0
  95. data/app/views/cms/blocks/edit.html.erb +25 -0
  96. data/app/views/cms/blocks/index.html.erb +123 -0
  97. data/app/views/cms/blocks/new.html.erb +21 -0
  98. data/app/views/cms/blocks/show.html.erb +40 -0
  99. data/app/views/cms/blocks/usages.html.erb +34 -0
  100. data/app/views/cms/blocks/versions.html.erb +90 -0
  101. data/app/views/cms/cache/show.html.erb +12 -0
  102. data/app/views/cms/categories/_form.html.erb +36 -0
  103. data/app/views/cms/category_types/_form.html.erb +1 -0
  104. data/app/views/cms/connectors/new.html.erb +71 -0
  105. data/app/views/cms/content/no_page.html.erb +37 -0
  106. data/app/views/cms/content/show.html.erb +21 -0
  107. data/app/views/cms/content_types/index.html.erb +14 -0
  108. data/app/views/cms/dashboard/_page_drafts.html.erb +49 -0
  109. data/app/views/cms/dashboard/_tasks.html.erb +54 -0
  110. data/app/views/cms/dashboard/index.html.erb +15 -0
  111. data/app/views/cms/dynamic_views/_form.html.erb +11 -0
  112. data/app/views/cms/dynamic_views/edit.html.erb +3 -0
  113. data/app/views/cms/dynamic_views/index.html.erb +48 -0
  114. data/app/views/cms/dynamic_views/new.html.erb +3 -0
  115. data/app/views/cms/email_messages/index.html.erb +41 -0
  116. data/app/views/cms/email_messages/show.html.erb +57 -0
  117. data/app/views/cms/file_blocks/_form.html.erb +30 -0
  118. data/app/views/cms/file_blocks/render.html.erb +5 -0
  119. data/app/views/cms/form_builder/_cms_date_picker.html.erb +12 -0
  120. data/app/views/cms/form_builder/_cms_drop_down.html.erb +19 -0
  121. data/app/views/cms/form_builder/_cms_file_field.html.erb +32 -0
  122. data/app/views/cms/form_builder/_cms_tag_list.html.erb +15 -0
  123. data/app/views/cms/form_builder/_cms_text_area.html.erb +13 -0
  124. data/app/views/cms/form_builder/_cms_text_editor.html.erb +18 -0
  125. data/app/views/cms/form_builder/_cms_text_field.html.erb +12 -0
  126. data/app/views/cms/groups/_form.html.erb +45 -0
  127. data/app/views/cms/groups/_permissions.html.erb +36 -0
  128. data/app/views/cms/groups/_sections.html.erb +18 -0
  129. data/app/views/cms/groups/edit.html.erb +4 -0
  130. data/app/views/cms/groups/index.html.erb +60 -0
  131. data/app/views/cms/groups/new.html.erb +4 -0
  132. data/app/views/cms/html_blocks/_form.html.erb +3 -0
  133. data/app/views/cms/html_blocks/render.html.erb +1 -0
  134. data/app/views/cms/image_blocks/_form.html.erb +30 -0
  135. data/app/views/cms/image_blocks/render.html.erb +1 -0
  136. data/app/views/cms/links/_form.html.erb +13 -0
  137. data/app/views/cms/links/destroy.js.rjs +2 -0
  138. data/app/views/cms/links/edit.html.erb +14 -0
  139. data/app/views/cms/links/new.html.erb +15 -0
  140. data/app/views/cms/page_routes/_form.html.erb +11 -0
  141. data/app/views/cms/page_routes/edit.html.erb +3 -0
  142. data/app/views/cms/page_routes/index.html.erb +50 -0
  143. data/app/views/cms/page_routes/new.html.erb +3 -0
  144. data/app/views/cms/page_routes/show.html.erb +14 -0
  145. data/app/views/cms/pages/_edit_connector.html.erb +16 -0
  146. data/app/views/cms/pages/_edit_container.html.erb +8 -0
  147. data/app/views/cms/pages/_form.html.erb +46 -0
  148. data/app/views/cms/pages/edit.html.erb +23 -0
  149. data/app/views/cms/pages/new.html.erb +33 -0
  150. data/app/views/cms/pages/versions.html.erb +91 -0
  151. data/app/views/cms/redirects/_form.html.erb +15 -0
  152. data/app/views/cms/redirects/edit.html.erb +3 -0
  153. data/app/views/cms/redirects/index.html.erb +45 -0
  154. data/app/views/cms/redirects/new.html.erb +3 -0
  155. data/app/views/cms/routes/index.html.erb +36 -0
  156. data/app/views/cms/section_nodes/_link.html.erb +11 -0
  157. data/app/views/cms/section_nodes/_node.html.erb +34 -0
  158. data/app/views/cms/section_nodes/_page.html.erb +14 -0
  159. data/app/views/cms/section_nodes/_section.html.erb +12 -0
  160. data/app/views/cms/section_nodes/_section_node.html.erb +10 -0
  161. data/app/views/cms/section_nodes/index.html.erb +31 -0
  162. data/app/views/cms/sections/_form.html.erb +58 -0
  163. data/app/views/cms/sections/_page.html.erb +4 -0
  164. data/app/views/cms/sections/_section.html.erb +8 -0
  165. data/app/views/cms/sections/destroy.js.rjs +2 -0
  166. data/app/views/cms/sections/edit.html.erb +10 -0
  167. data/app/views/cms/sections/file_browser.xml.builder +14 -0
  168. data/app/views/cms/sections/index.html.erb +23 -0
  169. data/app/views/cms/sections/new.html.erb +21 -0
  170. data/app/views/cms/sessions/new.html.erb +32 -0
  171. data/app/views/cms/shared/_admin_sidebar.html.erb +30 -0
  172. data/app/views/cms/shared/_exception.html.erb +6 -0
  173. data/app/views/cms/shared/_pagination.html.erb +31 -0
  174. data/app/views/cms/shared/_version_conflict_diff.html.erb +11 -0
  175. data/app/views/cms/shared/_version_conflict_error.html.erb +6 -0
  176. data/app/views/cms/shared/error.html.erb +40 -0
  177. data/app/views/cms/tags/_form.html.erb +1 -0
  178. data/app/views/cms/tags/render.html.erb +53 -0
  179. data/app/views/cms/tasks/new.html.erb +36 -0
  180. data/app/views/cms/toolbar/index.html.erb +12 -0
  181. data/app/views/cms/users/_form.html.erb +12 -0
  182. data/app/views/cms/users/_groups.html.erb +11 -0
  183. data/app/views/cms/users/_password.html.erb +8 -0
  184. data/app/views/cms/users/_toolbar.html.erb +22 -0
  185. data/app/views/cms/users/_user_fields.html.erb +20 -0
  186. data/app/views/cms/users/change_password.html.erb +19 -0
  187. data/app/views/cms/users/edit.html.erb +16 -0
  188. data/app/views/cms/users/index.html.erb +62 -0
  189. data/app/views/cms/users/new.html.erb +13 -0
  190. data/app/views/layouts/_cms_toolbar.html.erb +21 -0
  191. data/app/views/layouts/_page_toolbar.html.erb +118 -0
  192. data/app/views/layouts/application.html.erb +11 -0
  193. data/app/views/layouts/cms/_footer.erb +4 -0
  194. data/app/views/layouts/cms/_head.html.erb +21 -0
  195. data/app/views/layouts/cms/administration.html.erb +34 -0
  196. data/app/views/layouts/cms/application.html.erb +25 -0
  197. data/app/views/layouts/cms/content_library.html.erb +94 -0
  198. data/app/views/layouts/cms/dashboard.html.erb +16 -0
  199. data/app/views/layouts/cms/login.html.erb +30 -0
  200. data/app/views/layouts/cms/section_nodes.html.erb +20 -0
  201. data/app/views/layouts/cms/thickbox.html.erb +24 -0
  202. data/app/views/layouts/cms/toolbar.html.erb +23 -0
  203. data/app/views/portlets/dynamic/_form.html.erb +3 -0
  204. data/app/views/portlets/email_page/_form.html.erb +7 -0
  205. data/app/views/portlets/email_page/render.html.erb +17 -0
  206. data/app/views/portlets/login/_form.html.erb +6 -0
  207. data/app/views/portlets/login/render.html.erb +27 -0
  208. data/app/views/portlets/portlets/_form.html.erb +19 -0
  209. data/app/views/portlets/tag_cloud/_form.html.erb +4 -0
  210. data/app/views/portlets/tag_cloud/render.html.erb +5 -0
  211. data/browsercms.gemspec +929 -0
  212. data/db/demo/data.rb +96 -0
  213. data/db/demo/page_partials/_footer.html.erb +6 -0
  214. data/db/demo/page_partials/_header.html.erb +24 -0
  215. data/db/demo/page_templates/home_page.html.erb +49 -0
  216. data/db/demo/page_templates/sub_page.html.erb +37 -0
  217. data/db/migrate/20080815014337_browsercms_3_0_0.rb +274 -0
  218. data/db/migrate/20081114172307_load_seed_data.rb +92 -0
  219. data/lib/acts_as_list.rb +252 -0
  220. data/lib/browsercms.rb +12 -0
  221. data/lib/cms/acts/content_block.rb +31 -0
  222. data/lib/cms/authentication/controller.rb +194 -0
  223. data/lib/cms/authentication/model.rb +116 -0
  224. data/lib/cms/behaviors.rb +33 -0
  225. data/lib/cms/behaviors/archiving.rb +43 -0
  226. data/lib/cms/behaviors/attaching.rb +184 -0
  227. data/lib/cms/behaviors/categorizing.rb +31 -0
  228. data/lib/cms/behaviors/connecting.rb +99 -0
  229. data/lib/cms/behaviors/dynamic_attributes.rb +367 -0
  230. data/lib/cms/behaviors/flush_cache_on_change.rb +33 -0
  231. data/lib/cms/behaviors/hiding.rb +46 -0
  232. data/lib/cms/behaviors/pagination.rb +209 -0
  233. data/lib/cms/behaviors/publishing.rb +112 -0
  234. data/lib/cms/behaviors/rendering.rb +144 -0
  235. data/lib/cms/behaviors/searching.rb +49 -0
  236. data/lib/cms/behaviors/soft_deleting.rb +77 -0
  237. data/lib/cms/behaviors/taggable.rb +56 -0
  238. data/lib/cms/behaviors/userstamping.rb +37 -0
  239. data/lib/cms/behaviors/versioning.rb +265 -0
  240. data/lib/cms/caching.rb +20 -0
  241. data/lib/cms/data_loader.rb +28 -0
  242. data/lib/cms/extensions.rb +4 -0
  243. data/lib/cms/extensions/action_view/base.rb +13 -0
  244. data/lib/cms/extensions/active_record/base.rb +16 -0
  245. data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +72 -0
  246. data/lib/cms/extensions/active_record/errors.rb +12 -0
  247. data/lib/cms/extensions/active_support/cache/file_store.rb +9 -0
  248. data/lib/cms/extensions/hash.rb +21 -0
  249. data/lib/cms/extensions/integer.rb +16 -0
  250. data/lib/cms/extensions/nil.rb +19 -0
  251. data/lib/cms/extensions/string.rb +19 -0
  252. data/lib/cms/init.rb +100 -0
  253. data/lib/cms/routes.rb +129 -0
  254. data/lib/initial_data.rb +30 -0
  255. data/lib/sequence.rb +6 -0
  256. data/lib/tasks/cms.rake +83 -0
  257. data/lib/tasks/db.rake +67 -0
  258. data/lib/tasks/dev.rake +20 -0
  259. data/public/fckeditor/editor/css/behaviors/disablehandles.htc +15 -0
  260. data/public/fckeditor/editor/css/behaviors/showtableborders.htc +36 -0
  261. data/public/fckeditor/editor/css/fck_editorarea.css +110 -0
  262. data/public/fckeditor/editor/css/fck_internal.css +199 -0
  263. data/public/fckeditor/editor/css/fck_showtableborders_gecko.css +49 -0
  264. data/public/fckeditor/editor/css/images/block_address.png +0 -0
  265. data/public/fckeditor/editor/css/images/block_blockquote.png +0 -0
  266. data/public/fckeditor/editor/css/images/block_div.png +0 -0
  267. data/public/fckeditor/editor/css/images/block_h1.png +0 -0
  268. data/public/fckeditor/editor/css/images/block_h2.png +0 -0
  269. data/public/fckeditor/editor/css/images/block_h3.png +0 -0
  270. data/public/fckeditor/editor/css/images/block_h4.png +0 -0
  271. data/public/fckeditor/editor/css/images/block_h5.png +0 -0
  272. data/public/fckeditor/editor/css/images/block_h6.png +0 -0
  273. data/public/fckeditor/editor/css/images/block_p.png +0 -0
  274. data/public/fckeditor/editor/css/images/block_pre.png +0 -0
  275. data/public/fckeditor/editor/css/images/fck_anchor.gif +0 -0
  276. data/public/fckeditor/editor/css/images/fck_flashlogo.gif +0 -0
  277. data/public/fckeditor/editor/css/images/fck_hiddenfield.gif +0 -0
  278. data/public/fckeditor/editor/css/images/fck_pagebreak.gif +0 -0
  279. data/public/fckeditor/editor/css/images/fck_plugin.gif +0 -0
  280. data/public/fckeditor/editor/dialog/common/fck_dialog_common.css +85 -0
  281. data/public/fckeditor/editor/dialog/common/fck_dialog_common.js +311 -0
  282. data/public/fckeditor/editor/dialog/common/images/locked.gif +0 -0
  283. data/public/fckeditor/editor/dialog/common/images/reset.gif +0 -0
  284. data/public/fckeditor/editor/dialog/common/images/unlocked.gif +0 -0
  285. data/public/fckeditor/editor/dialog/fck_about.html +161 -0
  286. data/public/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif +0 -0
  287. data/public/fckeditor/editor/dialog/fck_about/logo_fredck.gif +0 -0
  288. data/public/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif +0 -0
  289. data/public/fckeditor/editor/dialog/fck_anchor.html +220 -0
  290. data/public/fckeditor/editor/dialog/fck_button.html +104 -0
  291. data/public/fckeditor/editor/dialog/fck_checkbox.html +104 -0
  292. data/public/fckeditor/editor/dialog/fck_colorselector.html +172 -0
  293. data/public/fckeditor/editor/dialog/fck_div.html +364 -0
  294. data/public/fckeditor/editor/dialog/fck_docprops.html +600 -0
  295. data/public/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html +113 -0
  296. data/public/fckeditor/editor/dialog/fck_flash.html +152 -0
  297. data/public/fckeditor/editor/dialog/fck_flash/fck_flash.js +300 -0
  298. data/public/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html +50 -0
  299. data/public/fckeditor/editor/dialog/fck_form.html +109 -0
  300. data/public/fckeditor/editor/dialog/fck_hiddenfield.html +115 -0
  301. data/public/fckeditor/editor/dialog/fck_image.html +258 -0
  302. data/public/fckeditor/editor/dialog/fck_image/fck_image.js +512 -0
  303. data/public/fckeditor/editor/dialog/fck_image/fck_image_preview.html +72 -0
  304. data/public/fckeditor/editor/dialog/fck_link.html +295 -0
  305. data/public/fckeditor/editor/dialog/fck_link/fck_link.js +893 -0
  306. data/public/fckeditor/editor/dialog/fck_listprop.html +120 -0
  307. data/public/fckeditor/editor/dialog/fck_paste.html +346 -0
  308. data/public/fckeditor/editor/dialog/fck_radiobutton.html +104 -0
  309. data/public/fckeditor/editor/dialog/fck_replace.html +648 -0
  310. data/public/fckeditor/editor/dialog/fck_select.html +180 -0
  311. data/public/fckeditor/editor/dialog/fck_select/fck_select.js +194 -0
  312. data/public/fckeditor/editor/dialog/fck_smiley.html +111 -0
  313. data/public/fckeditor/editor/dialog/fck_source.html +68 -0
  314. data/public/fckeditor/editor/dialog/fck_specialchar.html +121 -0
  315. data/public/fckeditor/editor/dialog/fck_spellerpages.html +70 -0
  316. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html +0 -0
  317. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js +87 -0
  318. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html +153 -0
  319. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm +148 -0
  320. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php +199 -0
  321. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl +181 -0
  322. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js +461 -0
  323. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html +71 -0
  324. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css +49 -0
  325. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js +272 -0
  326. data/public/fckeditor/editor/dialog/fck_table.html +298 -0
  327. data/public/fckeditor/editor/dialog/fck_tablecell.html +257 -0
  328. data/public/fckeditor/editor/dialog/fck_template.html +242 -0
  329. data/public/fckeditor/editor/dialog/fck_template/images/template1.gif +0 -0
  330. data/public/fckeditor/editor/dialog/fck_template/images/template2.gif +0 -0
  331. data/public/fckeditor/editor/dialog/fck_template/images/template3.gif +0 -0
  332. data/public/fckeditor/editor/dialog/fck_textarea.html +94 -0
  333. data/public/fckeditor/editor/dialog/fck_textfield.html +136 -0
  334. data/public/fckeditor/editor/dtd/fck_dtd_test.html +41 -0
  335. data/public/fckeditor/editor/dtd/fck_xhtml10strict.js +116 -0
  336. data/public/fckeditor/editor/dtd/fck_xhtml10transitional.js +140 -0
  337. data/public/fckeditor/editor/fckdebug.html +153 -0
  338. data/public/fckeditor/editor/fckdialog.html +812 -0
  339. data/public/fckeditor/editor/fckeditor.html +317 -0
  340. data/public/fckeditor/editor/fckeditor.original.html +424 -0
  341. data/public/fckeditor/editor/filemanager/browser/default/browser.css +87 -0
  342. data/public/fckeditor/editor/filemanager/browser/default/browser.html +200 -0
  343. data/public/fckeditor/editor/filemanager/browser/default/frmactualfolder.html +95 -0
  344. data/public/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html +114 -0
  345. data/public/fckeditor/editor/filemanager/browser/default/frmfolders.html +198 -0
  346. data/public/fckeditor/editor/filemanager/browser/default/frmresourceslist.html +169 -0
  347. data/public/fckeditor/editor/filemanager/browser/default/frmresourcetype.html +68 -0
  348. data/public/fckeditor/editor/filemanager/browser/default/frmupload.html +115 -0
  349. data/public/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif +0 -0
  350. data/public/fckeditor/editor/filemanager/browser/default/images/Folder.gif +0 -0
  351. data/public/fckeditor/editor/filemanager/browser/default/images/Folder32.gif +0 -0
  352. data/public/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif +0 -0
  353. data/public/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif +0 -0
  354. data/public/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif +0 -0
  355. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif +0 -0
  356. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif +0 -0
  357. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif +0 -0
  358. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif +0 -0
  359. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif +0 -0
  360. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif +0 -0
  361. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif +0 -0
  362. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif +0 -0
  363. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif +0 -0
  364. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif +0 -0
  365. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif +0 -0
  366. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif +0 -0
  367. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif +0 -0
  368. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif +0 -0
  369. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif +0 -0
  370. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif +0 -0
  371. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif +0 -0
  372. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif +0 -0
  373. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif +0 -0
  374. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif +0 -0
  375. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif +0 -0
  376. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif +0 -0
  377. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif +0 -0
  378. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif +0 -0
  379. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif +0 -0
  380. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif +0 -0
  381. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif +0 -0
  382. data/public/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif +0 -0
  383. data/public/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif +0 -0
  384. data/public/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif +0 -0
  385. data/public/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif +0 -0
  386. data/public/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif +0 -0
  387. data/public/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif +0 -0
  388. data/public/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif +0 -0
  389. data/public/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif +0 -0
  390. data/public/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif +0 -0
  391. data/public/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif +0 -0
  392. data/public/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif +0 -0
  393. data/public/fckeditor/editor/filemanager/browser/default/images/icons/html.gif +0 -0
  394. data/public/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif +0 -0
  395. data/public/fckeditor/editor/filemanager/browser/default/images/icons/js.gif +0 -0
  396. data/public/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif +0 -0
  397. data/public/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif +0 -0
  398. data/public/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif +0 -0
  399. data/public/fckeditor/editor/filemanager/browser/default/images/icons/png.gif +0 -0
  400. data/public/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif +0 -0
  401. data/public/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif +0 -0
  402. data/public/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif +0 -0
  403. data/public/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif +0 -0
  404. data/public/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif +0 -0
  405. data/public/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif +0 -0
  406. data/public/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif +0 -0
  407. data/public/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif +0 -0
  408. data/public/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif +0 -0
  409. data/public/fckeditor/editor/filemanager/browser/default/images/spacer.gif +0 -0
  410. data/public/fckeditor/editor/filemanager/browser/default/js/common.js +88 -0
  411. data/public/fckeditor/editor/filemanager/browser/default/js/fckxml.js +147 -0
  412. data/public/fckeditor/editor/images/anchor.gif +0 -0
  413. data/public/fckeditor/editor/images/arrow_ltr.gif +0 -0
  414. data/public/fckeditor/editor/images/arrow_rtl.gif +0 -0
  415. data/public/fckeditor/editor/images/smiley/msn/angel_smile.gif +0 -0
  416. data/public/fckeditor/editor/images/smiley/msn/angry_smile.gif +0 -0
  417. data/public/fckeditor/editor/images/smiley/msn/broken_heart.gif +0 -0
  418. data/public/fckeditor/editor/images/smiley/msn/cake.gif +0 -0
  419. data/public/fckeditor/editor/images/smiley/msn/confused_smile.gif +0 -0
  420. data/public/fckeditor/editor/images/smiley/msn/cry_smile.gif +0 -0
  421. data/public/fckeditor/editor/images/smiley/msn/devil_smile.gif +0 -0
  422. data/public/fckeditor/editor/images/smiley/msn/embaressed_smile.gif +0 -0
  423. data/public/fckeditor/editor/images/smiley/msn/envelope.gif +0 -0
  424. data/public/fckeditor/editor/images/smiley/msn/heart.gif +0 -0
  425. data/public/fckeditor/editor/images/smiley/msn/kiss.gif +0 -0
  426. data/public/fckeditor/editor/images/smiley/msn/lightbulb.gif +0 -0
  427. data/public/fckeditor/editor/images/smiley/msn/omg_smile.gif +0 -0
  428. data/public/fckeditor/editor/images/smiley/msn/regular_smile.gif +0 -0
  429. data/public/fckeditor/editor/images/smiley/msn/sad_smile.gif +0 -0
  430. data/public/fckeditor/editor/images/smiley/msn/shades_smile.gif +0 -0
  431. data/public/fckeditor/editor/images/smiley/msn/teeth_smile.gif +0 -0
  432. data/public/fckeditor/editor/images/smiley/msn/thumbs_down.gif +0 -0
  433. data/public/fckeditor/editor/images/smiley/msn/thumbs_up.gif +0 -0
  434. data/public/fckeditor/editor/images/smiley/msn/tounge_smile.gif +0 -0
  435. data/public/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif +0 -0
  436. data/public/fckeditor/editor/images/smiley/msn/wink_smile.gif +0 -0
  437. data/public/fckeditor/editor/images/spacer.gif +0 -0
  438. data/public/fckeditor/editor/js/fckadobeair.js +176 -0
  439. data/public/fckeditor/editor/js/fckeditorcode_gecko.js +108 -0
  440. data/public/fckeditor/editor/js/fckeditorcode_ie.js +109 -0
  441. data/public/fckeditor/editor/lang/_translationstatus.txt +78 -0
  442. data/public/fckeditor/editor/lang/af.js +526 -0
  443. data/public/fckeditor/editor/lang/ar.js +526 -0
  444. data/public/fckeditor/editor/lang/bg.js +526 -0
  445. data/public/fckeditor/editor/lang/bn.js +526 -0
  446. data/public/fckeditor/editor/lang/bs.js +526 -0
  447. data/public/fckeditor/editor/lang/ca.js +526 -0
  448. data/public/fckeditor/editor/lang/cs.js +526 -0
  449. data/public/fckeditor/editor/lang/da.js +526 -0
  450. data/public/fckeditor/editor/lang/de.js +526 -0
  451. data/public/fckeditor/editor/lang/el.js +526 -0
  452. data/public/fckeditor/editor/lang/en-au.js +526 -0
  453. data/public/fckeditor/editor/lang/en-ca.js +526 -0
  454. data/public/fckeditor/editor/lang/en-uk.js +526 -0
  455. data/public/fckeditor/editor/lang/en.js +526 -0
  456. data/public/fckeditor/editor/lang/eo.js +526 -0
  457. data/public/fckeditor/editor/lang/es.js +526 -0
  458. data/public/fckeditor/editor/lang/et.js +526 -0
  459. data/public/fckeditor/editor/lang/eu.js +527 -0
  460. data/public/fckeditor/editor/lang/fa.js +526 -0
  461. data/public/fckeditor/editor/lang/fi.js +526 -0
  462. data/public/fckeditor/editor/lang/fo.js +526 -0
  463. data/public/fckeditor/editor/lang/fr-ca.js +526 -0
  464. data/public/fckeditor/editor/lang/fr.js +526 -0
  465. data/public/fckeditor/editor/lang/gl.js +526 -0
  466. data/public/fckeditor/editor/lang/gu.js +526 -0
  467. data/public/fckeditor/editor/lang/he.js +526 -0
  468. data/public/fckeditor/editor/lang/hi.js +526 -0
  469. data/public/fckeditor/editor/lang/hr.js +526 -0
  470. data/public/fckeditor/editor/lang/hu.js +526 -0
  471. data/public/fckeditor/editor/lang/it.js +526 -0
  472. data/public/fckeditor/editor/lang/ja.js +526 -0
  473. data/public/fckeditor/editor/lang/km.js +526 -0
  474. data/public/fckeditor/editor/lang/ko.js +526 -0
  475. data/public/fckeditor/editor/lang/lt.js +526 -0
  476. data/public/fckeditor/editor/lang/lv.js +526 -0
  477. data/public/fckeditor/editor/lang/mn.js +526 -0
  478. data/public/fckeditor/editor/lang/ms.js +526 -0
  479. data/public/fckeditor/editor/lang/nb.js +526 -0
  480. data/public/fckeditor/editor/lang/nl.js +526 -0
  481. data/public/fckeditor/editor/lang/no.js +526 -0
  482. data/public/fckeditor/editor/lang/pl.js +526 -0
  483. data/public/fckeditor/editor/lang/pt-br.js +526 -0
  484. data/public/fckeditor/editor/lang/pt.js +526 -0
  485. data/public/fckeditor/editor/lang/ro.js +526 -0
  486. data/public/fckeditor/editor/lang/ru.js +526 -0
  487. data/public/fckeditor/editor/lang/sk.js +526 -0
  488. data/public/fckeditor/editor/lang/sl.js +526 -0
  489. data/public/fckeditor/editor/lang/sr-latn.js +526 -0
  490. data/public/fckeditor/editor/lang/sr.js +526 -0
  491. data/public/fckeditor/editor/lang/sv.js +526 -0
  492. data/public/fckeditor/editor/lang/th.js +526 -0
  493. data/public/fckeditor/editor/lang/tr.js +526 -0
  494. data/public/fckeditor/editor/lang/uk.js +526 -0
  495. data/public/fckeditor/editor/lang/vi.js +526 -0
  496. data/public/fckeditor/editor/lang/zh-cn.js +526 -0
  497. data/public/fckeditor/editor/lang/zh.js +526 -0
  498. data/public/fckeditor/editor/plugins/autogrow/fckplugin.js +99 -0
  499. data/public/fckeditor/editor/plugins/bbcode/_sample/sample.config.js +26 -0
  500. data/public/fckeditor/editor/plugins/bbcode/_sample/sample.html +67 -0
  501. data/public/fckeditor/editor/plugins/bbcode/fckplugin.js +123 -0
  502. data/public/fckeditor/editor/plugins/dragresizetable/fckplugin.js +524 -0
  503. data/public/fckeditor/editor/plugins/placeholder/fck_placeholder.html +105 -0
  504. data/public/fckeditor/editor/plugins/placeholder/fckplugin.js +187 -0
  505. data/public/fckeditor/editor/plugins/placeholder/lang/de.js +27 -0
  506. data/public/fckeditor/editor/plugins/placeholder/lang/en.js +27 -0
  507. data/public/fckeditor/editor/plugins/placeholder/lang/es.js +27 -0
  508. data/public/fckeditor/editor/plugins/placeholder/lang/fr.js +27 -0
  509. data/public/fckeditor/editor/plugins/placeholder/lang/it.js +27 -0
  510. data/public/fckeditor/editor/plugins/placeholder/lang/pl.js +27 -0
  511. data/public/fckeditor/editor/plugins/placeholder/placeholder.gif +0 -0
  512. data/public/fckeditor/editor/plugins/simplecommands/fckplugin.js +29 -0
  513. data/public/fckeditor/editor/plugins/tablecommands/fckplugin.js +33 -0
  514. data/public/fckeditor/editor/skins/_fckviewstrips.html +121 -0
  515. data/public/fckeditor/editor/skins/default/fck_dialog.css +402 -0
  516. data/public/fckeditor/editor/skins/default/fck_dialog_ie6.js +110 -0
  517. data/public/fckeditor/editor/skins/default/fck_editor.css +464 -0
  518. data/public/fckeditor/editor/skins/default/fck_strip.gif +0 -0
  519. data/public/fckeditor/editor/skins/default/images/dialog.sides.gif +0 -0
  520. data/public/fckeditor/editor/skins/default/images/dialog.sides.png +0 -0
  521. data/public/fckeditor/editor/skins/default/images/dialog.sides.rtl.png +0 -0
  522. data/public/fckeditor/editor/skins/default/images/sprites.gif +0 -0
  523. data/public/fckeditor/editor/skins/default/images/sprites.png +0 -0
  524. data/public/fckeditor/editor/skins/default/images/toolbar.arrowright.gif +0 -0
  525. data/public/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif +0 -0
  526. data/public/fckeditor/editor/skins/default/images/toolbar.collapse.gif +0 -0
  527. data/public/fckeditor/editor/skins/default/images/toolbar.end.gif +0 -0
  528. data/public/fckeditor/editor/skins/default/images/toolbar.expand.gif +0 -0
  529. data/public/fckeditor/editor/skins/default/images/toolbar.separator.gif +0 -0
  530. data/public/fckeditor/editor/skins/default/images/toolbar.start.gif +0 -0
  531. data/public/fckeditor/editor/skins/office2003/fck_dialog.css +402 -0
  532. data/public/fckeditor/editor/skins/office2003/fck_dialog_ie6.js +110 -0
  533. data/public/fckeditor/editor/skins/office2003/fck_editor.css +476 -0
  534. data/public/fckeditor/editor/skins/office2003/fck_strip.gif +0 -0
  535. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.gif +0 -0
  536. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.png +0 -0
  537. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.rtl.png +0 -0
  538. data/public/fckeditor/editor/skins/office2003/images/sprites.gif +0 -0
  539. data/public/fckeditor/editor/skins/office2003/images/sprites.png +0 -0
  540. data/public/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif +0 -0
  541. data/public/fckeditor/editor/skins/office2003/images/toolbar.bg.gif +0 -0
  542. data/public/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif +0 -0
  543. data/public/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif +0 -0
  544. data/public/fckeditor/editor/skins/office2003/images/toolbar.end.gif +0 -0
  545. data/public/fckeditor/editor/skins/office2003/images/toolbar.expand.gif +0 -0
  546. data/public/fckeditor/editor/skins/office2003/images/toolbar.separator.gif +0 -0
  547. data/public/fckeditor/editor/skins/office2003/images/toolbar.start.gif +0 -0
  548. data/public/fckeditor/editor/skins/silver/fck_dialog.css +402 -0
  549. data/public/fckeditor/editor/skins/silver/fck_dialog_ie6.js +110 -0
  550. data/public/fckeditor/editor/skins/silver/fck_editor.css +473 -0
  551. data/public/fckeditor/editor/skins/silver/fck_strip.gif +0 -0
  552. data/public/fckeditor/editor/skins/silver/images/dialog.sides.gif +0 -0
  553. data/public/fckeditor/editor/skins/silver/images/dialog.sides.png +0 -0
  554. data/public/fckeditor/editor/skins/silver/images/dialog.sides.rtl.png +0 -0
  555. data/public/fckeditor/editor/skins/silver/images/sprites.gif +0 -0
  556. data/public/fckeditor/editor/skins/silver/images/sprites.png +0 -0
  557. data/public/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif +0 -0
  558. data/public/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif +0 -0
  559. data/public/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif +0 -0
  560. data/public/fckeditor/editor/skins/silver/images/toolbar.collapse.gif +0 -0
  561. data/public/fckeditor/editor/skins/silver/images/toolbar.end.gif +0 -0
  562. data/public/fckeditor/editor/skins/silver/images/toolbar.expand.gif +0 -0
  563. data/public/fckeditor/editor/skins/silver/images/toolbar.separator.gif +0 -0
  564. data/public/fckeditor/editor/skins/silver/images/toolbar.start.gif +0 -0
  565. data/public/fckeditor/fckconfig.js +364 -0
  566. data/public/fckeditor/fckdebug.html +153 -0
  567. data/public/fckeditor/fckdialog.html +812 -0
  568. data/public/fckeditor/fckeditor.html +317 -0
  569. data/public/fckeditor/fckeditor.js +328 -0
  570. data/public/fckeditor/fckeditor.original.html +424 -0
  571. data/public/fckeditor/fckpackager.xml +262 -0
  572. data/public/fckeditor/fckstyles.xml +111 -0
  573. data/public/fckeditor/fcktemplates.xml +103 -0
  574. data/public/images/cms/administration/user_browser_bg.gif +0 -0
  575. data/public/images/cms/bg.png +0 -0
  576. data/public/images/cms/bl_curve.png +0 -0
  577. data/public/images/cms/bottom_cap.png +0 -0
  578. data/public/images/cms/bottom_cap_content.png +0 -0
  579. data/public/images/cms/browse.gif +0 -0
  580. data/public/images/cms/browser_media_logo.png +0 -0
  581. data/public/images/cms/browsercms_logo.png +0 -0
  582. data/public/images/cms/buttons/button.png +0 -0
  583. data/public/images/cms/buttons/button_bg.png +0 -0
  584. data/public/images/cms/buttons/button_cap.png +0 -0
  585. data/public/images/cms/buttons/button_cap_h.png +0 -0
  586. data/public/images/cms/buttons/button_cap_off.gif +0 -0
  587. data/public/images/cms/buttons/button_h.png +0 -0
  588. data/public/images/cms/buttons/button_off.png +0 -0
  589. data/public/images/cms/buttons/delete_x.png +0 -0
  590. data/public/images/cms/buttons/delete_x_disabled.png +0 -0
  591. data/public/images/cms/buttons/delete_x_h.png +0 -0
  592. data/public/images/cms/buttons/sm_button.gif +0 -0
  593. data/public/images/cms/buttons/sm_button_2.gif +0 -0
  594. data/public/images/cms/buttons/sm_button_2_h.gif +0 -0
  595. data/public/images/cms/buttons/sm_button_h.gif +0 -0
  596. data/public/images/cms/containers/add.gif +0 -0
  597. data/public/images/cms/containers/alpha.png +0 -0
  598. data/public/images/cms/containers/beta.png +0 -0
  599. data/public/images/cms/containers/delete.gif +0 -0
  600. data/public/images/cms/containers/down.gif +0 -0
  601. data/public/images/cms/containers/edit.gif +0 -0
  602. data/public/images/cms/containers/up.gif +0 -0
  603. data/public/images/cms/containers/view.gif +0 -0
  604. data/public/images/cms/content_bg.gif +0 -0
  605. data/public/images/cms/dashboard/bottom_cap.png +0 -0
  606. data/public/images/cms/dashboard/bottom_cap_content.png +0 -0
  607. data/public/images/cms/dashboard/header_bg.gif +0 -0
  608. data/public/images/cms/dashboard/header_left_bg.gif +0 -0
  609. data/public/images/cms/dashboard/table_header_bg.gif +0 -0
  610. data/public/images/cms/dashboard/top_cap.png +0 -0
  611. data/public/images/cms/dashed.gif +0 -0
  612. data/public/images/cms/datepicker/clear.gif +0 -0
  613. data/public/images/cms/datepicker/close.gif +0 -0
  614. data/public/images/cms/dk_button_l.gif +0 -0
  615. data/public/images/cms/dk_button_r.gif +0 -0
  616. data/public/images/cms/dot.png +0 -0
  617. data/public/images/cms/draft_status.gif +0 -0
  618. data/public/images/cms/gray_long_bg.gif +0 -0
  619. data/public/images/cms/icons/actions/add.png +0 -0
  620. data/public/images/cms/icons/actions/config.png +0 -0
  621. data/public/images/cms/icons/actions/connect.png +0 -0
  622. data/public/images/cms/icons/actions/delete.png +0 -0
  623. data/public/images/cms/icons/actions/down.png +0 -0
  624. data/public/images/cms/icons/actions/edit.png +0 -0
  625. data/public/images/cms/icons/actions/folder.png +0 -0
  626. data/public/images/cms/icons/actions/folder_add.png +0 -0
  627. data/public/images/cms/icons/actions/folder_delete.png +0 -0
  628. data/public/images/cms/icons/actions/folder_edit.png +0 -0
  629. data/public/images/cms/icons/actions/folder_move.png +0 -0
  630. data/public/images/cms/icons/actions/folder_open.png +0 -0
  631. data/public/images/cms/icons/actions/history.png +0 -0
  632. data/public/images/cms/icons/actions/home.png +0 -0
  633. data/public/images/cms/icons/actions/left.png +0 -0
  634. data/public/images/cms/icons/actions/link.png +0 -0
  635. data/public/images/cms/icons/actions/page.png +0 -0
  636. data/public/images/cms/icons/actions/page_add.png +0 -0
  637. data/public/images/cms/icons/actions/page_edit.png +0 -0
  638. data/public/images/cms/icons/actions/page_move.png +0 -0
  639. data/public/images/cms/icons/actions/redo.png +0 -0
  640. data/public/images/cms/icons/actions/refresh.png +0 -0
  641. data/public/images/cms/icons/actions/right.png +0 -0
  642. data/public/images/cms/icons/actions/root_folder.png +0 -0
  643. data/public/images/cms/icons/actions/root_link.png +0 -0
  644. data/public/images/cms/icons/actions/root_page.png +0 -0
  645. data/public/images/cms/icons/actions/undo.png +0 -0
  646. data/public/images/cms/icons/actions/up.png +0 -0
  647. data/public/images/cms/icons/actions/view.png +0 -0
  648. data/public/images/cms/icons/file_types/doc.png +0 -0
  649. data/public/images/cms/icons/file_types/file.png +0 -0
  650. data/public/images/cms/icons/file_types/gif.png +0 -0
  651. data/public/images/cms/icons/file_types/htm.png +0 -0
  652. data/public/images/cms/icons/file_types/pdf.png +0 -0
  653. data/public/images/cms/icons/file_types/ppt.png +0 -0
  654. data/public/images/cms/icons/file_types/swf.png +0 -0
  655. data/public/images/cms/icons/file_types/txt.png +0 -0
  656. data/public/images/cms/icons/file_types/xls.png +0 -0
  657. data/public/images/cms/icons/file_types/xml.png +0 -0
  658. data/public/images/cms/icons/file_types/zip.png +0 -0
  659. data/public/images/cms/icons/status/archived.gif +0 -0
  660. data/public/images/cms/icons/status/draft.gif +0 -0
  661. data/public/images/cms/icons/status/hidden.gif +0 -0
  662. data/public/images/cms/icons/status/locked.gif +0 -0
  663. data/public/images/cms/icons/status/published.gif +0 -0
  664. data/public/images/cms/icons/status/unlocked.gif +0 -0
  665. data/public/images/cms/icons/user.png +0 -0
  666. data/public/images/cms/login_bg.jpg +0 -0
  667. data/public/images/cms/login_bottom.jpg +0 -0
  668. data/public/images/cms/login_top.gif +0 -0
  669. data/public/images/cms/lt_button_bg.gif +0 -0
  670. data/public/images/cms/lt_button_l.gif +0 -0
  671. data/public/images/cms/lt_button_r.gif +0 -0
  672. data/public/images/cms/menu.png +0 -0
  673. data/public/images/cms/menu/block_cap_h.gif +0 -0
  674. data/public/images/cms/menu/bottom_cap.png +0 -0
  675. data/public/images/cms/menu/bottom_cap_menu.png +0 -0
  676. data/public/images/cms/menu/bottom_cap_menu_first.png +0 -0
  677. data/public/images/cms/menu/menu_header_first_bg.gif +0 -0
  678. data/public/images/cms/menu/selected_block_cap.gif +0 -0
  679. data/public/images/cms/menu/top_cap.png +0 -0
  680. data/public/images/cms/menu/top_cap_menu_header.png +0 -0
  681. data/public/images/cms/menu_h.gif +0 -0
  682. data/public/images/cms/menu_header.png +0 -0
  683. data/public/images/cms/menu_open.png +0 -0
  684. data/public/images/cms/menu_open_bg.gif +0 -0
  685. data/public/images/cms/nav.png +0 -0
  686. data/public/images/cms/nav/on_bg.gif +0 -0
  687. data/public/images/cms/nav_cap.png +0 -0
  688. data/public/images/cms/nav_cap_h.gif +0 -0
  689. data/public/images/cms/nav_h.gif +0 -0
  690. data/public/images/cms/page_toolbar/page_toolbar_bg.gif +0 -0
  691. data/public/images/cms/page_toolbar/page_toolbar_inset_bg.gif +0 -0
  692. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_bg.gif +0 -0
  693. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_l.gif +0 -0
  694. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_r.gif +0 -0
  695. data/public/images/cms/page_toolbar/page_toolbar_inset_l.gif +0 -0
  696. data/public/images/cms/page_toolbar/page_toolbar_inset_published_bg.gif +0 -0
  697. data/public/images/cms/page_toolbar/page_toolbar_inset_published_l.gif +0 -0
  698. data/public/images/cms/page_toolbar/page_toolbar_inset_published_r.gif +0 -0
  699. data/public/images/cms/page_toolbar/page_toolbar_inset_r.gif +0 -0
  700. data/public/images/cms/page_toolbar/page_toolbar_l.gif +0 -0
  701. data/public/images/cms/page_toolbar/page_toolbar_r.gif +0 -0
  702. data/public/images/cms/page_toolbar/status_draft_bg.gif +0 -0
  703. data/public/images/cms/page_toolbar/status_draft_l.gif +0 -0
  704. data/public/images/cms/page_toolbar/status_l.gif +0 -0
  705. data/public/images/cms/page_toolbar/status_published_bg.gif +0 -0
  706. data/public/images/cms/page_toolbar/status_published_l.gif +0 -0
  707. data/public/images/cms/page_toolbar/visual_editor_bg.gif +0 -0
  708. data/public/images/cms/page_toolbar/visual_editor_end.gif +0 -0
  709. data/public/images/cms/page_toolbar/visual_editor_r.gif +0 -0
  710. data/public/images/cms/page_toolbar/visual_editor_state_bg.gif +0 -0
  711. data/public/images/cms/pages/add_connectable.gif +0 -0
  712. data/public/images/cms/pages/connect_connectable.gif +0 -0
  713. data/public/images/cms/pages/container_border.gif +0 -0
  714. data/public/images/cms/pages/container_border_l.gif +0 -0
  715. data/public/images/cms/pages/container_border_r.gif +0 -0
  716. data/public/images/cms/pages/delete_connectable.gif +0 -0
  717. data/public/images/cms/pages/down_connectable.gif +0 -0
  718. data/public/images/cms/pages/down_connectable_disabled.gif +0 -0
  719. data/public/images/cms/pages/edit_connectable.gif +0 -0
  720. data/public/images/cms/pages/edit_connectable_2.gif +0 -0
  721. data/public/images/cms/pages/show_connectable.gif +0 -0
  722. data/public/images/cms/pages/up_connectable.gif +0 -0
  723. data/public/images/cms/pages/up_connectable_disabled.gif +0 -0
  724. data/public/images/cms/pagination/first.gif +0 -0
  725. data/public/images/cms/pagination/first_h.gif +0 -0
  726. data/public/images/cms/pagination/input.gif +0 -0
  727. data/public/images/cms/pagination/last.gif +0 -0
  728. data/public/images/cms/pagination/last_h.gif +0 -0
  729. data/public/images/cms/pagination/next.gif +0 -0
  730. data/public/images/cms/pagination/next_h.gif +0 -0
  731. data/public/images/cms/pagination/previous.gif +0 -0
  732. data/public/images/cms/pagination/previous_h.gif +0 -0
  733. data/public/images/cms/published_status.gif +0 -0
  734. data/public/images/cms/search.png +0 -0
  735. data/public/images/cms/search_submit.gif +0 -0
  736. data/public/images/cms/search_submit_h.gif +0 -0
  737. data/public/images/cms/searchbox_gradient.gif +0 -0
  738. data/public/images/cms/select_bg.gif +0 -0
  739. data/public/images/cms/select_bg_2.gif +0 -0
  740. data/public/images/cms/sitemap/bottom_cap.png +0 -0
  741. data/public/images/cms/sitemap/buffer_caps.png +0 -0
  742. data/public/images/cms/sitemap/contract.png +0 -0
  743. data/public/images/cms/sitemap/corners.gif +0 -0
  744. data/public/images/cms/sitemap/corners_hover.gif +0 -0
  745. data/public/images/cms/sitemap/divider.gif +0 -0
  746. data/public/images/cms/sitemap/expand.png +0 -0
  747. data/public/images/cms/sitemap/gradient.gif +0 -0
  748. data/public/images/cms/sitemap/gray_contract.png +0 -0
  749. data/public/images/cms/sitemap/gray_expand.png +0 -0
  750. data/public/images/cms/sitemap/no_contents.png +0 -0
  751. data/public/images/cms/sitemap/site_root_cap.png +0 -0
  752. data/public/images/cms/sitemap/tooltip.gif +0 -0
  753. data/public/images/cms/sitemap/top_cap_content.png +0 -0
  754. data/public/images/cms/solid.gif +0 -0
  755. data/public/images/cms/table/bl.gif +0 -0
  756. data/public/images/cms/table/br.gif +0 -0
  757. data/public/images/cms/table/divider.gif +0 -0
  758. data/public/images/cms/table/td_cap_first_h.gif +0 -0
  759. data/public/images/cms/table/td_cap_first_s.gif +0 -0
  760. data/public/images/cms/table/td_cap_last_h.gif +0 -0
  761. data/public/images/cms/table/td_cap_last_s.gif +0 -0
  762. data/public/images/cms/table/td_last_bg.gif +0 -0
  763. data/public/images/cms/table/th_bg.gif +0 -0
  764. data/public/images/cms/table/th_divider.gif +0 -0
  765. data/public/images/cms/table/th_last_bg.gif +0 -0
  766. data/public/images/cms/table/tl.gif +0 -0
  767. data/public/images/cms/table/tr.gif +0 -0
  768. data/public/images/cms/table/tr_bg.gif +0 -0
  769. data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
  770. data/public/images/cms/thickbox/macFFBgHack.png +0 -0
  771. data/public/images/cms/toolbar_bg.png +0 -0
  772. data/public/images/cms/top_cap.png +0 -0
  773. data/public/images/cms/top_cap_content.png +0 -0
  774. data/public/images/cms/top_cap_menu_header.png +0 -0
  775. data/public/images/cms/user_search_submit.gif +0 -0
  776. data/public/images/cms/usercontrols_bg.png +0 -0
  777. data/public/images/cms/usercontrols_bg_cap.png +0 -0
  778. data/public/javascripts/cms/application.js +148 -0
  779. data/public/javascripts/cms/editor.js +56 -0
  780. data/public/javascripts/cms/sitemap.js +426 -0
  781. data/public/javascripts/jquery-ui.js +591 -0
  782. data/public/javascripts/jquery.contextMenu.js +211 -0
  783. data/public/javascripts/jquery.cookie.js +96 -0
  784. data/public/javascripts/jquery.dimensions.js +119 -0
  785. data/public/javascripts/jquery.js +11 -0
  786. data/public/javascripts/jquery.selectbox-0.5.js +209 -0
  787. data/public/javascripts/jquery.taglist.js +136 -0
  788. data/public/javascripts/jquery.thickbox.js +10 -0
  789. data/public/site/customconfig.js +1 -0
  790. data/public/stylesheets/cms/administration.css +91 -0
  791. data/public/stylesheets/cms/application.css +166 -0
  792. data/public/stylesheets/cms/block.css +26 -0
  793. data/public/stylesheets/cms/buttons.css +111 -0
  794. data/public/stylesheets/cms/content_library.css +138 -0
  795. data/public/stylesheets/cms/content_types.css +4 -0
  796. data/public/stylesheets/cms/dashboard.css +118 -0
  797. data/public/stylesheets/cms/data_table.css +156 -0
  798. data/public/stylesheets/cms/date_picker.css +73 -0
  799. data/public/stylesheets/cms/form_layout.css +269 -0
  800. data/public/stylesheets/cms/jquery.contextMenu.css +61 -0
  801. data/public/stylesheets/cms/login.css +78 -0
  802. data/public/stylesheets/cms/menu.css +116 -0
  803. data/public/stylesheets/cms/nav.css +111 -0
  804. data/public/stylesheets/cms/page_toolbar.css +135 -0
  805. data/public/stylesheets/cms/reset.css +46 -0
  806. data/public/stylesheets/cms/selectbox.css +56 -0
  807. data/public/stylesheets/cms/sitemap.css +374 -0
  808. data/public/stylesheets/cms/taglist.css +18 -0
  809. data/public/stylesheets/cms/thickbox.css +163 -0
  810. data/public/themes/blue_steel/images/logo.jpg +0 -0
  811. data/public/themes/blue_steel/images/splash.jpg +0 -0
  812. data/public/themes/blue_steel/stylesheets/style.css +257 -0
  813. data/rails/init.rb +3 -0
  814. data/rails_generators/browser_cms/USAGE +2 -0
  815. data/rails_generators/browser_cms/browser_cms_generator.rb +35 -0
  816. data/rails_generators/browser_cms/templates/README +1 -0
  817. data/rails_generators/browser_cms_demo_site/USAGE +1 -0
  818. data/rails_generators/browser_cms_demo_site/browser_cms_demo_site_generator.rb +63 -0
  819. data/rails_generators/browser_cms_demo_site/templates/migration.rb +21 -0
  820. data/rails_generators/content_block/USAGE +32 -0
  821. data/rails_generators/content_block/content_block_generator.rb +74 -0
  822. data/rails_generators/content_block/templates/_form.html.erb +20 -0
  823. data/rails_generators/content_block/templates/content_block.rb +27 -0
  824. data/rails_generators/content_block/templates/controller.rb +2 -0
  825. data/rails_generators/content_block/templates/functional_test.erb +11 -0
  826. data/rails_generators/content_block/templates/migration.rb +37 -0
  827. data/rails_generators/content_block/templates/render.html.erb +14 -0
  828. data/rails_generators/content_block/templates/unit_test.erb +9 -0
  829. data/rails_generators/portlet/USAGE +37 -0
  830. data/rails_generators/portlet/portlet_generator.rb +35 -0
  831. data/rails_generators/portlet/templates/_form.html.erb +5 -0
  832. data/rails_generators/portlet/templates/portlet.rb +7 -0
  833. data/rails_generators/portlet/templates/render.html.erb +1 -0
  834. data/rails_generators/portlet/templates/unit_test.erb +9 -0
  835. data/test/custom_assertions.rb +68 -0
  836. data/test/factories.rb +109 -0
  837. data/test/functional/cms/cache_controller_test.rb +14 -0
  838. data/test/functional/cms/categories_controller_test.rb +25 -0
  839. data/test/functional/cms/connectors_controller_test.rb +49 -0
  840. data/test/functional/cms/content_controller_test.rb +379 -0
  841. data/test/functional/cms/content_types_controller_test.rb +18 -0
  842. data/test/functional/cms/dashboard_controller_test.rb +17 -0
  843. data/test/functional/cms/dynamic_views_controller_test.rb +28 -0
  844. data/test/functional/cms/file_blocks_controller_test.rb +51 -0
  845. data/test/functional/cms/groups_controller_test.rb +50 -0
  846. data/test/functional/cms/home_controller_test.rb +156 -0
  847. data/test/functional/cms/html_blocks_controller_test.rb +163 -0
  848. data/test/functional/cms/image_blocks_controller_test.rb +75 -0
  849. data/test/functional/cms/links_controller_test.rb +60 -0
  850. data/test/functional/cms/pages_controller_test.rb +89 -0
  851. data/test/functional/cms/portlets_controller_test.rb +57 -0
  852. data/test/functional/cms/section_nodes_controller_test.rb +44 -0
  853. data/test/functional/cms/sections_controller_test.rb +78 -0
  854. data/test/functional/cms/sessions_controller_test.rb +52 -0
  855. data/test/functional/cms/toolbar_controller_test.rb +64 -0
  856. data/test/functional/cms/users_controller_test.rb +184 -0
  857. data/test/integration/login_test.rb +14 -0
  858. data/test/test_helper.rb +159 -0
  859. data/test/test_logging.rb +67 -0
  860. data/test/unit/behaviors/attaching_test.rb +333 -0
  861. data/test/unit/behaviors/dynamic_attributes_test.rb +38 -0
  862. data/test/unit/behaviors/publishable_test.rb +53 -0
  863. data/test/unit/behaviors/searching_test.rb +102 -0
  864. data/test/unit/behaviors/taggable_test.rb +90 -0
  865. data/test/unit/extensions/active_record/base_test.rb +10 -0
  866. data/test/unit/extensions/hash_test.rb +17 -0
  867. data/test/unit/extensions/integer_test.rb +10 -0
  868. data/test/unit/helpers/application_helper_test.rb +29 -0
  869. data/test/unit/helpers/form_builder_test.rb +17 -0
  870. data/test/unit/helpers/menu_helper_test.rb +306 -0
  871. data/test/unit/helpers/page_helper_test.rb +57 -0
  872. data/test/unit/helpers/path_helper_test.rb +57 -0
  873. data/test/unit/lib/content_block_test.rb +166 -0
  874. data/test/unit/lib/generators_test.rb +22 -0
  875. data/test/unit/models/attachment_test.rb +96 -0
  876. data/test/unit/models/category_test.rb +40 -0
  877. data/test/unit/models/category_type_test.rb +8 -0
  878. data/test/unit/models/connector_test.rb +136 -0
  879. data/test/unit/models/content_type_test.rb +23 -0
  880. data/test/unit/models/email_page_portlet_test.rb +14 -0
  881. data/test/unit/models/file_block_test.rb +211 -0
  882. data/test/unit/models/group_test.rb +7 -0
  883. data/test/unit/models/html_block_test.rb +102 -0
  884. data/test/unit/models/link_test.rb +8 -0
  885. data/test/unit/models/page_partial_test.rb +29 -0
  886. data/test/unit/models/page_route_test.rb +29 -0
  887. data/test/unit/models/page_template_test.rb +37 -0
  888. data/test/unit/models/page_test.rb +726 -0
  889. data/test/unit/models/permission_test.rb +10 -0
  890. data/test/unit/models/portlet_test.rb +21 -0
  891. data/test/unit/models/section_node_test.rb +92 -0
  892. data/test/unit/models/sections_test.rb +121 -0
  893. data/test/unit/models/site_test.rb +50 -0
  894. data/test/unit/models/task_test.rb +126 -0
  895. data/test/unit/models/user_test.rb +130 -0
  896. metadata +947 -0
@@ -0,0 +1,8 @@
1
+ require File.join(File.dirname(__FILE__), '/../../test_helper')
2
+
3
+ class LinkTest < ActiveSupport::TestCase
4
+ def test_create
5
+ assert Factory.build(:link).valid?
6
+ assert !Factory.build(:link, :name => "").valid?
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ require File.join(File.dirname(__FILE__), '/../../test_helper')
2
+
3
+ class PagePartialTest < ActiveSupport::TestCase
4
+ def setup
5
+ @page_partial = Factory.build(:page_partial, :name => "_test")
6
+ File.delete(@page_partial.file_path) if File.exists?(@page_partial.file_path)
7
+ end
8
+
9
+ def teardown
10
+ File.delete(@page_partial.file_path) if File.exists?(@page_partial.file_path)
11
+ end
12
+
13
+ def test_create
14
+ assert !File.exists?(@page_partial.file_path), "partial file already exists"
15
+ assert_valid @page_partial
16
+ assert @page_partial.save
17
+ assert File.exists?(@page_partial.file_path), "partial file was not written to disk"
18
+ end
19
+
20
+ def test_for_valid_name
21
+ assert_not_valid Factory.build(:page_partial, :name => "Fancy")
22
+ assert_not_valid Factory.build(:page_partial, :name => "foo bar")
23
+ partial = Factory.build(:page_partial, :name => "subpage_1_column")
24
+ assert_valid partial
25
+ assert_equal "_subpage_1_column", partial.name
26
+ assert_valid Factory.build(:page_partial, :name => "_sidebar")
27
+ end
28
+
29
+ end
@@ -0,0 +1,29 @@
1
+ require File.join(File.dirname(__FILE__), '/../../test_helper')
2
+
3
+ class PageRouteTest < ActiveSupport::TestCase
4
+
5
+ def test_create
6
+ page = Factory(:page, :path => "/things/overview")
7
+ route = page.page_routes.build(:pattern => "/things/:year/:month/:day")
8
+ route.add_requirement(:year, "\\d{4,}")
9
+ route.add_requirement(:month, "\\d{2,}")
10
+ route.add_requirement(:day, "\\d{2,}")
11
+ route.add_condition(:method, "get")
12
+
13
+ assert route.save
14
+ assert_equal "/things/:year/:month/:day", route.pattern
15
+ assert_equal({
16
+ :controller => "cms/content",
17
+ :action => "show_page_route",
18
+ :_page_route_id => route.id.to_s,
19
+ :requirements => {
20
+ :year => /\d{4,}/,
21
+ :month => /\d{2,}/,
22
+ :day => /\d{2,}/
23
+ }, :conditions => {
24
+ :method => :get
25
+ }
26
+ }, route.options_map)
27
+ end
28
+
29
+ end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), '/../../test_helper')
2
+
3
+ class PageTemplateTest < ActiveSupport::TestCase
4
+ def setup
5
+ @page_template = Factory.build(:page_template, :name => "test")
6
+ File.delete(@page_template.file_path) if File.exists?(@page_template.file_path)
7
+ end
8
+
9
+ def teardown
10
+ File.delete(@page_template.file_path) if File.exists?(@page_template.file_path)
11
+ end
12
+
13
+ def test_create_and_destroy
14
+ assert !File.exists?(@page_template.file_path), "template file already exists"
15
+ assert_valid @page_template
16
+ assert @page_template.save
17
+ assert File.exists?(@page_template.file_path), "template file was not written to disk"
18
+ @page_template.destroy
19
+ assert !File.exists?(@page_template.file_path), "template file was not removed on destroy"
20
+ end
21
+
22
+ def test_for_valid_name
23
+ assert_not_valid Factory.build(:page_template, :name => "Fancy")
24
+ assert_not_valid Factory.build(:page_template, :name => "foo bar")
25
+ assert_valid Factory.build(:page_template, :name => "subpage_1_column")
26
+ end
27
+
28
+ def test_find_by_file_name
29
+ assert @page_template.save, "Could not save page template"
30
+ assert_equal @page_template, PageTemplate.find_by_file_name("test.html.erb")
31
+ assert_nil PageTemplate.find_by_file_name("fail.html.erb")
32
+ assert_nil PageTemplate.find_by_file_name("fail.erb")
33
+ assert_nil PageTemplate.find_by_file_name("fail")
34
+ assert_nil PageTemplate.find_by_file_name(nil)
35
+ end
36
+
37
+ end
@@ -0,0 +1,726 @@
1
+ require File.join(File.dirname(__FILE__), '/../../test_helper')
2
+
3
+ class CreatingPageTest < ActiveRecord::TestCase
4
+
5
+ def test_it
6
+
7
+ @page = Page.new(
8
+ :name => "Test",
9
+ :path => "test",
10
+ :section => root_section,
11
+ :publish_on_save => true)
12
+
13
+ assert @page.save
14
+ assert_path_is_unique
15
+
16
+ @page.update_attributes(:name => "Test v2")
17
+
18
+ page = Page.find_live_by_path("/test")
19
+ assert_equal page.name, "Test"
20
+ assert_equal 1, page.version
21
+
22
+ end
23
+
24
+ protected
25
+ def assert_path_is_unique
26
+ page = Factory.build(:page, :path => @page.path)
27
+ assert_not_valid page
28
+ assert_has_error_on page, :path
29
+ end
30
+
31
+ end
32
+
33
+ class PageTest < ActiveRecord::TestCase
34
+
35
+ def test_creating_page_with_reserved_path
36
+ @page = Page.new(:name => "FAIL", :path => "/cms")
37
+ assert_not_valid @page
38
+ assert_has_error_on(@page, :path, "is invalid, '/cms' a reserved path")
39
+
40
+ @page = Page.new(:name => "FAIL", :path => "/cache")
41
+ assert_not_valid @page
42
+ assert_has_error_on(@page, :path, "is invalid, '/cache' a reserved path")
43
+
44
+ @page = Page.new(:name => "FTW", :path => "/whatever")
45
+ assert_valid @page
46
+ end
47
+
48
+ def test_find_live_by_path
49
+ @page = Factory.build(:page, :path => '/foo')
50
+ assert_nil Page.find_live_by_path('/foo')
51
+
52
+ @page.publish!
53
+ reset(:page)
54
+ assert_equal @page, Page.find_live_by_path('/foo')
55
+
56
+ @page.update_attributes(:path => '/bar')
57
+ assert_equal @page, Page.find_live_by_path('/foo')
58
+ assert_nil Page.find_live_by_path('/bar')
59
+
60
+ @page.publish!
61
+ reset(:page)
62
+ assert_nil Page.find_live_by_path('/foo')
63
+ assert_equal @page, Page.find_live_by_path('/bar')
64
+ end
65
+
66
+ def test_find_live_by_path_after_delete
67
+ @page = Factory.build(:page, :path => '/foo')
68
+ @page.publish!
69
+ reset(:page)
70
+
71
+ @page.mark_as_deleted!
72
+ assert_nil Page.find_live_by_path('/foo')
73
+
74
+ @new_page = Factory.build(:page, :path => '/foo')
75
+ assert_nil Page.find_live_by_path('/foo')
76
+
77
+ @new_page.publish!
78
+ reset(:new_page)
79
+ assert_equal @new_page, Page.find_live_by_path('/foo')
80
+ assert_not_equal @page, @new_page
81
+ end
82
+
83
+ def test_path_normalization
84
+ page = Factory.build(:page, :path => 'foo/bar')
85
+ assert_valid page
86
+ assert_equal "/foo/bar", page.path
87
+
88
+ page = Factory.build(:page, :path => '/foo/bar')
89
+ assert_valid page
90
+ assert_equal "/foo/bar", page.path
91
+ end
92
+
93
+ def test_template
94
+ page_template = Factory(:page_template, :name => 'test')
95
+ page = Factory.build(:page, :template_file_name => 'test.html.erb')
96
+ assert_equal 'test.html.erb', page.template_file_name
97
+ assert_equal 'Test (html/erb)', page.template_name
98
+ assert_equal page_template, page.template
99
+ assert_equal 'templates/test', page.layout
100
+
101
+ page = Factory.build(:page, :template_file_name => 'foo.html.erb')
102
+ assert_equal 'foo.html.erb', page.template_file_name
103
+ assert_equal 'Foo (html/erb)', page.template_name
104
+ assert_nil page.template
105
+ assert_equal 'templates/foo', page.layout
106
+ end
107
+
108
+ def test_revision_comments
109
+ page = Factory(:page, :section => root_section, :name => "V1")
110
+
111
+ assert_equal 'Created', page.live_version.version_comment
112
+
113
+ assert page.reload.save
114
+ assert_equal 'Created', page.reload.live_version.version_comment
115
+ assert_equal page.live_version.version_comment,
116
+ page.as_of_version(page.version).live_version.version_comment
117
+
118
+ page.update_attributes(:name => "V2")
119
+ assert_equal 'Changed name', page.draft.version_comment
120
+ assert_equal 'Created', page.live_version.version_comment
121
+
122
+ block = Factory(:html_block, :name => "Hello, World!")
123
+ page.create_connector(block, "main")
124
+ assert_equal "Html Block 'Hello, World!' was added to the 'main' container",
125
+ page.draft.version_comment
126
+ assert_equal 'Created', page.live_version.version_comment
127
+ assert_equal 3, page.reload.draft.version
128
+
129
+ page.create_connector(Factory(:html_block, :name => "Whatever"), "main")
130
+ assert_equal 4, page.reload.draft.version
131
+
132
+ page.move_connector_down(page.connectors.for_page_version(page.reload.draft.version).for_connectable(block).first)
133
+ assert_equal "Html Block 'Hello, World!' was moved down within the 'main' container",
134
+ page.draft.version_comment
135
+ assert_equal 'Created', page.live_version.version_comment
136
+
137
+ page.move_connector_up(page.connectors.for_page_version(page.reload.draft.version).for_connectable(block).first)
138
+ assert_equal "Html Block 'Hello, World!' was moved up within the 'main' container",
139
+ page.draft.version_comment
140
+ assert_equal 'Created', page.live_version.version_comment
141
+
142
+ page.remove_connector(page.connectors.for_page_version(page.reload.draft.version).for_connectable(block).first)
143
+ assert_equal "Html Block 'Hello, World!' was removed from the 'main' container",
144
+ page.draft.version_comment
145
+ assert_equal 'Created', page.live_version.version_comment
146
+
147
+ page.revert_to(1)
148
+ assert_equal "Reverted to version 1",
149
+ page.reload.draft.version_comment
150
+ assert_equal 'Created', page.live_version.version_comment
151
+
152
+ assert_equal "Created", page.as_of_version(1).current_version.version_comment
153
+ assert_equal "Changed name", page.as_of_version(2).current_version.version_comment
154
+ assert_equal "Reverted to version 1", page.draft.version_comment
155
+
156
+ end
157
+
158
+ def test_container_live
159
+ page = Factory(:page)
160
+ published = Factory(:html_block, :publish_on_save => true)
161
+ unpublished = Factory(:html_block)
162
+ page.create_connector(published, "main")
163
+ page.create_connector(unpublished, "main")
164
+ assert !page.container_published?("main")
165
+ assert unpublished.publish
166
+ assert page.container_published?("main")
167
+ end
168
+
169
+ def test_move_page_to_another_section
170
+ page = Factory(:page, :section => root_section)
171
+ section = Factory(:section, :name => "Another", :parent => root_section)
172
+ assert_not_equal section, page.section
173
+ page.section = section
174
+ assert page.save
175
+ assert_equal section, page.section
176
+ end
177
+
178
+ def test_deleting_page
179
+ page = Factory(:page)
180
+
181
+ page_count = Page.count_with_deleted
182
+ page_version_count = page.versions.count
183
+ assert !page.deleted?
184
+
185
+ page.destroy
186
+
187
+ assert_equal page_count, Page.count_with_deleted
188
+ assert_incremented page_version_count, page.versions.count
189
+ assert page.deleted?
190
+ assert_raise ActiveRecord::RecordNotFound do
191
+ Page.find(page.id)
192
+ end
193
+ end
194
+
195
+ def test_adding_a_block_to_a_page_puts_page_in_draft_mode
196
+ @page = Factory(:page, :section => root_section, :publish_on_save => true)
197
+ @block = Factory(:html_block, :publish_on_save => true)
198
+ reset(:page, :block)
199
+ assert @page.published?
200
+ assert @block.published?
201
+ @page.create_connector(@block, "main")
202
+ reset(:page, :block)
203
+ assert !@page.live?
204
+ end
205
+
206
+ def test_reverting_and_then_publishing_a_page
207
+ @page = Factory(:page, :section => root_section, :publish_on_save => true)
208
+
209
+ @block = Factory(:html_block,
210
+ :connect_to_page_id => @page.id,
211
+ :connect_to_container => "main")
212
+ @page.publish
213
+
214
+ reset(:page, :block)
215
+
216
+ assert_equal 2, @page.version
217
+ assert_equal 1, @page.connectors.for_page_version(@page.version).count
218
+
219
+ @block.update_attributes(:content => "Something else")
220
+ @page.publish!
221
+ reset(:page, :block)
222
+
223
+ assert_equal 1, @page.connectors.for_page_version(@page.version).count
224
+ assert_equal 2, @block.version
225
+ assert_equal 3, @page.version
226
+ assert @block.live?
227
+ assert @page.live?
228
+
229
+ @page.revert_to(2)
230
+ reset(:page, :block)
231
+
232
+ assert_equal 3, @page.version
233
+ assert_equal 4, @page.draft.version
234
+ assert_equal 2, @block.version
235
+ assert_equal 3, @block.draft.version
236
+ assert_equal 1, @page.connectors.for_page_version(@page.version).count
237
+ assert_equal 1, @page.connectors.for_page_version(@page.draft.version).count
238
+ assert !@page.live?
239
+ assert !@block.live?
240
+
241
+ end
242
+
243
+ end
244
+
245
+ class PageVersioningTest < ActiveRecord::TestCase
246
+
247
+ def setup
248
+ @first_guy = Factory(:user, :login => "first_guy")
249
+ @next_guy = Factory(:user, :login => "next_guy")
250
+ User.current = @first_guy
251
+ end
252
+
253
+ def teardown
254
+ User.current = nil
255
+ end
256
+
257
+ def test_that_it_works
258
+ page = Factory(:page, :name => "Original Value")
259
+
260
+ assert_equal page, page.draft.page
261
+ assert_equal @first_guy, page.updated_by
262
+
263
+ User.current = @new_guy
264
+ page.update_attributes(:name => "Something Different")
265
+
266
+ assert_equal "Something Different", page.draft.name
267
+ assert_equal "Original Value", page.reload.name
268
+ assert_equal "Original Value", page.versions.first.name
269
+ assert_equal @first_guy, page.versions.first.updated_by
270
+ assert_equal @new_guy, page.versions.last.updated_by
271
+ assert_equal 2, page.versions.count
272
+ end
273
+
274
+ end
275
+
276
+ class PageInSectionTest < ActiveRecord::TestCase
277
+ def test_that_it_returns_true_if_the_page_is_in_a_child_section_of_the_section
278
+ @sports = Factory(:section, :parent => root_section, :name => "Sports")
279
+ @nfl = Factory(:section, :parent => @sports, :name => "NFL")
280
+ @mlb = Factory(:section, :parent => @sports, :name => "MLB")
281
+ @afc = Factory(:section, :parent => @nfl, :name => "AFC")
282
+ @al = Factory(:section, :parent => @mlb, :name => "AL")
283
+ @afc_east = Factory(:section, :parent => @afc, :name => "AFC East")
284
+ @al_east = Factory(:section, :parent => @al, :name => "AL East")
285
+ @ravens = Factory(:section, :parent => @afc_east, :name => "Baltimore Ravens")
286
+ @yanks = Factory(:section, :parent => @al_east, :name => "New York Yankees")
287
+ @flacco = Factory(:page, :section => @ravens, :name => "Joe Flacco")
288
+ @jeter = Factory(:page, :section => @yanks, :name => "Derek Jeter")
289
+
290
+ [root_section, @sports].each do |s|
291
+ assert @flacco.in_section?(s)
292
+ assert @flacco.in_section?(s.name)
293
+ assert @jeter.in_section?(s)
294
+ assert @jeter.in_section?(s.name)
295
+ end
296
+
297
+ [@nfl, @afc, @afc_east, @ravens].each do |s|
298
+ assert @flacco.in_section?(s)
299
+ assert @flacco.in_section?(s.name)
300
+ assert !@jeter.in_section?(s)
301
+ assert !@jeter.in_section?(s.name)
302
+ end
303
+
304
+ [@mlb, @al, @al_east, @yanks].each do |s|
305
+ assert !@flacco.in_section?(s)
306
+ assert !@flacco.in_section?(s.name)
307
+ assert @jeter.in_section?(s)
308
+ assert @jeter.in_section?(s.name)
309
+ end
310
+ end
311
+ end
312
+
313
+ class PageWithAssociatedBlocksTest < ActiveRecord::TestCase
314
+ def setup
315
+ super
316
+ @page = Factory(:page, :section => root_section, :name => "Bar")
317
+ @block = Factory(:html_block)
318
+ @other_connector = Factory(:connector, :connectable => @block, :connectable_version => @block.version)
319
+ @page_connector = Factory(:connector, :page => @page, :page_version => @page.version, :connectable => @block, :connectable_version => @block.version)
320
+ end
321
+
322
+ # It should create a new page version and a new connector
323
+ def test_updating_the_page_with_changes
324
+ connector_count = Connector.count
325
+ page_version = @page.version
326
+
327
+ @page.update_attributes(:name => "Foo")
328
+
329
+ assert_incremented connector_count, Connector.count
330
+ assert_equal page_version, @page.version
331
+ assert_incremented page_version, @page.draft.version
332
+ end
333
+
334
+ # It should not create a new page version or a new connector
335
+ def test_updating_the_page_without_changes
336
+ connector_count = Connector.count
337
+ page_version = @page.version
338
+
339
+ @page.update_attributes(:name => @page.name)
340
+
341
+ assert_equal connector_count, Connector.count
342
+ assert_equal page_version, @page.version
343
+ end
344
+
345
+ def test_deleting_a_page
346
+ connector_count = Connector.count
347
+ assert Connector.exists?(@page_connector.id)
348
+ assert Connector.exists?(@other_connector.id)
349
+
350
+ @page.destroy
351
+
352
+ assert_decremented connector_count, Connector.count
353
+ assert !Connector.exists?(@page_connector.id)
354
+ assert Connector.exists?(@other_connector.id)
355
+ assert HtmlBlock.exists?(@block.id)
356
+ assert !@block.deleted?
357
+ end
358
+ end
359
+
360
+ class AddingBlocksToPageTest < ActiveRecord::TestCase
361
+ def test_that_it_works
362
+ @page = Factory(:page, :section => root_section)
363
+ @block = Factory(:html_block)
364
+ @block2 = Factory(:html_block)
365
+ @first_conn = @page.create_connector(@block, "testing")
366
+ @second_conn = @page.create_connector(@block2, "testing")
367
+
368
+ page_version_count = @page.versions.count
369
+ connector_count = Connector.count
370
+
371
+ @conn = @page.create_connector(@block2, "testing")
372
+
373
+ assert_equal 1, @page.reload.version
374
+ assert_equal 4, @conn.page_version
375
+ assert_equal 1, @conn.connectable_version
376
+ assert_incremented page_version_count, @page.versions.count
377
+ assert_equal 3, @page.connectors.for_page_version(@page.draft.version).count
378
+ assert_equal connector_count + 3, Connector.count
379
+
380
+ # should leave the previous connectors untouched
381
+ @conns = @page.connectors.all(:conditions => ["page_version < 4"], :order => "id")
382
+
383
+ assert_equal 3, @conns.size
384
+
385
+ assert_properties @conns[0], {
386
+ :connectable => @block,
387
+ :page => @page,
388
+ :page_version => 2,
389
+ :connectable_version => 1
390
+ }
391
+
392
+ assert_properties @conns[1], {
393
+ :connectable => @block,
394
+ :page => @page,
395
+ :page_version => 3,
396
+ :connectable_version => 1
397
+ }
398
+
399
+ assert_properties @conns[2], {
400
+ :connectable => @block2,
401
+ :page => @page,
402
+ :page_version => 3,
403
+ :connectable_version => 1
404
+ }
405
+
406
+ @conns = @page.connectors.for_page_version(4).all(:order => "id")
407
+ assert_equal 3, @conns.size
408
+
409
+ assert_properties @conns[0], {
410
+ :connectable => @block,
411
+ :page => @page,
412
+ :page_version => 4,
413
+ :connectable_version => 1
414
+ }
415
+
416
+ assert_properties @conns[1], {
417
+ :connectable => @block2,
418
+ :page => @page,
419
+ :page_version => 4,
420
+ :connectable_version => 1
421
+ }
422
+
423
+ assert_properties @conns[2], {
424
+ :connectable => @block2,
425
+ :page => @page,
426
+ :page_version => 4,
427
+ :connectable_version => 1
428
+ }
429
+
430
+ end
431
+ end
432
+
433
+ class PageWithTwoBlocksTest < ActiveRecord::TestCase
434
+ def setup
435
+ super
436
+ @page = Factory(:page, :section => root_section)
437
+ @foo_block = Factory(:html_block, :name => "Foo Block")
438
+ @bar_block = Factory(:html_block, :name => "Bar Block")
439
+ @page.create_connector(@foo_block, "whatever")
440
+ @page.reload
441
+ @page.create_connector(@bar_block, "whatever")
442
+ @page.reload
443
+ end
444
+
445
+ def test_editing_one_of_the_blocks_creates_a_new_version_of_the_page
446
+ page_version = @page.draft.version
447
+ @foo_block.update_attributes(:name => "Something Else")
448
+ assert_incremented page_version, @page.draft.version
449
+ end
450
+
451
+ # A page that had 2 blocks added to it and then had them removed,
452
+ # when reverting to the previous version,
453
+ # should restore the connectors from the version being reverted to
454
+ def test_removing_and_reverting_to_previous_version
455
+ remove_both_connectors!
456
+
457
+ connector_count = Connector.count
458
+
459
+ @page.revert
460
+
461
+ assert_incremented connector_count, Connector.count
462
+
463
+ assert_properties @page.reload.connectors.for_page_version(@page.draft.version).first, {
464
+ :page => @page,
465
+ :page_version => 6,
466
+ :connectable => @bar_block,
467
+ :connectable_version => 1,
468
+ :container => "whatever"}
469
+ end
470
+
471
+ # A page that had 2 blocks added to it and then had then removed,
472
+ # when reverting to the version that had both connectors,
473
+ # should restore the connectors that version
474
+ def test_removing_and_reverting_to_version_with_both_connectors
475
+ remove_both_connectors!
476
+
477
+ connector_count = Connector.count
478
+
479
+ @page.revert_to(3)
480
+
481
+ assert_equal connector_count + 2, Connector.count
482
+
483
+ foo, bar = @page.reload.connectors.for_page_version(@page.draft.version).find(:all, :order => "connectors.position")
484
+ assert_properties foo, {
485
+ :page => @page,
486
+ :page_version => 6,
487
+ :connectable => @foo_block,
488
+ :connectable_version => 1,
489
+ :container => "whatever"}
490
+ assert_properties bar, {
491
+ :page => @page,
492
+ :page_version => 6,
493
+ :connectable => @bar_block,
494
+ :connectable_version => 1,
495
+ :container => "whatever"}
496
+
497
+ end
498
+
499
+ def test_updating_one_of_the_blocks_and_reverting_to_version_before_the_update
500
+ target_version = @page.draft.version
501
+ @foo_block.update_attributes!(:name => "Foo V2")
502
+ @page.reload
503
+
504
+ page_version = @page.draft.version
505
+ foo_block_version = @foo_block.draft.version
506
+
507
+ @page.revert_to(target_version)
508
+
509
+ assert_incremented page_version, @page.draft.version
510
+ assert_incremented foo_block_version, @foo_block.draft.version
511
+ assert_equal "Foo Block", @page.connectors.for_page_version(@page.draft.version).reload.first.connectable.name
512
+ end
513
+
514
+ protected
515
+ def remove_both_connectors!
516
+ @page.remove_connector(@page.connectors.for_page_version(@page.draft.version).first(:order => "connectors.position"))
517
+ @page.remove_connector(@page.connectors.for_page_version(@page.draft.version).first(:order => "connectors.position"))
518
+ end
519
+
520
+ end
521
+
522
+ class PageWithBlockTest < ActiveRecord::TestCase
523
+ def setup
524
+ @page = Factory(:page, :section => root_section)
525
+ @block = Factory(:html_block)
526
+ @conn = @page.create_connector(@block, "bar")
527
+ @page.publish!
528
+ @conn = @page.connectors.for_page_version(@page.version).for_connectable(@block).first
529
+ end
530
+
531
+ def test_removing_connector
532
+ page_version = @page.draft.version
533
+ page_version_count = Page::Version.count
534
+ assert @page.published?
535
+
536
+ @page.remove_connector(@conn)
537
+
538
+ assert_incremented page_version_count, Page::Version.count
539
+ assert_incremented page_version, @page.draft.version
540
+
541
+ conns = @page.connectors.for_page_version(@page.draft.version-1).all
542
+ assert_equal 1, conns.size
543
+
544
+ assert_properties conns.first, {
545
+ :page => @page,
546
+ :page_version => page_version,
547
+ :connectable => @block,
548
+ :connectable_version => @block.version
549
+ }
550
+
551
+ assert @page.reload.connectors.for_page_version(@page.draft.version).empty?
552
+ assert !@page.live?
553
+ end
554
+
555
+ def test_removing_multiple_connectors
556
+ @block2 = Factory(:html_block)
557
+ @conn2 = @page.create_connector(@block2, "bar")
558
+ @conn3 = @page.create_connector(@block2, "foo")
559
+ #Need to get the new connector that matches @conn2, otherwise you will delete an older version, not the latest connector
560
+ @conn2 = Connector.first(:conditions => {:page_id => @page.reload.id, :page_version => @page.draft.version, :connectable_id => @block2.id, :connectable_version => @block2.version, :container => "bar"})
561
+ @page.remove_connector(@conn2)
562
+
563
+ page_version_count = Page::Version.count
564
+ page_version = @page.draft.version
565
+ page_connector_count = @page.connectors.for_page_version(@page.draft.version).count
566
+
567
+ @conn = Connector.first(:conditions => {:page_id => @page.reload.id, :page_version => @page.draft.version, :connectable_id => @block2.id, :connectable_version => @block2.version, :container => "foo"})
568
+ @page.remove_connector(@conn)
569
+ @page.reload
570
+
571
+ assert_incremented page_version_count, Page::Version.count
572
+ assert_incremented page_version, @page.draft.version
573
+ assert_decremented page_connector_count,
574
+ @page.connectors.for_page_version(@page.draft.version).count
575
+
576
+ conns = @page.connectors.all(:order => "id")
577
+
578
+ #log_array conns, :id, :page_id, :page_version, :connectable_id, :connectable_type, :connectable_version, :container, :position
579
+
580
+ assert_equal 9, conns.size
581
+
582
+ assert_properties conns[0], {:page => @page, :page_version => 2, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
583
+ assert_properties conns[1], {:page => @page, :page_version => 3, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
584
+ assert_properties conns[2], {:page => @page, :page_version => 3, :connectable => @block2, :connectable_version => 1, :container => "bar", :position => 2}
585
+ assert_properties conns[3], {:page => @page, :page_version => 4, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
586
+ assert_properties conns[4], {:page => @page, :page_version => 4, :connectable => @block2, :connectable_version => 1, :container => "bar", :position => 2}
587
+ assert_properties conns[5], {:page => @page, :page_version => 4, :connectable => @block2, :connectable_version => 1, :container => "foo", :position => 1}
588
+ assert_properties conns[6], {:page => @page, :page_version => 5, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
589
+ assert_properties conns[7], {:page => @page, :page_version => 5, :connectable => @block2, :connectable_version => 1, :container => "foo", :position => 1}
590
+ assert_properties conns[8], {:page => @page, :page_version => 6, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
591
+ end
592
+
593
+ end
594
+
595
+ class UnpublishedPageWithOnePublishedAndOneUnpublishedBlockTest < ActiveRecord::TestCase
596
+ def setup
597
+ @page = Factory(:page, :section => root_section)
598
+ @published_block = Factory(:html_block, :name => "Published")
599
+ @unpublished_block = Factory(:html_block, :name => "Unpublished")
600
+ @page.create_connector(@published_block, "main")
601
+ @page.create_connector(@unpublished_block, "main")
602
+ @published_block.publish!
603
+ @page.reload
604
+ end
605
+
606
+ def test_publishing_the_block
607
+ @unpublished_block.publish!
608
+ assert @unpublished_block.reload.published?
609
+ @page.reload
610
+ assert !@page.live?
611
+ end
612
+
613
+ def test_publishing_the_page
614
+ page_version_count = Page::Version.count
615
+ unpublished_block_version_count = @unpublished_block.versions.count
616
+ published_block_version_count = @published_block.versions.count
617
+
618
+ @page.publish!
619
+
620
+ assert_equal page_version_count, Page::Version.count
621
+ assert_equal unpublished_block_version_count, @unpublished_block.versions.count
622
+ assert_equal published_block_version_count, @published_block.versions.count
623
+ assert @page.live?
624
+ assert @unpublished_block.reload.live?
625
+ assert @published_block.reload.live?
626
+ end
627
+
628
+ end
629
+
630
+ class RevertingABlockThatIsOnMultiplePagesTest < ActiveRecord::TestCase
631
+ def test_that_it_reverts_both_pages
632
+
633
+ # 1. Create a new page (Page 1, v1)
634
+ @page1 = Factory(:page, :name => "Page 1")
635
+ assert_equal 1, @page1.version
636
+
637
+ # 2. Create a new page (Page 2, v1)
638
+ @page2 = Factory(:page, :name => "Page 2")
639
+
640
+ # 3. Add a new html block to Page 1. Save, don't publish. (Page 1, v2)
641
+ @block = Factory(:html_block, :name => "Block v1",
642
+ :connect_to_page_id => @page1.id, :connect_to_container => "main")
643
+ reset(:page1, :page2, :block)
644
+ assert_equal 2, @page1.draft.version
645
+ assert_equal 1, @page2.draft.version
646
+
647
+ # 4. Goto page 2, and select that block. (Page 2, v2)
648
+ @page2.create_connector(@block, "main")
649
+ reset(:page1, :page2, :block)
650
+ assert_equal 2, @page1.draft.version
651
+ assert_equal 2, @page2.draft.version
652
+
653
+ # 5. Edit the block (Page 1, v3, Page 2, v3, Block v2)
654
+ @block.update_attributes!(:name => "Block v2")
655
+ reset(:page1, :page2, :block)
656
+ assert_equal 3, @page1.draft.version
657
+ assert_equal 3, @page2.draft.version
658
+ assert_equal 2, @block.draft.version
659
+
660
+ # 6. Revert page 1 to version 2. (Page 1, v4, Page 2, v4, Block v3)
661
+ @page1.revert_to(2)
662
+ reset(:page1, :page2, :block)
663
+ assert_equal 4, @page1.draft.version
664
+ assert_equal 3, @block.draft.version
665
+ assert_equal 4, @page2.draft.version
666
+
667
+ # Expected: Both page 1 and 2 will display the same version of the block (v1).
668
+ assert_equal "Block v1", @page1.connectors.first.connectable.name
669
+ assert_equal "Block v1", @page2.connectors.first.connectable.name
670
+
671
+ end
672
+
673
+ end
674
+
675
+ class ViewingAPreviousVersionOfAPageTest < ActiveRecord::TestCase
676
+
677
+ def test_that_it_shows_the_correct_version_of_the_blocks_it_is_connected_to
678
+ # 1. Create Page A (v1)
679
+ @page = Factory(:page, :section => root_section)
680
+
681
+ # 2. Add new Html Block A to Page A (Page A v2, Block A v1)
682
+ @block = Factory(:html_block, :name => "Block 1", :connect_to_page_id => @page.id, :connect_to_container => "main")
683
+ reset(:page, :block)
684
+ assert_equal 2, @page.draft.version
685
+ assert_equal 1, @block.draft.version
686
+
687
+ # 3. Publish Page A (Page A v3, Block A v2)
688
+ @page.publish!
689
+ reset(:page, :block)
690
+ assert_equal 2, @page.draft.version
691
+ assert_equal 1, @block.draft.version
692
+
693
+ # 4. Edit Block A (Page A v4, Block A v3)
694
+ @block.update_attributes!(:name => "Block 2")
695
+ reset(:page, :block)
696
+ assert_equal 2, @page.version
697
+ assert_equal 3, @page.draft.version
698
+ assert_equal 2, @block.draft.version
699
+
700
+ # Open Page A in a different browser (as guest)
701
+ @live_page = Page.find_live_by_path(@page.path)
702
+ assert_equal 2, @live_page.version
703
+ assert_equal "Block 1", @live_page.connectors.for_page_version(@live_page.version).first.connectable.live_version.name
704
+
705
+ end
706
+ end
707
+
708
+ class PortletsDontHaveDraftsTest < ActiveRecord::TestCase
709
+
710
+ def test_connectors_with_portlets_should_correctly_be_copied
711
+ @page = Factory(:page, :section=> root_section)
712
+ @portlet = TagCloudPortlet.create(:name=>"Portlet", :connect_to_page_id => @page.id, :connect_to_container => "main")
713
+
714
+ # Check some assumptions.
715
+ assert_equal 2, @page.draft.version, "Verifying that adding a portlet correctly increments page version."
716
+ connectors = Connector.for_connectable(@portlet)
717
+ assert_equal 1, connectors.size, "This portlet should have only 1 connector."
718
+
719
+ # Verifies that an exception is not thrown while removing connectors
720
+ @page.remove_connector(connectors[0])
721
+
722
+ assert_equal 3, @page.draft.version
723
+ assert @page.reload.connectors.for_page_version(@page.draft.version).empty?, "Verify that all connectors for the latest page are removed."
724
+ end
725
+ end
726
+