we5-browsercms 3.0.1.1

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 (1274) 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 +173 -0
  43. data/app/helpers/cms/form_builder.rb +101 -0
  44. data/app/helpers/cms/form_tag_helper.rb +32 -0
  45. data/app/helpers/cms/menu_helper.rb +186 -0
  46. data/app/helpers/cms/page_helper.rb +68 -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/helpers/cms/template_support.rb +21 -0
  50. data/app/models/abstract_file_block.rb +17 -0
  51. data/app/models/attachment.rb +193 -0
  52. data/app/models/category.rb +40 -0
  53. data/app/models/category_type.rb +34 -0
  54. data/app/models/connector.rb +80 -0
  55. data/app/models/content_type.rb +95 -0
  56. data/app/models/content_type_group.rb +3 -0
  57. data/app/models/dynamic_view.rb +80 -0
  58. data/app/models/email_message.rb +31 -0
  59. data/app/models/email_message_mailer.rb +11 -0
  60. data/app/models/file_block.rb +21 -0
  61. data/app/models/group.rb +30 -0
  62. data/app/models/group_permission.rb +7 -0
  63. data/app/models/group_section.rb +4 -0
  64. data/app/models/group_type.rb +12 -0
  65. data/app/models/group_type_permission.rb +4 -0
  66. data/app/models/guest_user.rb +39 -0
  67. data/app/models/html_block.rb +40 -0
  68. data/app/models/image_block.rb +22 -0
  69. data/app/models/link.rb +35 -0
  70. data/app/models/page.rb +275 -0
  71. data/app/models/page_partial.rb +22 -0
  72. data/app/models/page_route.rb +58 -0
  73. data/app/models/page_route_condition.rb +2 -0
  74. data/app/models/page_route_option.rb +3 -0
  75. data/app/models/page_route_requirement.rb +2 -0
  76. data/app/models/page_template.rb +48 -0
  77. data/app/models/permission.rb +10 -0
  78. data/app/models/portlet.rb +157 -0
  79. data/app/models/redirect.rb +4 -0
  80. data/app/models/section.rb +142 -0
  81. data/app/models/section_node.rb +93 -0
  82. data/app/models/site.rb +41 -0
  83. data/app/models/tag.rb +62 -0
  84. data/app/models/tagging.rb +9 -0
  85. data/app/models/task.rb +67 -0
  86. data/app/models/user.rb +125 -0
  87. data/app/models/user_group_membership.rb +4 -0
  88. data/app/portlets/dynamic_portlet.rb +7 -0
  89. data/app/portlets/email_page_portlet.rb +24 -0
  90. data/app/portlets/login_portlet.rb +10 -0
  91. data/app/portlets/tag_cloud_portlet.rb +13 -0
  92. data/app/views/cms/blocks/_hidden_fields.html.erb +10 -0
  93. data/app/views/cms/blocks/_toolbar.html.erb +9 -0
  94. data/app/views/cms/blocks/_toolbar_for_collection.html.erb +26 -0
  95. data/app/views/cms/blocks/_toolbar_for_member.html.erb +38 -0
  96. data/app/views/cms/blocks/edit.html.erb +25 -0
  97. data/app/views/cms/blocks/index.html.erb +123 -0
  98. data/app/views/cms/blocks/new.html.erb +21 -0
  99. data/app/views/cms/blocks/show.html.erb +40 -0
  100. data/app/views/cms/blocks/usages.html.erb +44 -0
  101. data/app/views/cms/blocks/versions.html.erb +90 -0
  102. data/app/views/cms/cache/show.html.erb +12 -0
  103. data/app/views/cms/categories/_form.html.erb +36 -0
  104. data/app/views/cms/category_types/_form.html.erb +1 -0
  105. data/app/views/cms/connectors/new.html.erb +71 -0
  106. data/app/views/cms/content/no_page.html.erb +37 -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 +52 -0
  115. data/app/views/cms/dynamic_views/new.html.erb +3 -0
  116. data/app/views/cms/email_messages/index.html.erb +39 -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_datetime_select.html.erb +12 -0
  122. data/app/views/cms/form_builder/_cms_drop_down.html.erb +19 -0
  123. data/app/views/cms/form_builder/_cms_file_field.html.erb +32 -0
  124. data/app/views/cms/form_builder/_cms_tag_list.html.erb +15 -0
  125. data/app/views/cms/form_builder/_cms_text_area.html.erb +13 -0
  126. data/app/views/cms/form_builder/_cms_text_editor.html.erb +18 -0
  127. data/app/views/cms/form_builder/_cms_text_field.html.erb +12 -0
  128. data/app/views/cms/groups/_form.html.erb +45 -0
  129. data/app/views/cms/groups/_permissions.html.erb +37 -0
  130. data/app/views/cms/groups/_sections.html.erb +19 -0
  131. data/app/views/cms/groups/edit.html.erb +4 -0
  132. data/app/views/cms/groups/index.html.erb +58 -0
  133. data/app/views/cms/groups/new.html.erb +4 -0
  134. data/app/views/cms/html_blocks/_form.html.erb +3 -0
  135. data/app/views/cms/html_blocks/render.html.erb +1 -0
  136. data/app/views/cms/image_blocks/_form.html.erb +30 -0
  137. data/app/views/cms/image_blocks/render.html.erb +1 -0
  138. data/app/views/cms/links/_form.html.erb +13 -0
  139. data/app/views/cms/links/destroy.js.rjs +2 -0
  140. data/app/views/cms/links/edit.html.erb +14 -0
  141. data/app/views/cms/links/new.html.erb +15 -0
  142. data/app/views/cms/page_routes/_form.html.erb +11 -0
  143. data/app/views/cms/page_routes/edit.html.erb +3 -0
  144. data/app/views/cms/page_routes/index.html.erb +56 -0
  145. data/app/views/cms/page_routes/new.html.erb +3 -0
  146. data/app/views/cms/page_routes/show.html.erb +14 -0
  147. data/app/views/cms/pages/_edit_connector.html.erb +19 -0
  148. data/app/views/cms/pages/_edit_container.html.erb +11 -0
  149. data/app/views/cms/pages/_form.html.erb +46 -0
  150. data/app/views/cms/pages/edit.html.erb +23 -0
  151. data/app/views/cms/pages/new.html.erb +33 -0
  152. data/app/views/cms/pages/versions.html.erb +91 -0
  153. data/app/views/cms/redirects/_form.html.erb +15 -0
  154. data/app/views/cms/redirects/edit.html.erb +3 -0
  155. data/app/views/cms/redirects/index.html.erb +50 -0
  156. data/app/views/cms/redirects/new.html.erb +3 -0
  157. data/app/views/cms/routes/index.html.erb +40 -0
  158. data/app/views/cms/section_nodes/_link.html.erb +11 -0
  159. data/app/views/cms/section_nodes/_node.html.erb +34 -0
  160. data/app/views/cms/section_nodes/_page.html.erb +14 -0
  161. data/app/views/cms/section_nodes/_section.html.erb +12 -0
  162. data/app/views/cms/section_nodes/_section_node.html.erb +10 -0
  163. data/app/views/cms/section_nodes/index.html.erb +31 -0
  164. data/app/views/cms/sections/_form.html.erb +57 -0
  165. data/app/views/cms/sections/_page.html.erb +4 -0
  166. data/app/views/cms/sections/_section.html.erb +8 -0
  167. data/app/views/cms/sections/destroy.js.rjs +2 -0
  168. data/app/views/cms/sections/edit.html.erb +10 -0
  169. data/app/views/cms/sections/file_browser.xml.builder +14 -0
  170. data/app/views/cms/sections/index.html.erb +23 -0
  171. data/app/views/cms/sections/new.html.erb +21 -0
  172. data/app/views/cms/sessions/new.html.erb +32 -0
  173. data/app/views/cms/shared/_admin_sidebar.html.erb +30 -0
  174. data/app/views/cms/shared/_exception.html.erb +6 -0
  175. data/app/views/cms/shared/_pagination.html.erb +31 -0
  176. data/app/views/cms/shared/_version_conflict_diff.html.erb +11 -0
  177. data/app/views/cms/shared/_version_conflict_error.html.erb +6 -0
  178. data/app/views/cms/shared/error.html.erb +40 -0
  179. data/app/views/cms/tags/_form.html.erb +1 -0
  180. data/app/views/cms/tags/render.html.erb +53 -0
  181. data/app/views/cms/tasks/new.html.erb +36 -0
  182. data/app/views/cms/toolbar/index.html.erb +12 -0
  183. data/app/views/cms/users/_form.html.erb +12 -0
  184. data/app/views/cms/users/_groups.html.erb +12 -0
  185. data/app/views/cms/users/_password.html.erb +8 -0
  186. data/app/views/cms/users/_toolbar.html.erb +22 -0
  187. data/app/views/cms/users/_user_fields.html.erb +20 -0
  188. data/app/views/cms/users/change_password.html.erb +19 -0
  189. data/app/views/cms/users/edit.html.erb +16 -0
  190. data/app/views/cms/users/index.html.erb +62 -0
  191. data/app/views/cms/users/new.html.erb +13 -0
  192. data/app/views/layouts/_cms_toolbar.html.erb +54 -0
  193. data/app/views/layouts/_page_toolbar.html.erb +118 -0
  194. data/app/views/layouts/application.html.erb +11 -0
  195. data/app/views/layouts/cms/_footer.erb +4 -0
  196. data/app/views/layouts/cms/_head.html.erb +21 -0
  197. data/app/views/layouts/cms/administration.html.erb +34 -0
  198. data/app/views/layouts/cms/application.html.erb +25 -0
  199. data/app/views/layouts/cms/content_library.html.erb +94 -0
  200. data/app/views/layouts/cms/dashboard.html.erb +16 -0
  201. data/app/views/layouts/cms/login.html.erb +30 -0
  202. data/app/views/layouts/cms/section_nodes.html.erb +20 -0
  203. data/app/views/layouts/cms/thickbox.html.erb +24 -0
  204. data/app/views/layouts/cms/toolbar.html.erb +23 -0
  205. data/app/views/portlets/dynamic/_form.html.erb +3 -0
  206. data/app/views/portlets/email_page/_form.html.erb +7 -0
  207. data/app/views/portlets/email_page/render.html.erb +17 -0
  208. data/app/views/portlets/login/_form.html.erb +6 -0
  209. data/app/views/portlets/login/render.html.erb +27 -0
  210. data/app/views/portlets/portlets/_form.html.erb +19 -0
  211. data/app/views/portlets/tag_cloud/_form.html.erb +4 -0
  212. data/app/views/portlets/tag_cloud/render.html.erb +5 -0
  213. data/browsercms.gemspec +1307 -0
  214. data/db/demo/data.rb +97 -0
  215. data/db/demo/page_partials/_footer.html.erb +6 -0
  216. data/db/demo/page_partials/_header.html.erb +24 -0
  217. data/db/demo/page_templates/home_page.html.erb +49 -0
  218. data/db/demo/page_templates/sub_page.html.erb +37 -0
  219. data/db/migrate/20080815014337_browsercms_3_0_0.rb +274 -0
  220. data/db/migrate/20081114172307_load_seed_data.rb +92 -0
  221. data/doc/app/classes/AbstractFileBlock.html +146 -0
  222. data/doc/app/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html +242 -0
  223. data/doc/app/classes/ActiveRecord.html +105 -0
  224. data/doc/app/classes/ActiveSupport/Cache/FileStore.html +146 -0
  225. data/doc/app/classes/ActiveSupport/Cache.html +111 -0
  226. data/doc/app/classes/ActiveSupport.html +111 -0
  227. data/doc/app/classes/ActsAsList/ClassMethods.html +202 -0
  228. data/doc/app/classes/ActsAsList/InstanceMethods.html +510 -0
  229. data/doc/app/classes/ActsAsList.html +147 -0
  230. data/doc/app/classes/ApplicationController.html +119 -0
  231. data/doc/app/classes/ApplicationHelper.html +112 -0
  232. data/doc/app/classes/Attachment.html +726 -0
  233. data/doc/app/classes/Category.html +230 -0
  234. data/doc/app/classes/CategoryType.html +214 -0
  235. data/doc/app/classes/Cms/Acts/ContentBlock/MacroMethods/InstanceMethods.html +140 -0
  236. data/doc/app/classes/Cms/Acts/ContentBlock/MacroMethods.html +165 -0
  237. data/doc/app/classes/Cms/Acts/ContentBlock.html +146 -0
  238. data/doc/app/classes/Cms/Acts.html +111 -0
  239. data/doc/app/classes/Cms/ApplicationController.html +418 -0
  240. data/doc/app/classes/Cms/ApplicationHelper.html +814 -0
  241. data/doc/app/classes/Cms/AttachmentsController.html +154 -0
  242. data/doc/app/classes/Cms/Authentication/Controller.html +702 -0
  243. data/doc/app/classes/Cms/Authentication/Model/ClassMethods.html +246 -0
  244. data/doc/app/classes/Cms/Authentication/Model/InstanceMethods.html +412 -0
  245. data/doc/app/classes/Cms/Authentication/Model.html +165 -0
  246. data/doc/app/classes/Cms/Authentication.html +116 -0
  247. data/doc/app/classes/Cms/BaseController.html +113 -0
  248. data/doc/app/classes/Cms/Behaviors/Archiving/InstanceMethods.html +220 -0
  249. data/doc/app/classes/Cms/Behaviors/Archiving/MacroMethods.html +175 -0
  250. data/doc/app/classes/Cms/Behaviors/Archiving.html +147 -0
  251. data/doc/app/classes/Cms/Behaviors/Attaching/InstanceMethods.html +670 -0
  252. data/doc/app/classes/Cms/Behaviors/Attaching/MacroMethods.html +188 -0
  253. data/doc/app/classes/Cms/Behaviors/Attaching.html +160 -0
  254. data/doc/app/classes/Cms/Behaviors/Categorizing/ClassMethods.html +105 -0
  255. data/doc/app/classes/Cms/Behaviors/Categorizing/InstanceMethods.html +140 -0
  256. data/doc/app/classes/Cms/Behaviors/Categorizing/MacroMethods.html +178 -0
  257. data/doc/app/classes/Cms/Behaviors/Categorizing.html +148 -0
  258. data/doc/app/classes/Cms/Behaviors/ClassMethods.html +272 -0
  259. data/doc/app/classes/Cms/Behaviors/Connecting/ClassMethods.html +188 -0
  260. data/doc/app/classes/Cms/Behaviors/Connecting/InstanceMethods.html +312 -0
  261. data/doc/app/classes/Cms/Behaviors/Connecting/MacroMethods.html +184 -0
  262. data/doc/app/classes/Cms/Behaviors/Connecting.html +148 -0
  263. data/doc/app/classes/Cms/Behaviors/DynamicAttributes/InstanceMethods.html +181 -0
  264. data/doc/app/classes/Cms/Behaviors/DynamicAttributes/MacroMethods.html +243 -0
  265. data/doc/app/classes/Cms/Behaviors/DynamicAttributes.html +285 -0
  266. data/doc/app/classes/Cms/Behaviors/FlushCacheOnChange/InstanceMethods.html +142 -0
  267. data/doc/app/classes/Cms/Behaviors/FlushCacheOnChange/MacroMethods.html +175 -0
  268. data/doc/app/classes/Cms/Behaviors/FlushCacheOnChange.html +178 -0
  269. data/doc/app/classes/Cms/Behaviors/Hiding/ClassMethods.html +105 -0
  270. data/doc/app/classes/Cms/Behaviors/Hiding/InstanceMethods.html +220 -0
  271. data/doc/app/classes/Cms/Behaviors/Hiding/MacroMethods.html +176 -0
  272. data/doc/app/classes/Cms/Behaviors/Hiding.html +148 -0
  273. data/doc/app/classes/Cms/Behaviors/InstanceMethods.html +234 -0
  274. data/doc/app/classes/Cms/Behaviors/Pagination/ClassMethods.html +252 -0
  275. data/doc/app/classes/Cms/Behaviors/Pagination/Collection.html +437 -0
  276. data/doc/app/classes/Cms/Behaviors/Pagination/InvalidPage.html +146 -0
  277. data/doc/app/classes/Cms/Behaviors/Pagination.html +151 -0
  278. data/doc/app/classes/Cms/Behaviors/Publishing/ClassMethods.html +105 -0
  279. data/doc/app/classes/Cms/Behaviors/Publishing/InstanceMethods.html +333 -0
  280. data/doc/app/classes/Cms/Behaviors/Publishing/MacroMethods.html +180 -0
  281. data/doc/app/classes/Cms/Behaviors/Publishing.html +179 -0
  282. data/doc/app/classes/Cms/Behaviors/Rendering/MacroMethods.html +186 -0
  283. data/doc/app/classes/Cms/Behaviors/Rendering.html +179 -0
  284. data/doc/app/classes/Cms/Behaviors/Searching/ClassMethods.html +164 -0
  285. data/doc/app/classes/Cms/Behaviors/Searching/MacroMethods.html +188 -0
  286. data/doc/app/classes/Cms/Behaviors/Searching.html +147 -0
  287. data/doc/app/classes/Cms/Behaviors/SoftDeleting/ClassMethods.html +217 -0
  288. data/doc/app/classes/Cms/Behaviors/SoftDeleting/InstanceMethods.html +247 -0
  289. data/doc/app/classes/Cms/Behaviors/SoftDeleting/MacroMethods.html +205 -0
  290. data/doc/app/classes/Cms/Behaviors/SoftDeleting.html +148 -0
  291. data/doc/app/classes/Cms/Behaviors/Taggable/ClassMethods.html +164 -0
  292. data/doc/app/classes/Cms/Behaviors/Taggable/InstanceMethods.html +197 -0
  293. data/doc/app/classes/Cms/Behaviors/Taggable/MacroMethods.html +182 -0
  294. data/doc/app/classes/Cms/Behaviors/Taggable.html +148 -0
  295. data/doc/app/classes/Cms/Behaviors/Userstamping/ClassMethods.html +105 -0
  296. data/doc/app/classes/Cms/Behaviors/Userstamping/InstanceMethods.html +143 -0
  297. data/doc/app/classes/Cms/Behaviors/Userstamping/MacroMethods.html +181 -0
  298. data/doc/app/classes/Cms/Behaviors/Userstamping.html +148 -0
  299. data/doc/app/classes/Cms/Behaviors/Versioning/ClassMethods.html +237 -0
  300. data/doc/app/classes/Cms/Behaviors/Versioning/InstanceMethods.html +685 -0
  301. data/doc/app/classes/Cms/Behaviors/Versioning/MacroMethods.html +290 -0
  302. data/doc/app/classes/Cms/Behaviors/Versioning.html +148 -0
  303. data/doc/app/classes/Cms/Behaviors.html +235 -0
  304. data/doc/app/classes/Cms/CacheController.html +174 -0
  305. data/doc/app/classes/Cms/Caching.html +171 -0
  306. data/doc/app/classes/Cms/CategoriesController.html +113 -0
  307. data/doc/app/classes/Cms/CategoryTypesController.html +148 -0
  308. data/doc/app/classes/Cms/ConnectorsController.html +215 -0
  309. data/doc/app/classes/Cms/ContentBlockController.html +1175 -0
  310. data/doc/app/classes/Cms/ContentController.html +313 -0
  311. data/doc/app/classes/Cms/ContentTypesController.html +148 -0
  312. data/doc/app/classes/Cms/DashboardController.html +151 -0
  313. data/doc/app/classes/Cms/DataLoader.html +182 -0
  314. data/doc/app/classes/Cms/DynamicViewsController.html +359 -0
  315. data/doc/app/classes/Cms/EmailMessagesController.html +172 -0
  316. data/doc/app/classes/Cms/ErrorHandling.html +172 -0
  317. data/doc/app/classes/Cms/Errors/AccessDenied.html +146 -0
  318. data/doc/app/classes/Cms/Errors.html +111 -0
  319. data/doc/app/classes/Cms/Extensions/ActionView/Base.html +141 -0
  320. data/doc/app/classes/Cms/Extensions/ActionView.html +111 -0
  321. data/doc/app/classes/Cms/Extensions/ActiveRecord/Base.html +144 -0
  322. data/doc/app/classes/Cms/Extensions/ActiveRecord/Errors.html +140 -0
  323. data/doc/app/classes/Cms/Extensions/ActiveRecord.html +116 -0
  324. data/doc/app/classes/Cms/Extensions/Hash.html +175 -0
  325. data/doc/app/classes/Cms/Extensions/Integer.html +146 -0
  326. data/doc/app/classes/Cms/Extensions/NilClass.html +212 -0
  327. data/doc/app/classes/Cms/Extensions/String.html +212 -0
  328. data/doc/app/classes/Cms/Extensions.html +140 -0
  329. data/doc/app/classes/Cms/FileBlocksController.html +113 -0
  330. data/doc/app/classes/Cms/FormBuilder.html +312 -0
  331. data/doc/app/classes/Cms/FormTagHelper.html +245 -0
  332. data/doc/app/classes/Cms/GroupsController.html +225 -0
  333. data/doc/app/classes/Cms/HomeController.html +148 -0
  334. data/doc/app/classes/Cms/HtmlBlocksController.html +113 -0
  335. data/doc/app/classes/Cms/ImageBlocksController.html +113 -0
  336. data/doc/app/classes/Cms/LinksController.html +341 -0
  337. data/doc/app/classes/Cms/MenuHelper.html +330 -0
  338. data/doc/app/classes/Cms/PageHelper.html +292 -0
  339. data/doc/app/classes/Cms/PageRouteConditionsController.html +113 -0
  340. data/doc/app/classes/Cms/PageRouteOptionsController.html +355 -0
  341. data/doc/app/classes/Cms/PageRouteRequirementsController.html +113 -0
  342. data/doc/app/classes/Cms/PageRoutesController.html +284 -0
  343. data/doc/app/classes/Cms/PagesController.html +331 -0
  344. data/doc/app/classes/Cms/PathHelper.html +268 -0
  345. data/doc/app/classes/Cms/PortletController.html +150 -0
  346. data/doc/app/classes/Cms/PortletsController.html +301 -0
  347. data/doc/app/classes/Cms/RedirectsController.html +172 -0
  348. data/doc/app/classes/Cms/ResourceController.html +616 -0
  349. data/doc/app/classes/Cms/Routes.html +303 -0
  350. data/doc/app/classes/Cms/RoutesController.html +164 -0
  351. data/doc/app/classes/Cms/SectionNodesController.html +272 -0
  352. data/doc/app/classes/Cms/SectionNodesHelper.html +145 -0
  353. data/doc/app/classes/Cms/SectionsController.html +542 -0
  354. data/doc/app/classes/Cms/SessionsController.html +270 -0
  355. data/doc/app/classes/Cms/TagsController.html +152 -0
  356. data/doc/app/classes/Cms/TasksController.html +221 -0
  357. data/doc/app/classes/Cms/ToolbarController.html +153 -0
  358. data/doc/app/classes/Cms/UsersController.html +405 -0
  359. data/doc/app/classes/Cms.html +638 -0
  360. data/doc/app/classes/Connector.html +350 -0
  361. data/doc/app/classes/ContentType.html +448 -0
  362. data/doc/app/classes/ContentTypeGroup.html +111 -0
  363. data/doc/app/classes/DynamicPortlet.html +148 -0
  364. data/doc/app/classes/DynamicView.html +411 -0
  365. data/doc/app/classes/EmailMessage.html +228 -0
  366. data/doc/app/classes/EmailMessageMailer.html +150 -0
  367. data/doc/app/classes/EmailPagePortlet.html +184 -0
  368. data/doc/app/classes/FileBlock.html +202 -0
  369. data/doc/app/classes/Group.html +170 -0
  370. data/doc/app/classes/GroupPermission.html +111 -0
  371. data/doc/app/classes/GroupSection.html +111 -0
  372. data/doc/app/classes/GroupType.html +111 -0
  373. data/doc/app/classes/GroupTypePermission.html +111 -0
  374. data/doc/app/classes/GuestUser.html +347 -0
  375. data/doc/app/classes/HtmlBlock.html +170 -0
  376. data/doc/app/classes/ImageBlock.html +202 -0
  377. data/doc/app/classes/InitialData.html +171 -0
  378. data/doc/app/classes/Link.html +249 -0
  379. data/doc/app/classes/LoginPortlet.html +151 -0
  380. data/doc/app/classes/Page.html +954 -0
  381. data/doc/app/classes/PagePartial.html +201 -0
  382. data/doc/app/classes/PageRoute.html +335 -0
  383. data/doc/app/classes/PageRouteCondition.html +113 -0
  384. data/doc/app/classes/PageRouteOption.html +111 -0
  385. data/doc/app/classes/PageRouteRequirement.html +113 -0
  386. data/doc/app/classes/PageTemplate.html +278 -0
  387. data/doc/app/classes/Permission.html +111 -0
  388. data/doc/app/classes/Portlet.html +738 -0
  389. data/doc/app/classes/Redirect.html +111 -0
  390. data/doc/app/classes/Section.html +580 -0
  391. data/doc/app/classes/SectionNode.html +410 -0
  392. data/doc/app/classes/Sequence.html +146 -0
  393. data/doc/app/classes/Site.html +253 -0
  394. data/doc/app/classes/Tag.html +292 -0
  395. data/doc/app/classes/TagCloudPortlet.html +176 -0
  396. data/doc/app/classes/Tagging.html +146 -0
  397. data/doc/app/classes/Task.html +288 -0
  398. data/doc/app/classes/User.html +618 -0
  399. data/doc/app/classes/UserGroupMembership.html +111 -0
  400. data/doc/app/created.rid +1 -0
  401. data/doc/app/files/app/controllers/application_controller_rb.html +109 -0
  402. data/doc/app/files/app/controllers/cms/application_controller_rb.html +101 -0
  403. data/doc/app/files/app/controllers/cms/attachments_controller_rb.html +101 -0
  404. data/doc/app/files/app/controllers/cms/base_controller_rb.html +101 -0
  405. data/doc/app/files/app/controllers/cms/cache_controller_rb.html +101 -0
  406. data/doc/app/files/app/controllers/cms/categories_controller_rb.html +101 -0
  407. data/doc/app/files/app/controllers/cms/category_types_controller_rb.html +101 -0
  408. data/doc/app/files/app/controllers/cms/connectors_controller_rb.html +101 -0
  409. data/doc/app/files/app/controllers/cms/content_block_controller_rb.html +107 -0
  410. data/doc/app/files/app/controllers/cms/content_controller_rb.html +101 -0
  411. data/doc/app/files/app/controllers/cms/content_types_controller_rb.html +101 -0
  412. data/doc/app/files/app/controllers/cms/dashboard_controller_rb.html +101 -0
  413. data/doc/app/files/app/controllers/cms/dynamic_views_controller_rb.html +101 -0
  414. data/doc/app/files/app/controllers/cms/email_messages_controller_rb.html +101 -0
  415. data/doc/app/files/app/controllers/cms/error_handling_rb.html +101 -0
  416. data/doc/app/files/app/controllers/cms/file_blocks_controller_rb.html +101 -0
  417. data/doc/app/files/app/controllers/cms/groups_controller_rb.html +101 -0
  418. data/doc/app/files/app/controllers/cms/home_controller_rb.html +101 -0
  419. data/doc/app/files/app/controllers/cms/html_blocks_controller_rb.html +101 -0
  420. data/doc/app/files/app/controllers/cms/image_blocks_controller_rb.html +101 -0
  421. data/doc/app/files/app/controllers/cms/links_controller_rb.html +101 -0
  422. data/doc/app/files/app/controllers/cms/page_route_conditions_controller_rb.html +101 -0
  423. data/doc/app/files/app/controllers/cms/page_route_options_controller_rb.html +101 -0
  424. data/doc/app/files/app/controllers/cms/page_route_requirements_controller_rb.html +101 -0
  425. data/doc/app/files/app/controllers/cms/page_routes_controller_rb.html +101 -0
  426. data/doc/app/files/app/controllers/cms/pages_controller_rb.html +101 -0
  427. data/doc/app/files/app/controllers/cms/portlet_controller_rb.html +101 -0
  428. data/doc/app/files/app/controllers/cms/portlets_controller_rb.html +101 -0
  429. data/doc/app/files/app/controllers/cms/redirects_controller_rb.html +101 -0
  430. data/doc/app/files/app/controllers/cms/resource_controller_rb.html +108 -0
  431. data/doc/app/files/app/controllers/cms/routes_controller_rb.html +101 -0
  432. data/doc/app/files/app/controllers/cms/section_nodes_controller_rb.html +101 -0
  433. data/doc/app/files/app/controllers/cms/sections_controller_rb.html +101 -0
  434. data/doc/app/files/app/controllers/cms/sessions_controller_rb.html +107 -0
  435. data/doc/app/files/app/controllers/cms/tags_controller_rb.html +101 -0
  436. data/doc/app/files/app/controllers/cms/tasks_controller_rb.html +101 -0
  437. data/doc/app/files/app/controllers/cms/toolbar_controller_rb.html +101 -0
  438. data/doc/app/files/app/controllers/cms/users_controller_rb.html +101 -0
  439. data/doc/app/files/app/helpers/application_helper_rb.html +108 -0
  440. data/doc/app/files/app/helpers/cms/application_helper_rb.html +107 -0
  441. data/doc/app/files/app/helpers/cms/form_builder_rb.html +101 -0
  442. data/doc/app/files/app/helpers/cms/form_tag_helper_rb.html +101 -0
  443. data/doc/app/files/app/helpers/cms/menu_helper_rb.html +101 -0
  444. data/doc/app/files/app/helpers/cms/page_helper_rb.html +101 -0
  445. data/doc/app/files/app/helpers/cms/path_helper_rb.html +101 -0
  446. data/doc/app/files/app/helpers/cms/section_nodes_helper_rb.html +101 -0
  447. data/doc/app/files/app/models/abstract_file_block_rb.html +101 -0
  448. data/doc/app/files/app/models/attachment_rb.html +109 -0
  449. data/doc/app/files/app/models/category_rb.html +101 -0
  450. data/doc/app/files/app/models/category_type_rb.html +101 -0
  451. data/doc/app/files/app/models/connector_rb.html +101 -0
  452. data/doc/app/files/app/models/content_type_group_rb.html +101 -0
  453. data/doc/app/files/app/models/content_type_rb.html +101 -0
  454. data/doc/app/files/app/models/dynamic_view_rb.html +101 -0
  455. data/doc/app/files/app/models/email_message_mailer_rb.html +101 -0
  456. data/doc/app/files/app/models/email_message_rb.html +101 -0
  457. data/doc/app/files/app/models/file_block_rb.html +101 -0
  458. data/doc/app/files/app/models/group_permission_rb.html +101 -0
  459. data/doc/app/files/app/models/group_rb.html +101 -0
  460. data/doc/app/files/app/models/group_section_rb.html +101 -0
  461. data/doc/app/files/app/models/group_type_permission_rb.html +101 -0
  462. data/doc/app/files/app/models/group_type_rb.html +101 -0
  463. data/doc/app/files/app/models/guest_user_rb.html +101 -0
  464. data/doc/app/files/app/models/html_block_rb.html +101 -0
  465. data/doc/app/files/app/models/image_block_rb.html +101 -0
  466. data/doc/app/files/app/models/link_rb.html +101 -0
  467. data/doc/app/files/app/models/page_partial_rb.html +101 -0
  468. data/doc/app/files/app/models/page_rb.html +101 -0
  469. data/doc/app/files/app/models/page_route_condition_rb.html +101 -0
  470. data/doc/app/files/app/models/page_route_option_rb.html +101 -0
  471. data/doc/app/files/app/models/page_route_rb.html +101 -0
  472. data/doc/app/files/app/models/page_route_requirement_rb.html +101 -0
  473. data/doc/app/files/app/models/page_template_rb.html +101 -0
  474. data/doc/app/files/app/models/permission_rb.html +101 -0
  475. data/doc/app/files/app/models/portlet_rb.html +101 -0
  476. data/doc/app/files/app/models/redirect_rb.html +101 -0
  477. data/doc/app/files/app/models/section_node_rb.html +101 -0
  478. data/doc/app/files/app/models/section_rb.html +101 -0
  479. data/doc/app/files/app/models/site_rb.html +101 -0
  480. data/doc/app/files/app/models/tag_rb.html +101 -0
  481. data/doc/app/files/app/models/tagging_rb.html +101 -0
  482. data/doc/app/files/app/models/task_rb.html +101 -0
  483. data/doc/app/files/app/models/user_group_membership_rb.html +101 -0
  484. data/doc/app/files/app/models/user_rb.html +108 -0
  485. data/doc/app/files/app/portlets/dynamic_portlet_rb.html +101 -0
  486. data/doc/app/files/app/portlets/email_page_portlet_rb.html +101 -0
  487. data/doc/app/files/app/portlets/login_portlet_rb.html +101 -0
  488. data/doc/app/files/app/portlets/tag_cloud_portlet_rb.html +101 -0
  489. data/doc/app/files/doc/README_FOR_APP.html +127 -0
  490. data/doc/app/files/lib/acts_as_list_rb.html +101 -0
  491. data/doc/app/files/lib/browsercms_rb.html +113 -0
  492. data/doc/app/files/lib/cms/acts/content_block_rb.html +101 -0
  493. data/doc/app/files/lib/cms/authentication/controller_rb.html +101 -0
  494. data/doc/app/files/lib/cms/authentication/model_rb.html +101 -0
  495. data/doc/app/files/lib/cms/behaviors/archiving_rb.html +101 -0
  496. data/doc/app/files/lib/cms/behaviors/attaching_rb.html +101 -0
  497. data/doc/app/files/lib/cms/behaviors/categorizing_rb.html +101 -0
  498. data/doc/app/files/lib/cms/behaviors/connecting_rb.html +101 -0
  499. data/doc/app/files/lib/cms/behaviors/dynamic_attributes_rb.html +101 -0
  500. data/doc/app/files/lib/cms/behaviors/flush_cache_on_change_rb.html +101 -0
  501. data/doc/app/files/lib/cms/behaviors/hiding_rb.html +101 -0
  502. data/doc/app/files/lib/cms/behaviors/pagination_rb.html +107 -0
  503. data/doc/app/files/lib/cms/behaviors/publishing_rb.html +101 -0
  504. data/doc/app/files/lib/cms/behaviors/rendering_rb.html +101 -0
  505. data/doc/app/files/lib/cms/behaviors/searching_rb.html +101 -0
  506. data/doc/app/files/lib/cms/behaviors/soft_deleting_rb.html +101 -0
  507. data/doc/app/files/lib/cms/behaviors/taggable_rb.html +101 -0
  508. data/doc/app/files/lib/cms/behaviors/userstamping_rb.html +101 -0
  509. data/doc/app/files/lib/cms/behaviors/versioning_rb.html +101 -0
  510. data/doc/app/files/lib/cms/behaviors_rb.html +147 -0
  511. data/doc/app/files/lib/cms/caching_rb.html +101 -0
  512. data/doc/app/files/lib/cms/data_loader_rb.html +101 -0
  513. data/doc/app/files/lib/cms/extensions/action_view/base_rb.html +101 -0
  514. data/doc/app/files/lib/cms/extensions/active_record/base_rb.html +101 -0
  515. data/doc/app/files/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements_rb.html +101 -0
  516. data/doc/app/files/lib/cms/extensions/active_record/errors_rb.html +101 -0
  517. data/doc/app/files/lib/cms/extensions/active_support/cache/file_store_rb.html +101 -0
  518. data/doc/app/files/lib/cms/extensions/hash_rb.html +101 -0
  519. data/doc/app/files/lib/cms/extensions/integer_rb.html +101 -0
  520. data/doc/app/files/lib/cms/extensions/nil_rb.html +101 -0
  521. data/doc/app/files/lib/cms/extensions/string_rb.html +101 -0
  522. data/doc/app/files/lib/cms/extensions_rb.html +101 -0
  523. data/doc/app/files/lib/cms/init_rb.html +101 -0
  524. data/doc/app/files/lib/cms/routes_rb.html +101 -0
  525. data/doc/app/files/lib/initial_data_rb.html +101 -0
  526. data/doc/app/files/lib/sequence_rb.html +101 -0
  527. data/doc/app/fr_class_index.html +205 -0
  528. data/doc/app/fr_file_index.html +152 -0
  529. data/doc/app/fr_method_index.html +738 -0
  530. data/doc/app/index.html +24 -0
  531. data/doc/app/rdoc-style.css +208 -0
  532. data/doc/guides/html/build_it_yourself.html +175 -0
  533. data/doc/guides/html/deployment_guide.html +181 -0
  534. data/doc/guides/html/designer_guide.html +153 -0
  535. data/doc/guides/html/developer_guide.html +266 -0
  536. data/doc/guides/html/files/javascripts/code_highlighter.js +188 -0
  537. data/doc/guides/html/files/javascripts/guides.js +7 -0
  538. data/doc/guides/html/files/javascripts/highlighters.js +90 -0
  539. data/doc/guides/html/files/stylesheets/main.css +441 -0
  540. data/doc/guides/html/files/stylesheets/reset.css +43 -0
  541. data/doc/guides/html/files/stylesheets/style.css +13 -0
  542. data/doc/guides/html/files/stylesheets/syntax.css +31 -0
  543. data/doc/guides/html/getting_started.html +181 -0
  544. data/doc/guides/html/images/bg.png +0 -0
  545. data/doc/guides/html/images/bottom_cap.png +0 -0
  546. data/doc/guides/html/images/browsercms_logo.png +0 -0
  547. data/doc/guides/html/images/dot.png +0 -0
  548. data/doc/guides/html/images/icons/README +5 -0
  549. data/doc/guides/html/images/icons/callouts/1.png +0 -0
  550. data/doc/guides/html/images/icons/callouts/10.png +0 -0
  551. data/doc/guides/html/images/icons/callouts/11.png +0 -0
  552. data/doc/guides/html/images/icons/callouts/12.png +0 -0
  553. data/doc/guides/html/images/icons/callouts/13.png +0 -0
  554. data/doc/guides/html/images/icons/callouts/14.png +0 -0
  555. data/doc/guides/html/images/icons/callouts/15.png +0 -0
  556. data/doc/guides/html/images/icons/callouts/2.png +0 -0
  557. data/doc/guides/html/images/icons/callouts/3.png +0 -0
  558. data/doc/guides/html/images/icons/callouts/4.png +0 -0
  559. data/doc/guides/html/images/icons/callouts/5.png +0 -0
  560. data/doc/guides/html/images/icons/callouts/6.png +0 -0
  561. data/doc/guides/html/images/icons/callouts/7.png +0 -0
  562. data/doc/guides/html/images/icons/callouts/8.png +0 -0
  563. data/doc/guides/html/images/icons/callouts/9.png +0 -0
  564. data/doc/guides/html/images/icons/caution.png +0 -0
  565. data/doc/guides/html/images/icons/example.png +0 -0
  566. data/doc/guides/html/images/icons/home.png +0 -0
  567. data/doc/guides/html/images/icons/important.png +0 -0
  568. data/doc/guides/html/images/icons/next.png +0 -0
  569. data/doc/guides/html/images/icons/note.png +0 -0
  570. data/doc/guides/html/images/icons/prev.png +0 -0
  571. data/doc/guides/html/images/icons/tip.png +0 -0
  572. data/doc/guides/html/images/icons/up.png +0 -0
  573. data/doc/guides/html/images/icons/warning.png +0 -0
  574. data/doc/guides/html/images/top_cap.png +0 -0
  575. data/doc/guides/html/images/top_cap_content.png +0 -0
  576. data/doc/guides/html/index.html +168 -0
  577. data/doc/guides/html/installing_modules.html +181 -0
  578. data/doc/guides/html/user_guide.html +266 -0
  579. data/lib/acts_as_list.rb +252 -0
  580. data/lib/browsercms.rb +12 -0
  581. data/lib/cms/acts/content_block.rb +31 -0
  582. data/lib/cms/authentication/controller.rb +195 -0
  583. data/lib/cms/authentication/model.rb +116 -0
  584. data/lib/cms/behaviors/archiving.rb +43 -0
  585. data/lib/cms/behaviors/attaching.rb +184 -0
  586. data/lib/cms/behaviors/categorizing.rb +31 -0
  587. data/lib/cms/behaviors/connecting.rb +99 -0
  588. data/lib/cms/behaviors/dynamic_attributes.rb +367 -0
  589. data/lib/cms/behaviors/flush_cache_on_change.rb +33 -0
  590. data/lib/cms/behaviors/hiding.rb +46 -0
  591. data/lib/cms/behaviors/pagination.rb +209 -0
  592. data/lib/cms/behaviors/publishing.rb +112 -0
  593. data/lib/cms/behaviors/rendering.rb +144 -0
  594. data/lib/cms/behaviors/searching.rb +49 -0
  595. data/lib/cms/behaviors/soft_deleting.rb +77 -0
  596. data/lib/cms/behaviors/taggable.rb +57 -0
  597. data/lib/cms/behaviors/userstamping.rb +37 -0
  598. data/lib/cms/behaviors/versioning.rb +265 -0
  599. data/lib/cms/behaviors.rb +33 -0
  600. data/lib/cms/caching.rb +20 -0
  601. data/lib/cms/data_loader.rb +28 -0
  602. data/lib/cms/extensions/action_view/base.rb +13 -0
  603. data/lib/cms/extensions/active_record/base.rb +16 -0
  604. data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +78 -0
  605. data/lib/cms/extensions/active_record/errors.rb +12 -0
  606. data/lib/cms/extensions/active_support/cache/file_store.rb +9 -0
  607. data/lib/cms/extensions/hash.rb +21 -0
  608. data/lib/cms/extensions/integer.rb +16 -0
  609. data/lib/cms/extensions/nil.rb +19 -0
  610. data/lib/cms/extensions/string.rb +19 -0
  611. data/lib/cms/extensions.rb +4 -0
  612. data/lib/cms/init.rb +100 -0
  613. data/lib/cms/routes.rb +129 -0
  614. data/lib/initial_data.rb +30 -0
  615. data/lib/sequence.rb +6 -0
  616. data/lib/tasks/cms.rake +57 -0
  617. data/lib/tasks/db.rake +71 -0
  618. data/lib/tasks/dev.rake +20 -0
  619. data/public/fckeditor/editor/css/behaviors/disablehandles.htc +15 -0
  620. data/public/fckeditor/editor/css/behaviors/showtableborders.htc +36 -0
  621. data/public/fckeditor/editor/css/fck_editorarea.css +110 -0
  622. data/public/fckeditor/editor/css/fck_internal.css +199 -0
  623. data/public/fckeditor/editor/css/fck_showtableborders_gecko.css +49 -0
  624. data/public/fckeditor/editor/css/images/block_address.png +0 -0
  625. data/public/fckeditor/editor/css/images/block_blockquote.png +0 -0
  626. data/public/fckeditor/editor/css/images/block_div.png +0 -0
  627. data/public/fckeditor/editor/css/images/block_h1.png +0 -0
  628. data/public/fckeditor/editor/css/images/block_h2.png +0 -0
  629. data/public/fckeditor/editor/css/images/block_h3.png +0 -0
  630. data/public/fckeditor/editor/css/images/block_h4.png +0 -0
  631. data/public/fckeditor/editor/css/images/block_h5.png +0 -0
  632. data/public/fckeditor/editor/css/images/block_h6.png +0 -0
  633. data/public/fckeditor/editor/css/images/block_p.png +0 -0
  634. data/public/fckeditor/editor/css/images/block_pre.png +0 -0
  635. data/public/fckeditor/editor/css/images/fck_anchor.gif +0 -0
  636. data/public/fckeditor/editor/css/images/fck_flashlogo.gif +0 -0
  637. data/public/fckeditor/editor/css/images/fck_hiddenfield.gif +0 -0
  638. data/public/fckeditor/editor/css/images/fck_pagebreak.gif +0 -0
  639. data/public/fckeditor/editor/css/images/fck_plugin.gif +0 -0
  640. data/public/fckeditor/editor/dialog/common/fck_dialog_common.css +85 -0
  641. data/public/fckeditor/editor/dialog/common/fck_dialog_common.js +311 -0
  642. data/public/fckeditor/editor/dialog/common/images/locked.gif +0 -0
  643. data/public/fckeditor/editor/dialog/common/images/reset.gif +0 -0
  644. data/public/fckeditor/editor/dialog/common/images/unlocked.gif +0 -0
  645. data/public/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif +0 -0
  646. data/public/fckeditor/editor/dialog/fck_about/logo_fredck.gif +0 -0
  647. data/public/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif +0 -0
  648. data/public/fckeditor/editor/dialog/fck_about.html +161 -0
  649. data/public/fckeditor/editor/dialog/fck_anchor.html +220 -0
  650. data/public/fckeditor/editor/dialog/fck_button.html +104 -0
  651. data/public/fckeditor/editor/dialog/fck_checkbox.html +104 -0
  652. data/public/fckeditor/editor/dialog/fck_colorselector.html +172 -0
  653. data/public/fckeditor/editor/dialog/fck_div.html +364 -0
  654. data/public/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html +113 -0
  655. data/public/fckeditor/editor/dialog/fck_docprops.html +600 -0
  656. data/public/fckeditor/editor/dialog/fck_flash/fck_flash.js +300 -0
  657. data/public/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html +50 -0
  658. data/public/fckeditor/editor/dialog/fck_flash.html +152 -0
  659. data/public/fckeditor/editor/dialog/fck_form.html +109 -0
  660. data/public/fckeditor/editor/dialog/fck_hiddenfield.html +115 -0
  661. data/public/fckeditor/editor/dialog/fck_image/fck_image.js +512 -0
  662. data/public/fckeditor/editor/dialog/fck_image/fck_image_preview.html +72 -0
  663. data/public/fckeditor/editor/dialog/fck_image.html +258 -0
  664. data/public/fckeditor/editor/dialog/fck_link/fck_link.js +893 -0
  665. data/public/fckeditor/editor/dialog/fck_link.html +295 -0
  666. data/public/fckeditor/editor/dialog/fck_listprop.html +120 -0
  667. data/public/fckeditor/editor/dialog/fck_paste.html +346 -0
  668. data/public/fckeditor/editor/dialog/fck_radiobutton.html +104 -0
  669. data/public/fckeditor/editor/dialog/fck_replace.html +648 -0
  670. data/public/fckeditor/editor/dialog/fck_select/fck_select.js +194 -0
  671. data/public/fckeditor/editor/dialog/fck_select.html +180 -0
  672. data/public/fckeditor/editor/dialog/fck_smiley.html +111 -0
  673. data/public/fckeditor/editor/dialog/fck_source.html +68 -0
  674. data/public/fckeditor/editor/dialog/fck_specialchar.html +121 -0
  675. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html +0 -0
  676. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js +87 -0
  677. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html +153 -0
  678. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm +148 -0
  679. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php +199 -0
  680. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl +181 -0
  681. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js +461 -0
  682. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html +71 -0
  683. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css +49 -0
  684. data/public/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js +272 -0
  685. data/public/fckeditor/editor/dialog/fck_spellerpages.html +70 -0
  686. data/public/fckeditor/editor/dialog/fck_table.html +298 -0
  687. data/public/fckeditor/editor/dialog/fck_tablecell.html +257 -0
  688. data/public/fckeditor/editor/dialog/fck_template/images/template1.gif +0 -0
  689. data/public/fckeditor/editor/dialog/fck_template/images/template2.gif +0 -0
  690. data/public/fckeditor/editor/dialog/fck_template/images/template3.gif +0 -0
  691. data/public/fckeditor/editor/dialog/fck_template.html +242 -0
  692. data/public/fckeditor/editor/dialog/fck_textarea.html +94 -0
  693. data/public/fckeditor/editor/dialog/fck_textfield.html +136 -0
  694. data/public/fckeditor/editor/dtd/fck_dtd_test.html +41 -0
  695. data/public/fckeditor/editor/dtd/fck_xhtml10strict.js +116 -0
  696. data/public/fckeditor/editor/dtd/fck_xhtml10transitional.js +140 -0
  697. data/public/fckeditor/editor/fckdebug.html +153 -0
  698. data/public/fckeditor/editor/fckdialog.html +812 -0
  699. data/public/fckeditor/editor/fckeditor.html +317 -0
  700. data/public/fckeditor/editor/fckeditor.original.html +424 -0
  701. data/public/fckeditor/editor/filemanager/browser/default/browser.css +87 -0
  702. data/public/fckeditor/editor/filemanager/browser/default/browser.html +200 -0
  703. data/public/fckeditor/editor/filemanager/browser/default/frmactualfolder.html +95 -0
  704. data/public/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html +114 -0
  705. data/public/fckeditor/editor/filemanager/browser/default/frmfolders.html +198 -0
  706. data/public/fckeditor/editor/filemanager/browser/default/frmresourceslist.html +169 -0
  707. data/public/fckeditor/editor/filemanager/browser/default/frmresourcetype.html +68 -0
  708. data/public/fckeditor/editor/filemanager/browser/default/frmupload.html +115 -0
  709. data/public/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif +0 -0
  710. data/public/fckeditor/editor/filemanager/browser/default/images/Folder.gif +0 -0
  711. data/public/fckeditor/editor/filemanager/browser/default/images/Folder32.gif +0 -0
  712. data/public/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif +0 -0
  713. data/public/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif +0 -0
  714. data/public/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif +0 -0
  715. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif +0 -0
  716. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif +0 -0
  717. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif +0 -0
  718. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif +0 -0
  719. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif +0 -0
  720. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif +0 -0
  721. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif +0 -0
  722. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif +0 -0
  723. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif +0 -0
  724. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif +0 -0
  725. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif +0 -0
  726. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif +0 -0
  727. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif +0 -0
  728. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif +0 -0
  729. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif +0 -0
  730. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif +0 -0
  731. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif +0 -0
  732. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif +0 -0
  733. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif +0 -0
  734. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif +0 -0
  735. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif +0 -0
  736. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif +0 -0
  737. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif +0 -0
  738. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif +0 -0
  739. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif +0 -0
  740. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif +0 -0
  741. data/public/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif +0 -0
  742. data/public/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif +0 -0
  743. data/public/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif +0 -0
  744. data/public/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif +0 -0
  745. data/public/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif +0 -0
  746. data/public/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif +0 -0
  747. data/public/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif +0 -0
  748. data/public/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif +0 -0
  749. data/public/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif +0 -0
  750. data/public/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif +0 -0
  751. data/public/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif +0 -0
  752. data/public/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif +0 -0
  753. data/public/fckeditor/editor/filemanager/browser/default/images/icons/html.gif +0 -0
  754. data/public/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif +0 -0
  755. data/public/fckeditor/editor/filemanager/browser/default/images/icons/js.gif +0 -0
  756. data/public/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif +0 -0
  757. data/public/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif +0 -0
  758. data/public/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif +0 -0
  759. data/public/fckeditor/editor/filemanager/browser/default/images/icons/png.gif +0 -0
  760. data/public/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif +0 -0
  761. data/public/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif +0 -0
  762. data/public/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif +0 -0
  763. data/public/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif +0 -0
  764. data/public/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif +0 -0
  765. data/public/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif +0 -0
  766. data/public/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif +0 -0
  767. data/public/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif +0 -0
  768. data/public/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif +0 -0
  769. data/public/fckeditor/editor/filemanager/browser/default/images/spacer.gif +0 -0
  770. data/public/fckeditor/editor/filemanager/browser/default/js/common.js +88 -0
  771. data/public/fckeditor/editor/filemanager/browser/default/js/fckxml.js +147 -0
  772. data/public/fckeditor/editor/images/anchor.gif +0 -0
  773. data/public/fckeditor/editor/images/arrow_ltr.gif +0 -0
  774. data/public/fckeditor/editor/images/arrow_rtl.gif +0 -0
  775. data/public/fckeditor/editor/images/smiley/msn/angel_smile.gif +0 -0
  776. data/public/fckeditor/editor/images/smiley/msn/angry_smile.gif +0 -0
  777. data/public/fckeditor/editor/images/smiley/msn/broken_heart.gif +0 -0
  778. data/public/fckeditor/editor/images/smiley/msn/cake.gif +0 -0
  779. data/public/fckeditor/editor/images/smiley/msn/confused_smile.gif +0 -0
  780. data/public/fckeditor/editor/images/smiley/msn/cry_smile.gif +0 -0
  781. data/public/fckeditor/editor/images/smiley/msn/devil_smile.gif +0 -0
  782. data/public/fckeditor/editor/images/smiley/msn/embaressed_smile.gif +0 -0
  783. data/public/fckeditor/editor/images/smiley/msn/envelope.gif +0 -0
  784. data/public/fckeditor/editor/images/smiley/msn/heart.gif +0 -0
  785. data/public/fckeditor/editor/images/smiley/msn/kiss.gif +0 -0
  786. data/public/fckeditor/editor/images/smiley/msn/lightbulb.gif +0 -0
  787. data/public/fckeditor/editor/images/smiley/msn/omg_smile.gif +0 -0
  788. data/public/fckeditor/editor/images/smiley/msn/regular_smile.gif +0 -0
  789. data/public/fckeditor/editor/images/smiley/msn/sad_smile.gif +0 -0
  790. data/public/fckeditor/editor/images/smiley/msn/shades_smile.gif +0 -0
  791. data/public/fckeditor/editor/images/smiley/msn/teeth_smile.gif +0 -0
  792. data/public/fckeditor/editor/images/smiley/msn/thumbs_down.gif +0 -0
  793. data/public/fckeditor/editor/images/smiley/msn/thumbs_up.gif +0 -0
  794. data/public/fckeditor/editor/images/smiley/msn/tounge_smile.gif +0 -0
  795. data/public/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif +0 -0
  796. data/public/fckeditor/editor/images/smiley/msn/wink_smile.gif +0 -0
  797. data/public/fckeditor/editor/images/spacer.gif +0 -0
  798. data/public/fckeditor/editor/js/fckadobeair.js +176 -0
  799. data/public/fckeditor/editor/js/fckeditorcode_gecko.js +108 -0
  800. data/public/fckeditor/editor/js/fckeditorcode_ie.js +109 -0
  801. data/public/fckeditor/editor/lang/_translationstatus.txt +78 -0
  802. data/public/fckeditor/editor/lang/af.js +526 -0
  803. data/public/fckeditor/editor/lang/ar.js +526 -0
  804. data/public/fckeditor/editor/lang/bg.js +526 -0
  805. data/public/fckeditor/editor/lang/bn.js +526 -0
  806. data/public/fckeditor/editor/lang/bs.js +526 -0
  807. data/public/fckeditor/editor/lang/ca.js +526 -0
  808. data/public/fckeditor/editor/lang/cs.js +526 -0
  809. data/public/fckeditor/editor/lang/da.js +526 -0
  810. data/public/fckeditor/editor/lang/de.js +526 -0
  811. data/public/fckeditor/editor/lang/el.js +526 -0
  812. data/public/fckeditor/editor/lang/en-au.js +526 -0
  813. data/public/fckeditor/editor/lang/en-ca.js +526 -0
  814. data/public/fckeditor/editor/lang/en-uk.js +526 -0
  815. data/public/fckeditor/editor/lang/en.js +526 -0
  816. data/public/fckeditor/editor/lang/eo.js +526 -0
  817. data/public/fckeditor/editor/lang/es.js +526 -0
  818. data/public/fckeditor/editor/lang/et.js +526 -0
  819. data/public/fckeditor/editor/lang/eu.js +527 -0
  820. data/public/fckeditor/editor/lang/fa.js +526 -0
  821. data/public/fckeditor/editor/lang/fi.js +526 -0
  822. data/public/fckeditor/editor/lang/fo.js +526 -0
  823. data/public/fckeditor/editor/lang/fr-ca.js +526 -0
  824. data/public/fckeditor/editor/lang/fr.js +526 -0
  825. data/public/fckeditor/editor/lang/gl.js +526 -0
  826. data/public/fckeditor/editor/lang/gu.js +526 -0
  827. data/public/fckeditor/editor/lang/he.js +526 -0
  828. data/public/fckeditor/editor/lang/hi.js +526 -0
  829. data/public/fckeditor/editor/lang/hr.js +526 -0
  830. data/public/fckeditor/editor/lang/hu.js +526 -0
  831. data/public/fckeditor/editor/lang/it.js +526 -0
  832. data/public/fckeditor/editor/lang/ja.js +526 -0
  833. data/public/fckeditor/editor/lang/km.js +526 -0
  834. data/public/fckeditor/editor/lang/ko.js +526 -0
  835. data/public/fckeditor/editor/lang/lt.js +526 -0
  836. data/public/fckeditor/editor/lang/lv.js +526 -0
  837. data/public/fckeditor/editor/lang/mn.js +526 -0
  838. data/public/fckeditor/editor/lang/ms.js +526 -0
  839. data/public/fckeditor/editor/lang/nb.js +526 -0
  840. data/public/fckeditor/editor/lang/nl.js +526 -0
  841. data/public/fckeditor/editor/lang/no.js +526 -0
  842. data/public/fckeditor/editor/lang/pl.js +526 -0
  843. data/public/fckeditor/editor/lang/pt-br.js +526 -0
  844. data/public/fckeditor/editor/lang/pt.js +526 -0
  845. data/public/fckeditor/editor/lang/ro.js +526 -0
  846. data/public/fckeditor/editor/lang/ru.js +526 -0
  847. data/public/fckeditor/editor/lang/sk.js +526 -0
  848. data/public/fckeditor/editor/lang/sl.js +526 -0
  849. data/public/fckeditor/editor/lang/sr-latn.js +526 -0
  850. data/public/fckeditor/editor/lang/sr.js +526 -0
  851. data/public/fckeditor/editor/lang/sv.js +526 -0
  852. data/public/fckeditor/editor/lang/th.js +526 -0
  853. data/public/fckeditor/editor/lang/tr.js +526 -0
  854. data/public/fckeditor/editor/lang/uk.js +526 -0
  855. data/public/fckeditor/editor/lang/vi.js +526 -0
  856. data/public/fckeditor/editor/lang/zh-cn.js +526 -0
  857. data/public/fckeditor/editor/lang/zh.js +526 -0
  858. data/public/fckeditor/editor/plugins/autogrow/fckplugin.js +99 -0
  859. data/public/fckeditor/editor/plugins/bbcode/_sample/sample.config.js +26 -0
  860. data/public/fckeditor/editor/plugins/bbcode/_sample/sample.html +67 -0
  861. data/public/fckeditor/editor/plugins/bbcode/fckplugin.js +123 -0
  862. data/public/fckeditor/editor/plugins/dragresizetable/fckplugin.js +524 -0
  863. data/public/fckeditor/editor/plugins/placeholder/fck_placeholder.html +105 -0
  864. data/public/fckeditor/editor/plugins/placeholder/fckplugin.js +187 -0
  865. data/public/fckeditor/editor/plugins/placeholder/lang/de.js +27 -0
  866. data/public/fckeditor/editor/plugins/placeholder/lang/en.js +27 -0
  867. data/public/fckeditor/editor/plugins/placeholder/lang/es.js +27 -0
  868. data/public/fckeditor/editor/plugins/placeholder/lang/fr.js +27 -0
  869. data/public/fckeditor/editor/plugins/placeholder/lang/it.js +27 -0
  870. data/public/fckeditor/editor/plugins/placeholder/lang/pl.js +27 -0
  871. data/public/fckeditor/editor/plugins/placeholder/placeholder.gif +0 -0
  872. data/public/fckeditor/editor/plugins/simplecommands/fckplugin.js +29 -0
  873. data/public/fckeditor/editor/plugins/tablecommands/fckplugin.js +33 -0
  874. data/public/fckeditor/editor/skins/_fckviewstrips.html +121 -0
  875. data/public/fckeditor/editor/skins/default/fck_dialog.css +402 -0
  876. data/public/fckeditor/editor/skins/default/fck_dialog_ie6.js +110 -0
  877. data/public/fckeditor/editor/skins/default/fck_editor.css +464 -0
  878. data/public/fckeditor/editor/skins/default/fck_strip.gif +0 -0
  879. data/public/fckeditor/editor/skins/default/images/dialog.sides.gif +0 -0
  880. data/public/fckeditor/editor/skins/default/images/dialog.sides.png +0 -0
  881. data/public/fckeditor/editor/skins/default/images/dialog.sides.rtl.png +0 -0
  882. data/public/fckeditor/editor/skins/default/images/sprites.gif +0 -0
  883. data/public/fckeditor/editor/skins/default/images/sprites.png +0 -0
  884. data/public/fckeditor/editor/skins/default/images/toolbar.arrowright.gif +0 -0
  885. data/public/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif +0 -0
  886. data/public/fckeditor/editor/skins/default/images/toolbar.collapse.gif +0 -0
  887. data/public/fckeditor/editor/skins/default/images/toolbar.end.gif +0 -0
  888. data/public/fckeditor/editor/skins/default/images/toolbar.expand.gif +0 -0
  889. data/public/fckeditor/editor/skins/default/images/toolbar.separator.gif +0 -0
  890. data/public/fckeditor/editor/skins/default/images/toolbar.start.gif +0 -0
  891. data/public/fckeditor/editor/skins/office2003/fck_dialog.css +402 -0
  892. data/public/fckeditor/editor/skins/office2003/fck_dialog_ie6.js +110 -0
  893. data/public/fckeditor/editor/skins/office2003/fck_editor.css +476 -0
  894. data/public/fckeditor/editor/skins/office2003/fck_strip.gif +0 -0
  895. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.gif +0 -0
  896. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.png +0 -0
  897. data/public/fckeditor/editor/skins/office2003/images/dialog.sides.rtl.png +0 -0
  898. data/public/fckeditor/editor/skins/office2003/images/sprites.gif +0 -0
  899. data/public/fckeditor/editor/skins/office2003/images/sprites.png +0 -0
  900. data/public/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif +0 -0
  901. data/public/fckeditor/editor/skins/office2003/images/toolbar.bg.gif +0 -0
  902. data/public/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif +0 -0
  903. data/public/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif +0 -0
  904. data/public/fckeditor/editor/skins/office2003/images/toolbar.end.gif +0 -0
  905. data/public/fckeditor/editor/skins/office2003/images/toolbar.expand.gif +0 -0
  906. data/public/fckeditor/editor/skins/office2003/images/toolbar.separator.gif +0 -0
  907. data/public/fckeditor/editor/skins/office2003/images/toolbar.start.gif +0 -0
  908. data/public/fckeditor/editor/skins/silver/fck_dialog.css +402 -0
  909. data/public/fckeditor/editor/skins/silver/fck_dialog_ie6.js +110 -0
  910. data/public/fckeditor/editor/skins/silver/fck_editor.css +473 -0
  911. data/public/fckeditor/editor/skins/silver/fck_strip.gif +0 -0
  912. data/public/fckeditor/editor/skins/silver/images/dialog.sides.gif +0 -0
  913. data/public/fckeditor/editor/skins/silver/images/dialog.sides.png +0 -0
  914. data/public/fckeditor/editor/skins/silver/images/dialog.sides.rtl.png +0 -0
  915. data/public/fckeditor/editor/skins/silver/images/sprites.gif +0 -0
  916. data/public/fckeditor/editor/skins/silver/images/sprites.png +0 -0
  917. data/public/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif +0 -0
  918. data/public/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif +0 -0
  919. data/public/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif +0 -0
  920. data/public/fckeditor/editor/skins/silver/images/toolbar.collapse.gif +0 -0
  921. data/public/fckeditor/editor/skins/silver/images/toolbar.end.gif +0 -0
  922. data/public/fckeditor/editor/skins/silver/images/toolbar.expand.gif +0 -0
  923. data/public/fckeditor/editor/skins/silver/images/toolbar.separator.gif +0 -0
  924. data/public/fckeditor/editor/skins/silver/images/toolbar.start.gif +0 -0
  925. data/public/fckeditor/fckconfig.js +364 -0
  926. data/public/fckeditor/fckdebug.html +153 -0
  927. data/public/fckeditor/fckdialog.html +812 -0
  928. data/public/fckeditor/fckeditor.html +317 -0
  929. data/public/fckeditor/fckeditor.js +328 -0
  930. data/public/fckeditor/fckeditor.original.html +424 -0
  931. data/public/fckeditor/fckpackager.xml +262 -0
  932. data/public/fckeditor/fckstyles.xml +111 -0
  933. data/public/fckeditor/fcktemplates.xml +103 -0
  934. data/public/images/cms/administration/user_browser_bg.gif +0 -0
  935. data/public/images/cms/bg.png +0 -0
  936. data/public/images/cms/bl_curve.png +0 -0
  937. data/public/images/cms/bottom_cap.png +0 -0
  938. data/public/images/cms/bottom_cap_content.png +0 -0
  939. data/public/images/cms/browse.gif +0 -0
  940. data/public/images/cms/browser_media_logo.png +0 -0
  941. data/public/images/cms/browsercms_logo.png +0 -0
  942. data/public/images/cms/buttons/button.png +0 -0
  943. data/public/images/cms/buttons/button_bg.png +0 -0
  944. data/public/images/cms/buttons/button_cap.png +0 -0
  945. data/public/images/cms/buttons/button_cap_h.png +0 -0
  946. data/public/images/cms/buttons/button_cap_off.gif +0 -0
  947. data/public/images/cms/buttons/button_cap_off_middle.gif +0 -0
  948. data/public/images/cms/buttons/button_h.png +0 -0
  949. data/public/images/cms/buttons/button_left_bg.png +0 -0
  950. data/public/images/cms/buttons/button_off.png +0 -0
  951. data/public/images/cms/buttons/button_off_middle.png +0 -0
  952. data/public/images/cms/buttons/delete_x.png +0 -0
  953. data/public/images/cms/buttons/delete_x_disabled.png +0 -0
  954. data/public/images/cms/buttons/delete_x_h.png +0 -0
  955. data/public/images/cms/buttons/sm_button.gif +0 -0
  956. data/public/images/cms/buttons/sm_button_2.gif +0 -0
  957. data/public/images/cms/buttons/sm_button_2_h.gif +0 -0
  958. data/public/images/cms/buttons/sm_button_h.gif +0 -0
  959. data/public/images/cms/containers/add.gif +0 -0
  960. data/public/images/cms/containers/alpha.png +0 -0
  961. data/public/images/cms/containers/beta.png +0 -0
  962. data/public/images/cms/containers/delete.gif +0 -0
  963. data/public/images/cms/containers/down.gif +0 -0
  964. data/public/images/cms/containers/edit.gif +0 -0
  965. data/public/images/cms/containers/up.gif +0 -0
  966. data/public/images/cms/containers/view.gif +0 -0
  967. data/public/images/cms/content_bg.gif +0 -0
  968. data/public/images/cms/dashboard/bottom_cap.png +0 -0
  969. data/public/images/cms/dashboard/bottom_cap_content.png +0 -0
  970. data/public/images/cms/dashboard/header_bg.gif +0 -0
  971. data/public/images/cms/dashboard/header_left_bg.gif +0 -0
  972. data/public/images/cms/dashboard/table_header_bg.gif +0 -0
  973. data/public/images/cms/dashboard/top_cap.png +0 -0
  974. data/public/images/cms/dashed.gif +0 -0
  975. data/public/images/cms/datepicker/clear.gif +0 -0
  976. data/public/images/cms/datepicker/close.gif +0 -0
  977. data/public/images/cms/dk_button_l.gif +0 -0
  978. data/public/images/cms/dk_button_r.gif +0 -0
  979. data/public/images/cms/dot.png +0 -0
  980. data/public/images/cms/draft_status.gif +0 -0
  981. data/public/images/cms/gray_long_bg.gif +0 -0
  982. data/public/images/cms/icons/actions/add.png +0 -0
  983. data/public/images/cms/icons/actions/config.png +0 -0
  984. data/public/images/cms/icons/actions/connect.png +0 -0
  985. data/public/images/cms/icons/actions/delete.png +0 -0
  986. data/public/images/cms/icons/actions/down.png +0 -0
  987. data/public/images/cms/icons/actions/edit.png +0 -0
  988. data/public/images/cms/icons/actions/folder.png +0 -0
  989. data/public/images/cms/icons/actions/folder_add.png +0 -0
  990. data/public/images/cms/icons/actions/folder_delete.png +0 -0
  991. data/public/images/cms/icons/actions/folder_edit.png +0 -0
  992. data/public/images/cms/icons/actions/folder_move.png +0 -0
  993. data/public/images/cms/icons/actions/folder_open.png +0 -0
  994. data/public/images/cms/icons/actions/history.png +0 -0
  995. data/public/images/cms/icons/actions/home.png +0 -0
  996. data/public/images/cms/icons/actions/left.png +0 -0
  997. data/public/images/cms/icons/actions/link.png +0 -0
  998. data/public/images/cms/icons/actions/page.png +0 -0
  999. data/public/images/cms/icons/actions/page_add.png +0 -0
  1000. data/public/images/cms/icons/actions/page_edit.png +0 -0
  1001. data/public/images/cms/icons/actions/page_move.png +0 -0
  1002. data/public/images/cms/icons/actions/redo.png +0 -0
  1003. data/public/images/cms/icons/actions/refresh.png +0 -0
  1004. data/public/images/cms/icons/actions/right.png +0 -0
  1005. data/public/images/cms/icons/actions/root_folder.png +0 -0
  1006. data/public/images/cms/icons/actions/root_link.png +0 -0
  1007. data/public/images/cms/icons/actions/root_page.png +0 -0
  1008. data/public/images/cms/icons/actions/undo.png +0 -0
  1009. data/public/images/cms/icons/actions/up.png +0 -0
  1010. data/public/images/cms/icons/actions/view.png +0 -0
  1011. data/public/images/cms/icons/file_types/doc.png +0 -0
  1012. data/public/images/cms/icons/file_types/file.png +0 -0
  1013. data/public/images/cms/icons/file_types/gif.png +0 -0
  1014. data/public/images/cms/icons/file_types/htm.png +0 -0
  1015. data/public/images/cms/icons/file_types/pdf.png +0 -0
  1016. data/public/images/cms/icons/file_types/ppt.png +0 -0
  1017. data/public/images/cms/icons/file_types/swf.png +0 -0
  1018. data/public/images/cms/icons/file_types/txt.png +0 -0
  1019. data/public/images/cms/icons/file_types/xls.png +0 -0
  1020. data/public/images/cms/icons/file_types/xml.png +0 -0
  1021. data/public/images/cms/icons/file_types/zip.png +0 -0
  1022. data/public/images/cms/icons/status/archived.gif +0 -0
  1023. data/public/images/cms/icons/status/draft.gif +0 -0
  1024. data/public/images/cms/icons/status/hidden.gif +0 -0
  1025. data/public/images/cms/icons/status/locked.gif +0 -0
  1026. data/public/images/cms/icons/status/published.gif +0 -0
  1027. data/public/images/cms/icons/status/unlocked.gif +0 -0
  1028. data/public/images/cms/icons/user.png +0 -0
  1029. data/public/images/cms/login_bg.jpg +0 -0
  1030. data/public/images/cms/login_bottom.jpg +0 -0
  1031. data/public/images/cms/login_top.gif +0 -0
  1032. data/public/images/cms/lt_button_bg.gif +0 -0
  1033. data/public/images/cms/lt_button_l.gif +0 -0
  1034. data/public/images/cms/lt_button_r.gif +0 -0
  1035. data/public/images/cms/menu/block_cap_h.gif +0 -0
  1036. data/public/images/cms/menu/bottom_cap.png +0 -0
  1037. data/public/images/cms/menu/bottom_cap_menu.png +0 -0
  1038. data/public/images/cms/menu/bottom_cap_menu_first.png +0 -0
  1039. data/public/images/cms/menu/menu_header_first_bg.gif +0 -0
  1040. data/public/images/cms/menu/selected_block_cap.gif +0 -0
  1041. data/public/images/cms/menu/top_cap.png +0 -0
  1042. data/public/images/cms/menu/top_cap_menu_header.png +0 -0
  1043. data/public/images/cms/menu.png +0 -0
  1044. data/public/images/cms/menu_h.gif +0 -0
  1045. data/public/images/cms/menu_header.png +0 -0
  1046. data/public/images/cms/menu_open.png +0 -0
  1047. data/public/images/cms/menu_open_bg.gif +0 -0
  1048. data/public/images/cms/nav/on_bg.gif +0 -0
  1049. data/public/images/cms/nav.png +0 -0
  1050. data/public/images/cms/nav_admin.gif +0 -0
  1051. data/public/images/cms/nav_admin_h.gif +0 -0
  1052. data/public/images/cms/nav_admin_on.gif +0 -0
  1053. data/public/images/cms/nav_cap.png +0 -0
  1054. data/public/images/cms/nav_cap_h.gif +0 -0
  1055. data/public/images/cms/nav_content_library.gif +0 -0
  1056. data/public/images/cms/nav_content_library_h.gif +0 -0
  1057. data/public/images/cms/nav_content_library_on.gif +0 -0
  1058. data/public/images/cms/nav_dash.gif +0 -0
  1059. data/public/images/cms/nav_dash_h.gif +0 -0
  1060. data/public/images/cms/nav_dash_on.gif +0 -0
  1061. data/public/images/cms/nav_h.gif +0 -0
  1062. data/public/images/cms/nav_sitemap.gif +0 -0
  1063. data/public/images/cms/nav_sitemap_h.gif +0 -0
  1064. data/public/images/cms/nav_sitemap_on.gif +0 -0
  1065. data/public/images/cms/page_toolbar/page_toolbar_bg.gif +0 -0
  1066. data/public/images/cms/page_toolbar/page_toolbar_inset_bg.gif +0 -0
  1067. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_bg.gif +0 -0
  1068. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_l.gif +0 -0
  1069. data/public/images/cms/page_toolbar/page_toolbar_inset_draft_r.gif +0 -0
  1070. data/public/images/cms/page_toolbar/page_toolbar_inset_l.gif +0 -0
  1071. data/public/images/cms/page_toolbar/page_toolbar_inset_published_bg.gif +0 -0
  1072. data/public/images/cms/page_toolbar/page_toolbar_inset_published_l.gif +0 -0
  1073. data/public/images/cms/page_toolbar/page_toolbar_inset_published_r.gif +0 -0
  1074. data/public/images/cms/page_toolbar/page_toolbar_inset_r.gif +0 -0
  1075. data/public/images/cms/page_toolbar/page_toolbar_l.gif +0 -0
  1076. data/public/images/cms/page_toolbar/page_toolbar_r.gif +0 -0
  1077. data/public/images/cms/page_toolbar/status_draft_bg.gif +0 -0
  1078. data/public/images/cms/page_toolbar/status_draft_l.gif +0 -0
  1079. data/public/images/cms/page_toolbar/status_l.gif +0 -0
  1080. data/public/images/cms/page_toolbar/status_published_bg.gif +0 -0
  1081. data/public/images/cms/page_toolbar/status_published_l.gif +0 -0
  1082. data/public/images/cms/page_toolbar/visual_editor_bg.gif +0 -0
  1083. data/public/images/cms/page_toolbar/visual_editor_end.gif +0 -0
  1084. data/public/images/cms/page_toolbar/visual_editor_r.gif +0 -0
  1085. data/public/images/cms/page_toolbar/visual_editor_state_bg.gif +0 -0
  1086. data/public/images/cms/pages/add_connectable.gif +0 -0
  1087. data/public/images/cms/pages/connect_connectable.gif +0 -0
  1088. data/public/images/cms/pages/container_border.gif +0 -0
  1089. data/public/images/cms/pages/container_border_l.gif +0 -0
  1090. data/public/images/cms/pages/container_border_r.gif +0 -0
  1091. data/public/images/cms/pages/delete_connectable.gif +0 -0
  1092. data/public/images/cms/pages/down_connectable.gif +0 -0
  1093. data/public/images/cms/pages/down_connectable_disabled.gif +0 -0
  1094. data/public/images/cms/pages/edit_connectable.gif +0 -0
  1095. data/public/images/cms/pages/edit_connectable_2.gif +0 -0
  1096. data/public/images/cms/pages/show_connectable.gif +0 -0
  1097. data/public/images/cms/pages/up_connectable.gif +0 -0
  1098. data/public/images/cms/pages/up_connectable_disabled.gif +0 -0
  1099. data/public/images/cms/pagination/first.gif +0 -0
  1100. data/public/images/cms/pagination/first_h.gif +0 -0
  1101. data/public/images/cms/pagination/input.gif +0 -0
  1102. data/public/images/cms/pagination/last.gif +0 -0
  1103. data/public/images/cms/pagination/last_h.gif +0 -0
  1104. data/public/images/cms/pagination/next.gif +0 -0
  1105. data/public/images/cms/pagination/next_h.gif +0 -0
  1106. data/public/images/cms/pagination/previous.gif +0 -0
  1107. data/public/images/cms/pagination/previous_h.gif +0 -0
  1108. data/public/images/cms/published_status.gif +0 -0
  1109. data/public/images/cms/search.png +0 -0
  1110. data/public/images/cms/search_submit.gif +0 -0
  1111. data/public/images/cms/search_submit_h.gif +0 -0
  1112. data/public/images/cms/searchbox_gradient.gif +0 -0
  1113. data/public/images/cms/select_bg.gif +0 -0
  1114. data/public/images/cms/select_bg_2.gif +0 -0
  1115. data/public/images/cms/sitemap/bottom_cap.png +0 -0
  1116. data/public/images/cms/sitemap/buffer_caps.png +0 -0
  1117. data/public/images/cms/sitemap/contract.png +0 -0
  1118. data/public/images/cms/sitemap/corners.gif +0 -0
  1119. data/public/images/cms/sitemap/corners_hover.gif +0 -0
  1120. data/public/images/cms/sitemap/divider.gif +0 -0
  1121. data/public/images/cms/sitemap/expand.png +0 -0
  1122. data/public/images/cms/sitemap/gradient.gif +0 -0
  1123. data/public/images/cms/sitemap/gray_contract.png +0 -0
  1124. data/public/images/cms/sitemap/gray_expand.png +0 -0
  1125. data/public/images/cms/sitemap/no_contents.png +0 -0
  1126. data/public/images/cms/sitemap/site_root_cap.png +0 -0
  1127. data/public/images/cms/sitemap/tooltip.gif +0 -0
  1128. data/public/images/cms/sitemap/top_cap_content.png +0 -0
  1129. data/public/images/cms/solid.gif +0 -0
  1130. data/public/images/cms/table/bl.gif +0 -0
  1131. data/public/images/cms/table/br.gif +0 -0
  1132. data/public/images/cms/table/divider.gif +0 -0
  1133. data/public/images/cms/table/td_cap_first_h.gif +0 -0
  1134. data/public/images/cms/table/td_cap_first_s.gif +0 -0
  1135. data/public/images/cms/table/td_cap_last_h.gif +0 -0
  1136. data/public/images/cms/table/td_cap_last_s.gif +0 -0
  1137. data/public/images/cms/table/td_last_bg.gif +0 -0
  1138. data/public/images/cms/table/th_bg.gif +0 -0
  1139. data/public/images/cms/table/th_divider.gif +0 -0
  1140. data/public/images/cms/table/th_last_bg.gif +0 -0
  1141. data/public/images/cms/table/tl.gif +0 -0
  1142. data/public/images/cms/table/tr.gif +0 -0
  1143. data/public/images/cms/table/tr_bg.gif +0 -0
  1144. data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
  1145. data/public/images/cms/thickbox/macFFBgHack.png +0 -0
  1146. data/public/images/cms/toolbar_bg.png +0 -0
  1147. data/public/images/cms/top_cap.png +0 -0
  1148. data/public/images/cms/top_cap_content.png +0 -0
  1149. data/public/images/cms/top_cap_menu_header.png +0 -0
  1150. data/public/images/cms/user_search_submit.gif +0 -0
  1151. data/public/images/cms/usercontrols_bg.png +0 -0
  1152. data/public/images/cms/usercontrols_bg_cap.png +0 -0
  1153. data/public/javascripts/cms/application.js +148 -0
  1154. data/public/javascripts/cms/editor.js +56 -0
  1155. data/public/javascripts/cms/sitemap.js +426 -0
  1156. data/public/javascripts/jquery-ui.js +591 -0
  1157. data/public/javascripts/jquery.contextMenu.js +211 -0
  1158. data/public/javascripts/jquery.cookie.js +96 -0
  1159. data/public/javascripts/jquery.dimensions.js +119 -0
  1160. data/public/javascripts/jquery.js +11 -0
  1161. data/public/javascripts/jquery.selectbox-0.5.js +209 -0
  1162. data/public/javascripts/jquery.taglist.js +136 -0
  1163. data/public/javascripts/jquery.thickbox.js +10 -0
  1164. data/public/site/customconfig.js +1 -0
  1165. data/public/stylesheets/cms/administration.css +91 -0
  1166. data/public/stylesheets/cms/application.css +166 -0
  1167. data/public/stylesheets/cms/block.css +26 -0
  1168. data/public/stylesheets/cms/buttons.css +120 -0
  1169. data/public/stylesheets/cms/content_library.css +139 -0
  1170. data/public/stylesheets/cms/content_types.css +4 -0
  1171. data/public/stylesheets/cms/dashboard.css +118 -0
  1172. data/public/stylesheets/cms/data_table.css +156 -0
  1173. data/public/stylesheets/cms/date_picker.css +73 -0
  1174. data/public/stylesheets/cms/form_layout.css +269 -0
  1175. data/public/stylesheets/cms/jquery.contextMenu.css +61 -0
  1176. data/public/stylesheets/cms/login.css +78 -0
  1177. data/public/stylesheets/cms/menu.css +116 -0
  1178. data/public/stylesheets/cms/nav.css +98 -0
  1179. data/public/stylesheets/cms/page_toolbar.css +135 -0
  1180. data/public/stylesheets/cms/reset.css +46 -0
  1181. data/public/stylesheets/cms/selectbox.css +56 -0
  1182. data/public/stylesheets/cms/sitemap.css +390 -0
  1183. data/public/stylesheets/cms/taglist.css +18 -0
  1184. data/public/stylesheets/cms/thickbox.css +163 -0
  1185. data/public/themes/blue_steel/images/logo.jpg +0 -0
  1186. data/public/themes/blue_steel/images/splash.jpg +0 -0
  1187. data/public/themes/blue_steel/stylesheets/style.css +257 -0
  1188. data/rails/init.rb +3 -0
  1189. data/rails_generators/browser_cms/USAGE +2 -0
  1190. data/rails_generators/browser_cms/browser_cms_generator.rb +35 -0
  1191. data/rails_generators/browser_cms/templates/README +1 -0
  1192. data/rails_generators/browser_cms_demo_site/USAGE +1 -0
  1193. data/rails_generators/browser_cms_demo_site/browser_cms_demo_site_generator.rb +63 -0
  1194. data/rails_generators/browser_cms_demo_site/templates/migration.rb +21 -0
  1195. data/rails_generators/content_block/USAGE +32 -0
  1196. data/rails_generators/content_block/content_block_generator.rb +69 -0
  1197. data/rails_generators/content_block/templates/_form.html.erb +22 -0
  1198. data/rails_generators/content_block/templates/content_block.rb +27 -0
  1199. data/rails_generators/content_block/templates/controller.rb +2 -0
  1200. data/rails_generators/content_block/templates/functional_test.erb +11 -0
  1201. data/rails_generators/content_block/templates/migration.rb +38 -0
  1202. data/rails_generators/content_block/templates/render.html.erb +14 -0
  1203. data/rails_generators/content_block/templates/unit_test.erb +9 -0
  1204. data/rails_generators/portlet/USAGE +37 -0
  1205. data/rails_generators/portlet/portlet_generator.rb +31 -0
  1206. data/rails_generators/portlet/templates/_form.html.erb +6 -0
  1207. data/rails_generators/portlet/templates/portlet.rb +7 -0
  1208. data/rails_generators/portlet/templates/render.html.erb +1 -0
  1209. data/rails_generators/portlet/templates/unit_test.erb +9 -0
  1210. data/templates/blank.rb +30 -0
  1211. data/templates/demo.rb +28 -0
  1212. data/templates/module.rb +945 -0
  1213. data/test/custom_assertions.rb +68 -0
  1214. data/test/factories.rb +109 -0
  1215. data/test/functional/cms/cache_controller_test.rb +14 -0
  1216. data/test/functional/cms/categories_controller_test.rb +25 -0
  1217. data/test/functional/cms/connectors_controller_test.rb +60 -0
  1218. data/test/functional/cms/content_controller_test.rb +379 -0
  1219. data/test/functional/cms/content_types_controller_test.rb +18 -0
  1220. data/test/functional/cms/dashboard_controller_test.rb +17 -0
  1221. data/test/functional/cms/dynamic_views_controller_test.rb +28 -0
  1222. data/test/functional/cms/file_blocks_controller_test.rb +51 -0
  1223. data/test/functional/cms/groups_controller_test.rb +50 -0
  1224. data/test/functional/cms/home_controller_test.rb +156 -0
  1225. data/test/functional/cms/html_blocks_controller_test.rb +163 -0
  1226. data/test/functional/cms/image_blocks_controller_test.rb +75 -0
  1227. data/test/functional/cms/links_controller_test.rb +60 -0
  1228. data/test/functional/cms/pages_controller_test.rb +89 -0
  1229. data/test/functional/cms/portlets_controller_test.rb +67 -0
  1230. data/test/functional/cms/section_nodes_controller_test.rb +44 -0
  1231. data/test/functional/cms/sections_controller_test.rb +78 -0
  1232. data/test/functional/cms/sessions_controller_test.rb +52 -0
  1233. data/test/functional/cms/toolbar_controller_test.rb +64 -0
  1234. data/test/functional/cms/users_controller_test.rb +184 -0
  1235. data/test/integration/login_test.rb +14 -0
  1236. data/test/test_helper.rb +159 -0
  1237. data/test/test_logging.rb +67 -0
  1238. data/test/unit/behaviors/attaching_test.rb +333 -0
  1239. data/test/unit/behaviors/dynamic_attributes_test.rb +38 -0
  1240. data/test/unit/behaviors/publishable_test.rb +53 -0
  1241. data/test/unit/behaviors/searching_test.rb +102 -0
  1242. data/test/unit/behaviors/taggable_test.rb +109 -0
  1243. data/test/unit/extensions/active_record/base_test.rb +10 -0
  1244. data/test/unit/extensions/hash_test.rb +17 -0
  1245. data/test/unit/extensions/integer_test.rb +10 -0
  1246. data/test/unit/helpers/application_helper_test.rb +29 -0
  1247. data/test/unit/helpers/form_builder_test.rb +17 -0
  1248. data/test/unit/helpers/menu_helper_test.rb +377 -0
  1249. data/test/unit/helpers/page_helper_test.rb +57 -0
  1250. data/test/unit/helpers/path_helper_test.rb +57 -0
  1251. data/test/unit/lib/content_block_test.rb +166 -0
  1252. data/test/unit/lib/generators_test.rb +40 -0
  1253. data/test/unit/models/attachment_test.rb +96 -0
  1254. data/test/unit/models/category_test.rb +40 -0
  1255. data/test/unit/models/category_type_test.rb +8 -0
  1256. data/test/unit/models/connector_test.rb +152 -0
  1257. data/test/unit/models/content_type_test.rb +23 -0
  1258. data/test/unit/models/email_page_portlet_test.rb +14 -0
  1259. data/test/unit/models/file_block_test.rb +211 -0
  1260. data/test/unit/models/group_test.rb +7 -0
  1261. data/test/unit/models/html_block_test.rb +102 -0
  1262. data/test/unit/models/link_test.rb +8 -0
  1263. data/test/unit/models/page_partial_test.rb +29 -0
  1264. data/test/unit/models/page_route_test.rb +29 -0
  1265. data/test/unit/models/page_template_test.rb +37 -0
  1266. data/test/unit/models/page_test.rb +726 -0
  1267. data/test/unit/models/permission_test.rb +10 -0
  1268. data/test/unit/models/portlet_test.rb +21 -0
  1269. data/test/unit/models/section_node_test.rb +92 -0
  1270. data/test/unit/models/sections_test.rb +125 -0
  1271. data/test/unit/models/site_test.rb +50 -0
  1272. data/test/unit/models/task_test.rb +126 -0
  1273. data/test/unit/models/user_test.rb +130 -0
  1274. metadata +1326 -0
@@ -0,0 +1,367 @@
1
+ module Cms
2
+ module Behaviors
3
+ # The DynamicAttributes behavior allows a model to store values for any attributes.
4
+ # A model that uses DynamicAttributes should have corresponding "_attributes" table
5
+ # where it stores the values for the dynamic attributes.
6
+ # This is based on the {Flex Attributes Rails Plugin}[http://rubyforge.org/projects/flex-attributes].
7
+ #
8
+ # class User < ActiveRecord::Base
9
+ # has_dynamic_attributes
10
+ # end
11
+ # eric = User.find_by_login 'eric'
12
+ # puts "My AOL instant message name is: #{eric.aim}"
13
+ # eric.phone = '555-123-4567'
14
+ # eric.save
15
+ #
16
+ # The above example should work even though "aim" and "phone" are not
17
+ # attributes on the User model.
18
+ #
19
+ # The following options are available on for has_dynamic_attributes to modify
20
+ # the behavior. Reasonable defaults are provided:
21
+ #
22
+ # class_name::
23
+ # The class for the related model. This defaults to the
24
+ # model name prepended to "Attribute". So for a "User" model the class
25
+ # name would be "UserAttribute". The class can actually exist (in that
26
+ # case the model file will be loaded through Rails dependency system) or
27
+ # if it does not exist a basic model will be dynamically defined for you.
28
+ # This allows you to implement custom methods on the related class by
29
+ # simply defining the class manually.
30
+ # table_name::
31
+ # The table for the related model. This defaults to the
32
+ # attribute model's table name.
33
+ # relationship_name::
34
+ # This is the name of the actual has_many
35
+ # relationship. Most of the type this relationship will only be used
36
+ # indirectly but it is there if the user wants more raw access. This
37
+ # defaults to the class name underscored then pluralized finally turned
38
+ # into a symbol.
39
+ # foreign_key::
40
+ # The key in the attribute table to relate back to the
41
+ # model. This defaults to the model name underscored prepended to "_id"
42
+ # name_field::
43
+ # The field which stores the name of the attribute in the related object
44
+ # value_field::
45
+ # The field that stores the value in the related object
46
+ # fields::
47
+ # A list of fields that are valid dynamic attributes. By default
48
+ # this is "nil" which means that all field are valid. Use this option if
49
+ # you want some fields to go to one dynamic attribute model while other
50
+ # fields will go to another. As an alternative you can override the
51
+ # #dynamic_attributes method which will return a list of all valid dynamic
52
+ # attributes. This is useful if you want to read the list of attributes
53
+ # from another source to keep your code DRY. This method is given a
54
+ # single argument which is the class for the related model. The following
55
+ # provide an example:
56
+ #
57
+ # class User < ActiveRecord::Base
58
+ # has_dynamic_attributes :class_name => 'UserContactInfo'
59
+ # has_dynamic_attributes :class_name => 'Preferences'
60
+ #
61
+ # def dynamic_attributes(model)
62
+ # case model
63
+ # when UserContactInfo
64
+ # %w(email phone aim yahoo msn)
65
+ # when Preference
66
+ # %w(project_search project_order user_search user_order)
67
+ # else Array.new
68
+ # end
69
+ # end
70
+ # end
71
+ #
72
+ # eric = User.find_by_login 'eric'
73
+ # eric.email = 'eric@example.com' # Will save to UserContactInfo model
74
+ # eric.project_order = 'name' # Will save to Preference
75
+ # eric.save # Carries out save so now values are in database
76
+ #
77
+ # Note the else clause in our case statement. Since an empty array is
78
+ # returned for all other models (perhaps added later) then we can be
79
+ # certain that only the above dynamic attributes are allowed.
80
+ #
81
+ # If both a :fields option and #dynamic_attributes method is defined the
82
+ # :fields option take precidence. This allows you to easily define the
83
+ # field list inline for one model while implementing #dynamic_attributes
84
+ # for another model and not having #dynamic_attributes need to determine
85
+ # what model it is answering for. In both cases the list of dynamic
86
+ # attributes can be a list of string or symbols
87
+ #
88
+ # A final alternative to :fields and #dynamic_attributes is the
89
+ # #is_dynamic_attribute? method. This method is given two arguments. The
90
+ # first is the attribute being retrieved/saved the second is the Model we
91
+ # are testing for. If you override this method then the #dynamic_attributes
92
+ # method or the :fields option will have no affect. Use of this method
93
+ # is ideal when you want to retrict the attributes but do so in a
94
+ # algorithmic way. The following is an example:
95
+ # class User < ActiveRecord::Base
96
+ # has_dynamic_attributes :class_name => 'UserContactInfo'
97
+ # has_dynamic_attributes :class_name => 'Preferences'
98
+ #
99
+ # def is_dynamic_attribute?(attr, model)
100
+ # case attr.to_s
101
+ # when /^contact_/ then true
102
+ # when /^preference_/ then true
103
+ # else
104
+ # false
105
+ # end
106
+ # end
107
+ # end
108
+ #
109
+ # eric = User.find_by_login 'eric'
110
+ # eric.contact_phone = '555-123-4567'
111
+ # eric.contact_email = 'eric@example.com'
112
+ # eric.preference_project_order = 'name'
113
+ # eric.some_attribute = 'blah' # If some_attribute is not defined on
114
+ # # the model then method not found is thrown
115
+ module DynamicAttributes
116
+ def self.included(model_class)
117
+ model_class.extend(MacroMethods)
118
+ end
119
+ module MacroMethods
120
+ def has_dynamic_attributes?
121
+ !!@has_dynamic_attributes
122
+ end
123
+
124
+ # Will make the current class have dynamic attributes.
125
+ def has_dynamic_attributes(options={})
126
+ @has_dynamic_attributes = true
127
+ include InstanceMethods
128
+
129
+ # Provide default options
130
+ options[:class_name] ||= self.class_name + 'Attribute'
131
+ options[:table_name] ||= options[:class_name].tableize
132
+ options[:relationship_name] ||= options[:class_name].tableize.to_sym
133
+ options[:foreign_key] ||= self.class_name.foreign_key
134
+ options[:base_foreign_key] ||= self.name.underscore.foreign_key
135
+ options[:name_field] ||= 'name'
136
+ options[:value_field] ||= 'value'
137
+ options[:fields].collect! {|f| f.to_s} unless options[:fields].nil?
138
+
139
+ # Init option storage if necessary
140
+ cattr_accessor :dynamic_options
141
+ self.dynamic_options ||= Hash.new
142
+
143
+ # Return if already processed.
144
+ return if self.dynamic_options.keys.include? options[:class_name]
145
+
146
+ # Attempt to load related class. If not create it
147
+ begin
148
+ options[:class_name].constantize
149
+ rescue
150
+ Object.const_set(options[:class_name],
151
+ Class.new(ActiveRecord::Base)).class_eval do
152
+ def self.reloadable? #:nodoc:
153
+ false
154
+ end
155
+ end
156
+ end
157
+
158
+ # Store options
159
+ self.dynamic_options[options[:class_name]] = options
160
+
161
+ # Modify attribute class
162
+ attribute_class = options[:class_name].constantize
163
+ base_class = self.name.underscore.to_sym
164
+ attribute_class.class_eval do
165
+ belongs_to base_class, :foreign_key => options[:base_foreign_key]
166
+ alias_method :base, base_class # For generic access
167
+ end
168
+
169
+ # Modify main class
170
+ class_eval do
171
+ has_many options[:relationship_name],
172
+ :class_name => options[:class_name],
173
+ :table_name => options[:table_name],
174
+ :foreign_key => options[:foreign_key],
175
+ :dependent => :destroy
176
+
177
+ # The following is only setup once
178
+ unless private_method_defined? :method_missing_without_dynamic_attributes
179
+
180
+ # Carry out delayed actions before save
181
+ after_validation_on_update :save_modified_dynamic_attributes
182
+
183
+ # Make attributes seem real
184
+ alias_method :method_missing_without_dynamic_attributes, :method_missing
185
+ alias_method :method_missing, :method_missing_with_dynamic_attributes
186
+
187
+ private
188
+
189
+ alias_method :read_attribute_without_dynamic_attributes, :read_attribute
190
+ alias_method :read_attribute, :read_attribute_with_dynamic_attributes
191
+ alias_method :write_attribute_without_dynamic_attributes, :write_attribute
192
+ alias_method :write_attribute, :write_attribute_with_dynamic_attributes
193
+
194
+ end
195
+ end
196
+ end
197
+ end
198
+ module InstanceMethods
199
+ # Will determine if the given attribute is a dynamic attribute on the
200
+ # given model. Override this in your class to provide custom logic if
201
+ # the #dynamic_attributes method or the :fields option are not flexible
202
+ # enough. If you override this method :fields and #dynamic_attributes will
203
+ # not apply at all unless you implement them yourself.
204
+ def is_dynamic_attribute?(attr, model)
205
+ attr = attr.to_s
206
+ return dynamic_options[model.name][:fields].include?(attr) unless
207
+ dynamic_options[model.name][:fields].nil?
208
+ return dynamic_attributes(model).collect {|f| f.to_s}.include?(attr) unless
209
+ dynamic_attributes(model).nil?
210
+ true
211
+ end
212
+
213
+ # Return a list of valid dynamic attributes for the given model. Return
214
+ # nil if any field is allowed. If you want to say no field is allowed
215
+ # then return an empty array. If you just have a static list the :fields
216
+ # option is most likely easier.
217
+ def dynamic_attributes(model); nil end
218
+
219
+ private
220
+
221
+ # Called after validation on update so that dynamic attributes behave
222
+ # like normal attributes in the fact that the database is not touched
223
+ # until save is called.
224
+ def save_modified_dynamic_attributes
225
+ return if @save_dynamic_attr.nil?
226
+ @save_dynamic_attr.each do |s|
227
+ model, attr_name = s
228
+ related_attr = dynamic_related_attr model, attr_name
229
+ unless related_attr.nil?
230
+ if related_attr.value.nil?
231
+ dynamic_related(model).delete related_attr
232
+ else
233
+ related_attr.save
234
+ end
235
+ end
236
+ end
237
+ @save_dynamic_attr = []
238
+ end
239
+
240
+ # Overrides ActiveRecord::Base#read_attribute
241
+ def read_attribute_with_dynamic_attributes(attr_name)
242
+ attr_name = attr_name.to_s
243
+ exec_if_related attr_name do |model|
244
+ return nil if !@remove_dynamic_attr.nil? && @remove_dynamic_attr.any? do |r|
245
+ r[0] == model && r[1] == attr_name
246
+ end
247
+ value_field = dynamic_options[model.name][:value_field]
248
+ related_attr = dynamic_related_attr model, attr_name
249
+ return nil if related_attr.nil?
250
+ return related_attr.send(value_field)
251
+ end
252
+ read_attribute_without_dynamic_attributes(attr_name)
253
+ end
254
+
255
+ # Overrides ActiveRecord::Base#write_attribute
256
+ def write_attribute_with_dynamic_attributes(attr_name, value)
257
+ attr_name = attr_name.to_s
258
+ exec_if_related attr_name do |model|
259
+ value_field = dynamic_options[model.name][:value_field]
260
+ @save_dynamic_attr ||= []
261
+ @save_dynamic_attr << [model, attr_name]
262
+ related_attr = dynamic_related_attr(model, attr_name)
263
+ if related_attr.nil?
264
+ # Used to check for nil? but this caused validation
265
+ # problems that are harder to solve. blank? is probably
266
+ # not correct but it works well for now.
267
+ unless value.blank?
268
+ name_field = dynamic_options[model.name][:name_field]
269
+ foreign_key = dynamic_options[model.name][:foreign_key]
270
+ dynamic_related(model).build name_field => attr_name,
271
+ value_field => value, foreign_key => self.id
272
+ end
273
+ return value
274
+ else
275
+ value_field = (value_field.to_s + '=').to_sym
276
+ return related_attr.send(value_field, value)
277
+ end
278
+ end
279
+ write_attribute_without_dynamic_attributes(attr_name, value)
280
+ end
281
+
282
+ # Implements dynamic-attributes as if real getter/setter methods
283
+ # were defined.
284
+ def method_missing_with_dynamic_attributes(method_id, *args, &block)
285
+ begin
286
+ method_missing_without_dynamic_attributes method_id, *args, &block
287
+ rescue NoMethodError => e
288
+ attr_name = method_id.to_s.sub(/\=$/, '')
289
+ exec_if_related attr_name do |model|
290
+ if method_id.to_s =~ /\=$/
291
+ return write_attribute_with_dynamic_attributes(attr_name, args[0])
292
+ else
293
+ return read_attribute_with_dynamic_attributes(attr_name)
294
+ end
295
+ end
296
+ raise e
297
+ end
298
+ end
299
+
300
+ # Retrieve the related dynamic attribute object
301
+ def dynamic_related_attr(model, attr)
302
+ name_field = dynamic_options[model.name][:name_field]
303
+ dynamic_related(model).to_a.find {|r| r.send(name_field) == attr}
304
+ end
305
+
306
+ # Retrieve the collection of related dynamic attributes
307
+ def dynamic_related(model)
308
+ relationship = dynamic_options[model.name][:relationship_name]
309
+ send relationship
310
+ end
311
+
312
+ # Yield only if attr_name is a dynamic_attribute
313
+ def exec_if_related(attr_name)
314
+ return false if self.class.column_names.include? attr_name
315
+ each_dynamic_relation do |model|
316
+ if is_dynamic_attribute?(attr_name, model)
317
+ yield model
318
+ end
319
+ end
320
+ end
321
+
322
+ # Yields for each dynamic relation.
323
+ def each_dynamic_relation
324
+ dynamic_options.keys.each {|kls| yield kls.constantize}
325
+ end
326
+
327
+ # Returns the options for the dynamic attributes
328
+ def dynamic_options
329
+ nonversioned_class(self.class).dynamic_options
330
+ end
331
+
332
+ # Will return the parent model if kls is a versioned class
333
+ def nonversioned_class(kls)
334
+ if kls.name =~ /\:\:Version$/
335
+ base_class = kls.name
336
+ base_class.sub!(/\:\:Version$/, '')
337
+ return base_class.constantize
338
+ end
339
+ kls
340
+ end
341
+
342
+ # This overrides the attributes= defined in ActiveRecord::Base
343
+ # The only difference is that this doesn't check to see if the
344
+ # model responds_to the method before sending it
345
+ # This is needed for Rails 2.2
346
+ def attributes=(new_attributes, guard_protected_attributes = true)
347
+ return if new_attributes.nil?
348
+ attributes = new_attributes.dup
349
+ attributes.stringify_keys!
350
+
351
+ multi_parameter_attributes = []
352
+ attributes = remove_attributes_protected_from_mass_assignment(attributes) if guard_protected_attributes
353
+
354
+ attributes.each do |k, v|
355
+ if k.include?("(")
356
+ multi_parameter_attributes << [ k, v ]
357
+ else
358
+ send(:"#{k}=", v)
359
+ end
360
+ end
361
+
362
+ assign_multiparameter_attributes(multi_parameter_attributes)
363
+ end
364
+ end
365
+ end
366
+ end
367
+ end
@@ -0,0 +1,33 @@
1
+ module Cms
2
+ module Behaviors
3
+ module FlushCacheOnChange
4
+ def self.included(model_class)
5
+ model_class.extend(MacroMethods)
6
+ model_class.class_eval do
7
+ def flush_cache_on_change?
8
+ false
9
+ end
10
+ end
11
+ end
12
+ module MacroMethods
13
+ def flush_cache_on_change?
14
+ !!@flush_cache_on_change
15
+ end
16
+ def flush_cache_on_change(options={})
17
+ include InstanceMethods
18
+ @flush_cache_on_change = true
19
+
20
+ after_save :flush_cache
21
+ after_destroy :flush_cache
22
+ end
23
+ end
24
+ module InstanceMethods
25
+ def flush_cache
26
+ if Cms.caching_enabled?
27
+ Cms.flush_cache
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ module Cms
2
+ module Behaviors
3
+ module Hiding
4
+ def self.included(model_class)
5
+ model_class.extend(MacroMethods)
6
+ end
7
+ module MacroMethods
8
+ def hideable?
9
+ !!@is_hideable
10
+ end
11
+ def is_hideable(options={})
12
+ @is_hideable = true
13
+ extend ClassMethods
14
+ include InstanceMethods
15
+
16
+ named_scope :hidden, :conditions => {:hidden => true}
17
+ named_scope :not_hidden, :conditions => {:hidden => false}
18
+ end
19
+ end
20
+ module ClassMethods
21
+ end
22
+ module InstanceMethods
23
+ def hide
24
+ self.hidden = true
25
+ self.version_comment = "Hidden"
26
+ self.save
27
+ end
28
+ def hide!
29
+ self.hidden = true
30
+ self.version_comment = "Hidden"
31
+ self.save!
32
+ end
33
+ def unhide
34
+ self.hidden = false
35
+ self.version_comment = "Unhidden"
36
+ self.save
37
+ end
38
+ def unhide!
39
+ self.hidden = false
40
+ self.version_comment = "Unhidden"
41
+ self.save!
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,209 @@
1
+ # This is just a repackaged version of Will Paginate 2.2.2
2
+ module Cms
3
+ module Behaviors
4
+ module Pagination
5
+ def self.included(model_class)
6
+ model_class.extend(ClassMethods)
7
+ class << model_class
8
+ define_method(:default_per_page) { 15 }
9
+ end
10
+ end
11
+ class InvalidPage < ArgumentError
12
+ def initialize(page, page_num)
13
+ super "#{page.inspect} given as value, which translates to '#{page_num}' as page number"
14
+ end
15
+ end
16
+ class Collection < Array
17
+ attr_reader :current_page, :per_page, :total_entries, :total_pages
18
+
19
+ # Arguments to the constructor are the current page number, per-page limit
20
+ # and the total number of entries. The last argument is optional because it
21
+ # is best to do lazy counting; in other words, count *conditionally* after
22
+ # populating the collection using the +replace+ method.
23
+ def initialize(page, per_page, total = nil)
24
+ @current_page = page.to_i
25
+ raise InvalidPage.new(page, @current_page) if @current_page < 1
26
+ @per_page = per_page.to_i
27
+ raise ArgumentError, "`per_page` setting cannot be less than 1 (#{@per_page} given)" if @per_page < 1
28
+
29
+ self.total_entries = total if total
30
+ end
31
+
32
+ # Just like +new+, but yields the object after instantiation and returns it
33
+ # afterwards. This is very useful for manual pagination:
34
+ #
35
+ # @entries = WillPaginate::Collection.create(1, 10) do |pager|
36
+ # result = Post.find(:all, :limit => pager.per_page, :offset => pager.offset)
37
+ # # inject the result array into the paginated collection:
38
+ # pager.replace(result)
39
+ #
40
+ # unless pager.total_entries
41
+ # # the pager didn't manage to guess the total count, do it manually
42
+ # pager.total_entries = Post.count
43
+ # end
44
+ # end
45
+ #
46
+ # The possibilities with this are endless. For another example, here is how
47
+ # WillPaginate used to define pagination for Array instances:
48
+ #
49
+ # Array.class_eval do
50
+ # def paginate(page = 1, per_page = 15)
51
+ # WillPaginate::Collection.create(page, per_page, size) do |pager|
52
+ # pager.replace self[pager.offset, pager.per_page].to_a
53
+ # end
54
+ # end
55
+ # end
56
+ #
57
+ # The Array#paginate API has since then changed, but this still serves as a
58
+ # fine example of WillPaginate::Collection usage.
59
+ def self.create(page, per_page, total = nil, &block)
60
+ pager = new(page, per_page, total)
61
+ yield pager
62
+ pager
63
+ end
64
+
65
+ # Helper method that is true when someone tries to fetch a page with a
66
+ # larger number than the last page. Can be used in combination with flashes
67
+ # and redirecting.
68
+ def out_of_bounds?
69
+ current_page > total_pages
70
+ end
71
+
72
+ # Current offset of the paginated collection. If we're on the first page,
73
+ # it is always 0. If we're on the 2nd page and there are 30 entries per page,
74
+ # the offset is 30. This property is useful if you want to render ordinals
75
+ # besides your records: simply start with offset + 1.
76
+ def offset
77
+ (current_page - 1) * per_page
78
+ end
79
+
80
+ # current_page - 1 or nil if there is no previous page
81
+ def previous_page
82
+ current_page > 1 ? (current_page - 1) : nil
83
+ end
84
+
85
+ # current_page + 1 or nil if there is no next page
86
+ def next_page
87
+ current_page < total_pages ? (current_page + 1) : nil
88
+ end
89
+
90
+ def total_entries=(number)
91
+ @total_entries = number.to_i
92
+ @total_pages = (@total_entries / per_page.to_f).ceil
93
+ end
94
+
95
+ # This is a magic wrapper for the original Array#replace method. It serves
96
+ # for populating the paginated collection after initialization.
97
+ #
98
+ # Why magic? Because it tries to guess the total number of entries judging
99
+ # by the size of given array. If it is shorter than +per_page+ limit, then we
100
+ # know we're on the last page. This trick is very useful for avoiding
101
+ # unnecessary hits to the database to do the counting after we fetched the
102
+ # data for the current page.
103
+ #
104
+ # However, after using +replace+ you should always test the value of
105
+ # +total_entries+ and set it to a proper value if it's +nil+. See the example
106
+ # in +create+.
107
+ def replace(array)
108
+ result = super
109
+
110
+ # The collection is shorter then page limit? Rejoice, because
111
+ # then we know that we are on the last page!
112
+ if total_entries.nil? and length < per_page and (current_page == 1 or length > 0)
113
+ self.total_entries = offset + length
114
+ end
115
+
116
+ result
117
+ end
118
+ end
119
+ module ClassMethods
120
+ # This is the main paginating finder.
121
+ #
122
+ # == Special parameters for paginating finders
123
+ # * <tt>:page</tt> -- REQUIRED, but defaults to 1 if false or nil
124
+ # * <tt>:per_page</tt> -- defaults to <tt>CurrentModel.per_page</tt> (which is 30 if not overridden)
125
+ # * <tt>:total_entries</tt> -- use only if you manually count total entries
126
+ # * <tt>:count</tt> -- additional options that are passed on to +count+
127
+ # * <tt>:finder</tt> -- name of the ActiveRecord finder used (default: "find")
128
+ #
129
+ # All other options (+conditions+, +order+, ...) are forwarded to +find+
130
+ # and +count+ calls.
131
+ def paginate(*args, &block)
132
+ options = args.pop
133
+ page, per_page, total_entries = parse_pagination_options(options)
134
+
135
+ finder = (options[:finder] || 'find').to_s
136
+ if finder == 'find'
137
+ # an array of IDs may have been given:
138
+ total_entries ||= (Array === args.first and args.first.size)
139
+ # :all is implicit
140
+ args.unshift(:all) if args.empty?
141
+ end
142
+
143
+ Collection.create(page, per_page, total_entries) do |pager|
144
+ count_options = options.except :page, :per_page, :total_entries, :finder
145
+ find_options = count_options.except(:count).update(:offset => pager.offset, :limit => pager.per_page)
146
+
147
+ args << find_options
148
+ # @options_from_last_find = nil
149
+ pager.replace send(finder, *args, &block)
150
+
151
+ # magic counting for user convenience:
152
+ pager.total_entries = count_for_pagination(count_options, args, finder) unless pager.total_entries
153
+ end
154
+ end
155
+ protected
156
+ # Does the not-so-trivial job of finding out the total number of entries
157
+ # in the database. It relies on the ActiveRecord +count+ method.
158
+ def count_for_pagination(options, args, finder)
159
+ excludees = [:count, :order, :limit, :offset, :readonly]
160
+ unless options[:select] and options[:select] =~ /^\s*DISTINCT\b/i
161
+ excludees << :select # only exclude the select param if it doesn't begin with DISTINCT
162
+ end
163
+ # count expects (almost) the same options as find
164
+ count_options = options.except *excludees
165
+
166
+ # merge the hash found in :count
167
+ # this allows you to specify :select, :order, or anything else just for the count query
168
+ count_options.update options[:count] if options[:count]
169
+
170
+ # we may have to scope ...
171
+ counter = Proc.new { count(count_options) }
172
+
173
+ # we may be in a model or an association proxy!
174
+ klass = (@owner and @reflection) ? @reflection.klass : self
175
+
176
+ count = if finder.index('find_') == 0 and klass.respond_to?(scoper = finder.sub('find', 'with'))
177
+ # scope_out adds a 'with_finder' method which acts like with_scope, if it's present
178
+ # then execute the count with the scoping provided by the with_finder
179
+ send(scoper, &counter)
180
+ elsif match = /^find_(all_by|by)_([_a-zA-Z]\w*)$/.match(finder)
181
+ # extract conditions from calls like "paginate_by_foo_and_bar"
182
+ attribute_names = extract_attribute_names_from_match(match)
183
+ conditions = construct_attributes_from_arguments(attribute_names, args)
184
+ with_scope(:find => { :conditions => conditions }, &counter)
185
+ else
186
+ counter.call
187
+ end
188
+
189
+ count.respond_to?(:length) ? count.length : count
190
+ end
191
+
192
+ def parse_pagination_options(options) #:nodoc:
193
+ raise ArgumentError, 'parameter hash expected' unless options.respond_to? :symbolize_keys
194
+ options = options.symbolize_keys
195
+ raise ArgumentError, ':page parameter required' unless options.key? :page
196
+
197
+ if options[:count] and options[:total_entries]
198
+ raise ArgumentError, ':count and :total_entries are mutually exclusive'
199
+ end
200
+
201
+ page = options[:page] || 1
202
+ per_page = options[:per_page] || self.default_per_page
203
+ total = options[:total_entries]
204
+ [page, per_page, total]
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end