typus 3.1.0.rc6 → 3.1.0.rc7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (812) hide show
  1. data/.gitignore +10 -0
  2. data/.gitmodules +6 -0
  3. data/.yardopts +6 -0
  4. data/Gemfile +1 -1
  5. data/README.md +7 -7
  6. data/Rakefile +14 -1
  7. data/app/assets/javascripts/typus/jquery.application.js +13 -2
  8. data/app/assets/stylesheets/typus/screen.css +4 -0
  9. data/app/controllers/admin/account_controller.rb +2 -3
  10. data/app/controllers/admin/resources_controller.rb +42 -32
  11. data/app/controllers/admin/session_controller.rb +1 -1
  12. data/app/helpers/admin/base_helper.rb +28 -33
  13. data/app/helpers/admin/dashboard_helper.rb +5 -7
  14. data/app/helpers/admin/resources/data_types/belongs_to_helper.rb +82 -0
  15. data/app/helpers/admin/resources/data_types/boolean_helper.rb +28 -0
  16. data/app/helpers/admin/resources/data_types/date_helper.rb +12 -0
  17. data/app/helpers/admin/resources/data_types/datetime_helper.rb +17 -0
  18. data/app/helpers/admin/resources/data_types/dragonfly_helper.rb +37 -0
  19. data/app/helpers/admin/resources/data_types/float_helper.rb +3 -0
  20. data/app/helpers/admin/resources/data_types/has_and_belongs_to_many_helper.rb +24 -0
  21. data/app/helpers/admin/resources/data_types/has_many_helper.rb +43 -0
  22. data/app/helpers/admin/resources/data_types/has_one_helper.rb +23 -0
  23. data/app/helpers/admin/resources/data_types/paperclip_helper.rb +38 -0
  24. data/app/helpers/admin/resources/data_types/position_helper.rb +22 -0
  25. data/app/helpers/admin/resources/data_types/selector_helper.rb +11 -0
  26. data/app/helpers/admin/resources/data_types/string_helper.rb +29 -0
  27. data/app/helpers/admin/resources/data_types/text_helper.rb +7 -0
  28. data/app/helpers/admin/resources/data_types/transversal_helper.rb +8 -0
  29. data/app/helpers/admin/resources/data_types/tree_helper.rb +25 -0
  30. data/app/helpers/admin/resources/display_helper.rb +26 -0
  31. data/app/helpers/admin/resources/filters_helper.rb +36 -0
  32. data/app/helpers/admin/resources/form_helper.rb +69 -0
  33. data/app/helpers/admin/resources/list_helper.rb +27 -0
  34. data/app/helpers/admin/resources/relationships_helper.rb +55 -0
  35. data/app/helpers/admin/resources/table_helper.rb +61 -0
  36. data/app/helpers/admin/resources_helper.rb +33 -34
  37. data/app/views/admin/resources/_form.html.erb +4 -5
  38. data/app/views/admin/resources/edit.html.erb +7 -2
  39. data/app/views/admin/resources/index.html.erb +11 -2
  40. data/app/views/admin/resources/new.html.erb +2 -7
  41. data/app/views/admin/templates/_belongs_to_with_autocomplete.html.erb +2 -6
  42. data/app/views/admin/templates/_dragonfly.html.erb +5 -0
  43. data/app/views/admin/{helpers/_file_preview.html.erb → templates/_dragonfly_preview.html.erb} +0 -0
  44. data/app/views/admin/templates/_has_n.html.erb +0 -2
  45. data/app/views/admin/templates/_paperclip.html.erb +5 -0
  46. data/app/views/admin/templates/_paperclip_preview.html.erb +3 -0
  47. data/app/views/admin/templates/_selector.html.erb +2 -2
  48. data/app/views/admin/templates/{_rich_text.html.erb → _text_with_ckeditor.html.erb} +2 -2
  49. data/app/views/admin/templates/_text_with_ckeditor_and_assets.html.erb +24 -0
  50. data/app/views/admin/templates/_tree.html.erb +6 -4
  51. data/app/views/{admin/helpers → helpers/admin}/base/_apps.html.erb +0 -0
  52. data/app/views/{admin/helpers → helpers/admin}/base/_flash_message.html.erb +0 -0
  53. data/app/views/{admin/helpers → helpers/admin}/base/_header.html.erb +0 -0
  54. data/app/views/{admin/helpers → helpers/admin}/base/_login_info.html.erb +0 -0
  55. data/app/views/{admin/helpers → helpers/admin}/dashboard/_resources.html.erb +0 -0
  56. data/app/views/helpers/admin/resources/_actions.html.erb +24 -0
  57. data/app/views/{admin/helpers → helpers/admin}/resources/_errors.html.erb +0 -0
  58. data/app/views/{admin/helpers/filters → helpers/admin/resources}/_filters.html.erb +0 -0
  59. data/app/views/{admin/helpers/search → helpers/admin/resources}/_search.html.erb +0 -0
  60. data/app/views/{admin/helpers/sidebar → helpers/admin/resources}/_sidebar.html.erb +0 -0
  61. data/app/views/helpers/admin/resources/_table.html.erb +45 -0
  62. data/config/routes.rb +1 -1
  63. data/doc/yard/handlers/configurable_attr_handler.rb +38 -0
  64. data/doc/yard/setup.rb +9 -0
  65. data/doc/yard/templates/default/fulldoc/html/css/common.css +109 -0
  66. data/doc/yard/templates/default/layout/html/layout.erb +126 -0
  67. data/doc/yard/templates/default/module/html/configuration_summary.erb +31 -0
  68. data/doc/yard/templates/default/module/setup.rb +17 -0
  69. data/lib/generators/templates/config/initializers/typus_resources.rb +0 -3
  70. data/lib/generators/templates/config/typus/README +0 -1
  71. data/lib/generators/templates/{controller.rb → controller.erb} +0 -0
  72. data/lib/generators/templates/{migration.rb → migration.erb} +0 -0
  73. data/lib/generators/typus/controller_generator.rb +1 -1
  74. data/lib/generators/typus/migration_generator.rb +1 -1
  75. data/lib/typus/authentication/session.rb +16 -19
  76. data/lib/typus/controller/actions.rb +14 -5
  77. data/lib/typus/controller/{acts_as.rb → acts_as_list.rb} +7 -6
  78. data/lib/typus/controller/associations.rb +11 -13
  79. data/lib/typus/controller/autocomplete.rb +1 -1
  80. data/lib/typus/controller/bulk.rb +70 -0
  81. data/lib/typus/controller/filters.rb +11 -3
  82. data/lib/typus/controller/headless.rb +22 -1
  83. data/lib/typus/controller/trash.rb +10 -6
  84. data/lib/typus/orm/active_record/admin_user_v1.rb +9 -20
  85. data/lib/typus/orm/active_record/admin_user_v2.rb +9 -13
  86. data/lib/typus/orm/active_record/class_methods.rb +7 -2
  87. data/lib/typus/orm/active_record/user/class_methods.rb +29 -0
  88. data/lib/typus/resources.rb +0 -3
  89. data/lib/typus/version.rb +1 -1
  90. data/lib/typus.rb +2 -1
  91. data/test/app/controllers/admin/account_controller_test.rb +12 -1
  92. data/test/app/controllers/admin/base_controller_test.rb +2 -2
  93. data/test/app/controllers/admin/dashboard_controller_test.rb +0 -8
  94. data/test/app/controllers/admin/{status_controller_test.rb → resource/status_controller_test.rb} +2 -2
  95. data/test/app/controllers/admin/resources/acts_as_list_test.rb +48 -0
  96. data/test/app/controllers/admin/{assets_controller_test.rb → resources/assets_controller_test.rb.old} +1 -20
  97. data/test/app/controllers/admin/resources/associations_test.rb +59 -0
  98. data/test/app/controllers/admin/{birds_controller_test.rb → resources/birds_controller_test.rb.old} +0 -0
  99. data/test/app/controllers/admin/resources/bulk_test.rb +36 -0
  100. data/test/app/controllers/admin/{cases_controller_test.rb → resources/cases_controller_test.rb.old} +0 -0
  101. data/test/app/controllers/admin/{comments_controller_test.rb → resources/comments_controller_test.rb.old} +9 -6
  102. data/test/app/controllers/admin/resources/image_holders_controller_test.rb.old +55 -0
  103. data/test/app/controllers/admin/{invoices_controller_test.rb → resources/invoices_controller_test.rb.old} +8 -14
  104. data/test/app/controllers/admin/{orders_controller_test.rb → resources/orders_controller_test.rb.old} +0 -0
  105. data/test/app/controllers/admin/{pages_controller_test.rb → resources/pages_controller_test.rb.old} +0 -5
  106. data/test/app/controllers/admin/{posts_controller_test.rb → resources/posts_controller_test.rb.old} +7 -122
  107. data/test/app/controllers/admin/{projects_controller_test.rb → resources/projects_controller_test.rb.old} +0 -0
  108. data/test/app/controllers/admin/resources/trash_test.rb +41 -0
  109. data/test/app/controllers/admin/{typus_users_controller_test.rb → resources/typus_users_controller_test.rb} +9 -7
  110. data/test/app/controllers/admin/{users_controller_test.rb → resources/users_controller_test.rb.old} +0 -0
  111. data/test/app/controllers/admin/{views_controller_test.rb → resources/views_controller_test.rb.old} +0 -4
  112. data/test/app/controllers/admin/resources_controller_test.rb +102 -0
  113. data/test/app/controllers/admin/session_controller_test.rb +9 -7
  114. data/test/app/helpers/admin/base_helper_test.rb +4 -4
  115. data/test/app/helpers/admin/dashboard_helper_test.rb +1 -1
  116. data/test/app/helpers/admin/filters_helper_test.rb +10 -14
  117. data/test/app/helpers/admin/form_helper_test.rb +1 -1
  118. data/test/app/helpers/admin/relationships_helper_test.rb +0 -1
  119. data/test/app/helpers/admin/search_helper_test.rb +7 -7
  120. data/test/app/models/admin_user_test.rb +8 -5
  121. data/test/app/models/typus_user_test.rb +8 -5
  122. data/test/app/models/user_test.rb +8 -5
  123. data/test/factories.rb +10 -0
  124. data/test/fixtures/rails_app/app/controllers/admin/assets_controller.rb +0 -49
  125. data/test/fixtures/rails_app/app/controllers/admin/categories_controller.rb +3 -0
  126. data/test/fixtures/rails_app/app/controllers/admin/entries_controller.rb +0 -3
  127. data/test/fixtures/rails_app/app/controllers/admin/entry_bulks_controller.rb +5 -0
  128. data/test/fixtures/rails_app/app/controllers/admin/entry_trashes_controller.rb +5 -0
  129. data/test/fixtures/rails_app/app/models/entry.rb +1 -0
  130. data/test/fixtures/rails_app/app/models/entry_bulk.rb +2 -0
  131. data/test/fixtures/rails_app/app/models/entry_trash.rb +2 -0
  132. data/test/fixtures/rails_app/app/views/admin/article/entries/_index.html.erb +3 -0
  133. data/test/fixtures/rails_app/app/views/admin/assets/_edit.html.erb +26 -0
  134. data/test/fixtures/rails_app/app/views/admin/cases/_index.html.erb +1 -1
  135. data/test/fixtures/rails_app/app/views/admin/categories/_index.html.erb +1 -1
  136. data/test/fixtures/rails_app/app/views/admin/dashboard/_sidebar.html.erb +1 -1
  137. data/test/fixtures/rails_app/app/views/admin/entry_bulks/_index.html.erb +3 -0
  138. data/test/fixtures/rails_app/app/views/admin/entry_trashes/_index.html.erb +3 -0
  139. data/test/fixtures/rails_app/app/views/admin/templates/_datepicker.html.erb +6 -1
  140. data/test/fixtures/rails_app/config/deploy.rb +1 -1
  141. data/test/fixtures/rails_app/config/typus/README +0 -1
  142. data/test/fixtures/rails_app/config/typus/admin.yml +1 -1
  143. data/test/fixtures/rails_app/config/typus/crud_extended.yml +16 -4
  144. data/test/fixtures/rails_app/config/typus/crud_extended_roles.yml +2 -3
  145. data/test/fixtures/rails_app/config/typus/extensions.yml +29 -0
  146. data/test/fixtures/rails_app/config/typus/extensions_roles.yml +4 -0
  147. data/test/fixtures/rails_app/public/vendor/ckeditor/.htaccess +24 -0
  148. data/test/fixtures/rails_app/public/vendor/ckeditor/CHANGES.html +1295 -0
  149. data/test/fixtures/rails_app/public/vendor/ckeditor/INSTALL.html +92 -0
  150. data/test/fixtures/rails_app/public/vendor/ckeditor/LICENSE.html +1334 -0
  151. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/adobeair/application.xml +32 -0
  152. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/adobeair/run.bat +9 -0
  153. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/adobeair/run.sh +8 -0
  154. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/adobeair/sample.html +45 -0
  155. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/ajax.html +98 -0
  156. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/api.html +192 -0
  157. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/api_dialog/my_dialog.js +28 -0
  158. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/api_dialog.html +198 -0
  159. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/asp/advanced.asp +105 -0
  160. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/asp/events.asp +136 -0
  161. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/asp/index.html +103 -0
  162. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/asp/replace.asp +72 -0
  163. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/asp/replaceall.asp +77 -0
  164. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/asp/sample_posteddata.asp +46 -0
  165. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/asp/standalone.asp +72 -0
  166. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/assets/_posteddata.php +59 -0
  167. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/assets/output_for_flash.fla +0 -0
  168. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/assets/output_for_flash.swf +0 -0
  169. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/assets/output_xhtml.css +204 -0
  170. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/assets/parsesample.css +70 -0
  171. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/assets/swfobject.js +18 -0
  172. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/autogrow.html +103 -0
  173. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/bbcode.html +136 -0
  174. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/devtools.html +94 -0
  175. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/divreplace.html +154 -0
  176. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/enterkey.html +115 -0
  177. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/fullpage.html +82 -0
  178. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/index.html +116 -0
  179. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/jqueryadapter.html +99 -0
  180. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/output_for_flash.html +275 -0
  181. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/output_html.html +285 -0
  182. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/output_xhtml.html +181 -0
  183. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/php/advanced.php +120 -0
  184. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/php/events.php +153 -0
  185. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/php/index.html +47 -0
  186. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/php/replace.php +87 -0
  187. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/php/replaceall.php +88 -0
  188. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/php/standalone.php +83 -0
  189. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/placeholder.html +81 -0
  190. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/readonly.html +91 -0
  191. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/replacebyclass.html +64 -0
  192. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/replacebycode.html +97 -0
  193. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/sample.css +163 -0
  194. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/sample.js +65 -0
  195. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/sample_posteddata.php +21 -0
  196. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/sharedspaces.html +153 -0
  197. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/skins.html +110 -0
  198. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/stylesheetparser.html +93 -0
  199. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/tableresize.html +115 -0
  200. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/ui_color.html +129 -0
  201. data/test/fixtures/rails_app/public/vendor/ckeditor/_samples/ui_languages.html +134 -0
  202. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/adapters/jquery.js +306 -0
  203. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/_bootstrap.js +87 -0
  204. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/ckeditor.js +141 -0
  205. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/ckeditor_base.js +227 -0
  206. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/ckeditor_basic.js +238 -0
  207. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/command.js +209 -0
  208. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/commanddefinition.js +129 -0
  209. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/config.js +431 -0
  210. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dataprocessor.js +65 -0
  211. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/comment.js +32 -0
  212. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/document.js +251 -0
  213. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/documentfragment.js +49 -0
  214. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/domobject.js +258 -0
  215. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/element.js +1663 -0
  216. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/elementpath.js +119 -0
  217. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/event.js +142 -0
  218. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/node.js +690 -0
  219. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/nodelist.js +26 -0
  220. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/range.js +2032 -0
  221. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/rangelist.js +213 -0
  222. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/text.js +128 -0
  223. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/walker.js +462 -0
  224. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom/window.js +96 -0
  225. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dom.js +20 -0
  226. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/dtd.js +237 -0
  227. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/editor.js +1041 -0
  228. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/editor_basic.js +186 -0
  229. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/env.js +282 -0
  230. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/event.js +342 -0
  231. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/eventInfo.js +120 -0
  232. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/focusmanager.js +152 -0
  233. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/htmlparser/basicwriter.js +145 -0
  234. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/htmlparser/cdata.js +43 -0
  235. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/htmlparser/comment.js +60 -0
  236. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/htmlparser/element.js +249 -0
  237. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/htmlparser/filter.js +288 -0
  238. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/htmlparser/fragment.js +492 -0
  239. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/htmlparser/text.js +55 -0
  240. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/htmlparser.js +224 -0
  241. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/lang.js +157 -0
  242. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/loader.js +240 -0
  243. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/plugindefinition.js +83 -0
  244. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/plugins.js +103 -0
  245. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/resourcemanager.js +238 -0
  246. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/scriptloader.js +180 -0
  247. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/skins.js +184 -0
  248. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/themes.js +19 -0
  249. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/tools.js +734 -0
  250. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/core/ui.js +128 -0
  251. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/_languages.js +84 -0
  252. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/_translationstatus.txt +61 -0
  253. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/af.js +810 -0
  254. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/ar.js +810 -0
  255. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/bg.js +810 -0
  256. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/bn.js +810 -0
  257. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/bs.js +810 -0
  258. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/ca.js +810 -0
  259. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/cs.js +810 -0
  260. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/cy.js +810 -0
  261. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/da.js +810 -0
  262. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/de.js +810 -0
  263. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/el.js +810 -0
  264. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/en-au.js +810 -0
  265. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/en-ca.js +810 -0
  266. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/en-gb.js +810 -0
  267. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/en.js +810 -0
  268. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/eo.js +810 -0
  269. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/es.js +810 -0
  270. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/et.js +810 -0
  271. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/eu.js +810 -0
  272. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/fa.js +810 -0
  273. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/fi.js +810 -0
  274. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/fo.js +810 -0
  275. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/fr-ca.js +810 -0
  276. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/fr.js +810 -0
  277. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/gl.js +810 -0
  278. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/gu.js +810 -0
  279. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/he.js +810 -0
  280. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/hi.js +810 -0
  281. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/hr.js +810 -0
  282. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/hu.js +810 -0
  283. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/is.js +810 -0
  284. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/it.js +810 -0
  285. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/ja.js +810 -0
  286. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/ka.js +810 -0
  287. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/km.js +810 -0
  288. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/ko.js +810 -0
  289. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/lt.js +810 -0
  290. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/lv.js +810 -0
  291. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/mn.js +810 -0
  292. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/ms.js +810 -0
  293. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/nb.js +810 -0
  294. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/nl.js +810 -0
  295. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/no.js +810 -0
  296. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/pl.js +810 -0
  297. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/pt-br.js +809 -0
  298. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/pt.js +810 -0
  299. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/ro.js +810 -0
  300. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/ru.js +810 -0
  301. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/sk.js +810 -0
  302. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/sl.js +810 -0
  303. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/sr-latn.js +810 -0
  304. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/sr.js +810 -0
  305. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/sv.js +809 -0
  306. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/th.js +810 -0
  307. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/tr.js +809 -0
  308. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/uk.js +810 -0
  309. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/vi.js +810 -0
  310. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/zh-cn.js +810 -0
  311. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/lang/zh.js +810 -0
  312. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/a11yhelp/dialogs/a11yhelp.js +222 -0
  313. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/a11yhelp/lang/en.js +108 -0
  314. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/a11yhelp/lang/he.js +216 -0
  315. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/a11yhelp/plugin.js +47 -0
  316. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/about/dialogs/about.js +76 -0
  317. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/about/dialogs/logo_ckeditor.png +0 -0
  318. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/about/plugin.js +24 -0
  319. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/adobeair/plugin.js +228 -0
  320. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/ajax/plugin.js +152 -0
  321. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/autogrow/plugin.js +88 -0
  322. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/basicstyles/plugin.js +101 -0
  323. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/bbcode/plugin.js +924 -0
  324. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/bidi/plugin.js +331 -0
  325. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/blockquote/plugin.js +305 -0
  326. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/button/plugin.js +285 -0
  327. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/clipboard/dialogs/paste.js +223 -0
  328. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/clipboard/plugin.js +446 -0
  329. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/colorbutton/plugin.js +295 -0
  330. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/colordialog/dialogs/colordialog.js +340 -0
  331. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/colordialog/plugin.js +15 -0
  332. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/contextmenu/plugin.js +177 -0
  333. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/devtools/lang/en.js +16 -0
  334. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/devtools/plugin.js +173 -0
  335. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/dialog/dialogDefinition.js +1099 -0
  336. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/dialog/plugin.js +3235 -0
  337. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/dialogadvtab/plugin.js +205 -0
  338. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/dialogui/plugin.js +1537 -0
  339. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/div/dialogs/div.js +535 -0
  340. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/div/plugin.js +121 -0
  341. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/docprops/dialogs/docprops.js +686 -0
  342. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/docprops/plugin.js +22 -0
  343. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/domiterator/plugin.js +361 -0
  344. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/editingblock/plugin.js +269 -0
  345. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/elementspath/plugin.js +218 -0
  346. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/enterkey/plugin.js +399 -0
  347. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/entities/plugin.js +250 -0
  348. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/fakeobjects/plugin.js +126 -0
  349. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/filebrowser/plugin.js +524 -0
  350. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/find/dialogs/find.js +895 -0
  351. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/find/plugin.js +47 -0
  352. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/flash/dialogs/flash.js +698 -0
  353. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/flash/images/placeholder.png +0 -0
  354. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/flash/plugin.js +168 -0
  355. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/floatpanel/plugin.js +405 -0
  356. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/font/plugin.js +234 -0
  357. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/format/plugin.js +197 -0
  358. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/dialogs/button.js +118 -0
  359. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/dialogs/checkbox.js +153 -0
  360. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/dialogs/form.js +177 -0
  361. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/dialogs/hiddenfield.js +100 -0
  362. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/dialogs/radio.js +135 -0
  363. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/dialogs/select.js +562 -0
  364. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/dialogs/textarea.js +114 -0
  365. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/dialogs/textfield.js +199 -0
  366. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/images/hiddenfield.gif +0 -0
  367. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/forms/plugin.js +288 -0
  368. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/horizontalrule/plugin.js +36 -0
  369. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/htmldataprocessor/plugin.js +595 -0
  370. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/htmlwriter/plugin.js +319 -0
  371. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/iframe/dialogs/iframe.js +257 -0
  372. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/iframe/images/placeholder.png +0 -0
  373. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/iframe/plugin.js +106 -0
  374. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/iframedialog/plugin.js +188 -0
  375. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/image/dialogs/image.js +1403 -0
  376. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/image/plugin.js +81 -0
  377. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/indent/plugin.js +461 -0
  378. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/justify/plugin.js +253 -0
  379. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/keystrokes/plugin.js +225 -0
  380. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/link/dialogs/anchor.js +144 -0
  381. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/link/dialogs/link.js +1400 -0
  382. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/link/images/anchor.gif +0 -0
  383. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/link/plugin.js +336 -0
  384. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/list/plugin.js +727 -0
  385. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/listblock/plugin.js +257 -0
  386. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/liststyle/dialogs/liststyle.js +204 -0
  387. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/liststyle/plugin.js +66 -0
  388. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/maximize/plugin.js +352 -0
  389. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/menu/plugin.js +505 -0
  390. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/menubutton/plugin.js +98 -0
  391. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/newpage/plugin.js +54 -0
  392. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/pagebreak/images/pagebreak.gif +0 -0
  393. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/pagebreak/plugin.js +164 -0
  394. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/panel/plugin.js +402 -0
  395. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/panelbutton/plugin.js +146 -0
  396. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/pastefromword/filter/default.js +1376 -0
  397. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/pastefromword/plugin.js +141 -0
  398. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/pastetext/dialogs/pastetext.js +67 -0
  399. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/pastetext/plugin.js +98 -0
  400. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/placeholder/dialogs/placeholder.js +71 -0
  401. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/placeholder/lang/en.js +16 -0
  402. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/placeholder/lang/he.js +16 -0
  403. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/placeholder/placeholder.gif +0 -0
  404. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/placeholder/plugin.js +171 -0
  405. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/popup/plugin.js +64 -0
  406. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/preview/plugin.js +109 -0
  407. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/print/plugin.js +42 -0
  408. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/removeformat/plugin.js +185 -0
  409. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/resize/plugin.js +168 -0
  410. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/richcombo/plugin.js +378 -0
  411. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/save/plugin.js +56 -0
  412. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/scayt/dialogs/options.js +537 -0
  413. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/scayt/dialogs/toolbar.css +71 -0
  414. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/scayt/plugin.js +964 -0
  415. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/selection/plugin.js +1563 -0
  416. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_address.png +0 -0
  417. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_blockquote.png +0 -0
  418. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_div.png +0 -0
  419. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_h1.png +0 -0
  420. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_h2.png +0 -0
  421. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_h3.png +0 -0
  422. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_h4.png +0 -0
  423. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_h5.png +0 -0
  424. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_h6.png +0 -0
  425. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_p.png +0 -0
  426. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/images/block_pre.png +0 -0
  427. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showblocks/plugin.js +160 -0
  428. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/showborders/plugin.js +207 -0
  429. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/dialogs/smiley.js +224 -0
  430. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/angel_smile.gif +0 -0
  431. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/angry_smile.gif +0 -0
  432. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/broken_heart.gif +0 -0
  433. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/confused_smile.gif +0 -0
  434. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/cry_smile.gif +0 -0
  435. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/devil_smile.gif +0 -0
  436. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/embaressed_smile.gif +0 -0
  437. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/envelope.gif +0 -0
  438. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/heart.gif +0 -0
  439. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/kiss.gif +0 -0
  440. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/lightbulb.gif +0 -0
  441. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/omg_smile.gif +0 -0
  442. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/regular_smile.gif +0 -0
  443. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/sad_smile.gif +0 -0
  444. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/shades_smile.gif +0 -0
  445. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/teeth_smile.gif +0 -0
  446. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/thumbs_down.gif +0 -0
  447. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/thumbs_up.gif +0 -0
  448. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/tounge_smile.gif +0 -0
  449. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  450. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/images/wink_smile.gif +0 -0
  451. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/smiley/plugin.js +94 -0
  452. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/sourcearea/plugin.js +209 -0
  453. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/specialchar/dialogs/specialchar.js +350 -0
  454. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/specialchar/lang/en.js +89 -0
  455. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/specialchar/plugin.js +70 -0
  456. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/styles/plugin.js +1678 -0
  457. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/styles/styles/default.js +88 -0
  458. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/stylescombo/plugin.js +219 -0
  459. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/stylesheetparser/plugin.js +143 -0
  460. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/tab/plugin.js +367 -0
  461. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/table/dialogs/table.js +672 -0
  462. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/table/plugin.js +78 -0
  463. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/tableresize/plugin.js +450 -0
  464. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/tabletools/dialogs/tableCell.js +525 -0
  465. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/tabletools/plugin.js +1191 -0
  466. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/templates/dialogs/templates.js +234 -0
  467. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/templates/plugin.js +99 -0
  468. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/templates/templates/default.js +94 -0
  469. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/templates/templates/images/template1.gif +0 -0
  470. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/templates/templates/images/template2.gif +0 -0
  471. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/templates/templates/images/template3.gif +0 -0
  472. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/toolbar/plugin.js +545 -0
  473. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/dialogs/uicolor.js +205 -0
  474. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/lang/en.js +15 -0
  475. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/lang/he.js +15 -0
  476. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/plugin.js +37 -0
  477. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/uicolor.gif +0 -0
  478. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  479. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  480. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  481. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  482. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/yui/assets/yui.css +15 -0
  483. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/uicolor/yui/yui.js +71 -0
  484. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/undo/plugin.js +580 -0
  485. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/wsc/dialogs/ciframe.html +49 -0
  486. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  487. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/wsc/dialogs/wsc.css +82 -0
  488. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/wsc/dialogs/wsc.js +192 -0
  489. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/wsc/plugin.js +33 -0
  490. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/wysiwygarea/plugin.js +1351 -0
  491. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/plugins/xml/plugin.js +170 -0
  492. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/dialog.css +920 -0
  493. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/editor.css +25 -0
  494. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/elementspath.css +73 -0
  495. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/icons.css +366 -0
  496. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/icons.png +0 -0
  497. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/icons_rtl.png +0 -0
  498. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/images/dialog_sides.gif +0 -0
  499. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/images/dialog_sides.png +0 -0
  500. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/images/dialog_sides_rtl.png +0 -0
  501. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/images/mini.gif +0 -0
  502. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/images/noimage.png +0 -0
  503. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/images/sprites.png +0 -0
  504. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/images/sprites_ie6.png +0 -0
  505. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/images/toolbar_start.gif +0 -0
  506. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/mainui.css +203 -0
  507. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/menu.css +232 -0
  508. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/panel.css +217 -0
  509. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/presets.css +49 -0
  510. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/reset.css +84 -0
  511. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/richcombo.css +287 -0
  512. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/skin.js +236 -0
  513. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/templates.css +88 -0
  514. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/kama/toolbar.css +407 -0
  515. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/dialog.css +826 -0
  516. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/editor.css +25 -0
  517. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/elementspath.css +74 -0
  518. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/icons.css +363 -0
  519. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/icons.png +0 -0
  520. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/icons_rtl.png +0 -0
  521. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/images/dialog_sides.gif +0 -0
  522. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/images/dialog_sides.png +0 -0
  523. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/images/dialog_sides_rtl.png +0 -0
  524. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/images/mini.gif +0 -0
  525. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/images/noimage.png +0 -0
  526. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/images/sprites.png +0 -0
  527. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/images/sprites_ie6.png +0 -0
  528. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/mainui.css +153 -0
  529. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/menu.css +229 -0
  530. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/panel.css +212 -0
  531. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/presets.css +49 -0
  532. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/reset.css +84 -0
  533. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/richcombo.css +309 -0
  534. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/skin.js +74 -0
  535. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/templates.css +87 -0
  536. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/office2003/toolbar.css +522 -0
  537. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/dialog.css +842 -0
  538. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/editor.css +25 -0
  539. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/elementspath.css +74 -0
  540. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/icons.css +363 -0
  541. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/icons.png +0 -0
  542. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/icons_rtl.png +0 -0
  543. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/images/dialog_sides.gif +0 -0
  544. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/images/dialog_sides.png +0 -0
  545. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/images/dialog_sides_rtl.png +0 -0
  546. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/images/mini.gif +0 -0
  547. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/images/noimage.png +0 -0
  548. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/images/sprites.png +0 -0
  549. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/images/sprites_ie6.png +0 -0
  550. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/images/toolbar_start.gif +0 -0
  551. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/mainui.css +162 -0
  552. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/menu.css +232 -0
  553. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/panel.css +212 -0
  554. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/presets.css +50 -0
  555. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/reset.css +84 -0
  556. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/richcombo.css +302 -0
  557. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/skin.js +70 -0
  558. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/templates.css +87 -0
  559. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/skins/v2/toolbar.css +465 -0
  560. data/test/fixtures/rails_app/public/vendor/ckeditor/_source/themes/default/theme.js +394 -0
  561. data/test/fixtures/rails_app/public/vendor/ckeditor/adapters/jquery.js +6 -0
  562. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor.asp +955 -0
  563. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor.js +145 -0
  564. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor.pack +211 -0
  565. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor.php +29 -0
  566. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor_basic.js +8 -0
  567. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor_basic_source.js +20 -0
  568. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor_php4.php +566 -0
  569. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor_php5.php +556 -0
  570. data/test/fixtures/rails_app/public/vendor/ckeditor/ckeditor_source.js +25 -0
  571. data/test/fixtures/rails_app/public/vendor/ckeditor/config.js +11 -0
  572. data/test/fixtures/rails_app/public/vendor/ckeditor/contents.css +23 -0
  573. data/test/fixtures/rails_app/public/vendor/ckeditor/images/spacer.gif +0 -0
  574. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/_languages.js +6 -0
  575. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/_translationstatus.txt +61 -0
  576. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/af.js +6 -0
  577. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/ar.js +6 -0
  578. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/bg.js +6 -0
  579. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/bn.js +6 -0
  580. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/bs.js +6 -0
  581. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/ca.js +6 -0
  582. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/cs.js +6 -0
  583. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/cy.js +6 -0
  584. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/da.js +6 -0
  585. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/de.js +6 -0
  586. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/el.js +6 -0
  587. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/en-au.js +6 -0
  588. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/en-ca.js +6 -0
  589. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/en-gb.js +6 -0
  590. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/en.js +6 -0
  591. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/eo.js +6 -0
  592. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/es.js +6 -0
  593. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/et.js +6 -0
  594. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/eu.js +6 -0
  595. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/fa.js +6 -0
  596. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/fi.js +6 -0
  597. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/fo.js +6 -0
  598. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/fr-ca.js +6 -0
  599. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/fr.js +6 -0
  600. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/gl.js +6 -0
  601. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/gu.js +6 -0
  602. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/he.js +6 -0
  603. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/hi.js +6 -0
  604. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/hr.js +6 -0
  605. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/hu.js +6 -0
  606. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/is.js +6 -0
  607. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/it.js +6 -0
  608. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/ja.js +6 -0
  609. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/ka.js +6 -0
  610. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/km.js +6 -0
  611. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/ko.js +6 -0
  612. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/lt.js +6 -0
  613. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/lv.js +6 -0
  614. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/mn.js +6 -0
  615. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/ms.js +6 -0
  616. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/nb.js +6 -0
  617. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/nl.js +6 -0
  618. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/no.js +6 -0
  619. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/pl.js +6 -0
  620. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/pt-br.js +6 -0
  621. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/pt.js +6 -0
  622. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/ro.js +6 -0
  623. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/ru.js +6 -0
  624. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/sk.js +6 -0
  625. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/sl.js +6 -0
  626. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/sr-latn.js +6 -0
  627. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/sr.js +6 -0
  628. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/sv.js +6 -0
  629. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/th.js +6 -0
  630. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/tr.js +6 -0
  631. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/uk.js +6 -0
  632. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/vi.js +6 -0
  633. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/zh-cn.js +6 -0
  634. data/test/fixtures/rails_app/public/vendor/ckeditor/lang/zh.js +6 -0
  635. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +7 -0
  636. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/a11yhelp/lang/en.js +6 -0
  637. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/a11yhelp/lang/he.js +6 -0
  638. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/about/dialogs/about.js +6 -0
  639. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  640. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/adobeair/plugin.js +6 -0
  641. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/ajax/plugin.js +6 -0
  642. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/autogrow/plugin.js +6 -0
  643. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/bbcode/plugin.js +9 -0
  644. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/clipboard/dialogs/paste.js +7 -0
  645. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/colordialog/dialogs/colordialog.js +7 -0
  646. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/devtools/lang/en.js +6 -0
  647. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/devtools/plugin.js +6 -0
  648. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  649. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/div/dialogs/div.js +8 -0
  650. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/docprops/dialogs/docprops.js +10 -0
  651. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/docprops/plugin.js +6 -0
  652. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/find/dialogs/find.js +9 -0
  653. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/flash/dialogs/flash.js +9 -0
  654. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/flash/images/placeholder.png +0 -0
  655. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/dialogs/button.js +6 -0
  656. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/dialogs/checkbox.js +6 -0
  657. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/dialogs/form.js +6 -0
  658. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/dialogs/hiddenfield.js +6 -0
  659. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/dialogs/radio.js +6 -0
  660. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/dialogs/select.js +9 -0
  661. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/dialogs/textarea.js +6 -0
  662. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/dialogs/textfield.js +6 -0
  663. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/forms/images/hiddenfield.gif +0 -0
  664. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/iframe/dialogs/iframe.js +7 -0
  665. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/iframe/images/placeholder.png +0 -0
  666. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/iframedialog/plugin.js +6 -0
  667. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/image/dialogs/image.js +13 -0
  668. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/link/dialogs/anchor.js +6 -0
  669. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/link/dialogs/link.js +11 -0
  670. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/link/images/anchor.gif +0 -0
  671. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/liststyle/dialogs/liststyle.js +6 -0
  672. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/pagebreak/images/pagebreak.gif +0 -0
  673. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/pastefromword/filter/default.js +11 -0
  674. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/pastetext/dialogs/pastetext.js +6 -0
  675. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/placeholder/dialogs/placeholder.js +6 -0
  676. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/placeholder/lang/en.js +6 -0
  677. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/placeholder/lang/he.js +6 -0
  678. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/placeholder/placeholder.gif +0 -0
  679. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/placeholder/plugin.js +6 -0
  680. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/scayt/dialogs/options.js +8 -0
  681. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/scayt/dialogs/toolbar.css +6 -0
  682. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  683. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  684. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  685. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  686. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  687. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  688. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  689. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  690. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  691. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  692. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  693. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/dialogs/smiley.js +7 -0
  694. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/angel_smile.gif +0 -0
  695. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/angry_smile.gif +0 -0
  696. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/broken_heart.gif +0 -0
  697. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/confused_smile.gif +0 -0
  698. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/cry_smile.gif +0 -0
  699. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/devil_smile.gif +0 -0
  700. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/embaressed_smile.gif +0 -0
  701. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/envelope.gif +0 -0
  702. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/heart.gif +0 -0
  703. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/kiss.gif +0 -0
  704. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/lightbulb.gif +0 -0
  705. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/omg_smile.gif +0 -0
  706. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/regular_smile.gif +0 -0
  707. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/sad_smile.gif +0 -0
  708. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/shades_smile.gif +0 -0
  709. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/teeth_smile.gif +0 -0
  710. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/thumbs_down.gif +0 -0
  711. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/thumbs_up.gif +0 -0
  712. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/tounge_smile.gif +0 -0
  713. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  714. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/smiley/images/wink_smile.gif +0 -0
  715. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/specialchar/dialogs/specialchar.js +7 -0
  716. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/specialchar/lang/en.js +6 -0
  717. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/styles/styles/default.js +6 -0
  718. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/stylesheetparser/plugin.js +6 -0
  719. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/table/dialogs/table.js +9 -0
  720. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/tableresize/plugin.js +7 -0
  721. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/tabletools/dialogs/tableCell.js +8 -0
  722. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/templates/dialogs/templates.js +7 -0
  723. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/templates/templates/default.js +6 -0
  724. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  725. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  726. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  727. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/dialogs/uicolor.js +7 -0
  728. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/lang/en.js +6 -0
  729. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/lang/he.js +6 -0
  730. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/plugin.js +6 -0
  731. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/uicolor.gif +0 -0
  732. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/yui/assets/hue_bg.png +0 -0
  733. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png +0 -0
  734. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/yui/assets/picker_mask.png +0 -0
  735. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png +0 -0
  736. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/yui/assets/yui.css +6 -0
  737. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/uicolor/yui/yui.js +76 -0
  738. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/wsc/dialogs/ciframe.html +49 -0
  739. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  740. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/wsc/dialogs/wsc.css +6 -0
  741. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/wsc/dialogs/wsc.js +7 -0
  742. data/test/fixtures/rails_app/public/vendor/ckeditor/plugins/xml/plugin.js +6 -0
  743. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/dialog.css +9 -0
  744. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/editor.css +13 -0
  745. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/icons.png +0 -0
  746. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/icons_rtl.png +0 -0
  747. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/images/dialog_sides.gif +0 -0
  748. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/images/dialog_sides.png +0 -0
  749. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/images/dialog_sides_rtl.png +0 -0
  750. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/images/mini.gif +0 -0
  751. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/images/noimage.png +0 -0
  752. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/images/sprites.png +0 -0
  753. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/images/sprites_ie6.png +0 -0
  754. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/images/toolbar_start.gif +0 -0
  755. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/skin.js +7 -0
  756. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/kama/templates.css +6 -0
  757. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/dialog.css +9 -0
  758. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/editor.css +14 -0
  759. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/icons.png +0 -0
  760. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/icons_rtl.png +0 -0
  761. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/images/dialog_sides.gif +0 -0
  762. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/images/dialog_sides.png +0 -0
  763. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/images/dialog_sides_rtl.png +0 -0
  764. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/images/mini.gif +0 -0
  765. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/images/noimage.png +0 -0
  766. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/images/sprites.png +0 -0
  767. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/images/sprites_ie6.png +0 -0
  768. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/skin.js +6 -0
  769. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/office2003/templates.css +6 -0
  770. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/dialog.css +9 -0
  771. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/editor.css +13 -0
  772. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/icons.png +0 -0
  773. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/icons_rtl.png +0 -0
  774. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/images/dialog_sides.gif +0 -0
  775. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/images/dialog_sides.png +0 -0
  776. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/images/dialog_sides_rtl.png +0 -0
  777. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/images/mini.gif +0 -0
  778. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/images/noimage.png +0 -0
  779. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/images/sprites.png +0 -0
  780. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/images/sprites_ie6.png +0 -0
  781. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/images/toolbar_start.gif +0 -0
  782. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/skin.js +6 -0
  783. data/test/fixtures/rails_app/public/vendor/ckeditor/skins/v2/templates.css +6 -0
  784. data/test/fixtures/rails_app/public/vendor/ckeditor/themes/default/theme.js +8 -0
  785. data/test/lib/typus/orm/active_record/class_methods_test.rb +92 -175
  786. data/test/lib/typus/resources_test.rb +0 -4
  787. data/test/test_helper.rb +5 -0
  788. data/typus.gemspec +1 -1
  789. metadata +1390 -75
  790. data/app/helpers/admin/display_helper.rb +0 -51
  791. data/app/helpers/admin/file_preview_helper.rb +0 -80
  792. data/app/helpers/admin/filters_helper.rb +0 -94
  793. data/app/helpers/admin/form_helper.rb +0 -78
  794. data/app/helpers/admin/list_helper.rb +0 -29
  795. data/app/helpers/admin/relationships_helper.rb +0 -192
  796. data/app/helpers/admin/search_helper.rb +0 -16
  797. data/app/helpers/admin/sidebar_helper.rb +0 -36
  798. data/app/helpers/admin/table_helper.rb +0 -159
  799. data/app/views/admin/helpers/resources/_display_link_to_previous.html.erb +0 -3
  800. data/app/views/admin/helpers/table/_table.html.erb +0 -26
  801. data/app/views/admin/templates/_file.html.erb +0 -5
  802. data/app/views/admin/templates/_relate_form.html.erb +0 -5
  803. data/app/views/admin/templates/_relate_form_with_autocomplete.html.erb +0 -26
  804. data/doc/mongo_db.md +0 -10
  805. data/test/app/controllers/admin/categories_controller_test.rb +0 -134
  806. data/test/app/controllers/admin/image_holders_controller_test.rb +0 -74
  807. data/test/app/helpers/admin/file_preview_helper_test.rb +0 -90
  808. data/test/app/helpers/admin/resources_helper_test.rb +0 -46
  809. data/test/fixtures/rails_app/config/typus/crud_namespaced.yml +0 -10
  810. data/test/fixtures/rails_app/config/typus/crud_namespaced_roles.yml +0 -2
  811. data/test/fixtures/rails_app/config/typus/sti.yml +0 -5
  812. data/test/fixtures/rails_app/config/typus/sti_roles.yml +0 -2
@@ -0,0 +1,1678 @@
1
+ /*
2
+ Copyright (c) 2003-2011, 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
+ init : function( editor )
10
+ {
11
+ // This doesn't look like correct, but it's the safest way to proper
12
+ // pass the disableReadonlyStyling configuration to the style system
13
+ // without having to change any method signature in the API. (#6103)
14
+ editor.on( 'contentDom', function()
15
+ {
16
+ editor.document.setCustomData( 'cke_includeReadonly', !editor.config.disableReadonlyStyling );
17
+ });
18
+ }
19
+ });
20
+
21
+ /**
22
+ * Registers a function to be called whenever the selection position changes in the
23
+ * editing area. The current state is passed to the function. The possible
24
+ * states are {@link CKEDITOR.TRISTATE_ON} and {@link CKEDITOR.TRISTATE_OFF}.
25
+ * @param {CKEDITOR.style} style The style to be watched.
26
+ * @param {Function} callback The function to be called.
27
+ * @example
28
+ * // Create a style object for the <b> element.
29
+ * var style = new CKEDITOR.style( { element : 'b' } );
30
+ * var editor = CKEDITOR.instances.editor1;
31
+ * editor.attachStyleStateChange( style, function( state )
32
+ * {
33
+ * if ( state == CKEDITOR.TRISTATE_ON )
34
+ * alert( 'The current state for the B element is ON' );
35
+ * else
36
+ * alert( 'The current state for the B element is OFF' );
37
+ * });
38
+ */
39
+ CKEDITOR.editor.prototype.attachStyleStateChange = function( style, callback )
40
+ {
41
+ // Try to get the list of attached callbacks.
42
+ var styleStateChangeCallbacks = this._.styleStateChangeCallbacks;
43
+
44
+ // If it doesn't exist, it means this is the first call. So, let's create
45
+ // all the structure to manage the style checks and the callback calls.
46
+ if ( !styleStateChangeCallbacks )
47
+ {
48
+ // Create the callbacks array.
49
+ styleStateChangeCallbacks = this._.styleStateChangeCallbacks = [];
50
+
51
+ // Attach to the selectionChange event, so we can check the styles at
52
+ // that point.
53
+ this.on( 'selectionChange', function( ev )
54
+ {
55
+ // Loop throw all registered callbacks.
56
+ for ( var i = 0 ; i < styleStateChangeCallbacks.length ; i++ )
57
+ {
58
+ var callback = styleStateChangeCallbacks[ i ];
59
+
60
+ // Check the current state for the style defined for that
61
+ // callback.
62
+ var currentState = callback.style.checkActive( ev.data.path ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
63
+
64
+ // Call the callback function, passing the current
65
+ // state to it.
66
+ callback.fn.call( this, currentState );
67
+ }
68
+ });
69
+ }
70
+
71
+ // Save the callback info, so it can be checked on the next occurrence of
72
+ // selectionChange.
73
+ styleStateChangeCallbacks.push( { style : style, fn : callback } );
74
+ };
75
+
76
+ CKEDITOR.STYLE_BLOCK = 1;
77
+ CKEDITOR.STYLE_INLINE = 2;
78
+ CKEDITOR.STYLE_OBJECT = 3;
79
+
80
+ (function()
81
+ {
82
+ var blockElements = { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },
83
+ objectElements = { a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1};
84
+
85
+ var semicolonFixRegex = /\s*(?:;\s*|$)/,
86
+ varRegex = /#\((.+?)\)/g;
87
+
88
+ var notBookmark = CKEDITOR.dom.walker.bookmark( 0, 1 ),
89
+ nonWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 );
90
+
91
+ CKEDITOR.style = function( styleDefinition, variablesValues )
92
+ {
93
+ if ( variablesValues )
94
+ {
95
+ styleDefinition = CKEDITOR.tools.clone( styleDefinition );
96
+
97
+ replaceVariables( styleDefinition.attributes, variablesValues );
98
+ replaceVariables( styleDefinition.styles, variablesValues );
99
+ }
100
+
101
+ var element = this.element = ( styleDefinition.element || '*' ).toLowerCase();
102
+
103
+ this.type =
104
+ blockElements[ element ] ?
105
+ CKEDITOR.STYLE_BLOCK
106
+ : objectElements[ element ] ?
107
+ CKEDITOR.STYLE_OBJECT
108
+ :
109
+ CKEDITOR.STYLE_INLINE;
110
+
111
+ this._ =
112
+ {
113
+ definition : styleDefinition
114
+ };
115
+ };
116
+
117
+ CKEDITOR.style.prototype =
118
+ {
119
+ apply : function( document )
120
+ {
121
+ applyStyle.call( this, document, false );
122
+ },
123
+
124
+ remove : function( document )
125
+ {
126
+ applyStyle.call( this, document, true );
127
+ },
128
+
129
+ applyToRange : function( range )
130
+ {
131
+ return ( this.applyToRange =
132
+ this.type == CKEDITOR.STYLE_INLINE ?
133
+ applyInlineStyle
134
+ : this.type == CKEDITOR.STYLE_BLOCK ?
135
+ applyBlockStyle
136
+ : this.type == CKEDITOR.STYLE_OBJECT ?
137
+ applyObjectStyle
138
+ : null ).call( this, range );
139
+ },
140
+
141
+ removeFromRange : function( range )
142
+ {
143
+ return ( this.removeFromRange =
144
+ this.type == CKEDITOR.STYLE_INLINE ?
145
+ removeInlineStyle
146
+ : this.type == CKEDITOR.STYLE_BLOCK ?
147
+ removeBlockStyle
148
+ : this.type == CKEDITOR.STYLE_OBJECT ?
149
+ removeObjectStyle
150
+ : null ).call( this, range );
151
+ },
152
+
153
+ applyToObject : function( element )
154
+ {
155
+ setupElement( element, this );
156
+ },
157
+
158
+ /**
159
+ * Get the style state inside an element path. Returns "true" if the
160
+ * element is active in the path.
161
+ */
162
+ checkActive : function( elementPath )
163
+ {
164
+ switch ( this.type )
165
+ {
166
+ case CKEDITOR.STYLE_BLOCK :
167
+ return this.checkElementRemovable( elementPath.block || elementPath.blockLimit, true );
168
+
169
+ case CKEDITOR.STYLE_OBJECT :
170
+ case CKEDITOR.STYLE_INLINE :
171
+
172
+ var elements = elementPath.elements;
173
+
174
+ for ( var i = 0, element ; i < elements.length ; i++ )
175
+ {
176
+ element = elements[ i ];
177
+
178
+ if ( this.type == CKEDITOR.STYLE_INLINE
179
+ && ( element == elementPath.block || element == elementPath.blockLimit ) )
180
+ continue;
181
+
182
+ if( this.type == CKEDITOR.STYLE_OBJECT
183
+ && !( element.getName() in objectElements ) )
184
+ continue;
185
+
186
+ if ( this.checkElementRemovable( element, true ) )
187
+ return true;
188
+ }
189
+ }
190
+ return false;
191
+ },
192
+
193
+ /**
194
+ * Whether this style can be applied at the element path.
195
+ * @param elementPath
196
+ */
197
+ checkApplicable : function( elementPath )
198
+ {
199
+ switch ( this.type )
200
+ {
201
+ case CKEDITOR.STYLE_INLINE :
202
+ case CKEDITOR.STYLE_BLOCK :
203
+ break;
204
+
205
+ case CKEDITOR.STYLE_OBJECT :
206
+ return elementPath.lastElement.getAscendant( this.element, true );
207
+ }
208
+
209
+ return true;
210
+ },
211
+
212
+ // Checks if an element, or any of its attributes, is removable by the
213
+ // current style definition.
214
+ checkElementRemovable : function( element, fullMatch )
215
+ {
216
+ if ( !element || element.isReadOnly() )
217
+ return false;
218
+
219
+ var def = this._.definition,
220
+ attribs;
221
+
222
+ // If the element name is the same as the style name.
223
+ if ( element.getName() == this.element )
224
+ {
225
+ // If no attributes are defined in the element.
226
+ if ( !fullMatch && !element.hasAttributes() )
227
+ return true;
228
+
229
+ attribs = getAttributesForComparison( def );
230
+
231
+ if ( attribs._length )
232
+ {
233
+ for ( var attName in attribs )
234
+ {
235
+ if ( attName == '_length' )
236
+ continue;
237
+
238
+ var elementAttr = element.getAttribute( attName ) || '';
239
+
240
+ // Special treatment for 'style' attribute is required.
241
+ if ( attName == 'style' ?
242
+ compareCssText( attribs[ attName ], normalizeCssText( elementAttr, false ) )
243
+ : attribs[ attName ] == elementAttr )
244
+ {
245
+ if ( !fullMatch )
246
+ return true;
247
+ }
248
+ else if ( fullMatch )
249
+ return false;
250
+ }
251
+ if ( fullMatch )
252
+ return true;
253
+ }
254
+ else
255
+ return true;
256
+ }
257
+
258
+ // Check if the element can be somehow overriden.
259
+ var override = getOverrides( this )[ element.getName() ] ;
260
+ if ( override )
261
+ {
262
+ // If no attributes have been defined, remove the element.
263
+ if ( !( attribs = override.attributes ) )
264
+ return true;
265
+
266
+ for ( var i = 0 ; i < attribs.length ; i++ )
267
+ {
268
+ attName = attribs[i][0];
269
+ var actualAttrValue = element.getAttribute( attName );
270
+ if ( actualAttrValue )
271
+ {
272
+ var attValue = attribs[i][1];
273
+
274
+ // Remove the attribute if:
275
+ // - The override definition value is null;
276
+ // - The override definition value is a string that
277
+ // matches the attribute value exactly.
278
+ // - The override definition value is a regex that
279
+ // has matches in the attribute value.
280
+ if ( attValue === null ||
281
+ ( typeof attValue == 'string' && actualAttrValue == attValue ) ||
282
+ attValue.test( actualAttrValue ) )
283
+ return true;
284
+ }
285
+ }
286
+ }
287
+ return false;
288
+ },
289
+
290
+ // Builds the preview HTML based on the styles definition.
291
+ buildPreview : function( label )
292
+ {
293
+ var styleDefinition = this._.definition,
294
+ html = [],
295
+ elementName = styleDefinition.element;
296
+
297
+ // Avoid <bdo> in the preview.
298
+ if ( elementName == 'bdo' )
299
+ elementName = 'span';
300
+
301
+ html = [ '<', elementName ];
302
+
303
+ // Assign all defined attributes.
304
+ var attribs = styleDefinition.attributes;
305
+ if ( attribs )
306
+ {
307
+ for ( var att in attribs )
308
+ {
309
+ html.push( ' ', att, '="', attribs[ att ], '"' );
310
+ }
311
+ }
312
+
313
+ // Assign the style attribute.
314
+ var cssStyle = CKEDITOR.style.getStyleText( styleDefinition );
315
+ if ( cssStyle )
316
+ html.push( ' style="', cssStyle, '"' );
317
+
318
+ html.push( '>', ( label || styleDefinition.name ), '</', elementName, '>' );
319
+
320
+ return html.join( '' );
321
+ }
322
+ };
323
+
324
+ // Build the cssText based on the styles definition.
325
+ CKEDITOR.style.getStyleText = function( styleDefinition )
326
+ {
327
+ // If we have already computed it, just return it.
328
+ var stylesDef = styleDefinition._ST;
329
+ if ( stylesDef )
330
+ return stylesDef;
331
+
332
+ stylesDef = styleDefinition.styles;
333
+
334
+ // Builds the StyleText.
335
+ var stylesText = ( styleDefinition.attributes && styleDefinition.attributes[ 'style' ] ) || '',
336
+ specialStylesText = '';
337
+
338
+ if ( stylesText.length )
339
+ stylesText = stylesText.replace( semicolonFixRegex, ';' );
340
+
341
+ for ( var style in stylesDef )
342
+ {
343
+ var styleVal = stylesDef[ style ],
344
+ text = ( style + ':' + styleVal ).replace( semicolonFixRegex, ';' );
345
+
346
+ // Some browsers don't support 'inherit' property value, leave them intact. (#5242)
347
+ if ( styleVal == 'inherit' )
348
+ specialStylesText += text;
349
+ else
350
+ stylesText += text;
351
+ }
352
+
353
+ // Browsers make some changes to the style when applying them. So, here
354
+ // we normalize it to the browser format.
355
+ if ( stylesText.length )
356
+ stylesText = normalizeCssText( stylesText );
357
+
358
+ stylesText += specialStylesText;
359
+
360
+ // Return it, saving it to the next request.
361
+ return ( styleDefinition._ST = stylesText );
362
+ };
363
+
364
+ // Gets the parent element which blocks the styling for an element. This
365
+ // can be done through read-only elements (contenteditable=false) or
366
+ // elements with the "data-nostyle" attribute.
367
+ function getUnstylableParent( element )
368
+ {
369
+ var unstylable,
370
+ editable;
371
+
372
+ while ( ( element = element.getParent() ) )
373
+ {
374
+ if ( element.getName() == 'body' )
375
+ break;
376
+
377
+ if ( element.getAttribute( 'data-nostyle' ) )
378
+ unstylable = element;
379
+ else if ( !editable )
380
+ {
381
+ var contentEditable = element.getAttribute( 'contentEditable' );
382
+
383
+ if ( contentEditable == 'false' )
384
+ unstylable = element;
385
+ else if ( contentEditable == 'true' )
386
+ editable = 1;
387
+ }
388
+ }
389
+
390
+ return unstylable;
391
+ }
392
+
393
+ function applyInlineStyle( range )
394
+ {
395
+ var document = range.document;
396
+
397
+ if ( range.collapsed )
398
+ {
399
+ // Create the element to be inserted in the DOM.
400
+ var collapsedElement = getElement( this, document );
401
+
402
+ // Insert the empty element into the DOM at the range position.
403
+ range.insertNode( collapsedElement );
404
+
405
+ // Place the selection right inside the empty element.
406
+ range.moveToPosition( collapsedElement, CKEDITOR.POSITION_BEFORE_END );
407
+
408
+ return;
409
+ }
410
+
411
+ var elementName = this.element;
412
+ var def = this._.definition;
413
+ var isUnknownElement;
414
+
415
+ // Indicates that fully selected read-only elements are to be included in the styling range.
416
+ var includeReadonly = def.includeReadonly;
417
+
418
+ // If the read-only inclusion is not available in the definition, try
419
+ // to get it from the document data.
420
+ if ( includeReadonly == undefined )
421
+ includeReadonly = document.getCustomData( 'cke_includeReadonly' );
422
+
423
+ // Get the DTD definition for the element. Defaults to "span".
424
+ var dtd = CKEDITOR.dtd[ elementName ] || ( isUnknownElement = true, CKEDITOR.dtd.span );
425
+
426
+ // Expand the range.
427
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT, 1 );
428
+ range.trim();
429
+
430
+ // Get the first node to be processed and the last, which concludes the
431
+ // processing.
432
+ var boundaryNodes = range.createBookmark(),
433
+ firstNode = boundaryNodes.startNode,
434
+ lastNode = boundaryNodes.endNode;
435
+
436
+ var currentNode = firstNode;
437
+
438
+ var styleRange;
439
+
440
+ // Check if the boundaries are inside non stylable elements.
441
+ var firstUnstylable = getUnstylableParent( firstNode ),
442
+ lastUnstylable = getUnstylableParent( lastNode );
443
+
444
+ // If the first element can't be styled, we'll start processing right
445
+ // after its unstylable root.
446
+ if ( firstUnstylable )
447
+ currentNode = firstUnstylable.getNextSourceNode( true );
448
+
449
+ // If the last element can't be styled, we'll stop processing on its
450
+ // unstylable root.
451
+ if ( lastUnstylable )
452
+ lastNode = lastUnstylable;
453
+
454
+ // Do nothing if the current node now follows the last node to be processed.
455
+ if ( currentNode.getPosition( lastNode ) == CKEDITOR.POSITION_FOLLOWING )
456
+ currentNode = 0;
457
+
458
+ while ( currentNode )
459
+ {
460
+ var applyStyle = false;
461
+
462
+ if ( currentNode.equals( lastNode ) )
463
+ {
464
+ currentNode = null;
465
+ applyStyle = true;
466
+ }
467
+ else
468
+ {
469
+ var nodeType = currentNode.type;
470
+ var nodeName = nodeType == CKEDITOR.NODE_ELEMENT ? currentNode.getName() : null;
471
+ var nodeIsReadonly = nodeName && ( currentNode.getAttribute( 'contentEditable' ) == 'false' );
472
+ var nodeIsNoStyle = nodeName && currentNode.getAttribute( 'data-nostyle' );
473
+
474
+ if ( nodeName && currentNode.data( 'cke-bookmark' ) )
475
+ {
476
+ currentNode = currentNode.getNextSourceNode( true );
477
+ continue;
478
+ }
479
+
480
+ // Check if the current node can be a child of the style element.
481
+ if ( !nodeName || ( dtd[ nodeName ]
482
+ && !nodeIsNoStyle
483
+ && ( !nodeIsReadonly || includeReadonly )
484
+ && ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED )
485
+ && ( !def.childRule || def.childRule( currentNode ) ) ) )
486
+ {
487
+ var currentParent = currentNode.getParent();
488
+
489
+ // Check if the style element can be a child of the current
490
+ // node parent or if the element is not defined in the DTD.
491
+ if ( currentParent
492
+ && ( ( currentParent.getDtd() || CKEDITOR.dtd.span )[ elementName ] || isUnknownElement )
493
+ && ( !def.parentRule || def.parentRule( currentParent ) ) )
494
+ {
495
+ // This node will be part of our range, so if it has not
496
+ // been started, place its start right before the node.
497
+ // In the case of an element node, it will be included
498
+ // only if it is entirely inside the range.
499
+ 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 ) ) )
500
+ {
501
+ styleRange = new CKEDITOR.dom.range( document );
502
+ styleRange.setStartBefore( currentNode );
503
+ }
504
+
505
+ // Non element nodes, readonly elements, or empty
506
+ // elements can be added completely to the range.
507
+ if ( nodeType == CKEDITOR.NODE_TEXT || nodeIsReadonly || ( nodeType == CKEDITOR.NODE_ELEMENT && !currentNode.getChildCount() ) )
508
+ {
509
+ var includedNode = currentNode;
510
+ var parentNode;
511
+
512
+ // This node is about to be included completelly, but,
513
+ // if this is the last node in its parent, we must also
514
+ // check if the parent itself can be added completelly
515
+ // to the range, otherwise apply the style immediately.
516
+ while ( ( applyStyle = !includedNode.getNext( notBookmark ) )
517
+ && ( parentNode = includedNode.getParent(), dtd[ parentNode.getName() ] )
518
+ && ( parentNode.getPosition( firstNode ) | CKEDITOR.POSITION_FOLLOWING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_FOLLOWING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED )
519
+ && ( !def.childRule || def.childRule( parentNode ) ) )
520
+ {
521
+ includedNode = parentNode;
522
+ }
523
+
524
+ styleRange.setEndAfter( includedNode );
525
+
526
+ }
527
+ }
528
+ else
529
+ applyStyle = true;
530
+ }
531
+ else
532
+ applyStyle = true;
533
+
534
+ // Get the next node to be processed.
535
+ currentNode = currentNode.getNextSourceNode( nodeIsNoStyle || nodeIsReadonly );
536
+ }
537
+
538
+ // Apply the style if we have something to which apply it.
539
+ if ( applyStyle && styleRange && !styleRange.collapsed )
540
+ {
541
+ // Build the style element, based on the style object definition.
542
+ var styleNode = getElement( this, document ),
543
+ styleHasAttrs = styleNode.hasAttributes();
544
+
545
+ // Get the element that holds the entire range.
546
+ var parent = styleRange.getCommonAncestor();
547
+
548
+ var removeList = {
549
+ styles : {},
550
+ attrs : {},
551
+ // Styles cannot be removed.
552
+ blockedStyles : {},
553
+ // Attrs cannot be removed.
554
+ blockedAttrs : {}
555
+ };
556
+
557
+ var attName, styleName, value;
558
+
559
+ // Loop through the parents, removing the redundant attributes
560
+ // from the element to be applied.
561
+ while ( styleNode && parent )
562
+ {
563
+ if ( parent.getName() == elementName )
564
+ {
565
+ for ( attName in def.attributes )
566
+ {
567
+ if ( removeList.blockedAttrs[ attName ] || !( value = parent.getAttribute( styleName ) ) )
568
+ continue;
569
+
570
+ if ( styleNode.getAttribute( attName ) == value )
571
+ removeList.attrs[ attName ] = 1;
572
+ else
573
+ removeList.blockedAttrs[ attName ] = 1;
574
+ }
575
+
576
+ for ( styleName in def.styles )
577
+ {
578
+ if ( removeList.blockedStyles[ styleName ] || !( value = parent.getStyle( styleName ) ) )
579
+ continue;
580
+
581
+ if ( styleNode.getStyle( styleName ) == value )
582
+ removeList.styles[ styleName ] = 1;
583
+ else
584
+ removeList.blockedStyles[ styleName ] = 1;
585
+ }
586
+ }
587
+
588
+ parent = parent.getParent();
589
+ }
590
+
591
+ for ( attName in removeList.attrs )
592
+ styleNode.removeAttribute( attName );
593
+
594
+ for ( styleName in removeList.styles )
595
+ styleNode.removeStyle( styleName );
596
+
597
+ if ( styleHasAttrs && !styleNode.hasAttributes() )
598
+ styleNode = null;
599
+
600
+ if ( styleNode )
601
+ {
602
+ // Move the contents of the range to the style element.
603
+ styleRange.extractContents().appendTo( styleNode );
604
+
605
+ // Here we do some cleanup, removing all duplicated
606
+ // elements from the style element.
607
+ removeFromInsideElement( this, styleNode );
608
+
609
+ // Insert it into the range position (it is collapsed after
610
+ // extractContents.
611
+ styleRange.insertNode( styleNode );
612
+
613
+ // Let's merge our new style with its neighbors, if possible.
614
+ styleNode.mergeSiblings();
615
+
616
+ // As the style system breaks text nodes constantly, let's normalize
617
+ // things for performance.
618
+ // With IE, some paragraphs get broken when calling normalize()
619
+ // repeatedly. Also, for IE, we must normalize body, not documentElement.
620
+ // IE is also known for having a "crash effect" with normalize().
621
+ // We should try to normalize with IE too in some way, somewhere.
622
+ if ( !CKEDITOR.env.ie )
623
+ styleNode.$.normalize();
624
+ }
625
+ // Style already inherit from parents, left just to clear up any internal overrides. (#5931)
626
+ else
627
+ {
628
+ styleNode = new CKEDITOR.dom.element( 'span' );
629
+ styleRange.extractContents().appendTo( styleNode );
630
+ styleRange.insertNode( styleNode );
631
+ removeFromInsideElement( this, styleNode );
632
+ styleNode.remove( true );
633
+ }
634
+
635
+ // Style applied, let's release the range, so it gets
636
+ // re-initialization in the next loop.
637
+ styleRange = null;
638
+ }
639
+ }
640
+
641
+ // Remove the bookmark nodes.
642
+ range.moveToBookmark( boundaryNodes );
643
+
644
+ // Minimize the result range to exclude empty text nodes. (#5374)
645
+ range.shrink( CKEDITOR.SHRINK_TEXT );
646
+ }
647
+
648
+ function removeInlineStyle( range )
649
+ {
650
+ /*
651
+ * Make sure our range has included all "collpased" parent inline nodes so
652
+ * that our operation logic can be simpler.
653
+ */
654
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT, 1 );
655
+
656
+ var bookmark = range.createBookmark(),
657
+ startNode = bookmark.startNode;
658
+
659
+ if ( range.collapsed )
660
+ {
661
+
662
+ var startPath = new CKEDITOR.dom.elementPath( startNode.getParent() ),
663
+ // The topmost element in elementspatch which we should jump out of.
664
+ boundaryElement;
665
+
666
+
667
+ for ( var i = 0, element ; i < startPath.elements.length
668
+ && ( element = startPath.elements[i] ) ; i++ )
669
+ {
670
+ /*
671
+ * 1. If it's collaped inside text nodes, try to remove the style from the whole element.
672
+ *
673
+ * 2. Otherwise if it's collapsed on element boundaries, moving the selection
674
+ * outside the styles instead of removing the whole tag,
675
+ * also make sure other inner styles were well preserverd.(#3309)
676
+ */
677
+ if ( element == startPath.block || element == startPath.blockLimit )
678
+ break;
679
+
680
+ if ( this.checkElementRemovable( element ) )
681
+ {
682
+ var isStart;
683
+
684
+ if ( range.collapsed && (
685
+ range.checkBoundaryOfElement( element, CKEDITOR.END ) ||
686
+ ( isStart = range.checkBoundaryOfElement( element, CKEDITOR.START ) ) ) )
687
+ {
688
+ boundaryElement = element;
689
+ boundaryElement.match = isStart ? 'start' : 'end';
690
+ }
691
+ else
692
+ {
693
+ /*
694
+ * Before removing the style node, there may be a sibling to the style node
695
+ * that's exactly the same to the one to be removed. To the user, it makes
696
+ * no difference that they're separate entities in the DOM tree. So, merge
697
+ * them before removal.
698
+ */
699
+ element.mergeSiblings();
700
+ if ( element.getName() == this.element )
701
+ removeFromElement( this, element );
702
+ else
703
+ removeOverrides( element, getOverrides( this )[ element.getName() ] );
704
+ }
705
+ }
706
+ }
707
+
708
+ // Re-create the style tree after/before the boundary element,
709
+ // the replication start from bookmark start node to define the
710
+ // new range.
711
+ if ( boundaryElement )
712
+ {
713
+ var clonedElement = startNode;
714
+ for ( i = 0 ;; i++ )
715
+ {
716
+ var newElement = startPath.elements[ i ];
717
+ if ( newElement.equals( boundaryElement ) )
718
+ break;
719
+ // Avoid copying any matched element.
720
+ else if ( newElement.match )
721
+ continue;
722
+ else
723
+ newElement = newElement.clone();
724
+ newElement.append( clonedElement );
725
+ clonedElement = newElement;
726
+ }
727
+ clonedElement[ boundaryElement.match == 'start' ?
728
+ 'insertBefore' : 'insertAfter' ]( boundaryElement );
729
+ }
730
+ }
731
+ else
732
+ {
733
+ /*
734
+ * Now our range isn't collapsed. Lets walk from the start node to the end
735
+ * node via DFS and remove the styles one-by-one.
736
+ */
737
+ var endNode = bookmark.endNode,
738
+ me = this;
739
+
740
+ /*
741
+ * Find out the style ancestor that needs to be broken down at startNode
742
+ * and endNode.
743
+ */
744
+ function breakNodes()
745
+ {
746
+ var startPath = new CKEDITOR.dom.elementPath( startNode.getParent() ),
747
+ endPath = new CKEDITOR.dom.elementPath( endNode.getParent() ),
748
+ breakStart = null,
749
+ breakEnd = null;
750
+ for ( var i = 0 ; i < startPath.elements.length ; i++ )
751
+ {
752
+ var element = startPath.elements[ i ];
753
+
754
+ if ( element == startPath.block || element == startPath.blockLimit )
755
+ break;
756
+
757
+ if ( me.checkElementRemovable( element ) )
758
+ breakStart = element;
759
+ }
760
+ for ( i = 0 ; i < endPath.elements.length ; i++ )
761
+ {
762
+ element = endPath.elements[ i ];
763
+
764
+ if ( element == endPath.block || element == endPath.blockLimit )
765
+ break;
766
+
767
+ if ( me.checkElementRemovable( element ) )
768
+ breakEnd = element;
769
+ }
770
+
771
+ if ( breakEnd )
772
+ endNode.breakParent( breakEnd );
773
+ if ( breakStart )
774
+ startNode.breakParent( breakStart );
775
+ }
776
+ breakNodes();
777
+
778
+ // Now, do the DFS walk.
779
+ var currentNode = startNode.getNext();
780
+ while ( !currentNode.equals( endNode ) )
781
+ {
782
+ /*
783
+ * Need to get the next node first because removeFromElement() can remove
784
+ * the current node from DOM tree.
785
+ */
786
+ var nextNode = currentNode.getNextSourceNode();
787
+ if ( currentNode.type == CKEDITOR.NODE_ELEMENT && this.checkElementRemovable( currentNode ) )
788
+ {
789
+ // Remove style from element or overriding element.
790
+ if ( currentNode.getName() == this.element )
791
+ removeFromElement( this, currentNode );
792
+ else
793
+ removeOverrides( currentNode, getOverrides( this )[ currentNode.getName() ] );
794
+
795
+ /*
796
+ * removeFromElement() may have merged the next node with something before
797
+ * the startNode via mergeSiblings(). In that case, the nextNode would
798
+ * contain startNode and we'll have to call breakNodes() again and also
799
+ * reassign the nextNode to something after startNode.
800
+ */
801
+ if ( nextNode.type == CKEDITOR.NODE_ELEMENT && nextNode.contains( startNode ) )
802
+ {
803
+ breakNodes();
804
+ nextNode = startNode.getNext();
805
+ }
806
+ }
807
+ currentNode = nextNode;
808
+ }
809
+ }
810
+
811
+ range.moveToBookmark( bookmark );
812
+ }
813
+
814
+ function applyObjectStyle( range )
815
+ {
816
+ var root = range.getCommonAncestor( true, true ),
817
+ element = root.getAscendant( this.element, true );
818
+ element && !element.isReadOnly() && setupElement( element, this );
819
+ }
820
+
821
+ function removeObjectStyle( range )
822
+ {
823
+ var root = range.getCommonAncestor( true, true ),
824
+ element = root.getAscendant( this.element, true );
825
+
826
+ if ( !element )
827
+ return;
828
+
829
+ var style = this,
830
+ def = style._.definition,
831
+ attributes = def.attributes;
832
+ var styles = CKEDITOR.style.getStyleText( def );
833
+
834
+ // Remove all defined attributes.
835
+ if ( attributes )
836
+ {
837
+ for ( var att in attributes )
838
+ {
839
+ element.removeAttribute( att, attributes[ att ] );
840
+ }
841
+ }
842
+
843
+ // Assign all defined styles.
844
+ if ( def.styles )
845
+ {
846
+ for ( var i in def.styles )
847
+ {
848
+ if ( !def.styles.hasOwnProperty( i ) )
849
+ continue;
850
+
851
+ element.removeStyle( i );
852
+ }
853
+ }
854
+ }
855
+
856
+ function applyBlockStyle( range )
857
+ {
858
+ // Serializible bookmarks is needed here since
859
+ // elements may be merged.
860
+ var bookmark = range.createBookmark( true );
861
+
862
+ var iterator = range.createIterator();
863
+ iterator.enforceRealBlocks = true;
864
+
865
+ // make recognize <br /> tag as a separator in ENTER_BR mode (#5121)
866
+ if ( this._.enterMode )
867
+ iterator.enlargeBr = ( this._.enterMode != CKEDITOR.ENTER_BR );
868
+
869
+ var block;
870
+ var doc = range.document;
871
+ var previousPreBlock;
872
+
873
+ while ( ( block = iterator.getNextParagraph() ) ) // Only one =
874
+ {
875
+ if ( !block.isReadOnly() )
876
+ {
877
+ var newBlock = getElement( this, doc, block );
878
+ replaceBlock( block, newBlock );
879
+ }
880
+ }
881
+
882
+ range.moveToBookmark( bookmark );
883
+ }
884
+
885
+ function removeBlockStyle( range )
886
+ {
887
+ // Serializible bookmarks is needed here since
888
+ // elements may be merged.
889
+ var bookmark = range.createBookmark( 1 );
890
+
891
+ var iterator = range.createIterator();
892
+ iterator.enforceRealBlocks = true;
893
+ iterator.enlargeBr = this._.enterMode != CKEDITOR.ENTER_BR;
894
+
895
+ var block;
896
+ while ( ( block = iterator.getNextParagraph() ) )
897
+ {
898
+ if ( this.checkElementRemovable( block ) )
899
+ {
900
+ // <pre> get special treatment.
901
+ if ( block.is( 'pre' ) )
902
+ {
903
+ var newBlock = this._.enterMode == CKEDITOR.ENTER_BR ?
904
+ null : range.document.createElement(
905
+ this._.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' );
906
+
907
+ newBlock && block.copyAttributes( newBlock );
908
+ replaceBlock( block, newBlock );
909
+ }
910
+ else
911
+ removeFromElement( this, block, 1 );
912
+ }
913
+ }
914
+
915
+ range.moveToBookmark( bookmark );
916
+ }
917
+
918
+ // Replace the original block with new one, with special treatment
919
+ // for <pre> blocks to make sure content format is well preserved, and merging/splitting adjacent
920
+ // when necessary.(#3188)
921
+ function replaceBlock( block, newBlock )
922
+ {
923
+ // Block is to be removed, create a temp element to
924
+ // save contents.
925
+ var removeBlock = !newBlock;
926
+ if ( removeBlock )
927
+ {
928
+ newBlock = block.getDocument().createElement( 'div' );
929
+ block.copyAttributes( newBlock );
930
+ }
931
+
932
+ var newBlockIsPre = newBlock && newBlock.is( 'pre' );
933
+ var blockIsPre = block.is( 'pre' );
934
+
935
+ var isToPre = newBlockIsPre && !blockIsPre;
936
+ var isFromPre = !newBlockIsPre && blockIsPre;
937
+
938
+ if ( isToPre )
939
+ newBlock = toPre( block, newBlock );
940
+ else if ( isFromPre )
941
+ // Split big <pre> into pieces before start to convert.
942
+ newBlock = fromPres( removeBlock ?
943
+ [ block.getHtml() ] : splitIntoPres( block ), newBlock );
944
+ else
945
+ block.moveChildren( newBlock );
946
+
947
+ newBlock.replace( block );
948
+
949
+ if ( newBlockIsPre )
950
+ {
951
+ // Merge previous <pre> blocks.
952
+ mergePre( newBlock );
953
+ }
954
+ else if ( removeBlock )
955
+ removeNoAttribsElement( newBlock );
956
+ }
957
+
958
+ /**
959
+ * Merge a <pre> block with a previous sibling if available.
960
+ */
961
+ function mergePre( preBlock )
962
+ {
963
+ var previousBlock;
964
+ if ( !( ( previousBlock = preBlock.getPrevious( nonWhitespaces ) )
965
+ && previousBlock.is
966
+ && previousBlock.is( 'pre') ) )
967
+ return;
968
+
969
+ // Merge the previous <pre> block contents into the current <pre>
970
+ // block.
971
+ //
972
+ // Another thing to be careful here is that currentBlock might contain
973
+ // a '\n' at the beginning, and previousBlock might contain a '\n'
974
+ // towards the end. These new lines are not normally displayed but they
975
+ // become visible after merging.
976
+ var mergedHtml = replace( previousBlock.getHtml(), /\n$/, '' ) + '\n\n' +
977
+ replace( preBlock.getHtml(), /^\n/, '' ) ;
978
+
979
+ // Krugle: IE normalizes innerHTML from <pre>, breaking whitespaces.
980
+ if ( CKEDITOR.env.ie )
981
+ preBlock.$.outerHTML = '<pre>' + mergedHtml + '</pre>';
982
+ else
983
+ preBlock.setHtml( mergedHtml );
984
+
985
+ previousBlock.remove();
986
+ }
987
+
988
+ /**
989
+ * Split into multiple <pre> blocks separated by double line-break.
990
+ * @param preBlock
991
+ */
992
+ function splitIntoPres( preBlock )
993
+ {
994
+ // Exclude the ones at header OR at tail,
995
+ // and ignore bookmark content between them.
996
+ var duoBrRegex = /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,
997
+ blockName = preBlock.getName(),
998
+ splitedHtml = replace( preBlock.getOuterHtml(),
999
+ duoBrRegex,
1000
+ function( match, charBefore, bookmark )
1001
+ {
1002
+ return charBefore + '</pre>' + bookmark + '<pre>';
1003
+ } );
1004
+
1005
+ var pres = [];
1006
+ splitedHtml.replace( /<pre\b.*?>([\s\S]*?)<\/pre>/gi, function( match, preContent ){
1007
+ pres.push( preContent );
1008
+ } );
1009
+ return pres;
1010
+ }
1011
+
1012
+ // Wrapper function of String::replace without considering of head/tail bookmarks nodes.
1013
+ function replace( str, regexp, replacement )
1014
+ {
1015
+ var headBookmark = '',
1016
+ tailBookmark = '';
1017
+
1018
+ str = str.replace( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,
1019
+ function( str, m1, m2 ){
1020
+ m1 && ( headBookmark = m1 );
1021
+ m2 && ( tailBookmark = m2 );
1022
+ return '';
1023
+ } );
1024
+ return headBookmark + str.replace( regexp, replacement ) + tailBookmark;
1025
+ }
1026
+
1027
+ /**
1028
+ * Converting a list of <pre> into blocks with format well preserved.
1029
+ */
1030
+ function fromPres( preHtmls, newBlock )
1031
+ {
1032
+ var docFrag;
1033
+ if ( preHtmls.length > 1 )
1034
+ docFrag = new CKEDITOR.dom.documentFragment( newBlock.getDocument() );
1035
+
1036
+ for ( var i = 0 ; i < preHtmls.length ; i++ )
1037
+ {
1038
+ var blockHtml = preHtmls[ i ];
1039
+
1040
+ // 1. Trim the first and last line-breaks immediately after and before <pre>,
1041
+ // they're not visible.
1042
+ blockHtml = blockHtml.replace( /(\r\n|\r)/g, '\n' ) ;
1043
+ blockHtml = replace( blockHtml, /^[ \t]*\n/, '' ) ;
1044
+ blockHtml = replace( blockHtml, /\n$/, '' ) ;
1045
+ // 2. Convert spaces or tabs at the beginning or at the end to &nbsp;
1046
+ blockHtml = replace( blockHtml, /^[ \t]+|[ \t]+$/g, function( match, offset, s )
1047
+ {
1048
+ if ( match.length == 1 ) // one space, preserve it
1049
+ return '&nbsp;' ;
1050
+ else if ( !offset ) // beginning of block
1051
+ return CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 ) + ' ';
1052
+ else // end of block
1053
+ return ' ' + CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 );
1054
+ } ) ;
1055
+
1056
+ // 3. Convert \n to <BR>.
1057
+ // 4. Convert contiguous (i.e. non-singular) spaces or tabs to &nbsp;
1058
+ blockHtml = blockHtml.replace( /\n/g, '<br>' ) ;
1059
+ blockHtml = blockHtml.replace( /[ \t]{2,}/g,
1060
+ function ( match )
1061
+ {
1062
+ return CKEDITOR.tools.repeat( '&nbsp;', match.length - 1 ) + ' ' ;
1063
+ } ) ;
1064
+
1065
+ if ( docFrag )
1066
+ {
1067
+ var newBlockClone = newBlock.clone();
1068
+ newBlockClone.setHtml( blockHtml );
1069
+ docFrag.append( newBlockClone );
1070
+ }
1071
+ else
1072
+ newBlock.setHtml( blockHtml );
1073
+ }
1074
+
1075
+ return docFrag || newBlock;
1076
+ }
1077
+
1078
+ /**
1079
+ * Converting from a non-PRE block to a PRE block in formatting operations.
1080
+ */
1081
+ function toPre( block, newBlock )
1082
+ {
1083
+ var bogus = block.getBogus();
1084
+ bogus && bogus.remove();
1085
+
1086
+ // First trim the block content.
1087
+ var preHtml = block.getHtml();
1088
+
1089
+ // 1. Trim head/tail spaces, they're not visible.
1090
+ preHtml = replace( preHtml, /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g, '' );
1091
+ // 2. Delete ANSI whitespaces immediately before and after <BR> because
1092
+ // they are not visible.
1093
+ preHtml = preHtml.replace( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi, '$1' );
1094
+ // 3. Compress other ANSI whitespaces since they're only visible as one
1095
+ // single space previously.
1096
+ // 4. Convert &nbsp; to spaces since &nbsp; is no longer needed in <PRE>.
1097
+ preHtml = preHtml.replace( /([ \t\n\r]+|&nbsp;)/g, ' ' );
1098
+ // 5. Convert any <BR /> to \n. This must not be done earlier because
1099
+ // the \n would then get compressed.
1100
+ preHtml = preHtml.replace( /<br\b[^>]*>/gi, '\n' );
1101
+
1102
+ // Krugle: IE normalizes innerHTML to <pre>, breaking whitespaces.
1103
+ if ( CKEDITOR.env.ie )
1104
+ {
1105
+ var temp = block.getDocument().createElement( 'div' );
1106
+ temp.append( newBlock );
1107
+ newBlock.$.outerHTML = '<pre>' + preHtml + '</pre>';
1108
+ newBlock.copyAttributes( temp.getFirst() );
1109
+ newBlock = temp.getFirst().remove();
1110
+ }
1111
+ else
1112
+ newBlock.setHtml( preHtml );
1113
+
1114
+ return newBlock;
1115
+ }
1116
+
1117
+ // Removes a style from an element itself, don't care about its subtree.
1118
+ function removeFromElement( style, element )
1119
+ {
1120
+ var def = style._.definition,
1121
+ attributes = CKEDITOR.tools.extend( {}, def.attributes, getOverrides( style )[ element.getName() ] ),
1122
+ styles = def.styles,
1123
+ // If the style is only about the element itself, we have to remove the element.
1124
+ removeEmpty = CKEDITOR.tools.isEmpty( attributes ) && CKEDITOR.tools.isEmpty( styles );
1125
+
1126
+ // Remove definition attributes/style from the elemnt.
1127
+ for ( var attName in attributes )
1128
+ {
1129
+ // The 'class' element value must match (#1318).
1130
+ if ( ( attName == 'class' || style._.definition.fullMatch )
1131
+ && element.getAttribute( attName ) != normalizeProperty( attName, attributes[ attName ] ) )
1132
+ continue;
1133
+ removeEmpty = element.hasAttribute( attName );
1134
+ element.removeAttribute( attName );
1135
+ }
1136
+
1137
+ for ( var styleName in styles )
1138
+ {
1139
+ // Full match style insist on having fully equivalence. (#5018)
1140
+ if ( style._.definition.fullMatch
1141
+ && element.getStyle( styleName ) != normalizeProperty( styleName, styles[ styleName ], true ) )
1142
+ continue;
1143
+
1144
+ removeEmpty = removeEmpty || !!element.getStyle( styleName );
1145
+ element.removeStyle( styleName );
1146
+ }
1147
+
1148
+ if ( removeEmpty )
1149
+ {
1150
+ !CKEDITOR.dtd.$block[ element.getName() ] || style._.enterMode == CKEDITOR.ENTER_BR && !element.hasAttributes() ?
1151
+ removeNoAttribsElement( element ) :
1152
+ element.renameNode( style._.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' );
1153
+ }
1154
+ }
1155
+
1156
+ // Removes a style from inside an element.
1157
+ function removeFromInsideElement( style, element )
1158
+ {
1159
+ var def = style._.definition,
1160
+ attribs = def.attributes,
1161
+ styles = def.styles,
1162
+ overrides = getOverrides( style ),
1163
+ innerElements = element.getElementsByTag( style.element );
1164
+
1165
+ for ( var i = innerElements.count(); --i >= 0 ; )
1166
+ removeFromElement( style, innerElements.getItem( i ) );
1167
+
1168
+ // Now remove any other element with different name that is
1169
+ // defined to be overriden.
1170
+ for ( var overrideElement in overrides )
1171
+ {
1172
+ if ( overrideElement != style.element )
1173
+ {
1174
+ innerElements = element.getElementsByTag( overrideElement ) ;
1175
+ for ( i = innerElements.count() - 1 ; i >= 0 ; i-- )
1176
+ {
1177
+ var innerElement = innerElements.getItem( i );
1178
+ removeOverrides( innerElement, overrides[ overrideElement ] ) ;
1179
+ }
1180
+ }
1181
+ }
1182
+ }
1183
+
1184
+ /**
1185
+ * Remove overriding styles/attributes from the specific element.
1186
+ * Note: Remove the element if no attributes remain.
1187
+ * @param {Object} element
1188
+ * @param {Object} overrides
1189
+ */
1190
+ function removeOverrides( element, overrides )
1191
+ {
1192
+ var attributes = overrides && overrides.attributes ;
1193
+
1194
+ if ( attributes )
1195
+ {
1196
+ for ( var i = 0 ; i < attributes.length ; i++ )
1197
+ {
1198
+ var attName = attributes[i][0], actualAttrValue ;
1199
+
1200
+ if ( ( actualAttrValue = element.getAttribute( attName ) ) )
1201
+ {
1202
+ var attValue = attributes[i][1] ;
1203
+
1204
+ // Remove the attribute if:
1205
+ // - The override definition value is null ;
1206
+ // - The override definition valie is a string that
1207
+ // matches the attribute value exactly.
1208
+ // - The override definition value is a regex that
1209
+ // has matches in the attribute value.
1210
+ if ( attValue === null ||
1211
+ ( attValue.test && attValue.test( actualAttrValue ) ) ||
1212
+ ( typeof attValue == 'string' && actualAttrValue == attValue ) )
1213
+ element.removeAttribute( attName ) ;
1214
+ }
1215
+ }
1216
+ }
1217
+
1218
+ removeNoAttribsElement( element );
1219
+ }
1220
+
1221
+ // If the element has no more attributes, remove it.
1222
+ function removeNoAttribsElement( element )
1223
+ {
1224
+ // If no more attributes remained in the element, remove it,
1225
+ // leaving its children.
1226
+ if ( !element.hasAttributes() )
1227
+ {
1228
+ if ( CKEDITOR.dtd.$block[ element.getName() ] )
1229
+ {
1230
+ var previous = element.getPrevious( nonWhitespaces ),
1231
+ next = element.getNext( nonWhitespaces );
1232
+
1233
+ if ( previous && ( previous.type == CKEDITOR.NODE_TEXT || !previous.isBlockBoundary( { br : 1 } ) ) )
1234
+ element.append( 'br', 1 );
1235
+ if ( next && ( next.type == CKEDITOR.NODE_TEXT || !next.isBlockBoundary( { br : 1 } ) ) )
1236
+ element.append( 'br' );
1237
+
1238
+ element.remove( true );
1239
+ }
1240
+ else
1241
+ {
1242
+ // Removing elements may open points where merging is possible,
1243
+ // so let's cache the first and last nodes for later checking.
1244
+ var firstChild = element.getFirst();
1245
+ var lastChild = element.getLast();
1246
+
1247
+ element.remove( true );
1248
+
1249
+ if ( firstChild )
1250
+ {
1251
+ // Check the cached nodes for merging.
1252
+ firstChild.type == CKEDITOR.NODE_ELEMENT && firstChild.mergeSiblings();
1253
+
1254
+ if ( lastChild && !firstChild.equals( lastChild )
1255
+ && lastChild.type == CKEDITOR.NODE_ELEMENT )
1256
+ lastChild.mergeSiblings();
1257
+ }
1258
+
1259
+ }
1260
+ }
1261
+ }
1262
+
1263
+ function getElement( style, targetDocument, element )
1264
+ {
1265
+ var el,
1266
+ def = style._.definition,
1267
+ elementName = style.element;
1268
+
1269
+ // The "*" element name will always be a span for this function.
1270
+ if ( elementName == '*' )
1271
+ elementName = 'span';
1272
+
1273
+ // Create the element.
1274
+ el = new CKEDITOR.dom.element( elementName, targetDocument );
1275
+
1276
+ // #6226: attributes should be copied before the new ones are applied
1277
+ if ( element )
1278
+ element.copyAttributes( el );
1279
+
1280
+ el = setupElement( el, style );
1281
+
1282
+ // Avoid ID duplication.
1283
+ if ( targetDocument.getCustomData( 'doc_processing_style' ) && el.hasAttribute( 'id' ) )
1284
+ el.removeAttribute( 'id' );
1285
+ else
1286
+ targetDocument.setCustomData( 'doc_processing_style', 1 );
1287
+
1288
+ return el;
1289
+ }
1290
+
1291
+ function setupElement( el, style )
1292
+ {
1293
+ var def = style._.definition,
1294
+ attributes = def.attributes,
1295
+ styles = CKEDITOR.style.getStyleText( def );
1296
+
1297
+ // Assign all defined attributes.
1298
+ if ( attributes )
1299
+ {
1300
+ for ( var att in attributes )
1301
+ {
1302
+ el.setAttribute( att, attributes[ att ] );
1303
+ }
1304
+ }
1305
+
1306
+ // Assign all defined styles.
1307
+ if( styles )
1308
+ el.setAttribute( 'style', styles );
1309
+
1310
+ return el;
1311
+ }
1312
+
1313
+ function replaceVariables( list, variablesValues )
1314
+ {
1315
+ for ( var item in list )
1316
+ {
1317
+ list[ item ] = list[ item ].replace( varRegex, function( match, varName )
1318
+ {
1319
+ return variablesValues[ varName ];
1320
+ });
1321
+ }
1322
+ }
1323
+
1324
+ // Returns an object that can be used for style matching comparison.
1325
+ // Attributes names and values are all lowercased, and the styles get
1326
+ // merged with the style attribute.
1327
+ function getAttributesForComparison( styleDefinition )
1328
+ {
1329
+ // If we have already computed it, just return it.
1330
+ var attribs = styleDefinition._AC;
1331
+ if ( attribs )
1332
+ return attribs;
1333
+
1334
+ attribs = {};
1335
+
1336
+ var length = 0;
1337
+
1338
+ // Loop through all defined attributes.
1339
+ var styleAttribs = styleDefinition.attributes;
1340
+ if ( styleAttribs )
1341
+ {
1342
+ for ( var styleAtt in styleAttribs )
1343
+ {
1344
+ length++;
1345
+ attribs[ styleAtt ] = styleAttribs[ styleAtt ];
1346
+ }
1347
+ }
1348
+
1349
+ // Includes the style definitions.
1350
+ var styleText = CKEDITOR.style.getStyleText( styleDefinition );
1351
+ if ( styleText )
1352
+ {
1353
+ if ( !attribs[ 'style' ] )
1354
+ length++;
1355
+ attribs[ 'style' ] = styleText;
1356
+ }
1357
+
1358
+ // Appends the "length" information to the object.
1359
+ attribs._length = length;
1360
+
1361
+ // Return it, saving it to the next request.
1362
+ return ( styleDefinition._AC = attribs );
1363
+ }
1364
+
1365
+ /**
1366
+ * Get the the collection used to compare the elements and attributes,
1367
+ * defined in this style overrides, with other element. All information in
1368
+ * it is lowercased.
1369
+ * @param {CKEDITOR.style} style
1370
+ */
1371
+ function getOverrides( style )
1372
+ {
1373
+ if ( style._.overrides )
1374
+ return style._.overrides;
1375
+
1376
+ var overrides = ( style._.overrides = {} ),
1377
+ definition = style._.definition.overrides;
1378
+
1379
+ if ( definition )
1380
+ {
1381
+ // The override description can be a string, object or array.
1382
+ // Internally, well handle arrays only, so transform it if needed.
1383
+ if ( !CKEDITOR.tools.isArray( definition ) )
1384
+ definition = [ definition ];
1385
+
1386
+ // Loop through all override definitions.
1387
+ for ( var i = 0 ; i < definition.length ; i++ )
1388
+ {
1389
+ var override = definition[i];
1390
+ var elementName;
1391
+ var overrideEl;
1392
+ var attrs;
1393
+
1394
+ // If can be a string with the element name.
1395
+ if ( typeof override == 'string' )
1396
+ elementName = override.toLowerCase();
1397
+ // Or an object.
1398
+ else
1399
+ {
1400
+ elementName = override.element ? override.element.toLowerCase() : style.element;
1401
+ attrs = override.attributes;
1402
+ }
1403
+
1404
+ // We can have more than one override definition for the same
1405
+ // element name, so we attempt to simply append information to
1406
+ // it if it already exists.
1407
+ overrideEl = overrides[ elementName ] || ( overrides[ elementName ] = {} );
1408
+
1409
+ if ( attrs )
1410
+ {
1411
+ // The returning attributes list is an array, because we
1412
+ // could have different override definitions for the same
1413
+ // attribute name.
1414
+ var overrideAttrs = ( overrideEl.attributes = overrideEl.attributes || new Array() );
1415
+ for ( var attName in attrs )
1416
+ {
1417
+ // Each item in the attributes array is also an array,
1418
+ // where [0] is the attribute name and [1] is the
1419
+ // override value.
1420
+ overrideAttrs.push( [ attName.toLowerCase(), attrs[ attName ] ] );
1421
+ }
1422
+ }
1423
+ }
1424
+ }
1425
+
1426
+ return overrides;
1427
+ }
1428
+
1429
+ // Make the comparison of attribute value easier by standardizing it.
1430
+ function normalizeProperty( name, value, isStyle )
1431
+ {
1432
+ var temp = new CKEDITOR.dom.element( 'span' );
1433
+ temp [ isStyle ? 'setStyle' : 'setAttribute' ]( name, value );
1434
+ return temp[ isStyle ? 'getStyle' : 'getAttribute' ]( name );
1435
+ }
1436
+
1437
+ // Make the comparison of style text easier by standardizing it.
1438
+ function normalizeCssText( unparsedCssText, nativeNormalize )
1439
+ {
1440
+ var styleText;
1441
+ if ( nativeNormalize !== false )
1442
+ {
1443
+ // Injects the style in a temporary span object, so the browser parses it,
1444
+ // retrieving its final format.
1445
+ var temp = new CKEDITOR.dom.element( 'span' );
1446
+ temp.setAttribute( 'style', unparsedCssText );
1447
+ styleText = temp.getAttribute( 'style' ) || '';
1448
+ }
1449
+ else
1450
+ styleText = unparsedCssText;
1451
+
1452
+ // Normalize font-family property, ignore quotes and being case insensitive. (#7322)
1453
+ // http://www.w3.org/TR/css3-fonts/#font-family-the-font-family-property
1454
+ styleText = styleText.replace( /(font-family:)(.*?)(?=;|$)/, function ( match, prop, val )
1455
+ {
1456
+ var names = val.split( ',' );
1457
+ for ( var i = 0; i < names.length; i++ )
1458
+ names[ i ] = CKEDITOR.tools.trim( names[ i ].replace( /["']/g, '' ) );
1459
+ return prop + names.join( ',' );
1460
+ });
1461
+
1462
+ // Shrinking white-spaces around colon and semi-colon (#4147).
1463
+ // Compensate tail semi-colon.
1464
+ return styleText.replace( /\s*([;:])\s*/, '$1' )
1465
+ .replace( /([^\s;])$/, '$1;')
1466
+ // Trimming spaces after comma(#4107),
1467
+ // remove quotations(#6403),
1468
+ // mostly for differences on "font-family".
1469
+ .replace( /,\s+/g, ',' )
1470
+ .replace( /\"/g,'' )
1471
+ .toLowerCase();
1472
+ }
1473
+
1474
+ // Turn inline style text properties into one hash.
1475
+ function parseStyleText( styleText )
1476
+ {
1477
+ var retval = {};
1478
+ styleText
1479
+ .replace( /&quot;/g, '"' )
1480
+ .replace( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function( match, name, value )
1481
+ {
1482
+ retval[ name ] = value;
1483
+ } );
1484
+ return retval;
1485
+ }
1486
+
1487
+ /**
1488
+ * Compare two bunch of styles, with the speciality that value 'inherit'
1489
+ * is treated as a wildcard which will match any value.
1490
+ * @param {Object|String} source
1491
+ * @param {Object|String} target
1492
+ */
1493
+ function compareCssText( source, target )
1494
+ {
1495
+ typeof source == 'string' && ( source = parseStyleText( source ) );
1496
+ typeof target == 'string' && ( target = parseStyleText( target ) );
1497
+ for( var name in source )
1498
+ {
1499
+ if ( !( name in target &&
1500
+ ( target[ name ] == source[ name ]
1501
+ || source[ name ] == 'inherit'
1502
+ || target[ name ] == 'inherit' ) ) )
1503
+ {
1504
+ return false;
1505
+ }
1506
+ }
1507
+ return true;
1508
+ }
1509
+
1510
+ function applyStyle( document, remove )
1511
+ {
1512
+ var selection = document.getSelection(),
1513
+ ranges = selection.getRanges(),
1514
+ func = remove ? this.removeFromRange : this.applyToRange,
1515
+ range;
1516
+
1517
+ var iterator = ranges.createIterator();
1518
+ while ( ( range = iterator.getNextRange() ) )
1519
+ func.call( this, range );
1520
+
1521
+ selection.selectRanges( ranges );
1522
+
1523
+ document.removeCustomData( 'doc_processing_style' );
1524
+ }
1525
+ })();
1526
+
1527
+ CKEDITOR.styleCommand = function( style )
1528
+ {
1529
+ this.style = style;
1530
+ };
1531
+
1532
+ CKEDITOR.styleCommand.prototype.exec = function( editor )
1533
+ {
1534
+ editor.focus();
1535
+
1536
+ var doc = editor.document;
1537
+
1538
+ if ( doc )
1539
+ {
1540
+ if ( this.state == CKEDITOR.TRISTATE_OFF )
1541
+ this.style.apply( doc );
1542
+ else if ( this.state == CKEDITOR.TRISTATE_ON )
1543
+ this.style.remove( doc );
1544
+ }
1545
+
1546
+ return !!doc;
1547
+ };
1548
+
1549
+ /**
1550
+ * Manages styles registration and loading. See also {@link CKEDITOR.config.stylesSet}.
1551
+ * @namespace
1552
+ * @augments CKEDITOR.resourceManager
1553
+ * @constructor
1554
+ * @since 3.2
1555
+ * @example
1556
+ * // The set of styles for the <b>Styles</b> combo
1557
+ * CKEDITOR.stylesSet.add( 'default',
1558
+ * [
1559
+ * // Block Styles
1560
+ * { name : 'Blue Title' , element : 'h3', styles : { 'color' : 'Blue' } },
1561
+ * { name : 'Red Title' , element : 'h3', styles : { 'color' : 'Red' } },
1562
+ *
1563
+ * // Inline Styles
1564
+ * { name : 'Marker: Yellow' , element : 'span', styles : { 'background-color' : 'Yellow' } },
1565
+ * { name : 'Marker: Green' , element : 'span', styles : { 'background-color' : 'Lime' } },
1566
+ *
1567
+ * // Object Styles
1568
+ * {
1569
+ * name : 'Image on Left',
1570
+ * element : 'img',
1571
+ * attributes :
1572
+ * {
1573
+ * 'style' : 'padding: 5px; margin-right: 5px',
1574
+ * 'border' : '2',
1575
+ * 'align' : 'left'
1576
+ * }
1577
+ * }
1578
+ * ]);
1579
+ */
1580
+ CKEDITOR.stylesSet = new CKEDITOR.resourceManager( '', 'stylesSet' );
1581
+
1582
+ // Backward compatibility (#5025).
1583
+ CKEDITOR.addStylesSet = CKEDITOR.tools.bind( CKEDITOR.stylesSet.add, CKEDITOR.stylesSet );
1584
+ CKEDITOR.loadStylesSet = function( name, url, callback )
1585
+ {
1586
+ CKEDITOR.stylesSet.addExternal( name, url, '' );
1587
+ CKEDITOR.stylesSet.load( name, callback );
1588
+ };
1589
+
1590
+
1591
+ /**
1592
+ * Gets the current styleSet for this instance
1593
+ * @param {Function} callback The function to be called with the styles data.
1594
+ * @example
1595
+ * editor.getStylesSet( function( stylesDefinitions ) {} );
1596
+ */
1597
+ CKEDITOR.editor.prototype.getStylesSet = function( callback )
1598
+ {
1599
+ if ( !this._.stylesDefinitions )
1600
+ {
1601
+ var editor = this,
1602
+ // Respect the backwards compatible definition entry
1603
+ configStyleSet = editor.config.stylesCombo_stylesSet || editor.config.stylesSet || 'default';
1604
+
1605
+ // #5352 Allow to define the styles directly in the config object
1606
+ if ( configStyleSet instanceof Array )
1607
+ {
1608
+ editor._.stylesDefinitions = configStyleSet;
1609
+ callback( configStyleSet );
1610
+ return;
1611
+ }
1612
+
1613
+ var partsStylesSet = configStyleSet.split( ':' ),
1614
+ styleSetName = partsStylesSet[ 0 ],
1615
+ externalPath = partsStylesSet[ 1 ],
1616
+ pluginPath = CKEDITOR.plugins.registered.styles.path;
1617
+
1618
+ CKEDITOR.stylesSet.addExternal( styleSetName,
1619
+ externalPath ?
1620
+ partsStylesSet.slice( 1 ).join( ':' ) :
1621
+ pluginPath + 'styles/' + styleSetName + '.js', '' );
1622
+
1623
+ CKEDITOR.stylesSet.load( styleSetName, function( stylesSet )
1624
+ {
1625
+ editor._.stylesDefinitions = stylesSet[ styleSetName ];
1626
+ callback( editor._.stylesDefinitions );
1627
+ } ) ;
1628
+ }
1629
+ else
1630
+ callback( this._.stylesDefinitions );
1631
+ };
1632
+
1633
+ /**
1634
+ * Indicates that fully selected read-only elements will be included when
1635
+ * applying the style (for inline styles only).
1636
+ * @name CKEDITOR.style.includeReadonly
1637
+ * @type Boolean
1638
+ * @default false
1639
+ * @since 3.5
1640
+ */
1641
+
1642
+ /**
1643
+ * Disables inline styling on read-only elements.
1644
+ * @name CKEDITOR.config.disableReadonlyStyling
1645
+ * @type Boolean
1646
+ * @default false
1647
+ * @since 3.5
1648
+ */
1649
+
1650
+ /**
1651
+ * The "styles definition set" to use in the editor. They will be used in the
1652
+ * styles combo and the Style selector of the div container. <br>
1653
+ * The styles may be defined in the page containing the editor, or can be
1654
+ * loaded on demand from an external file. In the second case, if this setting
1655
+ * contains only a name, the styles definition file will be loaded from the
1656
+ * "styles" folder inside the styles plugin folder.
1657
+ * Otherwise, this setting has the "name:url" syntax, making it
1658
+ * possible to set the URL from which loading the styles file.<br>
1659
+ * Previously this setting was available as config.stylesCombo_stylesSet<br>
1660
+ * @name CKEDITOR.config.stylesSet
1661
+ * @type String|Array
1662
+ * @default 'default'
1663
+ * @since 3.3
1664
+ * @example
1665
+ * // Load from the styles' styles folder (mystyles.js file).
1666
+ * config.stylesSet = 'mystyles';
1667
+ * @example
1668
+ * // Load from a relative URL.
1669
+ * config.stylesSet = 'mystyles:/editorstyles/styles.js';
1670
+ * @example
1671
+ * // Load from a full URL.
1672
+ * config.stylesSet = 'mystyles:http://www.example.com/editorstyles/styles.js';
1673
+ * @example
1674
+ * // Load from a list of definitions.
1675
+ * config.stylesSet = [
1676
+ * { name : 'Strong Emphasis', element : 'strong' },
1677
+ * { name : 'Emphasis', element : 'em' }, ... ];
1678
+ */