browsercms 3.4.0.rc2 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (776) hide show
  1. data/.rvmrc +1 -1
  2. data/COPYRIGHT.txt +1 -1
  3. data/Gemfile.lock +6 -2
  4. data/README.markdown +6 -16
  5. data/{vendor/assets/javascripts/bcms/ckeditor/editor.js → app/assets/javascripts/bcms/ckeditor.js} +6 -3
  6. data/{vendor/assets/javascripts/bcms → app/assets/javascripts}/ckeditor/config.js +2 -0
  7. data/app/assets/javascripts/cms/application.js +1 -1
  8. data/app/assets/javascripts/cms/{core_library.js → core_library.js.erb} +5 -0
  9. data/app/assets/stylesheets/cms/form_layout.css.erb +1 -0
  10. data/app/controllers/cms/links_controller.rb +2 -2
  11. data/app/controllers/cms/tasks_controller.rb +1 -1
  12. data/app/controllers/cms/users_controller.rb +1 -1
  13. data/app/helpers/cms/ui_elements_helper.rb +6 -0
  14. data/app/views/cms/links/edit.html.erb +1 -1
  15. data/app/views/cms/links/new.html.erb +1 -1
  16. data/app/views/cms/tasks/new.html.erb +1 -1
  17. data/app/views/layouts/cms/_head.html.erb +1 -1
  18. data/app/views/layouts/cms/login.html.erb +1 -0
  19. data/app/views/layouts/cms/toolbar.html.erb +1 -0
  20. data/bin/bcms +65 -56
  21. data/bin/bcms-upgrade +3 -4
  22. data/browsercms.gemspec +10 -9
  23. data/db/migrate/20111130221145_browsercms340.rb +5 -3
  24. data/doc/release_notes.md +33 -22
  25. data/features/acts_as_content_page.feature +14 -0
  26. data/features/add_content_to_pages.feature +3 -4
  27. data/features/commands/new_projects.feature +14 -7
  28. data/features/commands/{upgrade_modules_from_3_1_to_3_4.feature → upgrade_modules_to_3_4_0_from_3_1_x.feature} +0 -0
  29. data/features/commands/upgrade_project_to_3_4_0_from_3_3_x.feature +52 -0
  30. data/features/commands/upgrading_modules.feature +3 -2
  31. data/features/manage_tasks.feature +25 -0
  32. data/features/manage_users.feature +38 -0
  33. data/features/{create_pages.feature → sitemap/create_pages.feature} +0 -0
  34. data/features/sitemap/manage_links.feature +29 -0
  35. data/features/{sitemap.feature → sitemap/sitemap.feature} +0 -0
  36. data/features/step_definitions/command_line_steps.rb +101 -4
  37. data/features/step_definitions/content_pages_steps.rb +28 -7
  38. data/features/step_definitions/manage_user_steps.rb +22 -0
  39. data/features/step_definitions/task_steps.rb +4 -0
  40. data/features/step_definitions/upgrade_module_steps.rb +3 -1
  41. data/features/support/async_support.rb +17 -0
  42. data/features/support/command_line_helpers.rb +21 -3
  43. data/lib/cms/acts/content_page.rb +23 -0
  44. data/lib/cms/commands/actions.rb +56 -1
  45. data/lib/cms/engine.rb +13 -3
  46. data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +6 -0
  47. data/lib/cms/upgrades/v3_4_0.rb +32 -0
  48. data/lib/cms/version.rb +1 -1
  49. data/lib/generators/cms/install/install_generator.rb +0 -2
  50. data/lib/tasks/db.rake +8 -0
  51. data/test/dummy/app/assets/javascripts/content_page.js +2 -0
  52. data/test/dummy/app/assets/stylesheets/content_page.css +4 -0
  53. data/test/dummy/app/controllers/content_page_controller.rb +13 -0
  54. data/test/dummy/app/helpers/content_page_helper.rb +2 -0
  55. data/test/dummy/app/views/content_page/custom_page.html.erb +3 -0
  56. data/test/dummy/app/views/content_page/index.html.erb +2 -0
  57. data/{app → test/dummy/app}/views/layouts/templates/default.html.erb +0 -0
  58. data/test/dummy/app/views/layouts/templates/subpage.html.erb +16 -0
  59. data/test/dummy/config/initializers/quiet_sprocket_assets.rb +10 -5
  60. data/test/dummy/config/routes.rb +3 -0
  61. data/test/dummy/test/functional/content_page_controller_test.rb +9 -0
  62. data/test/dummy/test/unit/helpers/content_page_helper_test.rb +4 -0
  63. data/test/factories.rb +1 -0
  64. data/test/functional/cms/links_controller_test.rb +0 -59
  65. data/test/functional/cms/users_controller_test.rb +0 -24
  66. data/test/unit/models/content_type_test.rb +27 -0
  67. data/todo_list.markdown +17 -35
  68. metadata +74 -735
  69. data/app/assets/javascripts/browsercms/application.js +0 -9
  70. data/app/views/layouts/application.html.erb +0 -11
  71. data/app/views/layouts/browsercms/application.html.erb +0 -14
  72. data/doc/app/classes/AbstractFileBlock.html +0 -172
  73. data/doc/app/classes/ActiveRecord.html +0 -105
  74. data/doc/app/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html +0 -293
  75. data/doc/app/classes/ActiveSupport.html +0 -111
  76. data/doc/app/classes/ActiveSupport/Cache.html +0 -111
  77. data/doc/app/classes/ActiveSupport/Cache/FileStore.html +0 -146
  78. data/doc/app/classes/ActsAsList.html +0 -147
  79. data/doc/app/classes/ActsAsList/ClassMethods.html +0 -202
  80. data/doc/app/classes/ActsAsList/InstanceMethods.html +0 -534
  81. data/doc/app/classes/ApplicationController.html +0 -119
  82. data/doc/app/classes/ApplicationHelper.html +0 -116
  83. data/doc/app/classes/Attachment.html +0 -726
  84. data/doc/app/classes/Category.html +0 -230
  85. data/doc/app/classes/CategoryType.html +0 -214
  86. data/doc/app/classes/Cms.html +0 -771
  87. data/doc/app/classes/Cms/Acts.html +0 -116
  88. data/doc/app/classes/Cms/Acts/ContentBlock.html +0 -146
  89. data/doc/app/classes/Cms/Acts/ContentBlock/MacroMethods.html +0 -165
  90. data/doc/app/classes/Cms/Acts/ContentBlock/MacroMethods/InstanceMethods.html +0 -140
  91. data/doc/app/classes/Cms/Acts/ContentPage.html +0 -187
  92. data/doc/app/classes/Cms/Acts/ContentPage/ClassMethods.html +0 -188
  93. data/doc/app/classes/Cms/ApplicationController.html +0 -369
  94. data/doc/app/classes/Cms/ApplicationHelper.html +0 -698
  95. data/doc/app/classes/Cms/AttachmentsController.html +0 -154
  96. data/doc/app/classes/Cms/Authentication.html +0 -116
  97. data/doc/app/classes/Cms/Authentication/Controller.html +0 -700
  98. data/doc/app/classes/Cms/Authentication/Model.html +0 -165
  99. data/doc/app/classes/Cms/Authentication/Model/ClassMethods.html +0 -246
  100. data/doc/app/classes/Cms/Authentication/Model/InstanceMethods.html +0 -412
  101. data/doc/app/classes/Cms/BaseController.html +0 -113
  102. data/doc/app/classes/Cms/Behaviors.html +0 -235
  103. data/doc/app/classes/Cms/Behaviors/Archiving.html +0 -147
  104. data/doc/app/classes/Cms/Behaviors/Archiving/InstanceMethods.html +0 -220
  105. data/doc/app/classes/Cms/Behaviors/Archiving/MacroMethods.html +0 -175
  106. data/doc/app/classes/Cms/Behaviors/Attaching.html +0 -160
  107. data/doc/app/classes/Cms/Behaviors/Attaching/InstanceMethods.html +0 -670
  108. data/doc/app/classes/Cms/Behaviors/Attaching/MacroMethods.html +0 -188
  109. data/doc/app/classes/Cms/Behaviors/Categorizing.html +0 -148
  110. data/doc/app/classes/Cms/Behaviors/Categorizing/ClassMethods.html +0 -105
  111. data/doc/app/classes/Cms/Behaviors/Categorizing/InstanceMethods.html +0 -140
  112. data/doc/app/classes/Cms/Behaviors/Categorizing/MacroMethods.html +0 -178
  113. data/doc/app/classes/Cms/Behaviors/ClassMethods.html +0 -272
  114. data/doc/app/classes/Cms/Behaviors/Connecting.html +0 -148
  115. data/doc/app/classes/Cms/Behaviors/Connecting/ClassMethods.html +0 -188
  116. data/doc/app/classes/Cms/Behaviors/Connecting/InstanceMethods.html +0 -312
  117. data/doc/app/classes/Cms/Behaviors/Connecting/MacroMethods.html +0 -184
  118. data/doc/app/classes/Cms/Behaviors/DynamicAttributes.html +0 -285
  119. data/doc/app/classes/Cms/Behaviors/DynamicAttributes/InstanceMethods.html +0 -181
  120. data/doc/app/classes/Cms/Behaviors/DynamicAttributes/MacroMethods.html +0 -243
  121. data/doc/app/classes/Cms/Behaviors/FlushCacheOnChange.html +0 -178
  122. data/doc/app/classes/Cms/Behaviors/FlushCacheOnChange/InstanceMethods.html +0 -142
  123. data/doc/app/classes/Cms/Behaviors/FlushCacheOnChange/MacroMethods.html +0 -175
  124. data/doc/app/classes/Cms/Behaviors/Hiding.html +0 -148
  125. data/doc/app/classes/Cms/Behaviors/Hiding/ClassMethods.html +0 -105
  126. data/doc/app/classes/Cms/Behaviors/Hiding/InstanceMethods.html +0 -220
  127. data/doc/app/classes/Cms/Behaviors/Hiding/MacroMethods.html +0 -176
  128. data/doc/app/classes/Cms/Behaviors/InstanceMethods.html +0 -287
  129. data/doc/app/classes/Cms/Behaviors/Pagination.html +0 -151
  130. data/doc/app/classes/Cms/Behaviors/Pagination/ClassMethods.html +0 -252
  131. data/doc/app/classes/Cms/Behaviors/Pagination/Collection.html +0 -437
  132. data/doc/app/classes/Cms/Behaviors/Pagination/InvalidPage.html +0 -146
  133. data/doc/app/classes/Cms/Behaviors/Publishing.html +0 -179
  134. data/doc/app/classes/Cms/Behaviors/Publishing/ClassMethods.html +0 -105
  135. data/doc/app/classes/Cms/Behaviors/Publishing/InstanceMethods.html +0 -333
  136. data/doc/app/classes/Cms/Behaviors/Publishing/MacroMethods.html +0 -191
  137. data/doc/app/classes/Cms/Behaviors/Rendering.html +0 -176
  138. data/doc/app/classes/Cms/Behaviors/Rendering/MacroMethods.html +0 -186
  139. data/doc/app/classes/Cms/Behaviors/Searching.html +0 -147
  140. data/doc/app/classes/Cms/Behaviors/Searching/ClassMethods.html +0 -164
  141. data/doc/app/classes/Cms/Behaviors/Searching/MacroMethods.html +0 -188
  142. data/doc/app/classes/Cms/Behaviors/SoftDeleting.html +0 -148
  143. data/doc/app/classes/Cms/Behaviors/SoftDeleting/ClassMethods.html +0 -217
  144. data/doc/app/classes/Cms/Behaviors/SoftDeleting/InstanceMethods.html +0 -247
  145. data/doc/app/classes/Cms/Behaviors/SoftDeleting/MacroMethods.html +0 -205
  146. data/doc/app/classes/Cms/Behaviors/Taggable.html +0 -148
  147. data/doc/app/classes/Cms/Behaviors/Taggable/ClassMethods.html +0 -164
  148. data/doc/app/classes/Cms/Behaviors/Taggable/InstanceMethods.html +0 -198
  149. data/doc/app/classes/Cms/Behaviors/Taggable/MacroMethods.html +0 -182
  150. data/doc/app/classes/Cms/Behaviors/Userstamping.html +0 -148
  151. data/doc/app/classes/Cms/Behaviors/Userstamping/ClassMethods.html +0 -105
  152. data/doc/app/classes/Cms/Behaviors/Userstamping/InstanceMethods.html +0 -143
  153. data/doc/app/classes/Cms/Behaviors/Userstamping/MacroMethods.html +0 -181
  154. data/doc/app/classes/Cms/Behaviors/Versioning.html +0 -148
  155. data/doc/app/classes/Cms/Behaviors/Versioning/ClassMethods.html +0 -237
  156. data/doc/app/classes/Cms/Behaviors/Versioning/InstanceMethods.html +0 -713
  157. data/doc/app/classes/Cms/Behaviors/Versioning/MacroMethods.html +0 -290
  158. data/doc/app/classes/Cms/CacheController.html +0 -174
  159. data/doc/app/classes/Cms/Caching.html +0 -171
  160. data/doc/app/classes/Cms/CategoriesController.html +0 -148
  161. data/doc/app/classes/Cms/CategoryTypesController.html +0 -148
  162. data/doc/app/classes/Cms/ConnectorsController.html +0 -215
  163. data/doc/app/classes/Cms/ContentBlockController.html +0 -1221
  164. data/doc/app/classes/Cms/ContentController.html +0 -240
  165. data/doc/app/classes/Cms/ContentRenderingSupport.html +0 -222
  166. data/doc/app/classes/Cms/ContentTypesController.html +0 -148
  167. data/doc/app/classes/Cms/DashboardController.html +0 -152
  168. data/doc/app/classes/Cms/DataLoader.html +0 -182
  169. data/doc/app/classes/Cms/DomainSupport.html +0 -166
  170. data/doc/app/classes/Cms/DynamicViewsController.html +0 -359
  171. data/doc/app/classes/Cms/EmailMessagesController.html +0 -172
  172. data/doc/app/classes/Cms/ErrorHandling.html +0 -199
  173. data/doc/app/classes/Cms/Errors.html +0 -111
  174. data/doc/app/classes/Cms/Errors/AccessDenied.html +0 -146
  175. data/doc/app/classes/Cms/Extensions.html +0 -140
  176. data/doc/app/classes/Cms/Extensions/ActionView.html +0 -111
  177. data/doc/app/classes/Cms/Extensions/ActionView/Base.html +0 -141
  178. data/doc/app/classes/Cms/Extensions/ActiveRecord.html +0 -116
  179. data/doc/app/classes/Cms/Extensions/ActiveRecord/Base.html +0 -144
  180. data/doc/app/classes/Cms/Extensions/ActiveRecord/Errors.html +0 -140
  181. data/doc/app/classes/Cms/Extensions/Hash.html +0 -175
  182. data/doc/app/classes/Cms/Extensions/Integer.html +0 -146
  183. data/doc/app/classes/Cms/Extensions/NilClass.html +0 -212
  184. data/doc/app/classes/Cms/Extensions/String.html +0 -212
  185. data/doc/app/classes/Cms/FileBlocksController.html +0 -113
  186. data/doc/app/classes/Cms/FormBuilder.html +0 -480
  187. data/doc/app/classes/Cms/FormTagHelper.html +0 -245
  188. data/doc/app/classes/Cms/GroupsController.html +0 -225
  189. data/doc/app/classes/Cms/HomeController.html +0 -148
  190. data/doc/app/classes/Cms/HtmlBlocksController.html +0 -113
  191. data/doc/app/classes/Cms/ImageBlocksController.html +0 -113
  192. data/doc/app/classes/Cms/LinksController.html +0 -343
  193. data/doc/app/classes/Cms/MenuHelper.html +0 -375
  194. data/doc/app/classes/Cms/PageHelper.html +0 -379
  195. data/doc/app/classes/Cms/PageRouteConditionsController.html +0 -113
  196. data/doc/app/classes/Cms/PageRouteOptionsController.html +0 -355
  197. data/doc/app/classes/Cms/PageRouteRequirementsController.html +0 -113
  198. data/doc/app/classes/Cms/PageRoutesController.html +0 -284
  199. data/doc/app/classes/Cms/PagesController.html +0 -333
  200. data/doc/app/classes/Cms/PathHelper.html +0 -268
  201. data/doc/app/classes/Cms/PortletController.html +0 -150
  202. data/doc/app/classes/Cms/PortletsController.html +0 -301
  203. data/doc/app/classes/Cms/RedirectsController.html +0 -172
  204. data/doc/app/classes/Cms/RenderingHelper.html +0 -214
  205. data/doc/app/classes/Cms/ResourceController.html +0 -616
  206. data/doc/app/classes/Cms/Routes.html +0 -311
  207. data/doc/app/classes/Cms/RoutesController.html +0 -164
  208. data/doc/app/classes/Cms/SectionNodesController.html +0 -272
  209. data/doc/app/classes/Cms/SectionNodesHelper.html +0 -145
  210. data/doc/app/classes/Cms/SectionsController.html +0 -566
  211. data/doc/app/classes/Cms/SessionsController.html +0 -299
  212. data/doc/app/classes/Cms/TagsController.html +0 -176
  213. data/doc/app/classes/Cms/TasksController.html +0 -221
  214. data/doc/app/classes/Cms/TemplateSupport.html +0 -185
  215. data/doc/app/classes/Cms/ToolbarController.html +0 -153
  216. data/doc/app/classes/Cms/UsersController.html +0 -381
  217. data/doc/app/classes/CommandLine.html +0 -226
  218. data/doc/app/classes/Connector.html +0 -354
  219. data/doc/app/classes/ContentType.html +0 -448
  220. data/doc/app/classes/ContentTypeGroup.html +0 -111
  221. data/doc/app/classes/DynamicPortlet.html +0 -148
  222. data/doc/app/classes/DynamicView.html +0 -408
  223. data/doc/app/classes/EmailMessage.html +0 -228
  224. data/doc/app/classes/EmailMessageMailer.html +0 -150
  225. data/doc/app/classes/EmailPagePortlet.html +0 -184
  226. data/doc/app/classes/FileBlock.html +0 -202
  227. data/doc/app/classes/ForgotPasswordMailer.html +0 -151
  228. data/doc/app/classes/ForgotPasswordPortlet.html +0 -162
  229. data/doc/app/classes/Group.html +0 -222
  230. data/doc/app/classes/GroupPermission.html +0 -111
  231. data/doc/app/classes/GroupSection.html +0 -111
  232. data/doc/app/classes/GroupType.html +0 -111
  233. data/doc/app/classes/GroupTypePermission.html +0 -111
  234. data/doc/app/classes/GuestUser.html +0 -392
  235. data/doc/app/classes/HtmlBlock.html +0 -170
  236. data/doc/app/classes/ImageBlock.html +0 -202
  237. data/doc/app/classes/InitialData.html +0 -171
  238. data/doc/app/classes/Link.html +0 -249
  239. data/doc/app/classes/LoginPortlet.html +0 -151
  240. data/doc/app/classes/Page.html +0 -954
  241. data/doc/app/classes/PagePartial.html +0 -201
  242. data/doc/app/classes/PageRoute.html +0 -335
  243. data/doc/app/classes/PageRouteCondition.html +0 -113
  244. data/doc/app/classes/PageRouteOption.html +0 -111
  245. data/doc/app/classes/PageRouteRequirement.html +0 -113
  246. data/doc/app/classes/PageTemplate.html +0 -260
  247. data/doc/app/classes/Permission.html +0 -111
  248. data/doc/app/classes/Portlet.html +0 -810
  249. data/doc/app/classes/Redirect.html +0 -111
  250. data/doc/app/classes/ResetPasswordPortlet.html +0 -169
  251. data/doc/app/classes/Section.html +0 -637
  252. data/doc/app/classes/SectionNode.html +0 -410
  253. data/doc/app/classes/Sequence.html +0 -146
  254. data/doc/app/classes/Site.html +0 -253
  255. data/doc/app/classes/Tag.html +0 -292
  256. data/doc/app/classes/TagCloudPortlet.html +0 -176
  257. data/doc/app/classes/Tagging.html +0 -146
  258. data/doc/app/classes/Task.html +0 -288
  259. data/doc/app/classes/Templates.html +0 -151
  260. data/doc/app/classes/Tests.html +0 -107
  261. data/doc/app/classes/Tests/PretendController.html +0 -275
  262. data/doc/app/classes/User.html +0 -757
  263. data/doc/app/classes/UserGroupMembership.html +0 -111
  264. data/doc/app/created.rid +0 -1
  265. data/doc/app/files/app/controllers/application_controller_rb.html +0 -109
  266. data/doc/app/files/app/controllers/cms/application_controller_rb.html +0 -101
  267. data/doc/app/files/app/controllers/cms/attachments_controller_rb.html +0 -101
  268. data/doc/app/files/app/controllers/cms/base_controller_rb.html +0 -101
  269. data/doc/app/files/app/controllers/cms/cache_controller_rb.html +0 -101
  270. data/doc/app/files/app/controllers/cms/categories_controller_rb.html +0 -101
  271. data/doc/app/files/app/controllers/cms/category_types_controller_rb.html +0 -101
  272. data/doc/app/files/app/controllers/cms/connectors_controller_rb.html +0 -101
  273. data/doc/app/files/app/controllers/cms/content_block_controller_rb.html +0 -107
  274. data/doc/app/files/app/controllers/cms/content_controller_rb.html +0 -101
  275. data/doc/app/files/app/controllers/cms/content_types_controller_rb.html +0 -101
  276. data/doc/app/files/app/controllers/cms/dashboard_controller_rb.html +0 -101
  277. data/doc/app/files/app/controllers/cms/dynamic_views_controller_rb.html +0 -101
  278. data/doc/app/files/app/controllers/cms/email_messages_controller_rb.html +0 -101
  279. data/doc/app/files/app/controllers/cms/error_handling_rb.html +0 -101
  280. data/doc/app/files/app/controllers/cms/file_blocks_controller_rb.html +0 -101
  281. data/doc/app/files/app/controllers/cms/groups_controller_rb.html +0 -101
  282. data/doc/app/files/app/controllers/cms/home_controller_rb.html +0 -101
  283. data/doc/app/files/app/controllers/cms/html_blocks_controller_rb.html +0 -101
  284. data/doc/app/files/app/controllers/cms/image_blocks_controller_rb.html +0 -101
  285. data/doc/app/files/app/controllers/cms/links_controller_rb.html +0 -101
  286. data/doc/app/files/app/controllers/cms/page_route_conditions_controller_rb.html +0 -101
  287. data/doc/app/files/app/controllers/cms/page_route_options_controller_rb.html +0 -101
  288. data/doc/app/files/app/controllers/cms/page_route_requirements_controller_rb.html +0 -101
  289. data/doc/app/files/app/controllers/cms/page_routes_controller_rb.html +0 -101
  290. data/doc/app/files/app/controllers/cms/pages_controller_rb.html +0 -101
  291. data/doc/app/files/app/controllers/cms/portlet_controller_rb.html +0 -101
  292. data/doc/app/files/app/controllers/cms/portlets_controller_rb.html +0 -101
  293. data/doc/app/files/app/controllers/cms/redirects_controller_rb.html +0 -101
  294. data/doc/app/files/app/controllers/cms/resource_controller_rb.html +0 -108
  295. data/doc/app/files/app/controllers/cms/routes_controller_rb.html +0 -101
  296. data/doc/app/files/app/controllers/cms/section_nodes_controller_rb.html +0 -101
  297. data/doc/app/files/app/controllers/cms/sections_controller_rb.html +0 -101
  298. data/doc/app/files/app/controllers/cms/sessions_controller_rb.html +0 -107
  299. data/doc/app/files/app/controllers/cms/tags_controller_rb.html +0 -101
  300. data/doc/app/files/app/controllers/cms/tasks_controller_rb.html +0 -101
  301. data/doc/app/files/app/controllers/cms/toolbar_controller_rb.html +0 -101
  302. data/doc/app/files/app/controllers/cms/users_controller_rb.html +0 -101
  303. data/doc/app/files/app/controllers/tests/pretend_controller_rb.html +0 -112
  304. data/doc/app/files/app/helpers/application_helper_rb.html +0 -112
  305. data/doc/app/files/app/helpers/cms/application_helper_rb.html +0 -107
  306. data/doc/app/files/app/helpers/cms/form_builder_rb.html +0 -108
  307. data/doc/app/files/app/helpers/cms/form_tag_helper_rb.html +0 -101
  308. data/doc/app/files/app/helpers/cms/menu_helper_rb.html +0 -101
  309. data/doc/app/files/app/helpers/cms/page_helper_rb.html +0 -101
  310. data/doc/app/files/app/helpers/cms/path_helper_rb.html +0 -101
  311. data/doc/app/files/app/helpers/cms/rendering_helper_rb.html +0 -111
  312. data/doc/app/files/app/helpers/cms/section_nodes_helper_rb.html +0 -101
  313. data/doc/app/files/app/helpers/cms/template_support_rb.html +0 -108
  314. data/doc/app/files/app/models/abstract_file_block_rb.html +0 -101
  315. data/doc/app/files/app/models/attachment_rb.html +0 -109
  316. data/doc/app/files/app/models/category_rb.html +0 -101
  317. data/doc/app/files/app/models/category_type_rb.html +0 -101
  318. data/doc/app/files/app/models/connector_rb.html +0 -101
  319. data/doc/app/files/app/models/content_type_group_rb.html +0 -101
  320. data/doc/app/files/app/models/content_type_rb.html +0 -101
  321. data/doc/app/files/app/models/dynamic_view_rb.html +0 -101
  322. data/doc/app/files/app/models/email_message_mailer_rb.html +0 -101
  323. data/doc/app/files/app/models/email_message_rb.html +0 -101
  324. data/doc/app/files/app/models/file_block_rb.html +0 -101
  325. data/doc/app/files/app/models/forgot_password_mailer_rb.html +0 -101
  326. data/doc/app/files/app/models/group_permission_rb.html +0 -101
  327. data/doc/app/files/app/models/group_rb.html +0 -110
  328. data/doc/app/files/app/models/group_section_rb.html +0 -101
  329. data/doc/app/files/app/models/group_type_permission_rb.html +0 -101
  330. data/doc/app/files/app/models/group_type_rb.html +0 -101
  331. data/doc/app/files/app/models/guest_user_rb.html +0 -114
  332. data/doc/app/files/app/models/html_block_rb.html +0 -101
  333. data/doc/app/files/app/models/image_block_rb.html +0 -101
  334. data/doc/app/files/app/models/link_rb.html +0 -101
  335. data/doc/app/files/app/models/page_partial_rb.html +0 -101
  336. data/doc/app/files/app/models/page_rb.html +0 -101
  337. data/doc/app/files/app/models/page_route_condition_rb.html +0 -101
  338. data/doc/app/files/app/models/page_route_option_rb.html +0 -101
  339. data/doc/app/files/app/models/page_route_rb.html +0 -101
  340. data/doc/app/files/app/models/page_route_requirement_rb.html +0 -101
  341. data/doc/app/files/app/models/page_template_rb.html +0 -101
  342. data/doc/app/files/app/models/permission_rb.html +0 -101
  343. data/doc/app/files/app/models/portlet_rb.html +0 -101
  344. data/doc/app/files/app/models/redirect_rb.html +0 -101
  345. data/doc/app/files/app/models/section_node_rb.html +0 -101
  346. data/doc/app/files/app/models/section_rb.html +0 -101
  347. data/doc/app/files/app/models/site_rb.html +0 -101
  348. data/doc/app/files/app/models/tag_rb.html +0 -101
  349. data/doc/app/files/app/models/tagging_rb.html +0 -101
  350. data/doc/app/files/app/models/task_rb.html +0 -101
  351. data/doc/app/files/app/models/templates_rb.html +0 -108
  352. data/doc/app/files/app/models/user_group_membership_rb.html +0 -101
  353. data/doc/app/files/app/models/user_rb.html +0 -108
  354. data/doc/app/files/app/portlets/dynamic_portlet_rb.html +0 -101
  355. data/doc/app/files/app/portlets/email_page_portlet_rb.html +0 -101
  356. data/doc/app/files/app/portlets/forgot_password_portlet_rb.html +0 -108
  357. data/doc/app/files/app/portlets/login_portlet_rb.html +0 -101
  358. data/doc/app/files/app/portlets/reset_password_portlet_rb.html +0 -101
  359. data/doc/app/files/app/portlets/tag_cloud_portlet_rb.html +0 -101
  360. data/doc/app/files/doc/README_FOR_APP.html +0 -128
  361. data/doc/app/files/lib/acts_as_list_rb.html +0 -101
  362. data/doc/app/files/lib/browsercms_rb.html +0 -113
  363. data/doc/app/files/lib/cms/acts/content_block_rb.html +0 -101
  364. data/doc/app/files/lib/cms/acts/content_page_rb.html +0 -125
  365. data/doc/app/files/lib/cms/authentication/controller_rb.html +0 -161
  366. data/doc/app/files/lib/cms/authentication/model_rb.html +0 -101
  367. data/doc/app/files/lib/cms/behaviors/archiving_rb.html +0 -101
  368. data/doc/app/files/lib/cms/behaviors/attaching_rb.html +0 -101
  369. data/doc/app/files/lib/cms/behaviors/categorizing_rb.html +0 -101
  370. data/doc/app/files/lib/cms/behaviors/connecting_rb.html +0 -101
  371. data/doc/app/files/lib/cms/behaviors/dynamic_attributes_rb.html +0 -101
  372. data/doc/app/files/lib/cms/behaviors/flush_cache_on_change_rb.html +0 -101
  373. data/doc/app/files/lib/cms/behaviors/hiding_rb.html +0 -101
  374. data/doc/app/files/lib/cms/behaviors/pagination_rb.html +0 -107
  375. data/doc/app/files/lib/cms/behaviors/publishing_rb.html +0 -101
  376. data/doc/app/files/lib/cms/behaviors/rendering_rb.html +0 -101
  377. data/doc/app/files/lib/cms/behaviors/searching_rb.html +0 -101
  378. data/doc/app/files/lib/cms/behaviors/soft_deleting_rb.html +0 -101
  379. data/doc/app/files/lib/cms/behaviors/taggable_rb.html +0 -101
  380. data/doc/app/files/lib/cms/behaviors/userstamping_rb.html +0 -101
  381. data/doc/app/files/lib/cms/behaviors/versioning_rb.html +0 -101
  382. data/doc/app/files/lib/cms/behaviors_rb.html +0 -147
  383. data/doc/app/files/lib/cms/caching_rb.html +0 -101
  384. data/doc/app/files/lib/cms/content_rendering_support_rb.html +0 -108
  385. data/doc/app/files/lib/cms/data_loader_rb.html +0 -101
  386. data/doc/app/files/lib/cms/domain_support_rb.html +0 -108
  387. data/doc/app/files/lib/cms/extensions/action_view/base_rb.html +0 -101
  388. data/doc/app/files/lib/cms/extensions/active_record/base_rb.html +0 -101
  389. data/doc/app/files/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements_rb.html +0 -101
  390. data/doc/app/files/lib/cms/extensions/active_record/errors_rb.html +0 -101
  391. data/doc/app/files/lib/cms/extensions/active_support/cache/file_store_rb.html +0 -101
  392. data/doc/app/files/lib/cms/extensions/hash_rb.html +0 -101
  393. data/doc/app/files/lib/cms/extensions/integer_rb.html +0 -101
  394. data/doc/app/files/lib/cms/extensions/nil_rb.html +0 -101
  395. data/doc/app/files/lib/cms/extensions/string_rb.html +0 -101
  396. data/doc/app/files/lib/cms/extensions_rb.html +0 -101
  397. data/doc/app/files/lib/cms/init_rb.html +0 -108
  398. data/doc/app/files/lib/cms/routes_rb.html +0 -101
  399. data/doc/app/files/lib/cms/version_rb.html +0 -107
  400. data/doc/app/files/lib/command_line_rb.html +0 -101
  401. data/doc/app/files/lib/initial_data_rb.html +0 -101
  402. data/doc/app/files/lib/sequence_rb.html +0 -101
  403. data/doc/app/fr_class_index.html +0 -218
  404. data/doc/app/fr_file_index.html +0 -164
  405. data/doc/app/fr_method_index.html +0 -787
  406. data/doc/app/index.html +0 -24
  407. data/doc/app/rdoc-style.css +0 -208
  408. data/doc/installing_browsercms_in_project.md +0 -7
  409. data/doc/upgrading_to_3_3.txt +0 -90
  410. data/doc/upgrading_to_3_4.md +0 -19
  411. data/lib/generators/browser_cms/cms/USAGE +0 -2
  412. data/lib/generators/browser_cms/cms/cms_generator.rb +0 -25
  413. data/lib/generators/browser_cms/cms/templates/README +0 -1
  414. data/lib/generators/cms/project/templates/README +0 -1
  415. data/log/.gitignore +0 -0
  416. data/test/unit/generators/cms_generator_test.rb +0 -44
  417. data/vendor/assets/javascripts/bcms/ckeditor.js +0 -6
  418. data/vendor/assets/javascripts/bcms/ckeditor/ckeditor.js +0 -108
  419. data/vendor/assets/javascripts/bcms/ckeditor/core/_bootstrap.js +0 -64
  420. data/vendor/assets/javascripts/bcms/ckeditor/core/ajax.js +0 -143
  421. data/vendor/assets/javascripts/bcms/ckeditor/core/ckeditor.js +0 -96
  422. data/vendor/assets/javascripts/bcms/ckeditor/core/ckeditor_base.js +0 -190
  423. data/vendor/assets/javascripts/bcms/ckeditor/core/ckeditor_basic.js +0 -241
  424. data/vendor/assets/javascripts/bcms/ckeditor/core/command.js +0 -70
  425. data/vendor/assets/javascripts/bcms/ckeditor/core/commanddefinition.js +0 -72
  426. data/vendor/assets/javascripts/bcms/ckeditor/core/config.js +0 -287
  427. data/vendor/assets/javascripts/bcms/ckeditor/core/dom.js +0 -21
  428. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/document.js +0 -210
  429. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/documentfragment.js +0 -49
  430. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/domobject.js +0 -204
  431. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/element.js +0 -1384
  432. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/elementpath.js +0 -104
  433. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/event.js +0 -137
  434. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/node.js +0 -649
  435. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/nodelist.js +0 -23
  436. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/range.js +0 -1668
  437. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/text.js +0 -123
  438. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/walker.js +0 -411
  439. data/vendor/assets/javascripts/bcms/ckeditor/core/dom/window.js +0 -96
  440. data/vendor/assets/javascripts/bcms/ckeditor/core/dtd.js +0 -200
  441. data/vendor/assets/javascripts/bcms/ckeditor/core/editor.js +0 -650
  442. data/vendor/assets/javascripts/bcms/ckeditor/core/editor_basic.js +0 -178
  443. data/vendor/assets/javascripts/bcms/ckeditor/core/env.js +0 -219
  444. data/vendor/assets/javascripts/bcms/ckeditor/core/event.js +0 -335
  445. data/vendor/assets/javascripts/bcms/ckeditor/core/eventInfo.js +0 -120
  446. data/vendor/assets/javascripts/bcms/ckeditor/core/focusmanager.js +0 -123
  447. data/vendor/assets/javascripts/bcms/ckeditor/core/htmlparser.js +0 -212
  448. data/vendor/assets/javascripts/bcms/ckeditor/core/htmlparser/basicwriter.js +0 -140
  449. data/vendor/assets/javascripts/bcms/ckeditor/core/htmlparser/cdata.js +0 -44
  450. data/vendor/assets/javascripts/bcms/ckeditor/core/htmlparser/comment.js +0 -59
  451. data/vendor/assets/javascripts/bcms/ckeditor/core/htmlparser/element.js +0 -196
  452. data/vendor/assets/javascripts/bcms/ckeditor/core/htmlparser/filter.js +0 -233
  453. data/vendor/assets/javascripts/bcms/ckeditor/core/htmlparser/fragment.js +0 -434
  454. data/vendor/assets/javascripts/bcms/ckeditor/core/htmlparser/text.js +0 -55
  455. data/vendor/assets/javascripts/bcms/ckeditor/core/imagecacher.js +0 -58
  456. data/vendor/assets/javascripts/bcms/ckeditor/core/lang.js +0 -147
  457. data/vendor/assets/javascripts/bcms/ckeditor/core/loader.js +0 -238
  458. data/vendor/assets/javascripts/bcms/ckeditor/core/plugindefinition.js +0 -66
  459. data/vendor/assets/javascripts/bcms/ckeditor/core/plugins.js +0 -82
  460. data/vendor/assets/javascripts/bcms/ckeditor/core/resourcemanager.js +0 -233
  461. data/vendor/assets/javascripts/bcms/ckeditor/core/scriptloader.js +0 -194
  462. data/vendor/assets/javascripts/bcms/ckeditor/core/skins.js +0 -185
  463. data/vendor/assets/javascripts/bcms/ckeditor/core/test.js +0 -184
  464. data/vendor/assets/javascripts/bcms/ckeditor/core/themes.js +0 -18
  465. data/vendor/assets/javascripts/bcms/ckeditor/core/tools.js +0 -531
  466. data/vendor/assets/javascripts/bcms/ckeditor/core/ui.js +0 -106
  467. data/vendor/assets/javascripts/bcms/ckeditor/core/xml.js +0 -165
  468. data/vendor/assets/javascripts/bcms/ckeditor/lang/_languages.js +0 -82
  469. data/vendor/assets/javascripts/bcms/ckeditor/lang/_translationstatus.txt +0 -59
  470. data/vendor/assets/javascripts/bcms/ckeditor/lang/af.js +0 -674
  471. data/vendor/assets/javascripts/bcms/ckeditor/lang/ar.js +0 -674
  472. data/vendor/assets/javascripts/bcms/ckeditor/lang/bg.js +0 -674
  473. data/vendor/assets/javascripts/bcms/ckeditor/lang/bn.js +0 -674
  474. data/vendor/assets/javascripts/bcms/ckeditor/lang/bs.js +0 -674
  475. data/vendor/assets/javascripts/bcms/ckeditor/lang/ca.js +0 -674
  476. data/vendor/assets/javascripts/bcms/ckeditor/lang/cs.js +0 -674
  477. data/vendor/assets/javascripts/bcms/ckeditor/lang/da.js +0 -674
  478. data/vendor/assets/javascripts/bcms/ckeditor/lang/de.js +0 -674
  479. data/vendor/assets/javascripts/bcms/ckeditor/lang/el.js +0 -674
  480. data/vendor/assets/javascripts/bcms/ckeditor/lang/en-au.js +0 -674
  481. data/vendor/assets/javascripts/bcms/ckeditor/lang/en-ca.js +0 -674
  482. data/vendor/assets/javascripts/bcms/ckeditor/lang/en-uk.js +0 -674
  483. data/vendor/assets/javascripts/bcms/ckeditor/lang/en.js +0 -674
  484. data/vendor/assets/javascripts/bcms/ckeditor/lang/eo.js +0 -674
  485. data/vendor/assets/javascripts/bcms/ckeditor/lang/es.js +0 -674
  486. data/vendor/assets/javascripts/bcms/ckeditor/lang/et.js +0 -674
  487. data/vendor/assets/javascripts/bcms/ckeditor/lang/eu.js +0 -674
  488. data/vendor/assets/javascripts/bcms/ckeditor/lang/fa.js +0 -674
  489. data/vendor/assets/javascripts/bcms/ckeditor/lang/fi.js +0 -674
  490. data/vendor/assets/javascripts/bcms/ckeditor/lang/fo.js +0 -674
  491. data/vendor/assets/javascripts/bcms/ckeditor/lang/fr-ca.js +0 -674
  492. data/vendor/assets/javascripts/bcms/ckeditor/lang/fr.js +0 -674
  493. data/vendor/assets/javascripts/bcms/ckeditor/lang/gl.js +0 -674
  494. data/vendor/assets/javascripts/bcms/ckeditor/lang/gu.js +0 -674
  495. data/vendor/assets/javascripts/bcms/ckeditor/lang/he.js +0 -674
  496. data/vendor/assets/javascripts/bcms/ckeditor/lang/hi.js +0 -674
  497. data/vendor/assets/javascripts/bcms/ckeditor/lang/hr.js +0 -674
  498. data/vendor/assets/javascripts/bcms/ckeditor/lang/hu.js +0 -674
  499. data/vendor/assets/javascripts/bcms/ckeditor/lang/is.js +0 -674
  500. data/vendor/assets/javascripts/bcms/ckeditor/lang/it.js +0 -674
  501. data/vendor/assets/javascripts/bcms/ckeditor/lang/ja.js +0 -674
  502. data/vendor/assets/javascripts/bcms/ckeditor/lang/km.js +0 -674
  503. data/vendor/assets/javascripts/bcms/ckeditor/lang/ko.js +0 -674
  504. data/vendor/assets/javascripts/bcms/ckeditor/lang/lt.js +0 -674
  505. data/vendor/assets/javascripts/bcms/ckeditor/lang/lv.js +0 -674
  506. data/vendor/assets/javascripts/bcms/ckeditor/lang/mn.js +0 -674
  507. data/vendor/assets/javascripts/bcms/ckeditor/lang/ms.js +0 -674
  508. data/vendor/assets/javascripts/bcms/ckeditor/lang/nb.js +0 -674
  509. data/vendor/assets/javascripts/bcms/ckeditor/lang/nl.js +0 -674
  510. data/vendor/assets/javascripts/bcms/ckeditor/lang/no.js +0 -674
  511. data/vendor/assets/javascripts/bcms/ckeditor/lang/pl.js +0 -674
  512. data/vendor/assets/javascripts/bcms/ckeditor/lang/pt-br.js +0 -674
  513. data/vendor/assets/javascripts/bcms/ckeditor/lang/pt.js +0 -674
  514. data/vendor/assets/javascripts/bcms/ckeditor/lang/ro.js +0 -674
  515. data/vendor/assets/javascripts/bcms/ckeditor/lang/ru.js +0 -674
  516. data/vendor/assets/javascripts/bcms/ckeditor/lang/sk.js +0 -674
  517. data/vendor/assets/javascripts/bcms/ckeditor/lang/sl.js +0 -674
  518. data/vendor/assets/javascripts/bcms/ckeditor/lang/sr-latn.js +0 -674
  519. data/vendor/assets/javascripts/bcms/ckeditor/lang/sr.js +0 -674
  520. data/vendor/assets/javascripts/bcms/ckeditor/lang/sv.js +0 -674
  521. data/vendor/assets/javascripts/bcms/ckeditor/lang/th.js +0 -674
  522. data/vendor/assets/javascripts/bcms/ckeditor/lang/tr.js +0 -674
  523. data/vendor/assets/javascripts/bcms/ckeditor/lang/uk.js +0 -674
  524. data/vendor/assets/javascripts/bcms/ckeditor/lang/vi.js +0 -674
  525. data/vendor/assets/javascripts/bcms/ckeditor/lang/zh-cn.js +0 -674
  526. data/vendor/assets/javascripts/bcms/ckeditor/lang/zh.js +0 -674
  527. data/vendor/assets/javascripts/bcms/ckeditor/plugins/about/dialogs/about.js +0 -73
  528. data/vendor/assets/javascripts/bcms/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  529. data/vendor/assets/javascripts/bcms/ckeditor/plugins/about/plugin.js +0 -22
  530. data/vendor/assets/javascripts/bcms/ckeditor/plugins/basicstyles/plugin.js +0 -50
  531. data/vendor/assets/javascripts/bcms/ckeditor/plugins/blockquote/plugin.js +0 -301
  532. data/vendor/assets/javascripts/bcms/ckeditor/plugins/button/plugin.js +0 -264
  533. data/vendor/assets/javascripts/bcms/ckeditor/plugins/clipboard/dialogs/paste.js +0 -167
  534. data/vendor/assets/javascripts/bcms/ckeditor/plugins/clipboard/plugin.js +0 -208
  535. data/vendor/assets/javascripts/bcms/ckeditor/plugins/colorbutton/plugin.js +0 -202
  536. data/vendor/assets/javascripts/bcms/ckeditor/plugins/contextmenu/plugin.js +0 -178
  537. data/vendor/assets/javascripts/bcms/ckeditor/plugins/dialog/dialogDefinition.js +0 -315
  538. data/vendor/assets/javascripts/bcms/ckeditor/plugins/dialog/plugin.js +0 -2742
  539. data/vendor/assets/javascripts/bcms/ckeditor/plugins/dialogui/plugin.js +0 -1319
  540. data/vendor/assets/javascripts/bcms/ckeditor/plugins/domiterator/plugin.js +0 -354
  541. data/vendor/assets/javascripts/bcms/ckeditor/plugins/editingblock/plugin.js +0 -236
  542. data/vendor/assets/javascripts/bcms/ckeditor/plugins/elementspath/plugin.js +0 -182
  543. data/vendor/assets/javascripts/bcms/ckeditor/plugins/enterkey/plugin.js +0 -324
  544. data/vendor/assets/javascripts/bcms/ckeditor/plugins/entities/plugin.js +0 -200
  545. data/vendor/assets/javascripts/bcms/ckeditor/plugins/fakeobjects/plugin.js +0 -111
  546. data/vendor/assets/javascripts/bcms/ckeditor/plugins/filebrowser/plugin.js +0 -383
  547. data/vendor/assets/javascripts/bcms/ckeditor/plugins/find/dialogs/find.js +0 -843
  548. data/vendor/assets/javascripts/bcms/ckeditor/plugins/find/plugin.js +0 -46
  549. data/vendor/assets/javascripts/bcms/ckeditor/plugins/flash/dialogs/flash.js +0 -682
  550. data/vendor/assets/javascripts/bcms/ckeditor/plugins/flash/images/placeholder.png +0 -0
  551. data/vendor/assets/javascripts/bcms/ckeditor/plugins/flash/plugin.js +0 -165
  552. data/vendor/assets/javascripts/bcms/ckeditor/plugins/floatpanel/plugin.js +0 -325
  553. data/vendor/assets/javascripts/bcms/ckeditor/plugins/font/plugin.js +0 -227
  554. data/vendor/assets/javascripts/bcms/ckeditor/plugins/format/plugin.js +0 -191
  555. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/dialogs/button.js +0 -135
  556. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/dialogs/checkbox.js +0 -138
  557. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/dialogs/form.js +0 -177
  558. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/dialogs/hiddenfield.js +0 -91
  559. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/dialogs/radio.js +0 -135
  560. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/dialogs/select.js +0 -541
  561. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/dialogs/textarea.js +0 -114
  562. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/dialogs/textfield.js +0 -193
  563. data/vendor/assets/javascripts/bcms/ckeditor/plugins/forms/plugin.js +0 -193
  564. data/vendor/assets/javascripts/bcms/ckeditor/plugins/horizontalrule/plugin.js +0 -35
  565. data/vendor/assets/javascripts/bcms/ckeditor/plugins/htmldataprocessor/plugin.js +0 -373
  566. data/vendor/assets/javascripts/bcms/ckeditor/plugins/htmlwriter/plugin.js +0 -289
  567. data/vendor/assets/javascripts/bcms/ckeditor/plugins/iframedialog/plugin.js +0 -136
  568. data/vendor/assets/javascripts/bcms/ckeditor/plugins/image/dialogs/image.js +0 -1225
  569. data/vendor/assets/javascripts/bcms/ckeditor/plugins/image/plugin.js +0 -64
  570. data/vendor/assets/javascripts/bcms/ckeditor/plugins/indent/plugin.js +0 -323
  571. data/vendor/assets/javascripts/bcms/ckeditor/plugins/justify/plugin.js +0 -164
  572. data/vendor/assets/javascripts/bcms/ckeditor/plugins/keystrokes/plugin.js +0 -217
  573. data/vendor/assets/javascripts/bcms/ckeditor/plugins/link/dialogs/anchor.js +0 -98
  574. data/vendor/assets/javascripts/bcms/ckeditor/plugins/link/dialogs/link.js +0 -1217
  575. data/vendor/assets/javascripts/bcms/ckeditor/plugins/link/images/anchor.gif +0 -0
  576. data/vendor/assets/javascripts/bcms/ckeditor/plugins/link/plugin.js +0 -188
  577. data/vendor/assets/javascripts/bcms/ckeditor/plugins/list/plugin.js +0 -570
  578. data/vendor/assets/javascripts/bcms/ckeditor/plugins/listblock/plugin.js +0 -231
  579. data/vendor/assets/javascripts/bcms/ckeditor/plugins/maximize/plugin.js +0 -267
  580. data/vendor/assets/javascripts/bcms/ckeditor/plugins/menu/plugin.js +0 -377
  581. data/vendor/assets/javascripts/bcms/ckeditor/plugins/menubutton/plugin.js +0 -93
  582. data/vendor/assets/javascripts/bcms/ckeditor/plugins/newpage/plugin.js +0 -65
  583. data/vendor/assets/javascripts/bcms/ckeditor/plugins/pagebreak/images/pagebreak.gif +0 -0
  584. data/vendor/assets/javascripts/bcms/ckeditor/plugins/pagebreak/plugin.js +0 -96
  585. data/vendor/assets/javascripts/bcms/ckeditor/plugins/panel/plugin.js +0 -330
  586. data/vendor/assets/javascripts/bcms/ckeditor/plugins/panelbutton/plugin.js +0 -140
  587. data/vendor/assets/javascripts/bcms/ckeditor/plugins/pastefromword/dialogs/pastefromword.js +0 -307
  588. data/vendor/assets/javascripts/bcms/ckeditor/plugins/pastefromword/plugin.js +0 -54
  589. data/vendor/assets/javascripts/bcms/ckeditor/plugins/pastetext/dialogs/pastetext.js +0 -65
  590. data/vendor/assets/javascripts/bcms/ckeditor/plugins/pastetext/plugin.js +0 -142
  591. data/vendor/assets/javascripts/bcms/ckeditor/plugins/popup/plugin.js +0 -62
  592. data/vendor/assets/javascripts/bcms/ckeditor/plugins/preview/plugin.js +0 -97
  593. data/vendor/assets/javascripts/bcms/ckeditor/plugins/print/plugin.js +0 -41
  594. data/vendor/assets/javascripts/bcms/ckeditor/plugins/removeformat/plugin.js +0 -132
  595. data/vendor/assets/javascripts/bcms/ckeditor/plugins/resize/plugin.js +0 -115
  596. data/vendor/assets/javascripts/bcms/ckeditor/plugins/richcombo/plugin.js +0 -357
  597. data/vendor/assets/javascripts/bcms/ckeditor/plugins/save/plugin.js +0 -55
  598. data/vendor/assets/javascripts/bcms/ckeditor/plugins/scayt/dialogs/options.js +0 -494
  599. data/vendor/assets/javascripts/bcms/ckeditor/plugins/scayt/dialogs/toolbar.css +0 -71
  600. data/vendor/assets/javascripts/bcms/ckeditor/plugins/scayt/plugin.js +0 -511
  601. data/vendor/assets/javascripts/bcms/ckeditor/plugins/selection/plugin.js +0 -1072
  602. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  603. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  604. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  605. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  606. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  607. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  608. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  609. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  610. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  611. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  612. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  613. data/vendor/assets/javascripts/bcms/ckeditor/plugins/showblocks/plugin.js +0 -153
  614. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/dialogs/smiley.js +0 -219
  615. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/angel_smile.gif +0 -0
  616. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/angry_smile.gif +0 -0
  617. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/broken_heart.gif +0 -0
  618. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/confused_smile.gif +0 -0
  619. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/cry_smile.gif +0 -0
  620. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/devil_smile.gif +0 -0
  621. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/embaressed_smile.gif +0 -0
  622. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/envelope.gif +0 -0
  623. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/heart.gif +0 -0
  624. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/kiss.gif +0 -0
  625. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/lightbulb.gif +0 -0
  626. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/omg_smile.gif +0 -0
  627. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/regular_smile.gif +0 -0
  628. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/sad_smile.gif +0 -0
  629. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/shades_smile.gif +0 -0
  630. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/teeth_smile.gif +0 -0
  631. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/thumbs_down.gif +0 -0
  632. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/thumbs_up.gif +0 -0
  633. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/tounge_smile.gif +0 -0
  634. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  635. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/images/wink_smile.gif +0 -0
  636. data/vendor/assets/javascripts/bcms/ckeditor/plugins/smiley/plugin.js +0 -74
  637. data/vendor/assets/javascripts/bcms/ckeditor/plugins/sourcearea/plugin.js +0 -185
  638. data/vendor/assets/javascripts/bcms/ckeditor/plugins/specialchar/dialogs/specialchar.js +0 -362
  639. data/vendor/assets/javascripts/bcms/ckeditor/plugins/specialchar/plugin.js +0 -29
  640. data/vendor/assets/javascripts/bcms/ckeditor/plugins/styles/plugin.js +0 -1242
  641. data/vendor/assets/javascripts/bcms/ckeditor/plugins/stylescombo/plugin.js +0 -295
  642. data/vendor/assets/javascripts/bcms/ckeditor/plugins/stylescombo/styles/default.js +0 -85
  643. data/vendor/assets/javascripts/bcms/ckeditor/plugins/tab/plugin.js +0 -266
  644. data/vendor/assets/javascripts/bcms/ckeditor/plugins/table/dialogs/table.js +0 -550
  645. data/vendor/assets/javascripts/bcms/ckeditor/plugins/table/plugin.js +0 -70
  646. data/vendor/assets/javascripts/bcms/ckeditor/plugins/tabletools/dialogs/tableCell.js +0 -328
  647. data/vendor/assets/javascripts/bcms/ckeditor/plugins/tabletools/plugin.js +0 -701
  648. data/vendor/assets/javascripts/bcms/ckeditor/plugins/templates/dialogs/templates.js +0 -170
  649. data/vendor/assets/javascripts/bcms/ckeditor/plugins/templates/plugin.js +0 -99
  650. data/vendor/assets/javascripts/bcms/ckeditor/plugins/templates/templates/default.js +0 -94
  651. data/vendor/assets/javascripts/bcms/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  652. data/vendor/assets/javascripts/bcms/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  653. data/vendor/assets/javascripts/bcms/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  654. data/vendor/assets/javascripts/bcms/ckeditor/plugins/toolbar/plugin.js +0 -412
  655. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/dialogs/uicolor.js +0 -203
  656. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/lang/en.js +0 -15
  657. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/plugin.js +0 -35
  658. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/uicolor.gif +0 -0
  659. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  660. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  661. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  662. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  663. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/yui/assets/yui.css +0 -15
  664. data/vendor/assets/javascripts/bcms/ckeditor/plugins/uicolor/yui/yui.js +0 -71
  665. data/vendor/assets/javascripts/bcms/ckeditor/plugins/undo/plugin.js +0 -490
  666. data/vendor/assets/javascripts/bcms/ckeditor/plugins/wsc/dialogs/ciframe.html +0 -49
  667. data/vendor/assets/javascripts/bcms/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +0 -52
  668. data/vendor/assets/javascripts/bcms/ckeditor/plugins/wsc/dialogs/wsc.css +0 -83
  669. data/vendor/assets/javascripts/bcms/ckeditor/plugins/wsc/dialogs/wsc.js +0 -169
  670. data/vendor/assets/javascripts/bcms/ckeditor/plugins/wsc/plugin.js +0 -32
  671. data/vendor/assets/javascripts/bcms/ckeditor/plugins/wysiwygarea/plugin.js +0 -636
  672. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/dialog.css +0 -742
  673. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/editor.css +0 -21
  674. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/elementspath.css +0 -68
  675. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/icons.css +0 -309
  676. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/icons.png +0 -0
  677. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/images/dialog_sides.gif +0 -0
  678. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/images/dialog_sides.png +0 -0
  679. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/images/dialog_sides_rtl.png +0 -0
  680. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/images/mini.gif +0 -0
  681. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/images/noimage.png +0 -0
  682. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/images/sprites.png +0 -0
  683. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/images/sprites_ie6.png +0 -0
  684. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/images/toolbar_start.gif +0 -0
  685. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/mainui.css +0 -139
  686. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/menu.css +0 -179
  687. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/panel.css +0 -203
  688. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/presets.css +0 -49
  689. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/reset.css +0 -78
  690. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/richcombo.css +0 -260
  691. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/skin.js +0 -291
  692. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/templates.css +0 -71
  693. data/vendor/assets/javascripts/bcms/ckeditor/skins/kama/toolbar.css +0 -384
  694. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/dialog.css +0 -643
  695. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/editor.css +0 -21
  696. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/elementspath.css +0 -68
  697. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/icons.css +0 -309
  698. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/icons.png +0 -0
  699. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/images/dialog_sides.gif +0 -0
  700. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/images/dialog_sides.png +0 -0
  701. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/images/dialog_sides_rtl.png +0 -0
  702. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/images/mini.gif +0 -0
  703. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/images/noimage.png +0 -0
  704. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/images/sprites.png +0 -0
  705. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/images/sprites_ie6.png +0 -0
  706. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/mainui.css +0 -97
  707. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/menu.css +0 -175
  708. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/panel.css +0 -198
  709. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/presets.css +0 -49
  710. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/reset.css +0 -78
  711. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/richcombo.css +0 -279
  712. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/skin.js +0 -77
  713. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/templates.css +0 -71
  714. data/vendor/assets/javascripts/bcms/ckeditor/skins/office2003/toolbar.css +0 -442
  715. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/dialog.css +0 -653
  716. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/editor.css +0 -21
  717. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/elementspath.css +0 -68
  718. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/icons.css +0 -309
  719. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/icons.png +0 -0
  720. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/images/dialog_sides.gif +0 -0
  721. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/images/dialog_sides.png +0 -0
  722. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/images/dialog_sides_rtl.png +0 -0
  723. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/images/mini.gif +0 -0
  724. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/images/noimage.png +0 -0
  725. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/images/sprites.png +0 -0
  726. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/images/sprites_ie6.png +0 -0
  727. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/images/toolbar_start.gif +0 -0
  728. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/mainui.css +0 -112
  729. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/menu.css +0 -178
  730. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/panel.css +0 -198
  731. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/presets.css +0 -50
  732. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/reset.css +0 -78
  733. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/richcombo.css +0 -275
  734. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/skin.js +0 -73
  735. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/templates.css +0 -71
  736. data/vendor/assets/javascripts/bcms/ckeditor/skins/v2/toolbar.css +0 -399
  737. data/vendor/assets/javascripts/bcms/ckeditor/tests/_assets/sample.css +0 -4
  738. data/vendor/assets/javascripts/bcms/ckeditor/tests/_assets/sample.js +0 -1
  739. data/vendor/assets/javascripts/bcms/ckeditor/tests/_assets/sample.txt +0 -1
  740. data/vendor/assets/javascripts/bcms/ckeditor/tests/_assets/sample.xml +0 -5
  741. data/vendor/assets/javascripts/bcms/ckeditor/tests/_assets/sample_xml.txt +0 -5
  742. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/_editor/custom_config_1.js +0 -10
  743. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/_editor/custom_config_2.js +0 -9
  744. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/ajax.html +0 -163
  745. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/bootstrap.html +0 -66
  746. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/ckeditor.html +0 -160
  747. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/dom/document.html +0 -126
  748. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/dom/documentfragment.html +0 -292
  749. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/dom/element.html +0 -637
  750. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/dom/node.html +0 -164
  751. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/dom/range.html +0 -2411
  752. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/dom/text.html +0 -128
  753. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/dom/walker.html +0 -340
  754. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/dom/window.html +0 -53
  755. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/editor.html +0 -123
  756. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/env.html +0 -52
  757. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/event.html +0 -487
  758. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/htmlparser/fragment.html +0 -188
  759. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/htmlparser/htmlparser.html +0 -91
  760. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/plugins.html +0 -45
  761. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/plugins/myplugins/sample/my_plugin.js +0 -3
  762. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/scriptloader.html +0 -52
  763. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/tools.html +0 -170
  764. data/vendor/assets/javascripts/bcms/ckeditor/tests/core/xml.html +0 -150
  765. data/vendor/assets/javascripts/bcms/ckeditor/tests/plugins/domiterator/domiterator.html +0 -236
  766. data/vendor/assets/javascripts/bcms/ckeditor/tests/plugins/htmldataprocessor/htmldataprocessor.html +0 -386
  767. data/vendor/assets/javascripts/bcms/ckeditor/tests/plugins/link/link.html +0 -123
  768. data/vendor/assets/javascripts/bcms/ckeditor/tests/plugins/list/list.html +0 -217
  769. data/vendor/assets/javascripts/bcms/ckeditor/tests/plugins/selection/selection.html +0 -49
  770. data/vendor/assets/javascripts/bcms/ckeditor/tests/plugins/styles/styles.html +0 -596
  771. data/vendor/assets/javascripts/bcms/ckeditor/tests/test.css +0 -81
  772. data/vendor/assets/javascripts/bcms/ckeditor/tests/test.js +0 -93
  773. data/vendor/assets/javascripts/bcms/ckeditor/tests/testall.html +0 -114
  774. data/vendor/assets/javascripts/bcms/ckeditor/tests/yuitest.js +0 -75
  775. data/vendor/assets/javascripts/bcms/ckeditor/themes/default/theme.js +0 -232
  776. data/vendor/plugins/.gitkeep +0 -0
@@ -1,29 +0,0 @@
1
- /*
2
- Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
3
- For licensing, see LICENSE.html or http://ckeditor.com/license
4
- */
5
-
6
- /**
7
- * @file Special Character plugin
8
- */
9
-
10
- CKEDITOR.plugins.add( 'specialchar',
11
- {
12
- init : function( editor )
13
- {
14
- var pluginName = 'specialchar';
15
-
16
- // Register the dialog.
17
- CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/specialchar.js' );
18
-
19
- // Register the command.
20
- editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName ) );
21
-
22
- // Register the toolbar button.
23
- editor.ui.addButton( 'SpecialChar',
24
- {
25
- label : editor.lang.specialChar.toolbar,
26
- command : pluginName
27
- });
28
- }
29
- } );
@@ -1,1242 +0,0 @@
1
- /*
2
- Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
3
- For licensing, see LICENSE.html or http://ckeditor.com/license
4
- */
5
-
6
- CKEDITOR.plugins.add( 'styles',
7
- {
8
- requires : [ 'selection' ]
9
- });
10
-
11
- /**
12
- * Registers a function to be called whenever a style changes its state in the
13
- * editing area. The current state is passed to the function. The possible
14
- * states are {@link CKEDITOR.TRISTATE_ON} and {@link CKEDITOR.TRISTATE_OFF}.
15
- * @param {CKEDITOR.style} The style to be watched.
16
- * @param {Function} The function to be called when the style state changes.
17
- * @example
18
- * // Create a style object for the <b> element.
19
- * var style = new CKEDITOR.style( { element : 'b' } );
20
- * var editor = CKEDITOR.instances.editor1;
21
- * editor.attachStyleStateChange( style, function( state )
22
- * {
23
- * if ( state == CKEDITOR.TRISTATE_ON )
24
- * alert( 'The current state for the B element is ON' );
25
- * else
26
- * alert( 'The current state for the B element is OFF' );
27
- * });
28
- */
29
- CKEDITOR.editor.prototype.attachStyleStateChange = function( style, callback )
30
- {
31
- // Try to get the list of attached callbacks.
32
- var styleStateChangeCallbacks = this._.styleStateChangeCallbacks;
33
-
34
- // If it doesn't exist, it means this is the first call. So, let's create
35
- // all the structure to manage the style checks and the callback calls.
36
- if ( !styleStateChangeCallbacks )
37
- {
38
- // Create the callbacks array.
39
- styleStateChangeCallbacks = this._.styleStateChangeCallbacks = [];
40
-
41
- // Attach to the selectionChange event, so we can check the styles at
42
- // that point.
43
- this.on( 'selectionChange', function( ev )
44
- {
45
- // Loop throw all registered callbacks.
46
- for ( var i = 0 ; i < styleStateChangeCallbacks.length ; i++ )
47
- {
48
- var callback = styleStateChangeCallbacks[ i ];
49
-
50
- // Check the current state for the style defined for that
51
- // callback.
52
- var currentState = callback.style.checkActive( ev.data.path ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
53
-
54
- // If the state changed since the last check.
55
- if ( callback.state !== currentState )
56
- {
57
- // Call the callback function, passing the current
58
- // state to it.
59
- callback.fn.call( this, currentState );
60
-
61
- // Save the current state, so it can be compared next
62
- // time.
63
- callback.state !== currentState;
64
- }
65
- }
66
- });
67
- }
68
-
69
- // Save the callback info, so it can be checked on the next occurence of
70
- // selectionChange.
71
- styleStateChangeCallbacks.push( { style : style, fn : callback } );
72
- };
73
-
74
- CKEDITOR.STYLE_BLOCK = 1;
75
- CKEDITOR.STYLE_INLINE = 2;
76
- CKEDITOR.STYLE_OBJECT = 3;
77
-
78
- (function()
79
- {
80
- var blockElements = { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 };
81
- var objectElements = { a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,ul:1 };
82
-
83
- var semicolonFixRegex = /\s*(?:;\s*|$)/;
84
-
85
- CKEDITOR.style = function( styleDefinition, variablesValues )
86
- {
87
- if ( variablesValues )
88
- {
89
- styleDefinition = CKEDITOR.tools.clone( styleDefinition );
90
-
91
- replaceVariables( styleDefinition.attributes, variablesValues );
92
- replaceVariables( styleDefinition.styles, variablesValues );
93
- }
94
-
95
- var element = this.element = ( styleDefinition.element || '*' ).toLowerCase();
96
-
97
- this.type =
98
- ( element == '#' || blockElements[ element ] ) ?
99
- CKEDITOR.STYLE_BLOCK
100
- : objectElements[ element ] ?
101
- CKEDITOR.STYLE_OBJECT
102
- :
103
- CKEDITOR.STYLE_INLINE;
104
-
105
- this._ =
106
- {
107
- definition : styleDefinition
108
- };
109
- };
110
-
111
- CKEDITOR.style.prototype =
112
- {
113
- apply : function( document )
114
- {
115
- applyStyle.call( this, document, false );
116
- },
117
-
118
- remove : function( document )
119
- {
120
- applyStyle.call( this, document, true );
121
- },
122
-
123
- applyToRange : function( range )
124
- {
125
- return ( this.applyToRange =
126
- this.type == CKEDITOR.STYLE_INLINE ?
127
- applyInlineStyle
128
- : this.type == CKEDITOR.STYLE_BLOCK ?
129
- applyBlockStyle
130
- : null ).call( this, range );
131
- },
132
-
133
- removeFromRange : function( range )
134
- {
135
- return ( this.removeFromRange =
136
- this.type == CKEDITOR.STYLE_INLINE ?
137
- removeInlineStyle
138
- : null ).call( this, range );
139
- },
140
-
141
- applyToObject : function( element )
142
- {
143
- setupElement( element, this );
144
- },
145
-
146
- /**
147
- * Get the style state inside an element path. Returns "true" if the
148
- * element is active in the path.
149
- */
150
- checkActive : function( elementPath )
151
- {
152
- switch ( this.type )
153
- {
154
- case CKEDITOR.STYLE_BLOCK :
155
- return this.checkElementRemovable( elementPath.block || elementPath.blockLimit, true );
156
-
157
- case CKEDITOR.STYLE_INLINE :
158
-
159
- var elements = elementPath.elements;
160
-
161
- for ( var i = 0, element ; i < elements.length ; i++ )
162
- {
163
- element = elements[i];
164
-
165
- if ( element == elementPath.block || element == elementPath.blockLimit )
166
- continue;
167
-
168
- if ( this.checkElementRemovable( element, true ) )
169
- return true;
170
- }
171
- }
172
- return false;
173
- },
174
-
175
- // Checks if an element, or any of its attributes, is removable by the
176
- // current style definition.
177
- checkElementRemovable : function( element, fullMatch )
178
- {
179
- if ( !element )
180
- return false;
181
-
182
- var def = this._.definition,
183
- attribs;
184
-
185
- // If the element name is the same as the style name.
186
- if ( element.getName() == this.element )
187
- {
188
- // If no attributes are defined in the element.
189
- if ( !fullMatch && !element.hasAttributes() )
190
- return true;
191
-
192
- attribs = getAttributesForComparison( def );
193
-
194
- if ( attribs._length )
195
- {
196
- for ( var attName in attribs )
197
- {
198
- if ( attName == '_length' )
199
- continue;
200
-
201
- var elementAttr = element.getAttribute( attName );
202
- if ( attribs[attName] ==
203
- ( attName == 'style' ?
204
- normalizeCssText( elementAttr, false ) : elementAttr ) )
205
- {
206
- if ( !fullMatch )
207
- return true;
208
- }
209
- else if ( fullMatch )
210
- return false;
211
- }
212
- if( fullMatch )
213
- return true;
214
- }
215
- else
216
- return true;
217
- }
218
-
219
- // Check if the element can be somehow overriden.
220
- var override = getOverrides( this )[ element.getName() ] ;
221
- if ( override )
222
- {
223
- // If no attributes have been defined, remove the element.
224
- if ( !( attribs = override.attributes ) )
225
- return true;
226
-
227
- for ( var i = 0 ; i < attribs.length ; i++ )
228
- {
229
- attName = attribs[i][0];
230
- var actualAttrValue = element.getAttribute( attName );
231
- if ( actualAttrValue )
232
- {
233
- var attValue = attribs[i][1];
234
-
235
- // Remove the attribute if:
236
- // - The override definition value is null;
237
- // - The override definition value is a string that
238
- // matches the attribute value exactly.
239
- // - The override definition value is a regex that
240
- // has matches in the attribute value.
241
- if ( attValue === null ||
242
- ( typeof attValue == 'string' && actualAttrValue == attValue ) ||
243
- attValue.test( actualAttrValue ) )
244
- return true;
245
- }
246
- }
247
- }
248
- return false;
249
- }
250
- };
251
-
252
- // Build the cssText based on the styles definition.
253
- CKEDITOR.style.getStyleText = function( styleDefinition )
254
- {
255
- // If we have already computed it, just return it.
256
- var stylesDef = styleDefinition._ST;
257
- if ( stylesDef )
258
- return stylesDef;
259
-
260
- stylesDef = styleDefinition.styles;
261
-
262
- // Builds the StyleText.
263
-
264
- var stylesText = ( styleDefinition.attributes && styleDefinition.attributes[ 'style' ] ) || '';
265
-
266
- if ( stylesText.length )
267
- stylesText = stylesText.replace( semicolonFixRegex, ';' );
268
-
269
- for ( var style in stylesDef )
270
- stylesText += style + ':' + stylesDef[ style ] + ';';
271
-
272
- // Browsers make some changes to the style when applying them. So, here
273
- // we normalize it to the browser format.
274
- if ( stylesText.length )
275
- stylesText = normalizeCssText( stylesText );
276
-
277
- // Return it, saving it to the next request.
278
- return ( styleDefinition._ST = stylesText );
279
- };
280
-
281
- function applyInlineStyle( range )
282
- {
283
- var document = range.document;
284
-
285
- if ( range.collapsed )
286
- {
287
- // Create the element to be inserted in the DOM.
288
- var collapsedElement = getElement( this, document );
289
-
290
- // Insert the empty element into the DOM at the range position.
291
- range.insertNode( collapsedElement );
292
-
293
- // Place the selection right inside the empty element.
294
- range.moveToPosition( collapsedElement, CKEDITOR.POSITION_BEFORE_END );
295
-
296
- return;
297
- }
298
-
299
- var elementName = this.element;
300
- var def = this._.definition;
301
- var isUnknownElement;
302
-
303
- // Get the DTD definition for the element. Defaults to "span".
304
- var dtd = CKEDITOR.dtd[ elementName ] || ( isUnknownElement = true, CKEDITOR.dtd.span );
305
-
306
- // Bookmark the range so we can re-select it after processing.
307
- var bookmark = range.createBookmark();
308
-
309
- // Expand the range.
310
- range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
311
- range.trim();
312
-
313
- // Get the first node to be processed and the last, which concludes the
314
- // processing.
315
- var boundaryNodes = range.getBoundaryNodes();
316
- var firstNode = boundaryNodes.startNode;
317
- var lastNode = boundaryNodes.endNode.getNextSourceNode( true );
318
-
319
- // Probably the document end is reached, we need a marker node.
320
- if ( !lastNode )
321
- {
322
- var marker;
323
- lastNode = marker = document.createText( '' );
324
- lastNode.insertAfter( range.endContainer );
325
- }
326
- // The detection algorithm below skips the contents inside bookmark nodes, so
327
- // we'll need to make sure lastNode isn't the &nbsp; inside a bookmark node.
328
- var lastParent = lastNode.getParent();
329
- if ( lastParent && lastParent.getAttribute( '_fck_bookmark' ) )
330
- lastNode = lastParent;
331
-
332
- if ( lastNode.equals( firstNode ) )
333
- {
334
- // If the last node is the same as the the first one, we must move
335
- // it to the next one, otherwise the first one will not be
336
- // processed.
337
- lastNode = lastNode.getNextSourceNode( true );
338
-
339
- // It may happen that there are no more nodes after it (the end of
340
- // the document), so we must add something there to make our code
341
- // simpler.
342
- if ( !lastNode )
343
- {
344
- lastNode = marker = document.createText( '' );
345
- lastNode.insertAfter( firstNode );
346
- }
347
- }
348
-
349
- var currentNode = firstNode;
350
-
351
- var styleRange;
352
-
353
- // Indicates that that some useful inline content has been found, so
354
- // the style should be applied.
355
- var hasContents;
356
-
357
- while ( currentNode )
358
- {
359
- var applyStyle = false;
360
-
361
- if ( currentNode.equals( lastNode ) )
362
- {
363
- currentNode = null;
364
- applyStyle = true;
365
- }
366
- else
367
- {
368
- var nodeType = currentNode.type;
369
- var nodeName = nodeType == CKEDITOR.NODE_ELEMENT ? currentNode.getName() : null;
370
-
371
- if ( nodeName && currentNode.getAttribute( '_fck_bookmark' ) )
372
- {
373
- currentNode = currentNode.getNextSourceNode( true );
374
- continue;
375
- }
376
-
377
- // Check if the current node can be a child of the style element.
378
- if ( !nodeName || ( dtd[ nodeName ] && ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) ) )
379
- {
380
- var currentParent = currentNode.getParent();
381
-
382
- // Check if the style element can be a child of the current
383
- // node parent or if the element is not defined in the DTD.
384
- if ( currentParent && ( ( currentParent.getDtd() || CKEDITOR.dtd.span )[ elementName ] || isUnknownElement ) )
385
- {
386
- // This node will be part of our range, so if it has not
387
- // been started, place its start right before the node.
388
- // In the case of an element node, it will be included
389
- // only if it is entirely inside the range.
390
- if ( !styleRange && ( !nodeName || !CKEDITOR.dtd.$removeEmpty[ nodeName ] || ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) ) )
391
- {
392
- styleRange = new CKEDITOR.dom.range( document );
393
- styleRange.setStartBefore( currentNode );
394
- }
395
-
396
- // Non element nodes, or empty elements can be added
397
- // completely to the range.
398
- if ( nodeType == CKEDITOR.NODE_TEXT || ( nodeType == CKEDITOR.NODE_ELEMENT && !currentNode.getChildCount() ) )
399
- {
400
- var includedNode = currentNode;
401
- var parentNode;
402
-
403
- // This node is about to be included completelly, but,
404
- // if this is the last node in its parent, we must also
405
- // check if the parent itself can be added completelly
406
- // to the range.
407
- while ( !includedNode.$.nextSibling
408
- && ( parentNode = includedNode.getParent(), dtd[ parentNode.getName() ] )
409
- && ( parentNode.getPosition( firstNode ) | CKEDITOR.POSITION_FOLLOWING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_FOLLOWING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) )
410
- {
411
- includedNode = parentNode;
412
- }
413
-
414
- styleRange.setEndAfter( includedNode );
415
-
416
- // If the included node still is the last node in its
417
- // parent, it means that the parent can't be included
418
- // in this style DTD, so apply the style immediately.
419
- if ( !includedNode.$.nextSibling )
420
- applyStyle = true;
421
-
422
- if ( !hasContents )
423
- hasContents = ( nodeType != CKEDITOR.NODE_TEXT || (/[^\s\ufeff]/).test( currentNode.getText() ) );
424
- }
425
- }
426
- else
427
- applyStyle = true;
428
- }
429
- else
430
- applyStyle = true;
431
-
432
- // Get the next node to be processed.
433
- currentNode = currentNode.getNextSourceNode();
434
- }
435
-
436
- // Apply the style if we have something to which apply it.
437
- if ( applyStyle && hasContents && styleRange && !styleRange.collapsed )
438
- {
439
- // Build the style element, based on the style object definition.
440
- var styleNode = getElement( this, document );
441
-
442
- // Get the element that holds the entire range.
443
- var parent = styleRange.getCommonAncestor();
444
-
445
- // Loop through the parents, removing the redundant attributes
446
- // from the element to be applied.
447
- while ( styleNode && parent )
448
- {
449
- if ( parent.getName() == elementName )
450
- {
451
- for ( var attName in def.attributes )
452
- {
453
- if ( styleNode.getAttribute( attName ) == parent.getAttribute( attName ) )
454
- styleNode.removeAttribute( attName );
455
- }
456
-
457
- for ( var styleName in def.styles )
458
- {
459
- if ( styleNode.getStyle( styleName ) == parent.getStyle( styleName ) )
460
- styleNode.removeStyle( styleName );
461
- }
462
-
463
- if ( !styleNode.hasAttributes() )
464
- {
465
- styleNode = null;
466
- break;
467
- }
468
- }
469
-
470
- parent = parent.getParent();
471
- }
472
-
473
- if ( styleNode )
474
- {
475
- // Move the contents of the range to the style element.
476
- styleRange.extractContents().appendTo( styleNode );
477
-
478
- // Here we do some cleanup, removing all duplicated
479
- // elements from the style element.
480
- removeFromInsideElement( this, styleNode );
481
-
482
- // Insert it into the range position (it is collapsed after
483
- // extractContents.
484
- styleRange.insertNode( styleNode );
485
-
486
- // Let's merge our new style with its neighbors, if possible.
487
- mergeSiblings( styleNode );
488
-
489
- // As the style system breaks text nodes constantly, let's normalize
490
- // things for performance.
491
- // With IE, some paragraphs get broken when calling normalize()
492
- // repeatedly. Also, for IE, we must normalize body, not documentElement.
493
- // IE is also known for having a "crash effect" with normalize().
494
- // We should try to normalize with IE too in some way, somewhere.
495
- if ( !CKEDITOR.env.ie )
496
- styleNode.$.normalize();
497
- }
498
-
499
- // Style applied, let's release the range, so it gets
500
- // re-initialization in the next loop.
501
- styleRange = null;
502
- }
503
- }
504
-
505
- // Remove the temporary marking node.(#4111)
506
- marker && marker.remove();
507
- range.moveToBookmark( bookmark );
508
- }
509
-
510
- function removeInlineStyle( range )
511
- {
512
- /*
513
- * Make sure our range has included all "collpased" parent inline nodes so
514
- * that our operation logic can be simpler.
515
- */
516
- range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
517
-
518
- var bookmark = range.createBookmark(),
519
- startNode = bookmark.startNode;
520
-
521
- if ( range.collapsed )
522
- {
523
-
524
- var startPath = new CKEDITOR.dom.elementPath( startNode.getParent() ),
525
- // The topmost element in elementspatch which we should jump out of.
526
- boundaryElement;
527
-
528
-
529
- for ( var i = 0, element ; i < startPath.elements.length
530
- && ( element = startPath.elements[i] ) ; i++ )
531
- {
532
- /*
533
- * 1. If it's collaped inside text nodes, try to remove the style from the whole element.
534
- *
535
- * 2. Otherwise if it's collapsed on element boundaries, moving the selection
536
- * outside the styles instead of removing the whole tag,
537
- * also make sure other inner styles were well preserverd.(#3309)
538
- */
539
- if ( element == startPath.block || element == startPath.blockLimit )
540
- break;
541
-
542
- if ( this.checkElementRemovable( element ) )
543
- {
544
- var endOfElement = range.checkBoundaryOfElement( element, CKEDITOR.END ),
545
- startOfElement = !endOfElement && range.checkBoundaryOfElement( element, CKEDITOR.START );
546
- if ( startOfElement || endOfElement )
547
- {
548
- boundaryElement = element;
549
- boundaryElement.match = startOfElement ? 'start' : 'end';
550
- }
551
- else
552
- {
553
- /*
554
- * Before removing the style node, there may be a sibling to the style node
555
- * that's exactly the same to the one to be removed. To the user, it makes
556
- * no difference that they're separate entities in the DOM tree. So, merge
557
- * them before removal.
558
- */
559
- mergeSiblings( element );
560
- removeFromElement( this, element );
561
-
562
- }
563
- }
564
- }
565
-
566
- // Re-create the style tree after/before the boundary element,
567
- // the replication start from bookmark start node to define the
568
- // new range.
569
- if ( boundaryElement )
570
- {
571
- var clonedElement = startNode;
572
- for ( i = 0 ;; i++ )
573
- {
574
- var newElement = startPath.elements[ i ];
575
- if ( newElement.equals( boundaryElement ) )
576
- break;
577
- // Avoid copying any matched element.
578
- else if( newElement.match )
579
- continue;
580
- else
581
- newElement = newElement.clone();
582
- newElement.append( clonedElement );
583
- clonedElement = newElement;
584
- }
585
- clonedElement[ boundaryElement.match == 'start' ?
586
- 'insertBefore' : 'insertAfter' ]( boundaryElement );
587
- }
588
- }
589
- else
590
- {
591
- /*
592
- * Now our range isn't collapsed. Lets walk from the start node to the end
593
- * node via DFS and remove the styles one-by-one.
594
- */
595
- var endNode = bookmark.endNode,
596
- me = this;
597
-
598
- /*
599
- * Find out the style ancestor that needs to be broken down at startNode
600
- * and endNode.
601
- */
602
- function breakNodes()
603
- {
604
- var startPath = new CKEDITOR.dom.elementPath( startNode.getParent() ),
605
- endPath = new CKEDITOR.dom.elementPath( endNode.getParent() ),
606
- breakStart = null,
607
- breakEnd = null;
608
- for ( var i = 0 ; i < startPath.elements.length ; i++ )
609
- {
610
- var element = startPath.elements[ i ];
611
-
612
- if ( element == startPath.block || element == startPath.blockLimit )
613
- break;
614
-
615
- if ( me.checkElementRemovable( element ) )
616
- breakStart = element;
617
- }
618
- for ( i = 0 ; i < endPath.elements.length ; i++ )
619
- {
620
- element = endPath.elements[ i ];
621
-
622
- if ( element == endPath.block || element == endPath.blockLimit )
623
- break;
624
-
625
- if ( me.checkElementRemovable( element ) )
626
- breakEnd = element;
627
- }
628
-
629
- if ( breakEnd )
630
- endNode.breakParent( breakEnd );
631
- if ( breakStart )
632
- startNode.breakParent( breakStart );
633
- }
634
- breakNodes();
635
-
636
- // Now, do the DFS walk.
637
- var currentNode = startNode.getNext();
638
- while ( !currentNode.equals( endNode ) )
639
- {
640
- /*
641
- * Need to get the next node first because removeFromElement() can remove
642
- * the current node from DOM tree.
643
- */
644
- var nextNode = currentNode.getNextSourceNode();
645
- if ( currentNode.type == CKEDITOR.NODE_ELEMENT && this.checkElementRemovable( currentNode ) )
646
- {
647
- // Remove style from element or overriding element.
648
- if( currentNode.getName() == this.element )
649
- removeFromElement( this, currentNode );
650
- else
651
- removeOverrides( currentNode, getOverrides( this )[ currentNode.getName() ] );
652
-
653
- /*
654
- * removeFromElement() may have merged the next node with something before
655
- * the startNode via mergeSiblings(). In that case, the nextNode would
656
- * contain startNode and we'll have to call breakNodes() again and also
657
- * reassign the nextNode to something after startNode.
658
- */
659
- if ( nextNode.type == CKEDITOR.NODE_ELEMENT && nextNode.contains( startNode ) )
660
- {
661
- breakNodes();
662
- nextNode = startNode.getNext();
663
- }
664
- }
665
- currentNode = nextNode;
666
- }
667
- }
668
-
669
- range.moveToBookmark( bookmark );
670
- }
671
-
672
- function applyBlockStyle( range )
673
- {
674
- // Serializible bookmarks is needed here since
675
- // elements may be merged.
676
- var bookmark = range.createBookmark( true );
677
-
678
- var iterator = range.createIterator();
679
- iterator.enforceRealBlocks = true;
680
-
681
- var block;
682
- var doc = range.document;
683
- var previousPreBlock;
684
-
685
- while( ( block = iterator.getNextParagraph() ) ) // Only one =
686
- {
687
- var newBlock = getElement( this, doc );
688
- replaceBlock( block, newBlock );
689
- }
690
-
691
- range.moveToBookmark( bookmark );
692
- }
693
-
694
- // Replace the original block with new one, with special treatment
695
- // for <pre> blocks to make sure content format is well preserved, and merging/splitting adjacent
696
- // when necessary.(#3188)
697
- function replaceBlock( block, newBlock )
698
- {
699
- var newBlockIsPre = newBlock.is( 'pre' );
700
- var blockIsPre = block.is( 'pre' );
701
-
702
- var isToPre = newBlockIsPre && !blockIsPre;
703
- var isFromPre = !newBlockIsPre && blockIsPre;
704
-
705
- if ( isToPre )
706
- newBlock = toPre( block, newBlock );
707
- else if ( isFromPre )
708
- // Split big <pre> into pieces before start to convert.
709
- newBlock = fromPres( splitIntoPres( block ), newBlock );
710
- else
711
- block.moveChildren( newBlock );
712
-
713
- newBlock.replace( block );
714
-
715
- if ( newBlockIsPre )
716
- {
717
- // Merge previous <pre> blocks.
718
- mergePre( newBlock );
719
- }
720
- }
721
-
722
- /**
723
- * Merge a <pre> block with a previous sibling if available.
724
- */
725
- function mergePre( preBlock )
726
- {
727
- var previousBlock;
728
- if ( !( ( previousBlock = preBlock.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) )
729
- && previousBlock.is
730
- && previousBlock.is( 'pre') ) )
731
- return;
732
-
733
- // Merge the previous <pre> block contents into the current <pre>
734
- // block.
735
- //
736
- // Another thing to be careful here is that currentBlock might contain
737
- // a '\n' at the beginning, and previousBlock might contain a '\n'
738
- // towards the end. These new lines are not normally displayed but they
739
- // become visible after merging.
740
- var mergedHtml = replace( previousBlock.getHtml(), /\n$/, '' ) + '\n\n' +
741
- replace( preBlock.getHtml(), /^\n/, '' ) ;
742
-
743
- // Krugle: IE normalizes innerHTML from <pre>, breaking whitespaces.
744
- if ( CKEDITOR.env.ie )
745
- preBlock.$.outerHTML = '<pre>' + mergedHtml + '</pre>';
746
- else
747
- preBlock.setHtml( mergedHtml );
748
-
749
- previousBlock.remove();
750
- }
751
-
752
- /**
753
- * Split into multiple <pre> blocks separated by double line-break.
754
- * @param preBlock
755
- */
756
- function splitIntoPres( preBlock )
757
- {
758
- // Exclude the ones at header OR at tail,
759
- // and ignore bookmark content between them.
760
- var duoBrRegex = /(\S\s*)\n(?:\s|(<span[^>]+_fck_bookmark.*?\/span>))*\n(?!$)/gi,
761
- blockName = preBlock.getName(),
762
- splitedHtml = replace( preBlock.getOuterHtml(),
763
- duoBrRegex,
764
- function( match, charBefore, bookmark )
765
- {
766
- return charBefore + '</pre>' + bookmark + '<pre>';
767
- } );
768
-
769
- var pres = [];
770
- splitedHtml.replace( /<pre>([\s\S]*?)<\/pre>/gi, function( match, preContent ){
771
- pres.push( preContent );
772
- } );
773
- return pres;
774
- }
775
-
776
- // Wrapper function of String::replace without considering of head/tail bookmarks nodes.
777
- function replace( str, regexp, replacement )
778
- {
779
- var headBookmark = '',
780
- tailBookmark = '';
781
-
782
- str = str.replace( /(^<span[^>]+_fck_bookmark.*?\/span>)|(<span[^>]+_fck_bookmark.*?\/span>$)/gi,
783
- function( str, m1, m2 ){
784
- m1 && ( headBookmark = m1 );
785
- m2 && ( tailBookmark = m2 );
786
- return '';
787
- } );
788
- return headBookmark + str.replace( regexp, replacement ) + tailBookmark;
789
- }
790
- /**
791
- * Converting a list of <pre> into blocks with format well preserved.
792
- */
793
- function fromPres( preHtmls, newBlock )
794
- {
795
- var docFrag = new CKEDITOR.dom.documentFragment( newBlock.getDocument() );
796
- for ( var i = 0 ; i < preHtmls.length ; i++ )
797
- {
798
- var blockHtml = preHtmls[ i ];
799
-
800
- // 1. Trim the first and last line-breaks immediately after and before <pre>,
801
- // they're not visible.
802
- blockHtml = blockHtml.replace( /(\r\n|\r)/g, '\n' ) ;
803
- blockHtml = replace( blockHtml, /^[ \t]*\n/, '' ) ;
804
- blockHtml = replace( blockHtml, /\n$/, '' ) ;
805
- // 2. Convert spaces or tabs at the beginning or at the end to &nbsp;
806
- blockHtml = replace( blockHtml, /^[ \t]+|[ \t]+$/g, function( match, offset, s )
807
- {
808
- if ( match.length == 1 ) // one space, preserve it
809
- return '&nbsp;' ;
810
- else if ( !offset ) // beginning of block
811
- return CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 ) + ' ';
812
- else // end of block
813
- return ' ' + CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 );
814
- } ) ;
815
-
816
- // 3. Convert \n to <BR>.
817
- // 4. Convert contiguous (i.e. non-singular) spaces or tabs to &nbsp;
818
- blockHtml = blockHtml.replace( /\n/g, '<br>' ) ;
819
- blockHtml = blockHtml.replace( /[ \t]{2,}/g,
820
- function ( match )
821
- {
822
- return CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 ) + ' ' ;
823
- } ) ;
824
-
825
- var newBlockClone = newBlock.clone();
826
- newBlockClone.setHtml( blockHtml );
827
- docFrag.append( newBlockClone );
828
- }
829
- return docFrag;
830
- }
831
-
832
- /**
833
- * Converting from a non-PRE block to a PRE block in formatting operations.
834
- */
835
- function toPre( block, newBlock )
836
- {
837
- // First trim the block content.
838
- var preHtml = block.getHtml();
839
-
840
- // 1. Trim head/tail spaces, they're not visible.
841
- preHtml = replace( preHtml, /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g, '' );
842
- // 2. Delete ANSI whitespaces immediately before and after <BR> because
843
- // they are not visible.
844
- preHtml = preHtml.replace( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi, '$1' );
845
- // 3. Compress other ANSI whitespaces since they're only visible as one
846
- // single space previously.
847
- // 4. Convert &nbsp; to spaces since &nbsp; is no longer needed in <PRE>.
848
- preHtml = preHtml.replace( /([ \t\n\r]+|&nbsp;)/g, ' ' );
849
- // 5. Convert any <BR /> to \n. This must not be done earlier because
850
- // the \n would then get compressed.
851
- preHtml = preHtml.replace( /<br\b[^>]*>/gi, '\n' );
852
-
853
- // Krugle: IE normalizes innerHTML to <pre>, breaking whitespaces.
854
- if ( CKEDITOR.env.ie )
855
- {
856
- var temp = block.getDocument().createElement( 'div' );
857
- temp.append( newBlock );
858
- newBlock.$.outerHTML = '<pre>' + preHtml + '</pre>';
859
- newBlock = temp.getFirst().remove();
860
- }
861
- else
862
- newBlock.setHtml( preHtml );
863
-
864
- return newBlock;
865
- }
866
-
867
- // Removes a style from an element itself, don't care about its subtree.
868
- function removeFromElement( style, element )
869
- {
870
- var def = style._.definition,
871
- attributes = def.attributes,
872
- styles = def.styles,
873
- overrides = getOverrides( style );
874
-
875
- function removeAttrs()
876
- {
877
- for ( var attName in attributes )
878
- {
879
- // The 'class' element value must match (#1318).
880
- if ( attName == 'class' && element.getAttribute( attName ) != attributes[ attName ] )
881
- continue;
882
- element.removeAttribute( attName );
883
- }
884
- }
885
-
886
- // Remove definition attributes/style from the elemnt.
887
- removeAttrs();
888
- for ( var styleName in styles )
889
- element.removeStyle( styleName );
890
-
891
- // Now remove override styles on the element.
892
- attributes = overrides[ element.getName() ];
893
- if( attributes )
894
- removeAttrs();
895
- removeNoAttribsElement( element );
896
- }
897
-
898
- // Removes a style from inside an element.
899
- function removeFromInsideElement( style, element )
900
- {
901
- var def = style._.definition,
902
- attribs = def.attributes,
903
- styles = def.styles,
904
- overrides = getOverrides( style );
905
-
906
- var innerElements = element.getElementsByTag( style.element );
907
-
908
- for ( var i = innerElements.count(); --i >= 0 ; )
909
- removeFromElement( style, innerElements.getItem( i ) );
910
-
911
- // Now remove any other element with different name that is
912
- // defined to be overriden.
913
- for ( var overrideElement in overrides )
914
- {
915
- if ( overrideElement != style.element )
916
- {
917
- innerElements = element.getElementsByTag( overrideElement ) ;
918
- for ( i = innerElements.count() - 1 ; i >= 0 ; i-- )
919
- {
920
- var innerElement = innerElements.getItem( i );
921
- removeOverrides( innerElement, overrides[ overrideElement ] ) ;
922
- }
923
- }
924
- }
925
-
926
- }
927
-
928
- /**
929
- * Remove overriding styles/attributes from the specific element.
930
- * Note: Remove the element if no attributes remain.
931
- * @param {Object} element
932
- * @param {Object} overrides
933
- */
934
- function removeOverrides( element, overrides )
935
- {
936
- var attributes = overrides && overrides.attributes ;
937
-
938
- if ( attributes )
939
- {
940
- for ( var i = 0 ; i < attributes.length ; i++ )
941
- {
942
- var attName = attributes[i][0], actualAttrValue ;
943
-
944
- if ( ( actualAttrValue = element.getAttribute( attName ) ) )
945
- {
946
- var attValue = attributes[i][1] ;
947
-
948
- // Remove the attribute if:
949
- // - The override definition value is null ;
950
- // - The override definition valie is a string that
951
- // matches the attribute value exactly.
952
- // - The override definition value is a regex that
953
- // has matches in the attribute value.
954
- if ( attValue === null ||
955
- ( attValue.test && attValue.test( actualAttrValue ) ) ||
956
- ( typeof attValue == 'string' && actualAttrValue == attValue ) )
957
- element.removeAttribute( attName ) ;
958
- }
959
- }
960
- }
961
-
962
- removeNoAttribsElement( element );
963
- }
964
-
965
- // If the element has no more attributes, remove it.
966
- function removeNoAttribsElement( element )
967
- {
968
- // If no more attributes remained in the element, remove it,
969
- // leaving its children.
970
- if ( !element.hasAttributes() )
971
- {
972
- // Removing elements may open points where merging is possible,
973
- // so let's cache the first and last nodes for later checking.
974
- var firstChild = element.getFirst();
975
- var lastChild = element.getLast();
976
-
977
- element.remove( true );
978
-
979
- if ( firstChild )
980
- {
981
- // Check the cached nodes for merging.
982
- mergeSiblings( firstChild );
983
-
984
- if ( lastChild && !firstChild.equals( lastChild ) )
985
- mergeSiblings( lastChild );
986
- }
987
- }
988
- }
989
-
990
- function mergeSiblings( element )
991
- {
992
- if ( !element || element.type != CKEDITOR.NODE_ELEMENT || !CKEDITOR.dtd.$removeEmpty[ element.getName() ] )
993
- return;
994
-
995
- mergeElements( element, element.getNext(), true );
996
- mergeElements( element, element.getPrevious() );
997
- }
998
-
999
- function mergeElements( element, sibling, isNext )
1000
- {
1001
- if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT )
1002
- {
1003
- var hasBookmark = sibling.getAttribute( '_fck_bookmark' );
1004
-
1005
- if ( hasBookmark )
1006
- sibling = isNext ? sibling.getNext() : sibling.getPrevious();
1007
-
1008
- if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT && element.isIdentical( sibling ) )
1009
- {
1010
- // Save the last child to be checked too, to merge things like
1011
- // <b><i></i></b><b><i></i></b> => <b><i></i></b>
1012
- var innerSibling = isNext ? element.getLast() : element.getFirst();
1013
-
1014
- if ( hasBookmark )
1015
- ( isNext ? sibling.getPrevious() : sibling.getNext() ).move( element, !isNext );
1016
-
1017
- sibling.moveChildren( element, !isNext );
1018
- sibling.remove();
1019
-
1020
- // Now check the last inner child (see two comments above).
1021
- if ( innerSibling )
1022
- mergeSiblings( innerSibling );
1023
- }
1024
- }
1025
- }
1026
-
1027
- function getElement( style, targetDocument )
1028
- {
1029
- var el;
1030
-
1031
- var def = style._.definition;
1032
-
1033
- var elementName = style.element;
1034
-
1035
- // The "*" element name will always be a span for this function.
1036
- if ( elementName == '*' )
1037
- elementName = 'span';
1038
-
1039
- // Create the element.
1040
- el = new CKEDITOR.dom.element( elementName, targetDocument );
1041
-
1042
- return setupElement( el, style );
1043
- }
1044
-
1045
- function setupElement( el, style )
1046
- {
1047
- var def = style._.definition;
1048
- var attributes = def.attributes;
1049
- var styles = CKEDITOR.style.getStyleText( def );
1050
-
1051
- // Assign all defined attributes.
1052
- if ( attributes )
1053
- {
1054
- for ( var att in attributes )
1055
- {
1056
- el.setAttribute( att, attributes[ att ] );
1057
- }
1058
- }
1059
-
1060
- // Assign all defined styles.
1061
- if ( styles )
1062
- el.setAttribute( 'style', styles );
1063
-
1064
- return el;
1065
- }
1066
-
1067
- var varRegex = /#\((.+?)\)/g;
1068
- function replaceVariables( list, variablesValues )
1069
- {
1070
- for ( var item in list )
1071
- {
1072
- list[ item ] = list[ item ].replace( varRegex, function( match, varName )
1073
- {
1074
- return variablesValues[ varName ];
1075
- });
1076
- }
1077
- }
1078
-
1079
-
1080
- // Returns an object that can be used for style matching comparison.
1081
- // Attributes names and values are all lowercased, and the styles get
1082
- // merged with the style attribute.
1083
- function getAttributesForComparison( styleDefinition )
1084
- {
1085
- // If we have already computed it, just return it.
1086
- var attribs = styleDefinition._AC;
1087
- if ( attribs )
1088
- return attribs;
1089
-
1090
- attribs = {};
1091
-
1092
- var length = 0;
1093
-
1094
- // Loop through all defined attributes.
1095
- var styleAttribs = styleDefinition.attributes;
1096
- if ( styleAttribs )
1097
- {
1098
- for ( var styleAtt in styleAttribs )
1099
- {
1100
- length++;
1101
- attribs[ styleAtt ] = styleAttribs[ styleAtt ];
1102
- }
1103
- }
1104
-
1105
- // Includes the style definitions.
1106
- var styleText = CKEDITOR.style.getStyleText( styleDefinition );
1107
- if ( styleText )
1108
- {
1109
- if ( !attribs[ 'style' ] )
1110
- length++;
1111
- attribs[ 'style' ] = styleText;
1112
- }
1113
-
1114
- // Appends the "length" information to the object.
1115
- attribs._length = length;
1116
-
1117
- // Return it, saving it to the next request.
1118
- return ( styleDefinition._AC = attribs );
1119
- }
1120
-
1121
- /**
1122
- * Get the the collection used to compare the elements and attributes,
1123
- * defined in this style overrides, with other element. All information in
1124
- * it is lowercased.
1125
- * @param {CKEDITOR.style} style
1126
- */
1127
- function getOverrides( style )
1128
- {
1129
- if( style._.overrides )
1130
- return style._.overrides;
1131
-
1132
- var overrides = ( style._.overrides = {} ),
1133
- definition = style._.definition.overrides;
1134
-
1135
- if ( definition )
1136
- {
1137
- // The override description can be a string, object or array.
1138
- // Internally, well handle arrays only, so transform it if needed.
1139
- if ( !CKEDITOR.tools.isArray( definition ) )
1140
- definition = [ definition ];
1141
-
1142
- // Loop through all override definitions.
1143
- for ( var i = 0 ; i < definition.length ; i++ )
1144
- {
1145
- var override = definition[i];
1146
- var elementName;
1147
- var overrideEl;
1148
- var attrs;
1149
-
1150
- // If can be a string with the element name.
1151
- if ( typeof override == 'string' )
1152
- elementName = override.toLowerCase();
1153
- // Or an object.
1154
- else
1155
- {
1156
- elementName = override.element ? override.element.toLowerCase() : style.element;
1157
- attrs = override.attributes;
1158
- }
1159
-
1160
- // We can have more than one override definition for the same
1161
- // element name, so we attempt to simply append information to
1162
- // it if it already exists.
1163
- overrideEl = overrides[ elementName ] || ( overrides[ elementName ] = {} );
1164
-
1165
- if ( attrs )
1166
- {
1167
- // The returning attributes list is an array, because we
1168
- // could have different override definitions for the same
1169
- // attribute name.
1170
- var overrideAttrs = ( overrideEl.attributes = overrideEl.attributes || new Array() );
1171
- for ( var attName in attrs )
1172
- {
1173
- // Each item in the attributes array is also an array,
1174
- // where [0] is the attribute name and [1] is the
1175
- // override value.
1176
- overrideAttrs.push( [ attName.toLowerCase(), attrs[ attName ] ] );
1177
- }
1178
- }
1179
- }
1180
- }
1181
-
1182
- return overrides;
1183
- }
1184
-
1185
- function normalizeCssText( unparsedCssText, nativeNormalize )
1186
- {
1187
- var styleText;
1188
- if ( nativeNormalize !== false )
1189
- {
1190
- // Injects the style in a temporary span object, so the browser parses it,
1191
- // retrieving its final format.
1192
- var temp = new CKEDITOR.dom.element( 'span' );
1193
- temp.setAttribute( 'style', unparsedCssText );
1194
- styleText = temp.getAttribute( 'style' );
1195
- }
1196
- else
1197
- styleText = unparsedCssText;
1198
-
1199
- // Shrinking white-spaces around colon and semi-colon (#4147).
1200
- // Compensate tail semi-colon.
1201
- return styleText.replace( /\s*([;:])\s*/, '$1' )
1202
- .replace( /([^\s;])$/, '$1;')
1203
- .toLowerCase();
1204
- }
1205
-
1206
- function applyStyle( document, remove )
1207
- {
1208
- // Get all ranges from the selection.
1209
- var selection = document.getSelection();
1210
- var ranges = selection.getRanges();
1211
- var func = remove ? this.removeFromRange : this.applyToRange;
1212
-
1213
- // Apply the style to the ranges.
1214
- for ( var i = 0 ; i < ranges.length ; i++ )
1215
- func.call( this, ranges[ i ] );
1216
-
1217
- // Select the ranges again.
1218
- selection.selectRanges( ranges );
1219
- }
1220
- })();
1221
-
1222
- CKEDITOR.styleCommand = function( style )
1223
- {
1224
- this.style = style;
1225
- };
1226
-
1227
- CKEDITOR.styleCommand.prototype.exec = function( editor )
1228
- {
1229
- editor.focus();
1230
-
1231
- var doc = editor.document;
1232
-
1233
- if ( doc )
1234
- {
1235
- if ( this.state == CKEDITOR.TRISTATE_OFF )
1236
- this.style.apply( doc );
1237
- else if ( this.state == CKEDITOR.TRISTATE_ON )
1238
- this.style.remove( doc );
1239
- }
1240
-
1241
- return !!doc;
1242
- };