nate-browsercms 3.0.210

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 (914) hide show
  1. data/LICENSE.txt +165 -0
  2. data/README.markdown +79 -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 +256 -0
  12. data/app/controllers/cms/content_controller.rb +211 -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/email_page_portlet_controller.rb +14 -0
  18. data/app/controllers/cms/error_handling.rb +18 -0
  19. data/app/controllers/cms/file_blocks_controller.rb +2 -0
  20. data/app/controllers/cms/groups_controller.rb +26 -0
  21. data/app/controllers/cms/home_controller.rb +5 -0
  22. data/app/controllers/cms/html_blocks_controller.rb +2 -0
  23. data/app/controllers/cms/image_blocks_controller.rb +2 -0
  24. data/app/controllers/cms/links_controller.rb +59 -0
  25. data/app/controllers/cms/missing_asset_controller.rb +6 -0
  26. data/app/controllers/cms/page_route_conditions_controller.rb +2 -0
  27. data/app/controllers/cms/page_route_options_controller.rb +56 -0
  28. data/app/controllers/cms/page_route_requirements_controller.rb +2 -0
  29. data/app/controllers/cms/page_routes_controller.rb +45 -0
  30. data/app/controllers/cms/pages_controller.rb +124 -0
  31. data/app/controllers/cms/portlet_controller.rb +62 -0
  32. data/app/controllers/cms/portlets_controller.rb +32 -0
  33. data/app/controllers/cms/redirects_controller.rb +19 -0
  34. data/app/controllers/cms/resource_controller.rb +108 -0
  35. data/app/controllers/cms/routes_controller.rb +23 -0
  36. data/app/controllers/cms/section_nodes_controller.rb +40 -0
  37. data/app/controllers/cms/sections_controller.rb +125 -0
  38. data/app/controllers/cms/sessions_controller.rb +64 -0
  39. data/app/controllers/cms/tags_controller.rb +9 -0
  40. data/app/controllers/cms/tasks_controller.rb +52 -0
  41. data/app/controllers/cms/toolbar_controller.rb +12 -0
  42. data/app/controllers/cms/users_controller.rb +98 -0
  43. data/app/helpers/application_helper.rb +3 -0
  44. data/app/helpers/cms/application_helper.rb +187 -0
  45. data/app/helpers/cms/form_builder.rb +98 -0
  46. data/app/helpers/cms/form_tag_helper.rb +32 -0
  47. data/app/helpers/cms/menu_helper.rb +172 -0
  48. data/app/helpers/cms/page_helper.rb +60 -0
  49. data/app/helpers/cms/path_helper.rb +48 -0
  50. data/app/helpers/cms/section_nodes_helper.rb +13 -0
  51. data/app/models/abstract_file_block.rb +13 -0
  52. data/app/models/attachment.rb +203 -0
  53. data/app/models/category.rb +40 -0
  54. data/app/models/category_type.rb +34 -0
  55. data/app/models/connector.rb +72 -0
  56. data/app/models/content_type.rb +95 -0
  57. data/app/models/content_type_group.rb +3 -0
  58. data/app/models/dynamic_view.rb +73 -0
  59. data/app/models/email_message.rb +31 -0
  60. data/app/models/email_message_mailer.rb +11 -0
  61. data/app/models/file_block.rb +21 -0
  62. data/app/models/group.rb +30 -0
  63. data/app/models/group_permission.rb +7 -0
  64. data/app/models/group_section.rb +4 -0
  65. data/app/models/group_type.rb +12 -0
  66. data/app/models/group_type_permission.rb +4 -0
  67. data/app/models/guest_user.rb +39 -0
  68. data/app/models/html_block.rb +40 -0
  69. data/app/models/image_block.rb +22 -0
  70. data/app/models/link.rb +35 -0
  71. data/app/models/page.rb +293 -0
  72. data/app/models/page_partial.rb +22 -0
  73. data/app/models/page_route.rb +58 -0
  74. data/app/models/page_route_condition.rb +2 -0
  75. data/app/models/page_route_option.rb +3 -0
  76. data/app/models/page_route_requirement.rb +2 -0
  77. data/app/models/page_template.rb +48 -0
  78. data/app/models/permission.rb +10 -0
  79. data/app/models/portlet.rb +108 -0
  80. data/app/models/redirect.rb +4 -0
  81. data/app/models/section.rb +140 -0
  82. data/app/models/section_node.rb +101 -0
  83. data/app/models/site.rb +41 -0
  84. data/app/models/tag.rb +62 -0
  85. data/app/models/tagging.rb +9 -0
  86. data/app/models/task.rb +67 -0
  87. data/app/models/user.rb +125 -0
  88. data/app/models/user_group_membership.rb +4 -0
  89. data/app/portlets/dynamic_portlet.rb +7 -0
  90. data/app/portlets/email_page_portlet.rb +10 -0
  91. data/app/portlets/login_portlet.rb +10 -0
  92. data/app/portlets/tag_cloud_portlet.rb +13 -0
  93. data/app/views/cms/blocks/_hidden_fields.html.erb +10 -0
  94. data/app/views/cms/blocks/_toolbar.html.erb +9 -0
  95. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +26 -0
  96. data/app/views/cms/blocks/_toolbar_for_member.html.erb +38 -0
  97. data/app/views/cms/blocks/edit.html.erb +25 -0
  98. data/app/views/cms/blocks/index.html.erb +122 -0
  99. data/app/views/cms/blocks/new.html.erb +21 -0
  100. data/app/views/cms/blocks/show.html.erb +30 -0
  101. data/app/views/cms/blocks/usages.html.erb +34 -0
  102. data/app/views/cms/blocks/versions.html.erb +102 -0
  103. data/app/views/cms/cache/show.html.erb +12 -0
  104. data/app/views/cms/categories/_form.html.erb +36 -0
  105. data/app/views/cms/category_types/_form.html.erb +1 -0
  106. data/app/views/cms/connectors/new.html.erb +71 -0
  107. data/app/views/cms/content/show.html.erb +21 -0
  108. data/app/views/cms/content_types/index.html.erb +14 -0
  109. data/app/views/cms/dashboard/_page_drafts.html.erb +49 -0
  110. data/app/views/cms/dashboard/_tasks.html.erb +54 -0
  111. data/app/views/cms/dashboard/index.html.erb +15 -0
  112. data/app/views/cms/dynamic_views/_form.html.erb +11 -0
  113. data/app/views/cms/dynamic_views/edit.html.erb +3 -0
  114. data/app/views/cms/dynamic_views/index.html.erb +48 -0
  115. data/app/views/cms/dynamic_views/new.html.erb +3 -0
  116. data/app/views/cms/email_messages/index.html.erb +41 -0
  117. data/app/views/cms/email_messages/show.html.erb +57 -0
  118. data/app/views/cms/file_blocks/_form.html.erb +30 -0
  119. data/app/views/cms/file_blocks/render.html.erb +5 -0
  120. data/app/views/cms/form_builder/_cms_date_picker.html.erb +12 -0
  121. data/app/views/cms/form_builder/_cms_drop_down.html.erb +19 -0
  122. data/app/views/cms/form_builder/_cms_file_field.html.erb +30 -0
  123. data/app/views/cms/form_builder/_cms_tag_list.html.erb +15 -0
  124. data/app/views/cms/form_builder/_cms_text_area.html.erb +13 -0
  125. data/app/views/cms/form_builder/_cms_text_editor.html.erb +18 -0
  126. data/app/views/cms/form_builder/_cms_text_field.html.erb +12 -0
  127. data/app/views/cms/groups/_form.html.erb +45 -0
  128. data/app/views/cms/groups/_permissions.html.erb +36 -0
  129. data/app/views/cms/groups/_sections.html.erb +18 -0
  130. data/app/views/cms/groups/edit.html.erb +4 -0
  131. data/app/views/cms/groups/index.html.erb +60 -0
  132. data/app/views/cms/groups/new.html.erb +4 -0
  133. data/app/views/cms/html_blocks/_form.html.erb +3 -0
  134. data/app/views/cms/html_blocks/render.html.erb +1 -0
  135. data/app/views/cms/image_blocks/_form.html.erb +30 -0
  136. data/app/views/cms/image_blocks/render.html.erb +1 -0
  137. data/app/views/cms/links/_form.html.erb +15 -0
  138. data/app/views/cms/links/destroy.js.rjs +2 -0
  139. data/app/views/cms/links/edit.html.erb +14 -0
  140. data/app/views/cms/links/new.html.erb +15 -0
  141. data/app/views/cms/page_routes/_form.html.erb +11 -0
  142. data/app/views/cms/page_routes/edit.html.erb +3 -0
  143. data/app/views/cms/page_routes/index.html.erb +50 -0
  144. data/app/views/cms/page_routes/new.html.erb +3 -0
  145. data/app/views/cms/page_routes/show.html.erb +14 -0
  146. data/app/views/cms/pages/_edit_connector.html.erb +16 -0
  147. data/app/views/cms/pages/_edit_container.html.erb +8 -0
  148. data/app/views/cms/pages/_form.html.erb +53 -0
  149. data/app/views/cms/pages/edit.html.erb +23 -0
  150. data/app/views/cms/pages/new.html.erb +36 -0
  151. data/app/views/cms/pages/versions.html.erb +82 -0
  152. data/app/views/cms/redirects/_form.html.erb +15 -0
  153. data/app/views/cms/redirects/edit.html.erb +3 -0
  154. data/app/views/cms/redirects/index.html.erb +45 -0
  155. data/app/views/cms/redirects/new.html.erb +3 -0
  156. data/app/views/cms/routes/index.html.erb +36 -0
  157. data/app/views/cms/section_nodes/_link.html.erb +11 -0
  158. data/app/views/cms/section_nodes/_node.html.erb +34 -0
  159. data/app/views/cms/section_nodes/_page.html.erb +14 -0
  160. data/app/views/cms/section_nodes/_section.html.erb +12 -0
  161. data/app/views/cms/section_nodes/_section_node.html.erb +10 -0
  162. data/app/views/cms/section_nodes/index.html.erb +31 -0
  163. data/app/views/cms/sections/_form.html.erb +58 -0
  164. data/app/views/cms/sections/_page.html.erb +4 -0
  165. data/app/views/cms/sections/_section.html.erb +8 -0
  166. data/app/views/cms/sections/destroy.js.rjs +2 -0
  167. data/app/views/cms/sections/edit.html.erb +10 -0
  168. data/app/views/cms/sections/file_browser.xml.builder +14 -0
  169. data/app/views/cms/sections/index.html.erb +23 -0
  170. data/app/views/cms/sections/new.html.erb +22 -0
  171. data/app/views/cms/sessions/new.html.erb +32 -0
  172. data/app/views/cms/shared/_admin_sidebar.html.erb +30 -0
  173. data/app/views/cms/shared/_exception.html.erb +6 -0
  174. data/app/views/cms/shared/_pagination.html.erb +31 -0
  175. data/app/views/cms/shared/_version_conflict_diff.html.erb +11 -0
  176. data/app/views/cms/shared/_version_conflict_error.html.erb +6 -0
  177. data/app/views/cms/shared/error.html.erb +40 -0
  178. data/app/views/cms/tags/_form.html.erb +1 -0
  179. data/app/views/cms/tags/render.html.erb +53 -0
  180. data/app/views/cms/tasks/new.html.erb +36 -0
  181. data/app/views/cms/toolbar/index.html.erb +12 -0
  182. data/app/views/cms/users/_form.html.erb +12 -0
  183. data/app/views/cms/users/_groups.html.erb +11 -0
  184. data/app/views/cms/users/_password.html.erb +8 -0
  185. data/app/views/cms/users/_toolbar.html.erb +20 -0
  186. data/app/views/cms/users/_user_fields.html.erb +20 -0
  187. data/app/views/cms/users/change_password.html.erb +19 -0
  188. data/app/views/cms/users/edit.html.erb +16 -0
  189. data/app/views/cms/users/index.html.erb +62 -0
  190. data/app/views/cms/users/new.html.erb +13 -0
  191. data/app/views/layouts/_cms_toolbar.html.erb +21 -0
  192. data/app/views/layouts/_page_toolbar.html.erb +86 -0
  193. data/app/views/layouts/application.html.erb +11 -0
  194. data/app/views/layouts/cms/_footer.erb +4 -0
  195. data/app/views/layouts/cms/_head.html.erb +21 -0
  196. data/app/views/layouts/cms/administration.html.erb +34 -0
  197. data/app/views/layouts/cms/application.html.erb +25 -0
  198. data/app/views/layouts/cms/content_library.html.erb +94 -0
  199. data/app/views/layouts/cms/dashboard.html.erb +16 -0
  200. data/app/views/layouts/cms/login.html.erb +30 -0
  201. data/app/views/layouts/cms/section_nodes.html.erb +20 -0
  202. data/app/views/layouts/cms/thickbox.html.erb +24 -0
  203. data/app/views/layouts/cms/toolbar.html.erb +23 -0
  204. data/app/views/portlets/dynamic/_form.html.erb +3 -0
  205. data/app/views/portlets/email_page/_form.html.erb +7 -0
  206. data/app/views/portlets/email_page/render.html.erb +17 -0
  207. data/app/views/portlets/login/_form.html.erb +6 -0
  208. data/app/views/portlets/login/render.html.erb +27 -0
  209. data/app/views/portlets/portlets/_form.html.erb +19 -0
  210. data/app/views/portlets/tag_cloud/_form.html.erb +4 -0
  211. data/app/views/portlets/tag_cloud/render.html.erb +5 -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_create_users.rb +24 -0
  218. data/db/migrate/20080815014733_create_dynamic_views.rb +17 -0
  219. data/db/migrate/20080815014735_create_pages.rb +21 -0
  220. data/db/migrate/20080815014736_create_content_type_groups.rb +14 -0
  221. data/db/migrate/20080815014737_create_content_types.rb +14 -0
  222. data/db/migrate/20080815014738_create_category_types.rb +14 -0
  223. data/db/migrate/20080815014739_create_categories.rb +16 -0
  224. data/db/migrate/20080815214539_create_connectors.rb +19 -0
  225. data/db/migrate/20080815220350_create_html_blocks.rb +13 -0
  226. data/db/migrate/20080819193254_create_sections.rb +15 -0
  227. data/db/migrate/20080819213733_create_portlets.rb +25 -0
  228. data/db/migrate/20080917222336_create_redirects.rb +14 -0
  229. data/db/migrate/20080922203815_create_attachments.rb +16 -0
  230. data/db/migrate/20080922215729_create_file_blocks.rb +16 -0
  231. data/db/migrate/20081007190155_create_group_types.rb +15 -0
  232. data/db/migrate/20081007190156_create_groups.rb +20 -0
  233. data/db/migrate/20081008182341_create_permissions.rb +28 -0
  234. data/db/migrate/20081009202349_create_group_sections.rb +12 -0
  235. data/db/migrate/20081013181547_create_sites.rb +15 -0
  236. data/db/migrate/20081020152051_create_section_nodes.rb +16 -0
  237. data/db/migrate/20081031140510_create_links.rb +15 -0
  238. data/db/migrate/20081031140511_create_tags.rb +14 -0
  239. data/db/migrate/20081031140512_create_taggings.rb +16 -0
  240. data/db/migrate/20081114172307_load_seed_data.rb +92 -0
  241. data/db/migrate/20090130171546_create_email_messages.rb +20 -0
  242. data/db/migrate/20090212164201_create_tasks.rb +18 -0
  243. data/db/migrate/20090410193133_create_page_routes.rb +16 -0
  244. data/db/migrate/20090410193312_create_page_route_options.rb +16 -0
  245. data/lib/acts_as_list.rb +252 -0
  246. data/lib/browser_cms.rb +12 -0
  247. data/lib/cms/acts/content_block.rb +31 -0
  248. data/lib/cms/authentication/controller.rb +194 -0
  249. data/lib/cms/authentication/model.rb +116 -0
  250. data/lib/cms/behaviors/archiving.rb +43 -0
  251. data/lib/cms/behaviors/attaching.rb +179 -0
  252. data/lib/cms/behaviors/categorizing.rb +31 -0
  253. data/lib/cms/behaviors/connecting.rb +94 -0
  254. data/lib/cms/behaviors/dynamic_attributes.rb +362 -0
  255. data/lib/cms/behaviors/flush_cache_on_change.rb +33 -0
  256. data/lib/cms/behaviors/hiding.rb +46 -0
  257. data/lib/cms/behaviors/pagination.rb +209 -0
  258. data/lib/cms/behaviors/publishing.rb +84 -0
  259. data/lib/cms/behaviors/rendering.rb +133 -0
  260. data/lib/cms/behaviors/searching.rb +49 -0
  261. data/lib/cms/behaviors/soft_deleting.rb +73 -0
  262. data/lib/cms/behaviors/taggable.rb +56 -0
  263. data/lib/cms/behaviors/userstamping.rb +37 -0
  264. data/lib/cms/behaviors/versioning.rb +172 -0
  265. data/lib/cms/behaviors.rb +33 -0
  266. data/lib/cms/caching.rb +20 -0
  267. data/lib/cms/data_loader.rb +28 -0
  268. data/lib/cms/extensions/action_view/base.rb +13 -0
  269. data/lib/cms/extensions/active_record/base.rb +16 -0
  270. data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +63 -0
  271. data/lib/cms/extensions/active_record/errors.rb +12 -0
  272. data/lib/cms/extensions/active_support/cache/file_store.rb +9 -0
  273. data/lib/cms/extensions/hash.rb +21 -0
  274. data/lib/cms/extensions/integer.rb +16 -0
  275. data/lib/cms/extensions/nil.rb +19 -0
  276. data/lib/cms/extensions/string.rb +19 -0
  277. data/lib/cms/extensions.rb +4 -0
  278. data/lib/cms/init.rb +85 -0
  279. data/lib/cms/routes.rb +131 -0
  280. data/lib/initial_data.rb +30 -0
  281. data/lib/sequence.rb +6 -0
  282. data/lib/tasks/cms.rake +94 -0
  283. data/lib/tasks/db.rake +67 -0
  284. data/lib/tasks/dev.rake +20 -0
  285. data/public/fckeditor/editor/css/behaviors/disablehandles.htc +15 -0
  286. data/public/fckeditor/editor/css/behaviors/showtableborders.htc +36 -0
  287. data/public/fckeditor/editor/css/fck_editorarea.css +110 -0
  288. data/public/fckeditor/editor/css/fck_internal.css +199 -0
  289. data/public/fckeditor/editor/css/fck_showtableborders_gecko.css +49 -0
  290. data/public/fckeditor/editor/css/images/block_address.png +0 -0
  291. data/public/fckeditor/editor/css/images/block_blockquote.png +0 -0
  292. data/public/fckeditor/editor/css/images/block_div.png +0 -0
  293. data/public/fckeditor/editor/css/images/block_h1.png +0 -0
  294. data/public/fckeditor/editor/css/images/block_h2.png +0 -0
  295. data/public/fckeditor/editor/css/images/block_h3.png +0 -0
  296. data/public/fckeditor/editor/css/images/block_h4.png +0 -0
  297. data/public/fckeditor/editor/css/images/block_h5.png +0 -0
  298. data/public/fckeditor/editor/css/images/block_h6.png +0 -0
  299. data/public/fckeditor/editor/css/images/block_p.png +0 -0
  300. data/public/fckeditor/editor/css/images/block_pre.png +0 -0
  301. data/public/fckeditor/editor/css/images/fck_anchor.gif +0 -0
  302. data/public/fckeditor/editor/css/images/fck_flashlogo.gif +0 -0
  303. data/public/fckeditor/editor/css/images/fck_hiddenfield.gif +0 -0
  304. data/public/fckeditor/editor/css/images/fck_pagebreak.gif +0 -0
  305. data/public/fckeditor/editor/css/images/fck_plugin.gif +0 -0
  306. data/public/fckeditor/editor/dialog/common/fck_dialog_common.css +85 -0
  307. data/public/fckeditor/editor/dialog/common/fck_dialog_common.js +311 -0
  308. data/public/fckeditor/editor/dialog/common/images/locked.gif +0 -0
  309. data/public/fckeditor/editor/dialog/common/images/reset.gif +0 -0
  310. data/public/fckeditor/editor/dialog/common/images/unlocked.gif +0 -0
  311. data/public/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif +0 -0
  312. data/public/fckeditor/editor/dialog/fck_about/logo_fredck.gif +0 -0
  313. data/public/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif +0 -0
  314. data/public/fckeditor/editor/dialog/fck_about.html +161 -0
  315. data/public/fckeditor/editor/dialog/fck_anchor.html +220 -0
  316. data/public/fckeditor/editor/dialog/fck_button.html +104 -0
  317. data/public/fckeditor/editor/dialog/fck_checkbox.html +104 -0
  318. data/public/fckeditor/editor/dialog/fck_colorselector.html +172 -0
  319. data/public/fckeditor/editor/dialog/fck_div.html +364 -0
  320. data/public/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html +113 -0
  321. data/public/fckeditor/editor/dialog/fck_docprops.html +600 -0
  322. data/public/fckeditor/editor/dialog/fck_flash/fck_flash.js +300 -0
  323. data/public/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html +50 -0
  324. data/public/fckeditor/editor/dialog/fck_flash.html +152 -0
  325. data/public/fckeditor/editor/dialog/fck_form.html +109 -0
  326. data/public/fckeditor/editor/dialog/fck_hiddenfield.html +115 -0
  327. data/public/fckeditor/editor/dialog/fck_image/fck_image.js +512 -0
  328. data/public/fckeditor/editor/dialog/fck_image/fck_image_preview.html +72 -0
  329. data/public/fckeditor/editor/dialog/fck_image.html +258 -0
  330. data/public/fckeditor/editor/dialog/fck_link/fck_link.js +893 -0
  331. data/public/fckeditor/editor/dialog/fck_link.html +295 -0
  332. data/public/fckeditor/editor/dialog/fck_listprop.html +120 -0
  333. data/public/fckeditor/editor/dialog/fck_paste.html +346 -0
  334. data/public/fckeditor/editor/dialog/fck_radiobutton.html +104 -0
  335. data/public/fckeditor/editor/dialog/fck_replace.html +648 -0
  336. data/public/fckeditor/editor/dialog/fck_select/fck_select.js +194 -0
  337. data/public/fckeditor/editor/dialog/fck_select.html +180 -0
  338. data/public/fckeditor/editor/dialog/fck_smiley.html +111 -0
  339. data/public/fckeditor/editor/dialog/fck_source.html +68 -0
  340. data/public/fckeditor/editor/dialog/fck_specialchar.html +121 -0
  341. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html +0 -0
  342. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js +87 -0
  343. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html +153 -0
  344. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm +148 -0
  345. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php +199 -0
  346. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl +181 -0
  347. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js +461 -0
  348. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html +71 -0
  349. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css +49 -0
  350. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js +272 -0
  351. data/public/fckeditor/editor/dialog/fck_spellerpages.html +70 -0
  352. data/public/fckeditor/editor/dialog/fck_table.html +298 -0
  353. data/public/fckeditor/editor/dialog/fck_tablecell.html +257 -0
  354. data/public/fckeditor/editor/dialog/fck_template/images/template1.gif +0 -0
  355. data/public/fckeditor/editor/dialog/fck_template/images/template2.gif +0 -0
  356. data/public/fckeditor/editor/dialog/fck_template/images/template3.gif +0 -0
  357. data/public/fckeditor/editor/dialog/fck_template.html +242 -0
  358. data/public/fckeditor/editor/dialog/fck_textarea.html +94 -0
  359. data/public/fckeditor/editor/dialog/fck_textfield.html +136 -0
  360. data/public/fckeditor/editor/dtd/fck_dtd_test.html +41 -0
  361. data/public/fckeditor/editor/dtd/fck_xhtml10strict.js +116 -0
  362. data/public/fckeditor/editor/dtd/fck_xhtml10transitional.js +140 -0
  363. data/public/fckeditor/editor/fckdebug.html +153 -0
  364. data/public/fckeditor/editor/fckdialog.html +812 -0
  365. data/public/fckeditor/editor/fckeditor.html +317 -0
  366. data/public/fckeditor/editor/fckeditor.original.html +424 -0
  367. data/public/fckeditor/editor/filemanager/browser/default/browser.css +87 -0
  368. data/public/fckeditor/editor/filemanager/browser/default/browser.html +200 -0
  369. data/public/fckeditor/editor/filemanager/browser/default/frmactualfolder.html +95 -0
  370. data/public/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html +114 -0
  371. data/public/fckeditor/editor/filemanager/browser/default/frmfolders.html +198 -0
  372. data/public/fckeditor/editor/filemanager/browser/default/frmresourceslist.html +169 -0
  373. data/public/fckeditor/editor/filemanager/browser/default/frmresourcetype.html +68 -0
  374. data/public/fckeditor/editor/filemanager/browser/default/frmupload.html +115 -0
  375. data/public/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif +0 -0
  376. data/public/fckeditor/editor/filemanager/browser/default/images/Folder.gif +0 -0
  377. data/public/fckeditor/editor/filemanager/browser/default/images/Folder32.gif +0 -0
  378. data/public/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif +0 -0
  379. data/public/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif +0 -0
  380. data/public/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif +0 -0
  381. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif +0 -0
  382. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif +0 -0
  383. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif +0 -0
  384. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif +0 -0
  385. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif +0 -0
  386. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif +0 -0
  387. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif +0 -0
  388. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif +0 -0
  389. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif +0 -0
  390. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif +0 -0
  391. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif +0 -0
  392. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif +0 -0
  393. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif +0 -0
  394. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif +0 -0
  395. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif +0 -0
  396. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif +0 -0
  397. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif +0 -0
  398. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif +0 -0
  399. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif +0 -0
  400. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif +0 -0
  401. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif +0 -0
  402. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif +0 -0
  403. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif +0 -0
  404. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif +0 -0
  405. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif +0 -0
  406. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif +0 -0
  407. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif +0 -0
  408. data/public/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif +0 -0
  409. data/public/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif +0 -0
  410. data/public/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif +0 -0
  411. data/public/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif +0 -0
  412. data/public/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif +0 -0
  413. data/public/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif +0 -0
  414. data/public/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif +0 -0
  415. data/public/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif +0 -0
  416. data/public/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif +0 -0
  417. data/public/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif +0 -0
  418. data/public/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif +0 -0
  419. data/public/fckeditor/editor/filemanager/browser/default/images/icons/html.gif +0 -0
  420. data/public/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif +0 -0
  421. data/public/fckeditor/editor/filemanager/browser/default/images/icons/js.gif +0 -0
  422. data/public/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif +0 -0
  423. data/public/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif +0 -0
  424. data/public/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif +0 -0
  425. data/public/fckeditor/editor/filemanager/browser/default/images/icons/png.gif +0 -0
  426. data/public/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif +0 -0
  427. data/public/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif +0 -0
  428. data/public/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif +0 -0
  429. data/public/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif +0 -0
  430. data/public/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif +0 -0
  431. data/public/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif +0 -0
  432. data/public/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif +0 -0
  433. data/public/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif +0 -0
  434. data/public/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif +0 -0
  435. data/public/fckeditor/editor/filemanager/browser/default/images/spacer.gif +0 -0
  436. data/public/fckeditor/editor/filemanager/browser/default/js/common.js +88 -0
  437. data/public/fckeditor/editor/filemanager/browser/default/js/fckxml.js +147 -0
  438. data/public/fckeditor/editor/images/anchor.gif +0 -0
  439. data/public/fckeditor/editor/images/arrow_ltr.gif +0 -0
  440. data/public/fckeditor/editor/images/arrow_rtl.gif +0 -0
  441. data/public/fckeditor/editor/images/smiley/msn/angel_smile.gif +0 -0
  442. data/public/fckeditor/editor/images/smiley/msn/angry_smile.gif +0 -0
  443. data/public/fckeditor/editor/images/smiley/msn/broken_heart.gif +0 -0
  444. data/public/fckeditor/editor/images/smiley/msn/cake.gif +0 -0
  445. data/public/fckeditor/editor/images/smiley/msn/confused_smile.gif +0 -0
  446. data/public/fckeditor/editor/images/smiley/msn/cry_smile.gif +0 -0
  447. data/public/fckeditor/editor/images/smiley/msn/devil_smile.gif +0 -0
  448. data/public/fckeditor/editor/images/smiley/msn/embaressed_smile.gif +0 -0
  449. data/public/fckeditor/editor/images/smiley/msn/envelope.gif +0 -0
  450. data/public/fckeditor/editor/images/smiley/msn/heart.gif +0 -0
  451. data/public/fckeditor/editor/images/smiley/msn/kiss.gif +0 -0
  452. data/public/fckeditor/editor/images/smiley/msn/lightbulb.gif +0 -0
  453. data/public/fckeditor/editor/images/smiley/msn/omg_smile.gif +0 -0
  454. data/public/fckeditor/editor/images/smiley/msn/regular_smile.gif +0 -0
  455. data/public/fckeditor/editor/images/smiley/msn/sad_smile.gif +0 -0
  456. data/public/fckeditor/editor/images/smiley/msn/shades_smile.gif +0 -0
  457. data/public/fckeditor/editor/images/smiley/msn/teeth_smile.gif +0 -0
  458. data/public/fckeditor/editor/images/smiley/msn/thumbs_down.gif +0 -0
  459. data/public/fckeditor/editor/images/smiley/msn/thumbs_up.gif +0 -0
  460. data/public/fckeditor/editor/images/smiley/msn/tounge_smile.gif +0 -0
  461. data/public/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif +0 -0
  462. data/public/fckeditor/editor/images/smiley/msn/wink_smile.gif +0 -0
  463. data/public/fckeditor/editor/images/spacer.gif +0 -0
  464. data/public/fckeditor/editor/js/fckadobeair.js +176 -0
  465. data/public/fckeditor/editor/js/fckeditorcode_gecko.js +108 -0
  466. data/public/fckeditor/editor/js/fckeditorcode_ie.js +109 -0
  467. data/public/fckeditor/editor/lang/_translationstatus.txt +78 -0
  468. data/public/fckeditor/editor/lang/af.js +526 -0
  469. data/public/fckeditor/editor/lang/ar.js +526 -0
  470. data/public/fckeditor/editor/lang/bg.js +526 -0
  471. data/public/fckeditor/editor/lang/bn.js +526 -0
  472. data/public/fckeditor/editor/lang/bs.js +526 -0
  473. data/public/fckeditor/editor/lang/ca.js +526 -0
  474. data/public/fckeditor/editor/lang/cs.js +526 -0
  475. data/public/fckeditor/editor/lang/da.js +526 -0
  476. data/public/fckeditor/editor/lang/de.js +526 -0
  477. data/public/fckeditor/editor/lang/el.js +526 -0
  478. data/public/fckeditor/editor/lang/en-au.js +526 -0
  479. data/public/fckeditor/editor/lang/en-ca.js +526 -0
  480. data/public/fckeditor/editor/lang/en-uk.js +526 -0
  481. data/public/fckeditor/editor/lang/en.js +526 -0
  482. data/public/fckeditor/editor/lang/eo.js +526 -0
  483. data/public/fckeditor/editor/lang/es.js +526 -0
  484. data/public/fckeditor/editor/lang/et.js +526 -0
  485. data/public/fckeditor/editor/lang/eu.js +527 -0
  486. data/public/fckeditor/editor/lang/fa.js +526 -0
  487. data/public/fckeditor/editor/lang/fi.js +526 -0
  488. data/public/fckeditor/editor/lang/fo.js +526 -0
  489. data/public/fckeditor/editor/lang/fr-ca.js +526 -0
  490. data/public/fckeditor/editor/lang/fr.js +526 -0
  491. data/public/fckeditor/editor/lang/gl.js +526 -0
  492. data/public/fckeditor/editor/lang/gu.js +526 -0
  493. data/public/fckeditor/editor/lang/he.js +526 -0
  494. data/public/fckeditor/editor/lang/hi.js +526 -0
  495. data/public/fckeditor/editor/lang/hr.js +526 -0
  496. data/public/fckeditor/editor/lang/hu.js +526 -0
  497. data/public/fckeditor/editor/lang/it.js +526 -0
  498. data/public/fckeditor/editor/lang/ja.js +526 -0
  499. data/public/fckeditor/editor/lang/km.js +526 -0
  500. data/public/fckeditor/editor/lang/ko.js +526 -0
  501. data/public/fckeditor/editor/lang/lt.js +526 -0
  502. data/public/fckeditor/editor/lang/lv.js +526 -0
  503. data/public/fckeditor/editor/lang/mn.js +526 -0
  504. data/public/fckeditor/editor/lang/ms.js +526 -0
  505. data/public/fckeditor/editor/lang/nb.js +526 -0
  506. data/public/fckeditor/editor/lang/nl.js +526 -0
  507. data/public/fckeditor/editor/lang/no.js +526 -0
  508. data/public/fckeditor/editor/lang/pl.js +526 -0
  509. data/public/fckeditor/editor/lang/pt-br.js +526 -0
  510. data/public/fckeditor/editor/lang/pt.js +526 -0
  511. data/public/fckeditor/editor/lang/ro.js +526 -0
  512. data/public/fckeditor/editor/lang/ru.js +526 -0
  513. data/public/fckeditor/editor/lang/sk.js +526 -0
  514. data/public/fckeditor/editor/lang/sl.js +526 -0
  515. data/public/fckeditor/editor/lang/sr-latn.js +526 -0
  516. data/public/fckeditor/editor/lang/sr.js +526 -0
  517. data/public/fckeditor/editor/lang/sv.js +526 -0
  518. data/public/fckeditor/editor/lang/th.js +526 -0
  519. data/public/fckeditor/editor/lang/tr.js +526 -0
  520. data/public/fckeditor/editor/lang/uk.js +526 -0
  521. data/public/fckeditor/editor/lang/vi.js +526 -0
  522. data/public/fckeditor/editor/lang/zh-cn.js +526 -0
  523. data/public/fckeditor/editor/lang/zh.js +526 -0
  524. data/public/fckeditor/editor/plugins/autogrow/fckplugin.js +99 -0
  525. data/public/fckeditor/editor/plugins/bbcode/_sample/sample.config.js +26 -0
  526. data/public/fckeditor/editor/plugins/bbcode/_sample/sample.html +67 -0
  527. data/public/fckeditor/editor/plugins/bbcode/fckplugin.js +123 -0
  528. data/public/fckeditor/editor/plugins/dragresizetable/fckplugin.js +524 -0
  529. data/public/fckeditor/editor/plugins/placeholder/fck_placeholder.html +105 -0
  530. data/public/fckeditor/editor/plugins/placeholder/fckplugin.js +187 -0
  531. data/public/fckeditor/editor/plugins/placeholder/lang/de.js +27 -0
  532. data/public/fckeditor/editor/plugins/placeholder/lang/en.js +27 -0
  533. data/public/fckeditor/editor/plugins/placeholder/lang/es.js +27 -0
  534. data/public/fckeditor/editor/plugins/placeholder/lang/fr.js +27 -0
  535. data/public/fckeditor/editor/plugins/placeholder/lang/it.js +27 -0
  536. data/public/fckeditor/editor/plugins/placeholder/lang/pl.js +27 -0
  537. data/public/fckeditor/editor/plugins/placeholder/placeholder.gif +0 -0
  538. data/public/fckeditor/editor/plugins/simplecommands/fckplugin.js +29 -0
  539. data/public/fckeditor/editor/plugins/tablecommands/fckplugin.js +33 -0
  540. data/public/fckeditor/editor/skins/_fckviewstrips.html +121 -0
  541. data/public/fckeditor/editor/skins/default/fck_dialog.css +402 -0
  542. data/public/fckeditor/editor/skins/default/fck_dialog_ie6.js +110 -0
  543. data/public/fckeditor/editor/skins/default/fck_editor.css +464 -0
  544. data/public/fckeditor/editor/skins/default/fck_strip.gif +0 -0
  545. data/public/fckeditor/editor/skins/default/images/dialog.sides.gif +0 -0
  546. data/public/fckeditor/editor/skins/default/images/dialog.sides.png +0 -0
  547. data/public/fckeditor/editor/skins/default/images/dialog.sides.rtl.png +0 -0
  548. data/public/fckeditor/editor/skins/default/images/sprites.gif +0 -0
  549. data/public/fckeditor/editor/skins/default/images/sprites.png +0 -0
  550. data/public/fckeditor/editor/skins/default/images/toolbar.arrowright.gif +0 -0
  551. data/public/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif +0 -0
  552. data/public/fckeditor/editor/skins/default/images/toolbar.collapse.gif +0 -0
  553. data/public/fckeditor/editor/skins/default/images/toolbar.end.gif +0 -0
  554. data/public/fckeditor/editor/skins/default/images/toolbar.expand.gif +0 -0
  555. data/public/fckeditor/editor/skins/default/images/toolbar.separator.gif +0 -0
  556. data/public/fckeditor/editor/skins/default/images/toolbar.start.gif +0 -0
  557. data/public/fckeditor/editor/skins/office2003/fck_dialog.css +402 -0
  558. data/public/fckeditor/editor/skins/office2003/fck_dialog_ie6.js +110 -0
  559. data/public/fckeditor/editor/skins/office2003/fck_editor.css +476 -0
  560. data/public/fckeditor/editor/skins/office2003/fck_strip.gif +0 -0
  561. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.gif +0 -0
  562. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.png +0 -0
  563. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.rtl.png +0 -0
  564. data/public/fckeditor/editor/skins/office2003/images/sprites.gif +0 -0
  565. data/public/fckeditor/editor/skins/office2003/images/sprites.png +0 -0
  566. data/public/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif +0 -0
  567. data/public/fckeditor/editor/skins/office2003/images/toolbar.bg.gif +0 -0
  568. data/public/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif +0 -0
  569. data/public/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif +0 -0
  570. data/public/fckeditor/editor/skins/office2003/images/toolbar.end.gif +0 -0
  571. data/public/fckeditor/editor/skins/office2003/images/toolbar.expand.gif +0 -0
  572. data/public/fckeditor/editor/skins/office2003/images/toolbar.separator.gif +0 -0
  573. data/public/fckeditor/editor/skins/office2003/images/toolbar.start.gif +0 -0
  574. data/public/fckeditor/editor/skins/silver/fck_dialog.css +402 -0
  575. data/public/fckeditor/editor/skins/silver/fck_dialog_ie6.js +110 -0
  576. data/public/fckeditor/editor/skins/silver/fck_editor.css +473 -0
  577. data/public/fckeditor/editor/skins/silver/fck_strip.gif +0 -0
  578. data/public/fckeditor/editor/skins/silver/images/dialog.sides.gif +0 -0
  579. data/public/fckeditor/editor/skins/silver/images/dialog.sides.png +0 -0
  580. data/public/fckeditor/editor/skins/silver/images/dialog.sides.rtl.png +0 -0
  581. data/public/fckeditor/editor/skins/silver/images/sprites.gif +0 -0
  582. data/public/fckeditor/editor/skins/silver/images/sprites.png +0 -0
  583. data/public/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif +0 -0
  584. data/public/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif +0 -0
  585. data/public/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif +0 -0
  586. data/public/fckeditor/editor/skins/silver/images/toolbar.collapse.gif +0 -0
  587. data/public/fckeditor/editor/skins/silver/images/toolbar.end.gif +0 -0
  588. data/public/fckeditor/editor/skins/silver/images/toolbar.expand.gif +0 -0
  589. data/public/fckeditor/editor/skins/silver/images/toolbar.separator.gif +0 -0
  590. data/public/fckeditor/editor/skins/silver/images/toolbar.start.gif +0 -0
  591. data/public/fckeditor/fckconfig.js +364 -0
  592. data/public/fckeditor/fckdebug.html +153 -0
  593. data/public/fckeditor/fckdialog.html +812 -0
  594. data/public/fckeditor/fckeditor.html +317 -0
  595. data/public/fckeditor/fckeditor.js +328 -0
  596. data/public/fckeditor/fckeditor.original.html +424 -0
  597. data/public/fckeditor/fckpackager.xml +262 -0
  598. data/public/fckeditor/fckstyles.xml +111 -0
  599. data/public/fckeditor/fcktemplates.xml +103 -0
  600. data/public/images/cms/administration/user_browser_bg.gif +0 -0
  601. data/public/images/cms/bg.png +0 -0
  602. data/public/images/cms/bl_curve.png +0 -0
  603. data/public/images/cms/bottom_cap.png +0 -0
  604. data/public/images/cms/bottom_cap_content.png +0 -0
  605. data/public/images/cms/browse.gif +0 -0
  606. data/public/images/cms/browser_media_logo.png +0 -0
  607. data/public/images/cms/browsercms_logo.png +0 -0
  608. data/public/images/cms/buttons/button.png +0 -0
  609. data/public/images/cms/buttons/button_bg.png +0 -0
  610. data/public/images/cms/buttons/button_cap.png +0 -0
  611. data/public/images/cms/buttons/button_cap_h.png +0 -0
  612. data/public/images/cms/buttons/button_cap_off.gif +0 -0
  613. data/public/images/cms/buttons/button_h.png +0 -0
  614. data/public/images/cms/buttons/button_off.png +0 -0
  615. data/public/images/cms/buttons/delete_x.png +0 -0
  616. data/public/images/cms/buttons/delete_x_disabled.png +0 -0
  617. data/public/images/cms/buttons/delete_x_h.png +0 -0
  618. data/public/images/cms/buttons/sm_button.gif +0 -0
  619. data/public/images/cms/buttons/sm_button_2.gif +0 -0
  620. data/public/images/cms/buttons/sm_button_2_h.gif +0 -0
  621. data/public/images/cms/buttons/sm_button_h.gif +0 -0
  622. data/public/images/cms/containers/add.gif +0 -0
  623. data/public/images/cms/containers/alpha.png +0 -0
  624. data/public/images/cms/containers/beta.png +0 -0
  625. data/public/images/cms/containers/delete.gif +0 -0
  626. data/public/images/cms/containers/down.gif +0 -0
  627. data/public/images/cms/containers/edit.gif +0 -0
  628. data/public/images/cms/containers/up.gif +0 -0
  629. data/public/images/cms/containers/view.gif +0 -0
  630. data/public/images/cms/content_bg.gif +0 -0
  631. data/public/images/cms/dashboard/bottom_cap.png +0 -0
  632. data/public/images/cms/dashboard/bottom_cap_content.png +0 -0
  633. data/public/images/cms/dashboard/header_bg.gif +0 -0
  634. data/public/images/cms/dashboard/header_left_bg.gif +0 -0
  635. data/public/images/cms/dashboard/table_header_bg.gif +0 -0
  636. data/public/images/cms/dashboard/top_cap.png +0 -0
  637. data/public/images/cms/dashed.gif +0 -0
  638. data/public/images/cms/datepicker/clear.gif +0 -0
  639. data/public/images/cms/datepicker/close.gif +0 -0
  640. data/public/images/cms/dk_button_l.gif +0 -0
  641. data/public/images/cms/dk_button_r.gif +0 -0
  642. data/public/images/cms/dot.png +0 -0
  643. data/public/images/cms/draft_status.gif +0 -0
  644. data/public/images/cms/gray_long_bg.gif +0 -0
  645. data/public/images/cms/icons/actions/add.png +0 -0
  646. data/public/images/cms/icons/actions/config.png +0 -0
  647. data/public/images/cms/icons/actions/connect.png +0 -0
  648. data/public/images/cms/icons/actions/delete.png +0 -0
  649. data/public/images/cms/icons/actions/down.png +0 -0
  650. data/public/images/cms/icons/actions/edit.png +0 -0
  651. data/public/images/cms/icons/actions/folder.png +0 -0
  652. data/public/images/cms/icons/actions/folder_add.png +0 -0
  653. data/public/images/cms/icons/actions/folder_delete.png +0 -0
  654. data/public/images/cms/icons/actions/folder_edit.png +0 -0
  655. data/public/images/cms/icons/actions/folder_move.png +0 -0
  656. data/public/images/cms/icons/actions/folder_open.png +0 -0
  657. data/public/images/cms/icons/actions/history.png +0 -0
  658. data/public/images/cms/icons/actions/home.png +0 -0
  659. data/public/images/cms/icons/actions/left.png +0 -0
  660. data/public/images/cms/icons/actions/link.png +0 -0
  661. data/public/images/cms/icons/actions/page.png +0 -0
  662. data/public/images/cms/icons/actions/page_add.png +0 -0
  663. data/public/images/cms/icons/actions/page_edit.png +0 -0
  664. data/public/images/cms/icons/actions/page_move.png +0 -0
  665. data/public/images/cms/icons/actions/redo.png +0 -0
  666. data/public/images/cms/icons/actions/refresh.png +0 -0
  667. data/public/images/cms/icons/actions/right.png +0 -0
  668. data/public/images/cms/icons/actions/root_folder.png +0 -0
  669. data/public/images/cms/icons/actions/root_link.png +0 -0
  670. data/public/images/cms/icons/actions/root_page.png +0 -0
  671. data/public/images/cms/icons/actions/undo.png +0 -0
  672. data/public/images/cms/icons/actions/up.png +0 -0
  673. data/public/images/cms/icons/actions/view.png +0 -0
  674. data/public/images/cms/icons/file_types/doc.png +0 -0
  675. data/public/images/cms/icons/file_types/file.png +0 -0
  676. data/public/images/cms/icons/file_types/gif.png +0 -0
  677. data/public/images/cms/icons/file_types/htm.png +0 -0
  678. data/public/images/cms/icons/file_types/pdf.png +0 -0
  679. data/public/images/cms/icons/file_types/ppt.png +0 -0
  680. data/public/images/cms/icons/file_types/swf.png +0 -0
  681. data/public/images/cms/icons/file_types/txt.png +0 -0
  682. data/public/images/cms/icons/file_types/xls.png +0 -0
  683. data/public/images/cms/icons/file_types/xml.png +0 -0
  684. data/public/images/cms/icons/file_types/zip.png +0 -0
  685. data/public/images/cms/icons/status/archived.gif +0 -0
  686. data/public/images/cms/icons/status/draft.gif +0 -0
  687. data/public/images/cms/icons/status/hidden.gif +0 -0
  688. data/public/images/cms/icons/status/locked.gif +0 -0
  689. data/public/images/cms/icons/status/published.gif +0 -0
  690. data/public/images/cms/icons/status/unlocked.gif +0 -0
  691. data/public/images/cms/icons/user.png +0 -0
  692. data/public/images/cms/login_bg.jpg +0 -0
  693. data/public/images/cms/login_bottom.jpg +0 -0
  694. data/public/images/cms/login_top.gif +0 -0
  695. data/public/images/cms/lt_button_bg.gif +0 -0
  696. data/public/images/cms/lt_button_l.gif +0 -0
  697. data/public/images/cms/lt_button_r.gif +0 -0
  698. data/public/images/cms/menu/block_cap_h.gif +0 -0
  699. data/public/images/cms/menu/bottom_cap.png +0 -0
  700. data/public/images/cms/menu/bottom_cap_menu.png +0 -0
  701. data/public/images/cms/menu/bottom_cap_menu_first.png +0 -0
  702. data/public/images/cms/menu/menu_header_first_bg.gif +0 -0
  703. data/public/images/cms/menu/selected_block_cap.gif +0 -0
  704. data/public/images/cms/menu/top_cap.png +0 -0
  705. data/public/images/cms/menu/top_cap_menu_header.png +0 -0
  706. data/public/images/cms/menu.png +0 -0
  707. data/public/images/cms/menu_h.gif +0 -0
  708. data/public/images/cms/menu_header.png +0 -0
  709. data/public/images/cms/menu_open.png +0 -0
  710. data/public/images/cms/menu_open_bg.gif +0 -0
  711. data/public/images/cms/nav/on_bg.gif +0 -0
  712. data/public/images/cms/nav.png +0 -0
  713. data/public/images/cms/nav_cap.png +0 -0
  714. data/public/images/cms/nav_cap_h.gif +0 -0
  715. data/public/images/cms/nav_h.gif +0 -0
  716. data/public/images/cms/page_toolbar/page_toolbar_bg.gif +0 -0
  717. data/public/images/cms/page_toolbar/page_toolbar_inset_bg.gif +0 -0
  718. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_bg.gif +0 -0
  719. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_l.gif +0 -0
  720. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_r.gif +0 -0
  721. data/public/images/cms/page_toolbar/page_toolbar_inset_l.gif +0 -0
  722. data/public/images/cms/page_toolbar/page_toolbar_inset_published_bg.gif +0 -0
  723. data/public/images/cms/page_toolbar/page_toolbar_inset_published_l.gif +0 -0
  724. data/public/images/cms/page_toolbar/page_toolbar_inset_published_r.gif +0 -0
  725. data/public/images/cms/page_toolbar/page_toolbar_inset_r.gif +0 -0
  726. data/public/images/cms/page_toolbar/page_toolbar_l.gif +0 -0
  727. data/public/images/cms/page_toolbar/page_toolbar_r.gif +0 -0
  728. data/public/images/cms/page_toolbar/status_draft_bg.gif +0 -0
  729. data/public/images/cms/page_toolbar/status_draft_l.gif +0 -0
  730. data/public/images/cms/page_toolbar/status_l.gif +0 -0
  731. data/public/images/cms/page_toolbar/status_published_bg.gif +0 -0
  732. data/public/images/cms/page_toolbar/status_published_l.gif +0 -0
  733. data/public/images/cms/page_toolbar/visual_editor_bg.gif +0 -0
  734. data/public/images/cms/page_toolbar/visual_editor_end.gif +0 -0
  735. data/public/images/cms/page_toolbar/visual_editor_r.gif +0 -0
  736. data/public/images/cms/page_toolbar/visual_editor_state_bg.gif +0 -0
  737. data/public/images/cms/pages/add_connectable.gif +0 -0
  738. data/public/images/cms/pages/connect_connectable.gif +0 -0
  739. data/public/images/cms/pages/container_border.gif +0 -0
  740. data/public/images/cms/pages/container_border_l.gif +0 -0
  741. data/public/images/cms/pages/container_border_r.gif +0 -0
  742. data/public/images/cms/pages/delete_connectable.gif +0 -0
  743. data/public/images/cms/pages/down_connectable.gif +0 -0
  744. data/public/images/cms/pages/down_connectable_disabled.gif +0 -0
  745. data/public/images/cms/pages/edit_connectable.gif +0 -0
  746. data/public/images/cms/pages/edit_connectable_2.gif +0 -0
  747. data/public/images/cms/pages/show_connectable.gif +0 -0
  748. data/public/images/cms/pages/up_connectable.gif +0 -0
  749. data/public/images/cms/pages/up_connectable_disabled.gif +0 -0
  750. data/public/images/cms/pagination/first.gif +0 -0
  751. data/public/images/cms/pagination/first_h.gif +0 -0
  752. data/public/images/cms/pagination/input.gif +0 -0
  753. data/public/images/cms/pagination/last.gif +0 -0
  754. data/public/images/cms/pagination/last_h.gif +0 -0
  755. data/public/images/cms/pagination/next.gif +0 -0
  756. data/public/images/cms/pagination/next_h.gif +0 -0
  757. data/public/images/cms/pagination/previous.gif +0 -0
  758. data/public/images/cms/pagination/previous_h.gif +0 -0
  759. data/public/images/cms/published_status.gif +0 -0
  760. data/public/images/cms/search.png +0 -0
  761. data/public/images/cms/search_submit.gif +0 -0
  762. data/public/images/cms/search_submit_h.gif +0 -0
  763. data/public/images/cms/searchbox_gradient.gif +0 -0
  764. data/public/images/cms/select_bg.gif +0 -0
  765. data/public/images/cms/select_bg_2.gif +0 -0
  766. data/public/images/cms/sitemap/bottom_cap.png +0 -0
  767. data/public/images/cms/sitemap/buffer_caps.png +0 -0
  768. data/public/images/cms/sitemap/contract.png +0 -0
  769. data/public/images/cms/sitemap/corners.gif +0 -0
  770. data/public/images/cms/sitemap/corners_hover.gif +0 -0
  771. data/public/images/cms/sitemap/divider.gif +0 -0
  772. data/public/images/cms/sitemap/expand.png +0 -0
  773. data/public/images/cms/sitemap/gradient.gif +0 -0
  774. data/public/images/cms/sitemap/gray_contract.png +0 -0
  775. data/public/images/cms/sitemap/gray_expand.png +0 -0
  776. data/public/images/cms/sitemap/no_contents.png +0 -0
  777. data/public/images/cms/sitemap/site_root_cap.png +0 -0
  778. data/public/images/cms/sitemap/tooltip.gif +0 -0
  779. data/public/images/cms/sitemap/top_cap_content.png +0 -0
  780. data/public/images/cms/solid.gif +0 -0
  781. data/public/images/cms/table/bl.gif +0 -0
  782. data/public/images/cms/table/br.gif +0 -0
  783. data/public/images/cms/table/divider.gif +0 -0
  784. data/public/images/cms/table/td_cap_first_h.gif +0 -0
  785. data/public/images/cms/table/td_cap_first_s.gif +0 -0
  786. data/public/images/cms/table/td_cap_last_h.gif +0 -0
  787. data/public/images/cms/table/td_cap_last_s.gif +0 -0
  788. data/public/images/cms/table/td_last_bg.gif +0 -0
  789. data/public/images/cms/table/th_bg.gif +0 -0
  790. data/public/images/cms/table/th_divider.gif +0 -0
  791. data/public/images/cms/table/th_last_bg.gif +0 -0
  792. data/public/images/cms/table/tl.gif +0 -0
  793. data/public/images/cms/table/tr.gif +0 -0
  794. data/public/images/cms/table/tr_bg.gif +0 -0
  795. data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
  796. data/public/images/cms/thickbox/macFFBgHack.png +0 -0
  797. data/public/images/cms/toolbar_bg.png +0 -0
  798. data/public/images/cms/top_cap.png +0 -0
  799. data/public/images/cms/top_cap_content.png +0 -0
  800. data/public/images/cms/top_cap_menu_header.png +0 -0
  801. data/public/images/cms/user_search_submit.gif +0 -0
  802. data/public/images/cms/usercontrols_bg.png +0 -0
  803. data/public/images/cms/usercontrols_bg_cap.png +0 -0
  804. data/public/javascripts/cms/application.js +145 -0
  805. data/public/javascripts/cms/editor.js +56 -0
  806. data/public/javascripts/cms/sitemap.js +426 -0
  807. data/public/javascripts/jquery-ui.js +591 -0
  808. data/public/javascripts/jquery.contextMenu.js +211 -0
  809. data/public/javascripts/jquery.cookie.js +96 -0
  810. data/public/javascripts/jquery.dimensions.js +119 -0
  811. data/public/javascripts/jquery.js +11 -0
  812. data/public/javascripts/jquery.selectbox-0.5.js +209 -0
  813. data/public/javascripts/jquery.taglist.js +136 -0
  814. data/public/javascripts/jquery.thickbox.js +10 -0
  815. data/public/site/customconfig.js +1 -0
  816. data/public/stylesheets/cms/administration.css +91 -0
  817. data/public/stylesheets/cms/application.css +166 -0
  818. data/public/stylesheets/cms/block.css +26 -0
  819. data/public/stylesheets/cms/buttons.css +111 -0
  820. data/public/stylesheets/cms/content_library.css +138 -0
  821. data/public/stylesheets/cms/content_types.css +4 -0
  822. data/public/stylesheets/cms/dashboard.css +118 -0
  823. data/public/stylesheets/cms/data_table.css +156 -0
  824. data/public/stylesheets/cms/date_picker.css +73 -0
  825. data/public/stylesheets/cms/form_layout.css +255 -0
  826. data/public/stylesheets/cms/jquery.contextMenu.css +61 -0
  827. data/public/stylesheets/cms/login.css +78 -0
  828. data/public/stylesheets/cms/menu.css +116 -0
  829. data/public/stylesheets/cms/nav.css +111 -0
  830. data/public/stylesheets/cms/page_toolbar.css +135 -0
  831. data/public/stylesheets/cms/reset.css +46 -0
  832. data/public/stylesheets/cms/selectbox.css +56 -0
  833. data/public/stylesheets/cms/sitemap.css +374 -0
  834. data/public/stylesheets/cms/taglist.css +18 -0
  835. data/public/stylesheets/cms/thickbox.css +163 -0
  836. data/public/themes/blue_steel/images/logo.jpg +0 -0
  837. data/public/themes/blue_steel/images/splash.jpg +0 -0
  838. data/public/themes/blue_steel/stylesheets/style.css +257 -0
  839. data/rails/init.rb +3 -0
  840. data/rails_generators/browser_cms/USAGE +2 -0
  841. data/rails_generators/browser_cms/browser_cms_generator.rb +35 -0
  842. data/rails_generators/browser_cms/templates/README +1 -0
  843. data/rails_generators/browser_cms_demo_site/USAGE +1 -0
  844. data/rails_generators/browser_cms_demo_site/browser_cms_demo_site_generator.rb +62 -0
  845. data/rails_generators/browser_cms_demo_site/templates/migration.rb +21 -0
  846. data/rails_generators/content_block/USAGE +19 -0
  847. data/rails_generators/content_block/content_block_generator.rb +62 -0
  848. data/rails_generators/content_block/templates/_form.html.erb +16 -0
  849. data/rails_generators/content_block/templates/content_block.rb +27 -0
  850. data/rails_generators/content_block/templates/controller.rb +2 -0
  851. data/rails_generators/content_block/templates/migration.rb +37 -0
  852. data/rails_generators/content_block/templates/render.html.erb +10 -0
  853. data/rails_generators/portlet/USAGE +14 -0
  854. data/rails_generators/portlet/portlet_generator.rb +27 -0
  855. data/rails_generators/portlet/templates/_form.html.erb +1 -0
  856. data/rails_generators/portlet/templates/portlet.rb +7 -0
  857. data/rails_generators/portlet/templates/render.html.erb +1 -0
  858. data/test/custom_assertions.rb +68 -0
  859. data/test/factories.rb +109 -0
  860. data/test/functional/cms/cache_controller_test.rb +14 -0
  861. data/test/functional/cms/categories_controller_test.rb +25 -0
  862. data/test/functional/cms/connectors_controller_test.rb +49 -0
  863. data/test/functional/cms/content_controller_test.rb +327 -0
  864. data/test/functional/cms/content_types_controller_test.rb +18 -0
  865. data/test/functional/cms/dashboard_controller_test.rb +17 -0
  866. data/test/functional/cms/file_blocks_controller_test.rb +32 -0
  867. data/test/functional/cms/groups_controller_test.rb +50 -0
  868. data/test/functional/cms/home_controller_test.rb +156 -0
  869. data/test/functional/cms/html_blocks_controller_test.rb +146 -0
  870. data/test/functional/cms/image_blocks_controller_test.rb +62 -0
  871. data/test/functional/cms/links_controller_test.rb +49 -0
  872. data/test/functional/cms/pages_controller_test.rb +61 -0
  873. data/test/functional/cms/portlets_controller_test.rb +36 -0
  874. data/test/functional/cms/section_nodes_controller_test.rb +44 -0
  875. data/test/functional/cms/sections_controller_test.rb +78 -0
  876. data/test/functional/cms/sessions_controller_test.rb +52 -0
  877. data/test/functional/cms/users_controller_test.rb +184 -0
  878. data/test/integration/login_test.rb +14 -0
  879. data/test/test_helper.rb +159 -0
  880. data/test/test_logging.rb +64 -0
  881. data/test/unit/behaviors/attaching_test.rb +355 -0
  882. data/test/unit/behaviors/dynamic_attributes_test.rb +38 -0
  883. data/test/unit/behaviors/publishable_test.rb +64 -0
  884. data/test/unit/behaviors/searching_test.rb +57 -0
  885. data/test/unit/behaviors/taggable_test.rb +90 -0
  886. data/test/unit/extensions/active_record/base_test.rb +10 -0
  887. data/test/unit/extensions/hash_test.rb +17 -0
  888. data/test/unit/extensions/integer_test.rb +10 -0
  889. data/test/unit/helpers/application_helper_test.rb +29 -0
  890. data/test/unit/helpers/menu_helper_test.rb +305 -0
  891. data/test/unit/helpers/page_helper_test.rb +57 -0
  892. data/test/unit/lib/content_block_test.rb +170 -0
  893. data/test/unit/models/attachment_test.rb +94 -0
  894. data/test/unit/models/category_test.rb +40 -0
  895. data/test/unit/models/category_type_test.rb +8 -0
  896. data/test/unit/models/connector_test.rb +92 -0
  897. data/test/unit/models/content_type_test.rb +23 -0
  898. data/test/unit/models/email_page_portlet_test.rb +14 -0
  899. data/test/unit/models/file_block_test.rb +177 -0
  900. data/test/unit/models/group_test.rb +7 -0
  901. data/test/unit/models/html_block_test.rb +104 -0
  902. data/test/unit/models/link_test.rb +8 -0
  903. data/test/unit/models/page_partial_test.rb +29 -0
  904. data/test/unit/models/page_route_test.rb +29 -0
  905. data/test/unit/models/page_template_test.rb +35 -0
  906. data/test/unit/models/page_test.rb +679 -0
  907. data/test/unit/models/permission_test.rb +10 -0
  908. data/test/unit/models/portlet_test.rb +11 -0
  909. data/test/unit/models/section_node_test.rb +92 -0
  910. data/test/unit/models/sections_test.rb +121 -0
  911. data/test/unit/models/site_test.rb +50 -0
  912. data/test/unit/models/task_test.rb +126 -0
  913. data/test/unit/models/user_test.rb +130 -0
  914. metadata +965 -0
@@ -0,0 +1,252 @@
1
+ module ActsAsList
2
+ def self.included(base)
3
+ base.extend(ClassMethods)
4
+ end
5
+
6
+ # This +acts_as+ extension provides the capabilities for sorting and reordering a number of objects in a list.
7
+ # The class that has this specified needs to have a +position+ column defined as an integer on
8
+ # the mapped database table.
9
+ #
10
+ # Todo list example:
11
+ #
12
+ # class TodoList < ActiveRecord::Base
13
+ # has_many :todo_items, :order => "position"
14
+ # end
15
+ #
16
+ # class TodoItem < ActiveRecord::Base
17
+ # belongs_to :todo_list
18
+ # acts_as_list :scope => :todo_list
19
+ # end
20
+ #
21
+ # todo_list.first.move_to_bottom
22
+ # todo_list.last.move_higher
23
+ module ClassMethods
24
+ # Configuration options are:
25
+ #
26
+ # * +column+ - specifies the column name to use for keeping the position integer (default: +position+)
27
+ # * +scope+ - restricts what is to be considered a list. Given a symbol, it'll attach <tt>_id</tt>
28
+ # (if it hasn't already been added) and use that as the foreign key restriction. It's also possible
29
+ # to give it an entire string that is interpolated if you need a tighter scope than just a foreign key.
30
+ # Example: <tt>acts_as_list :scope => 'todo_list_id = #{todo_list_id} AND completed = 0'</tt>
31
+ def acts_as_list(options = {})
32
+ configuration = { :column => "position", :scope => "1 = 1" }
33
+ configuration.update(options) if options.is_a?(Hash)
34
+
35
+ configuration[:scope] = "#{configuration[:scope]}_id".intern if configuration[:scope].is_a?(Symbol) && configuration[:scope].to_s !~ /_id$/
36
+
37
+ if configuration[:scope].is_a?(Symbol)
38
+ scope_condition_method = %(
39
+ def scope_condition
40
+ if #{configuration[:scope].to_s}.nil?
41
+ "#{configuration[:scope].to_s} IS NULL"
42
+ else
43
+ "#{configuration[:scope].to_s} = \#{#{configuration[:scope].to_s}}"
44
+ end
45
+ end
46
+ )
47
+ else
48
+ scope_condition_method = "def scope_condition() \"#{configuration[:scope]}\" end"
49
+ end
50
+
51
+ class_eval <<-EOV
52
+ include ActsAsList::InstanceMethods
53
+
54
+ def acts_as_list_class
55
+ ::#{self.name}
56
+ end
57
+
58
+ def position_column
59
+ '#{configuration[:column]}'
60
+ end
61
+
62
+ #{scope_condition_method}
63
+
64
+ before_destroy :remove_from_list
65
+ before_create :add_to_list_bottom
66
+ EOV
67
+ end
68
+ end
69
+
70
+ # All the methods available to a record that has had <tt>acts_as_list</tt> specified. Each method works
71
+ # by assuming the object to be the item in the list, so <tt>chapter.move_lower</tt> would move that chapter
72
+ # lower in the list of all chapters. Likewise, <tt>chapter.first?</tt> would return +true+ if that chapter is
73
+ # the first in the list of all chapters.
74
+ module InstanceMethods
75
+ # Insert the item at the given position (defaults to the top position of 1).
76
+ def insert_at(position = 1)
77
+ insert_at_position(position)
78
+ end
79
+
80
+ # Swap positions with the next lower item, if one exists.
81
+ def move_lower
82
+ lower = lower_item
83
+ return unless lower
84
+ acts_as_list_class.transaction do
85
+ self.update_attribute(position_column, lower.send(position_column))
86
+ lower.decrement_position
87
+ end
88
+ end
89
+
90
+ # Swap positions with the next higher item, if one exists.
91
+ def move_higher
92
+ higher = higher_item
93
+ return unless higher
94
+ acts_as_list_class.transaction do
95
+ self.update_attribute(position_column, higher.send(position_column))
96
+ higher.increment_position
97
+ end
98
+ end
99
+
100
+ # Move to the bottom of the list. If the item is already in the list, the items below it have their
101
+ # position adjusted accordingly.
102
+ def move_to_bottom
103
+ return unless in_list?
104
+ acts_as_list_class.transaction do
105
+ decrement_positions_on_lower_items
106
+ assume_bottom_position
107
+ end
108
+ end
109
+
110
+ # Move to the top of the list. If the item is already in the list, the items above it have their
111
+ # position adjusted accordingly.
112
+ def move_to_top
113
+ return unless in_list?
114
+ acts_as_list_class.transaction do
115
+ increment_positions_on_higher_items
116
+ assume_top_position
117
+ end
118
+ end
119
+
120
+ # Removes the item from the list.
121
+ def remove_from_list
122
+ if in_list?
123
+ decrement_positions_on_lower_items
124
+ update_attribute position_column, nil
125
+ end
126
+ end
127
+
128
+ # Increase the position of this item without adjusting the rest of the list.
129
+ def increment_position
130
+ return unless in_list?
131
+ update_attribute position_column, self.send(position_column).to_i + 1
132
+ end
133
+
134
+ # Decrease the position of this item without adjusting the rest of the list.
135
+ def decrement_position
136
+ return unless in_list?
137
+ update_attribute position_column, self.send(position_column).to_i - 1
138
+ end
139
+
140
+ # Return +true+ if this object is the first in the list.
141
+ def first?
142
+ return false unless in_list?
143
+ self.send(position_column) == 1
144
+ end
145
+
146
+ # Return +true+ if this object is the last in the list.
147
+ def last?
148
+ return false unless in_list?
149
+ self.send(position_column) == bottom_position_in_list
150
+ end
151
+
152
+ # Return the next higher item in the list.
153
+ def higher_item
154
+ return nil unless in_list?
155
+ acts_as_list_class.find(:first, :conditions =>
156
+ "#{scope_condition} AND #{position_column} < #{send(position_column).to_s}", :order => "#{position_column} DESC"
157
+ )
158
+ end
159
+
160
+ # Return the next lower item in the list.
161
+ def lower_item
162
+ return nil unless in_list?
163
+ acts_as_list_class.find(:first, :conditions =>
164
+ "#{scope_condition} AND #{position_column} > #{send(position_column).to_s}", :order => "#{position_column} ASC"
165
+ )
166
+ end
167
+
168
+ # Test if this record is in a list
169
+ def in_list?
170
+ !send(position_column).nil?
171
+ end
172
+
173
+ private
174
+ def add_to_list_top
175
+ increment_positions_on_all_items
176
+ end
177
+
178
+ def add_to_list_bottom
179
+ self[position_column] = bottom_position_in_list.to_i + 1
180
+ end
181
+
182
+ # Overwrite this method to define the scope of the list changes
183
+ def scope_condition() "1" end
184
+
185
+ # Returns the bottom position number in the list.
186
+ # bottom_position_in_list # => 2
187
+ def bottom_position_in_list(except = nil)
188
+ item = bottom_item(except)
189
+ item ? item.send(position_column) : 0
190
+ end
191
+
192
+ # Returns the bottom item
193
+ def bottom_item(except = nil)
194
+ conditions = scope_condition
195
+ conditions = "#{conditions} AND #{self.class.primary_key} != #{except.id}" if except
196
+ acts_as_list_class.find(:first, :conditions => conditions, :order => "#{position_column} DESC")
197
+ end
198
+
199
+ # Forces item to assume the bottom position in the list.
200
+ def assume_bottom_position
201
+ update_attribute(position_column, bottom_position_in_list(self).to_i + 1)
202
+ end
203
+
204
+ # Forces item to assume the top position in the list.
205
+ def assume_top_position
206
+ update_attribute(position_column, 1)
207
+ end
208
+
209
+ # This has the effect of moving all the higher items up one.
210
+ def decrement_positions_on_higher_items(position)
211
+ acts_as_list_class.update_all(
212
+ "#{position_column} = (#{position_column} - 1)", "#{scope_condition} AND #{position_column} <= #{position}"
213
+ )
214
+ end
215
+
216
+ # This has the effect of moving all the lower items up one.
217
+ def decrement_positions_on_lower_items
218
+ return unless in_list?
219
+ acts_as_list_class.update_all(
220
+ "#{position_column} = (#{position_column} - 1)", "#{scope_condition} AND #{position_column} > #{send(position_column).to_i}"
221
+ )
222
+ end
223
+
224
+ # This has the effect of moving all the higher items down one.
225
+ def increment_positions_on_higher_items
226
+ return unless in_list?
227
+ acts_as_list_class.update_all(
228
+ "#{position_column} = (#{position_column} + 1)", "#{scope_condition} AND #{position_column} < #{send(position_column).to_i}"
229
+ )
230
+ end
231
+
232
+ # This has the effect of moving all the lower items down one.
233
+ def increment_positions_on_lower_items(position)
234
+ acts_as_list_class.update_all(
235
+ "#{position_column} = (#{position_column} + 1)", "#{scope_condition} AND #{position_column} >= #{position}"
236
+ )
237
+ end
238
+
239
+ # Increments position (<tt>position_column</tt>) of all items in the list.
240
+ def increment_positions_on_all_items
241
+ acts_as_list_class.update_all(
242
+ "#{position_column} = (#{position_column} + 1)", "#{scope_condition}"
243
+ )
244
+ end
245
+
246
+ def insert_at_position(position)
247
+ remove_from_list
248
+ increment_positions_on_lower_items(position)
249
+ self.update_attribute(position_column, position)
250
+ end
251
+ end
252
+ end
@@ -0,0 +1,12 @@
1
+ require 'cms/extensions'
2
+ require 'cms/init'
3
+ require 'cms/routes'
4
+ require 'cms/caching'
5
+
6
+ #Load libraries that are included with CMS
7
+ require 'acts_as_list'
8
+ ActiveRecord::Base.send(:include, ActsAsList)
9
+
10
+ #Include CMS Behaviors
11
+ ActiveRecord::Base.send(:include, Cms::Acts::ContentBlock)
12
+ require 'cms/behaviors'
@@ -0,0 +1,31 @@
1
+ module Cms
2
+ module Acts
3
+ module ContentBlock
4
+ def self.included(model_class)
5
+ model_class.extend(MacroMethods)
6
+ end
7
+ module MacroMethods
8
+ def acts_as_content_block(options={})
9
+ belongs_to_attachment(options[:belongs_to_attachment].is_a?(Hash) ? options[:belongs_to_attachment] : {}) if options[:belongs_to_attachment]
10
+ is_archivable(options[:archiveable].is_a?(Hash) ? options[:archiveable] : {}) unless options[:archiveable] == false
11
+ is_connectable(options[:connectable].is_a?(Hash) ? options[:connectable] : {}) unless options[:connectable] == false
12
+ flush_cache_on_change(options[:flush_cache_on_change].is_a?(Hash) ? options[:flush_cache_on_change] : {}) unless options[:flush_cache_on_change] == false
13
+ is_renderable({:instance_variable_name_for_view => "@content_block"}.merge(options[:renderable].is_a?(Hash) ? options[:renderable] : {})) unless options[:renderable] == false
14
+ is_publishable(options[:publishable].is_a?(Hash) ? options[:publishable] : {}) unless options[:publishable] == false
15
+ is_searchable(options[:searchable].is_a?(Hash) ? options[:searchable] : {}) unless options[:searchable] == false
16
+ uses_soft_delete(options[:soft_delete].is_a?(Hash) ? options[:soft_delete] : {}) unless options[:soft_delete] == false
17
+ is_taggable(options[:taggable].is_a?(Hash) ? options[:taggable] : {}) if options[:taggable]
18
+ is_userstamped(options[:userstamped].is_a?(Hash) ? options[:userstamped] : {}) unless options[:userstamped] == false
19
+ is_versioned(options[:versioned].is_a?(Hash) ? options[:versioned] : {}) unless options[:versioned] == false
20
+
21
+ include InstanceMethods
22
+ end
23
+ module InstanceMethods
24
+ def to_s
25
+ "#{self.class.name.titleize} '#{name}'"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,194 @@
1
+ module Cms
2
+ module Authentication
3
+ module Controller
4
+ protected
5
+ # Returns true or false if the user is logged in.
6
+ # Preloads User.current with the user model if they're logged in.
7
+ def logged_in?
8
+ !current_user.nil? && !current_user.guest?
9
+ end
10
+
11
+ # Accesses the current user from the session.
12
+ # If the user is not logged in, this will be set to the guest user
13
+ def current_user
14
+ @current_user ||= begin
15
+ User.current = (login_from_session || login_from_cookie || User.guest)
16
+ end
17
+ end
18
+
19
+ # Store the given user id in the session.
20
+ def current_user=(new_user)
21
+ session[:user_id] = new_user ? new_user.id : nil
22
+ @current_user = new_user || false
23
+ @current_user = User.current
24
+ end
25
+
26
+ # Check if the user is authorized
27
+ #
28
+ # Override this method in your controllers if you want to restrict access
29
+ # to only a few actions or if you want to check if the user
30
+ # has the correct rights.
31
+ #
32
+ # Example:
33
+ #
34
+ # # only allow nonbobs
35
+ # def authorized?
36
+ # current_user.login != "bob"
37
+ # end
38
+ #
39
+ def authorized?(action=nil, resource=nil, *args)
40
+ logged_in?
41
+ end
42
+
43
+ # Filter method to enforce a login requirement.
44
+ #
45
+ # To require logins for all actions, use this in your controllers:
46
+ #
47
+ # before_filter :login_required
48
+ #
49
+ # To require logins for specific actions, use this in your controllers:
50
+ #
51
+ # before_filter :login_required, :only => [ :edit, :update ]
52
+ #
53
+ # To skip this in a subclassed controller:
54
+ #
55
+ # skip_before_filter :login_required
56
+ #
57
+ def login_required
58
+ authorized? || access_denied
59
+ end
60
+
61
+ # Redirect as appropriate when an access request fails.
62
+ #
63
+ # The default action is to redirect to the login screen.
64
+ #
65
+ # Override this method in your controllers if you want to have special
66
+ # behavior in case the user is not authorized
67
+ # to access the requested action. For example, a popup window might
68
+ # simply close itself.
69
+ def access_denied
70
+ respond_to do |format|
71
+ format.html do
72
+ store_location
73
+ redirect_to cms_login_path
74
+ end
75
+ # format.any doesn't work in rails version < http://dev.rubyonrails.org/changeset/8987
76
+ # you may want to change format.any to e.g. format.any(:js, :xml)
77
+ # format.any do
78
+ # request_http_basic_authentication 'Web Password'
79
+ # end
80
+ end
81
+ end
82
+
83
+ # Store the URI of the current request in the session.
84
+ #
85
+ # We can return to this location by calling #redirect_back_or_default.
86
+ def store_location
87
+ session[:return_to] = request.request_uri
88
+ end
89
+
90
+ # Redirect to the URI stored by the most recent store_location call or
91
+ # to the passed default. Set an appropriately modified
92
+ # after_filter :store_location, :only => [:index, :new, :show, :edit]
93
+ # for any controller you want to be bounce-backable.
94
+ def redirect_back_or_default(default)
95
+ redirect_to(session[:return_to] || default)
96
+ session[:return_to] = nil
97
+ end
98
+
99
+ # Inclusion hook to make #current_user and #logged_in?
100
+ # available as ActionView helper methods.
101
+ def self.included(base)
102
+ base.send :helper_method, :current_user, :logged_in?, :authorized? if base.respond_to? :helper_method
103
+ end
104
+
105
+ #
106
+ # Login
107
+ #
108
+
109
+ # Called from #current_user. First attempt to login by the user id stored in the session.
110
+ def login_from_session
111
+ self.current_user = User.find_by_id(session[:user_id]) if session[:user_id]
112
+ end
113
+
114
+ # Called from #current_user. Now, attempt to login by basic authentication information.
115
+ def login_from_basic_auth
116
+ authenticate_with_http_basic do |login, password|
117
+ self.current_user = User.authenticate(login, password)
118
+ end
119
+ end
120
+
121
+ #
122
+ # Logout
123
+ #
124
+
125
+ # Called from #current_user. Finaly, attempt to login by an expiring token in the cookie.
126
+ # for the paranoid: we _should_ be storing user_token = hash(cookie_token, request IP)
127
+ def login_from_cookie
128
+ user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
129
+ if user && user.remember_token?
130
+ self.current_user = user
131
+ handle_remember_cookie! false # freshen cookie token (keeping date)
132
+ self.current_user
133
+ end
134
+ end
135
+
136
+ # This is ususally what you want; resetting the session willy-nilly wreaks
137
+ # havoc with forgery protection, and is only strictly necessary on login.
138
+ # However, **all session state variables should be unset here**.
139
+ def logout_keeping_session!
140
+ # Kill server-side auth cookie
141
+ User.current.forget_me if User.current.is_a? User
142
+ User.current = false # not logged in, and don't do it for me
143
+ kill_remember_cookie! # Kill client-side auth cookie
144
+ session[:user_id] = nil # keeps the session but kill our variable
145
+ # explicitly kill any other session variables you set
146
+ end
147
+
148
+ # The session should only be reset at the tail end of a form POST --
149
+ # otherwise the request forgery protection fails. It's only really necessary
150
+ # when you cross quarantine (logged-out to logged-in).
151
+ def logout_killing_session!
152
+ logout_keeping_session!
153
+ reset_session
154
+ end
155
+
156
+ #
157
+ # Remember_me Tokens
158
+ #
159
+ # Cookies shouldn't be allowed to persist past their freshness date,
160
+ # and they should be changed at each login
161
+
162
+ # Cookies shouldn't be allowed to persist past their freshness date,
163
+ # and they should be changed at each login
164
+
165
+ def valid_remember_cookie?
166
+ return nil unless User.current
167
+ (User.current.remember_token?) &&
168
+ (cookies[:auth_token] == User.current.remember_token)
169
+ end
170
+
171
+ # Refresh the cookie auth token if it exists, create it otherwise
172
+ def handle_remember_cookie! new_cookie_flag
173
+ return unless User.current
174
+ case
175
+ when valid_remember_cookie? then User.current.refresh_token # keeping same expiry date
176
+ when new_cookie_flag then User.current.remember_me
177
+ else User.current.forget_me
178
+ end
179
+ send_remember_cookie!
180
+ end
181
+
182
+ def kill_remember_cookie!
183
+ cookies.delete :auth_token
184
+ end
185
+
186
+ def send_remember_cookie!
187
+ cookies[:auth_token] = {
188
+ :value => User.current.remember_token,
189
+ :expires => User.current.remember_token_expires_at }
190
+ end
191
+
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,116 @@
1
+ module Cms
2
+ module Authentication
3
+ module Model
4
+ def self.included(model_class)
5
+ model_class.extend ClassMethods
6
+ model_class.class_eval do
7
+ include InstanceMethods
8
+
9
+ # Virtual attribute for the unencrypted password
10
+ attr_accessor :password
11
+ validates_presence_of :password, :if => :password_required?
12
+ validates_presence_of :password_confirmation, :if => :password_required?
13
+ validates_confirmation_of :password, :if => :password_required?
14
+ #validates_length_of :password, :within => 6..40, :if => :password_required?
15
+ before_save :encrypt_password
16
+ end
17
+ end
18
+
19
+ module ClassMethods
20
+ def authenticate(login, password)
21
+ u = find_by_login(login) # need to get the salt
22
+ u && u.authenticated?(password) && !u.expired? ? u : nil
23
+ end
24
+
25
+ #Method to make it easy to change a user's password from the console, not used in the app
26
+ def change_password(login, new_password)
27
+ find_by_login(login).change_password(new_password)
28
+ end
29
+
30
+ def make_token
31
+ secure_digest(Time.now, (1..10).map{ rand.to_s })
32
+ end
33
+
34
+ def password_digest(password, salt)
35
+ key = '8771d0d9bef6f1091b723d2e701a17c811d69b26'
36
+ digest = key
37
+ 10.times do
38
+ digest = secure_digest(digest, salt, password, key)
39
+ end
40
+ digest
41
+ end
42
+
43
+ def secure_digest(*args)
44
+ Digest::SHA1.hexdigest(args.flatten.join('--'))
45
+ end
46
+
47
+ end
48
+
49
+ module InstanceMethods
50
+ #Method to make it easy to change a user's password from the console, not used in the app
51
+ def change_password(new_password)
52
+ update_attributes(:password => new_password, :password_confirmation => new_password)
53
+ end
54
+
55
+ # Encrypts the password with the user salt
56
+ def encrypt(password)
57
+ self.class.password_digest(password, salt)
58
+ end
59
+
60
+ def authenticated?(password)
61
+ crypted_password == encrypt(password)
62
+ end
63
+
64
+ # before filter
65
+ def encrypt_password
66
+ return if password.blank?
67
+ self.salt = self.class.make_token if new_record?
68
+ self.crypted_password = encrypt(password)
69
+ end
70
+
71
+ def password_required?
72
+ crypted_password.blank? || !password.blank?
73
+ end
74
+
75
+ def remember_token?
76
+ (!remember_token.blank?) &&
77
+ remember_token_expires_at && (Time.now.utc < remember_token_expires_at.utc)
78
+ end
79
+
80
+ # These create and unset the fields required for remembering users between browser closes
81
+ def remember_me
82
+ remember_me_for 2.weeks
83
+ end
84
+
85
+ def remember_me_for(time)
86
+ remember_me_until time.from_now.utc
87
+ end
88
+
89
+ def remember_me_until(time)
90
+ self.remember_token_expires_at = time
91
+ self.remember_token = self.class.make_token
92
+ save
93
+ end
94
+
95
+ # refresh token (keeping same expires_at) if it exists
96
+ def refresh_token
97
+ if remember_token?
98
+ self.remember_token = self.class.make_token
99
+ save
100
+ end
101
+ end
102
+
103
+ #
104
+ # Deletes the server-side record of the authentication token. The
105
+ # client-side (browser cookie) and server-side (this remember_token) must
106
+ # always be deleted together.
107
+ #
108
+ def forget_me
109
+ self.remember_token_expires_at = nil
110
+ self.remember_token = nil
111
+ save
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,43 @@
1
+ module Cms
2
+ module Behaviors
3
+ module Archiving
4
+ def self.included(model_class)
5
+ model_class.extend(MacroMethods)
6
+ end
7
+ module MacroMethods
8
+ def archivable?
9
+ !!@is_archivable
10
+ end
11
+ def is_archivable(options={})
12
+ @is_archivable = true
13
+ include InstanceMethods
14
+
15
+ named_scope :archived, :conditions => {:archived => true}
16
+ named_scope :not_archived, :conditions => {:archived => false}
17
+ end
18
+ end
19
+ module InstanceMethods
20
+ def archive
21
+ self.archived = true
22
+ self.version_comment = "Archived"
23
+ self.save
24
+ end
25
+ def archive!
26
+ self.archived = true
27
+ self.version_comment = "Archived"
28
+ self.save!
29
+ end
30
+ def unarchive
31
+ self.archived = false
32
+ self.version_comment = "Unarchived"
33
+ self.save
34
+ end
35
+ def unarchive!
36
+ self.archived = false
37
+ self.version_comment = "Unarchived"
38
+ self.save!
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end