skylinecms 3.0.8 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. data/CHANGELOG +131 -10
  2. data/README.md +1 -2
  3. data/Rakefile +3 -3
  4. data/app/controllers/skyline/application_controller.rb +40 -4
  5. data/app/controllers/skyline/articles_controller.rb +4 -4
  6. data/app/controllers/skyline/browser/tabs/media_library/media_files_controller.rb +1 -1
  7. data/app/controllers/skyline/content_controller.rb +4 -3
  8. data/app/controllers/skyline/{media_files_data_controller.rb → media/data_controller.rb} +61 -59
  9. data/app/controllers/skyline/media/dirs_controller.rb +83 -0
  10. data/app/controllers/skyline/media/files_controller.rb +80 -0
  11. data/app/controllers/skyline/sections_controller.rb +10 -3
  12. data/app/controllers/skyline/settings_controller.rb +4 -2
  13. data/app/controllers/skyline/user_preferences_controller.rb +18 -0
  14. data/app/controllers/skyline/users_controller.rb +1 -1
  15. data/app/controllers/skyline/variant_current_editor_controller.rb +2 -0
  16. data/app/helpers/skyline/application_helper.rb +39 -35
  17. data/app/helpers/skyline/dialog_helper.rb +11 -10
  18. data/app/helpers/skyline/editors/boolean.rb +2 -2
  19. data/app/helpers/skyline/editors/page_browser.rb +2 -0
  20. data/app/helpers/skyline/editors/wysiwyg.rb +1 -1
  21. data/app/helpers/skyline/js_layout_helper.rb +19 -0
  22. data/app/helpers/skyline/media/dirs_helper.rb +2 -0
  23. data/app/helpers/skyline/media/files_helper.rb +6 -0
  24. data/app/helpers/skyline/media_files_helper.rb +2 -2
  25. data/app/helpers/skyline/menu_helper.rb +33 -0
  26. data/app/helpers/skyline/message_generator.rb +5 -1
  27. data/app/helpers/skyline/notification_generator.rb +6 -0
  28. data/app/helpers/skyline/plugin_helper.rb +21 -0
  29. data/app/helpers/skyline/presenters/presenter.rb +4 -13
  30. data/app/helpers/skyline/presenters/table.rb +0 -27
  31. data/app/helpers/skyline/ref_object_helper.rb +2 -2
  32. data/app/helpers/skyline/tree_helper.rb +74 -5
  33. data/app/models/skyline/article.rb +18 -6
  34. data/app/models/skyline/article_version.rb +1 -1
  35. data/app/models/skyline/image_ref.rb +9 -5
  36. data/app/models/skyline/inline_ref.rb +3 -2
  37. data/app/models/skyline/link_section_link.rb +2 -2
  38. data/app/models/skyline/media_file.rb +33 -10
  39. data/app/models/skyline/page.rb +10 -9
  40. data/app/models/skyline/section.rb +1 -1
  41. data/app/models/skyline/sections/content_collection_section.rb +1 -1
  42. data/app/models/skyline/sections/content_item_section.rb +1 -1
  43. data/app/models/skyline/sections/heading_section.rb +1 -1
  44. data/app/models/skyline/sections/iframe_section.rb +2 -2
  45. data/app/models/skyline/sections/link_section.rb +1 -1
  46. data/app/models/skyline/sections/media_section.rb +32 -5
  47. data/app/models/skyline/sections/page_fragment_section.rb +1 -1
  48. data/app/models/skyline/sections/raw_section.rb +1 -1
  49. data/app/models/skyline/sections/redirect_section.rb +4 -4
  50. data/app/models/skyline/sections/rss_section.rb +7 -2
  51. data/app/models/skyline/sections/splitter_section.rb +1 -1
  52. data/app/models/skyline/sections/wysiwyg_section.rb +3 -3
  53. data/app/models/skyline/site.rb +1 -1
  54. data/app/models/skyline/user.rb +1 -1
  55. data/app/models/skyline/user_preference.rb +69 -0
  56. data/app/models/skyline/variant.rb +1 -1
  57. data/app/templates/skyline/sections/content_item_section/default/index.html.erb +1 -1
  58. data/app/templates/skyline/sections/media_section/default/index.html.erb +9 -9
  59. data/app/views/skyline/articles/_list.html.erb +34 -0
  60. data/app/views/skyline/articles/edit.html.erb +13 -6
  61. data/app/views/skyline/articles/index.html.erb +12 -43
  62. data/app/views/skyline/articles/page/_index.html.erb +13 -11
  63. data/app/views/skyline/authentications/new.html.erb +2 -2
  64. data/app/views/skyline/browser/links/_index.html.erb +4 -2
  65. data/app/views/skyline/browser/tabs/media_library/_index.html.erb +12 -13
  66. data/app/views/skyline/browser/tabs/media_library/media_files/_index.html.erb +122 -51
  67. data/app/views/skyline/browser/tabs/media_library/media_files/_show.html.erb +7 -7
  68. data/app/views/skyline/content/list.rhtml +1 -3
  69. data/app/views/skyline/content/presenters/_table.html.erb +45 -0
  70. data/app/views/skyline/layouts/content.html.erb +1 -1
  71. data/app/views/skyline/layouts/media.html.erb +2 -1
  72. data/app/views/skyline/layouts/pages.html.erb +10 -0
  73. data/app/views/skyline/link_section_links/_form.html.erb +0 -1
  74. data/app/views/skyline/locales/show.js.erb +2 -2
  75. data/app/views/skyline/media/dirs/_edit.html.erb +42 -0
  76. data/app/views/skyline/media/dirs/_index.html.erb +14 -0
  77. data/app/views/skyline/media/dirs/_show.html.erb +34 -0
  78. data/app/views/skyline/media/dirs/index.html.erb +36 -0
  79. data/app/views/skyline/media/files/_edit.html.erb +101 -0
  80. data/app/views/skyline/media/files/_index.html.erb +68 -0
  81. data/app/views/skyline/media/files/_new.html.erb +45 -0
  82. data/app/views/skyline/publications/_index.html.erb +2 -2
  83. data/app/views/skyline/sections/_media_section.html.erb +12 -2
  84. data/app/views/skyline/sections/_wysiwyg_section.html.erb +2 -3
  85. data/app/views/skyline/settings/index.html +14 -0
  86. data/app/views/skyline/shared/_head.html.erb +2 -0
  87. data/app/views/skyline/shared/_header_area.html.erb +7 -5
  88. data/app/views/skyline/users/index.html.erb +31 -16
  89. data/config/initializers/dependencies.rb +6 -1
  90. data/config/initializers/observers.rb +1 -2
  91. data/config/initializers/rails_defaults.rb +1 -1
  92. data/config/locales/en-US.yml +110 -68
  93. data/config/locales/nl-NL.yml +117 -77
  94. data/config/routes.rb +36 -32
  95. data/db/fixtures/roles_and_rights.rb +65 -40
  96. data/db/migrate/20090302102548_add_media_nodes.rb +2 -2
  97. data/db/migrate/20090309133933_add_description_to_media_nodes.rb +2 -2
  98. data/db/migrate/20090309134731_add_tags.rb +2 -2
  99. data/db/migrate/20090309135746_create_media_files_tags.rb +2 -2
  100. data/db/migrate/20090319091342_create_media_caches.rb +2 -2
  101. data/db/migrate/20090327083240_create_users.rb +2 -2
  102. data/db/migrate/20090327084656_create_roles.rb +2 -2
  103. data/db/migrate/20090327084719_create_rights.rb +2 -2
  104. data/db/migrate/20090327084739_create_grants.rb +2 -2
  105. data/db/migrate/20090327090918_create_rights_roles.rb +2 -2
  106. data/db/migrate/20090408115155_create_ref_objects.rb +2 -2
  107. data/db/migrate/20090504140044_create_test_sections.rb +2 -2
  108. data/db/migrate/20090506083107_add_refering_column_name_to_ref_objects.rb +2 -2
  109. data/db/migrate/20090706124019_add_skyline_media_node_title.rb +1 -1
  110. data/db/migrate/20090904121447_create_skyline_referable_uris.rb +6 -6
  111. data/db/migrate/20091221145204_add_skyline_media_section_link.rb +11 -0
  112. data/db/migrate/20100109145958_add_associated_tags_index.rb +9 -0
  113. data/db/migrate/20100115111440_create_skyline_user_preferences.rb +14 -0
  114. data/db/migrate/20100120113953_remove_unused_articles_index.rb +9 -0
  115. data/db/migrate/20100409073447_change_referable_uri_to_text.rb +9 -0
  116. data/doc/Bundler.md +33 -28
  117. data/doc/MIGRATION.md +48 -0
  118. data/lib/skyline/{content_item.rb → belongs_to_referable.rb} +57 -88
  119. data/lib/skyline/configuration.rb +14 -15
  120. data/lib/skyline/content/content.rb +14 -2
  121. data/lib/skyline/deprecated/version3_0_8.rb +106 -0
  122. data/lib/skyline/{form_builder_with_errors.rb → form_builder.rb} +5 -5
  123. data/lib/skyline/{referable.rb → has_many_referables_in.rb} +22 -12
  124. data/lib/skyline/javascript_generator_methods.rb +1 -1
  125. data/lib/skyline/plugins_manager.rb +135 -14
  126. data/lib/skyline/rendering/helpers/renderer_helper.rb +14 -9
  127. data/lib/skyline/{renderer.rb → rendering/renderer.rb} +3 -4
  128. data/lib/skyline/{renderable_scope_interface.rb → rendering/scopes/interface.rb} +1 -1
  129. data/lib/skyline/{wildcard_renderable_scope.rb → rendering/scopes/wildcard.rb} +3 -3
  130. data/lib/skyline/{section_item.rb → sections/interface.rb} +17 -10
  131. data/lib/skyline/settings.rb +29 -19
  132. data/lib/skyline/taggable.rb +3 -3
  133. data/lib/skyline/version.rb +2 -2
  134. data/{tasks → lib/tasks}/database.rake +14 -2
  135. data/{tasks → lib/tasks}/implementation.rake +0 -0
  136. data/lib/tasks/testing.rake +41 -0
  137. data/public/skyline/images/backgrounds/panel-dt.gif +0 -0
  138. data/public/skyline/javascripts/src/application.js +114 -120
  139. data/public/skyline/javascripts/src/browser.js +22 -4
  140. data/public/skyline/javascripts/src/library_uploader.js +13 -3
  141. data/public/skyline/javascripts/src/sections.js +57 -6
  142. data/public/skyline/javascripts/src/skyline/src/dialog.js +6 -0
  143. data/public/skyline/javascripts/src/skyline/src/drag.js +6 -0
  144. data/public/skyline/javascripts/src/skyline/src/events.js +50 -0
  145. data/public/skyline/javascripts/src/skyline/src/field_replicator.js +12 -11
  146. data/public/skyline/javascripts/src/skyline/src/layout.js +172 -30
  147. data/public/skyline/javascripts/src/skyline/src/menu.js +3 -0
  148. data/public/skyline/javascripts/src/skyline/src/menubutton.js +3 -0
  149. data/public/skyline/javascripts/src/skyline/src/skyline.js +3 -0
  150. data/public/skyline/javascripts/src/skyline/src/table.js +398 -0
  151. data/public/skyline/javascripts/src/skyline/src/tabs.js +2 -2
  152. data/public/skyline/javascripts/src/skyline/src/tag_selector.js +34 -26
  153. data/public/skyline/javascripts/src/skyline/src/tree.js +3 -0
  154. data/public/skyline/javascripts/src/skyline/src/uploader.js +2 -2
  155. data/public/skyline/javascripts/src/skyline/src/utils.js +3 -0
  156. data/public/skyline/javascripts/src/skyline/test/_dynamic_right.html +24 -0
  157. data/public/skyline/javascripts/src/skyline/test/_right_content.html +1 -0
  158. data/public/skyline/javascripts/src/skyline/test/basic_layout.html +190 -0
  159. data/public/skyline/javascripts/src/skyline/test/dialog.html +101 -0
  160. data/public/skyline/javascripts/src/skyline/test/draggablefiles.html +196 -0
  161. data/public/skyline/javascripts/src/skyline/test/dynamic_layout.html +89 -0
  162. data/public/skyline/javascripts/src/skyline/test/field_replicator.html +60 -0
  163. data/public/skyline/javascripts/src/skyline/test/last-closed.gif +0 -0
  164. data/public/skyline/javascripts/src/skyline/test/last-open.gif +0 -0
  165. data/public/skyline/javascripts/src/skyline/test/menubutton.html +81 -0
  166. data/public/skyline/javascripts/src/skyline/test/middle.gif +0 -0
  167. data/public/skyline/javascripts/src/skyline/test/sortable.html +121 -0
  168. data/public/skyline/javascripts/src/skyline/test/table.html +521 -0
  169. data/public/skyline/javascripts/src/skyline/test/tagselector.html +72 -0
  170. data/public/skyline/javascripts/src/skyline/test/toggle.html +95 -0
  171. data/public/skyline/javascripts/src/skyline/test/tree.html +310 -0
  172. data/public/skyline/javascripts/src/skyline/test/tree.png +0 -0
  173. data/public/skyline/javascripts/src/skyline/test/undohtml.css +27 -0
  174. data/public/skyline/javascripts/src/skyline/vendor/fancyupload/Swiff.Uploader.js +2 -2
  175. data/public/skyline/javascripts/src/skyline/vendor/mootools/mootools-core.js +1 -354
  176. data/public/skyline/javascripts/src/skyline/vendor/mootools/mootools-more.js +64 -52
  177. data/public/skyline/javascripts/src/skyline.editor/assets/content.css +1 -1
  178. data/public/skyline/javascripts/src/skyline.editor/src/script_loader.js +156 -75
  179. data/public/skyline/javascripts/src/skyline.editor/src/skyline.editor.js +14 -4
  180. data/public/skyline/javascripts/src/skyline.editor/src/theme.js +8 -0
  181. data/public/skyline/javascripts/src/skyline.editor/test/dialog.html +28 -0
  182. data/public/skyline/javascripts/src/skyline.editor/test/lorem.html +7 -0
  183. data/public/skyline/javascripts/src/skyline.editor/test/multiple_editors.html +87 -0
  184. data/public/skyline/javascripts/src/skyline.editor/test/undohtml.css +27 -0
  185. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/changelog.txt +205 -0
  186. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/css/content.css +54 -0
  187. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/custom_formats.html +111 -0
  188. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/full.html +19 -3
  189. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/menu.html +1 -0
  190. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/simple.html +6 -2
  191. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/skins.html +14 -10
  192. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/translate.html +7 -3
  193. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/word.html +8 -4
  194. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/langs/en.js +18 -2
  195. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js +6 -3
  196. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm +2 -7
  197. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js +6 -3
  198. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm +2 -7
  199. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js +1 -1
  200. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js +6 -3
  201. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js +1 -1
  202. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm +2 -7
  203. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
  204. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js +154 -0
  205. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -1
  206. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js +52 -44
  207. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js +1 -1
  208. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js +388 -17
  209. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js +4 -0
  210. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js +6 -3
  211. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -1
  212. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js +58 -6
  213. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js +6 -3
  214. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js +1 -1
  215. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js +8 -5
  216. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm +2 -7
  217. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js +6 -3
  218. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js +1 -1
  219. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js +10 -3
  220. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm +2 -7
  221. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js +18 -8
  222. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -1
  223. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js +12 -6
  224. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -1
  225. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js +6 -3
  226. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +6 -3
  227. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +6 -3
  228. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js +6 -3
  229. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
  230. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +136 -0
  231. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js +1 -1
  232. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js +18 -9
  233. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/media/media.htm +2 -7
  234. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -1
  235. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +7 -4
  236. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js +6 -3
  237. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js +6 -3
  238. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js +1 -1
  239. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js +564 -124
  240. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm +2 -8
  241. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm +2 -8
  242. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js +6 -3
  243. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js +6 -3
  244. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js +6 -3
  245. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -1
  246. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js +7 -4
  247. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js +4 -0
  248. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm +4 -9
  249. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -1
  250. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js +106 -27
  251. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js +6 -3
  252. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/style/props.htm +4 -11
  253. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -1
  254. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js +7 -4
  255. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/cell.htm +2 -7
  256. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js +1 -1
  257. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js +921 -918
  258. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js +41 -24
  259. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js +18 -20
  260. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/row.js +48 -23
  261. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js +24 -15
  262. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm +3 -8
  263. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/row.htm +2 -7
  264. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/table/table.htm +2 -7
  265. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js +1 -1
  266. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js +10 -7
  267. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/template/template.htm +2 -9
  268. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js +1 -1
  269. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js +26 -16
  270. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js +1 -0
  271. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js +98 -0
  272. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm +3 -10
  273. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm +3 -10
  274. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm +2 -7
  275. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm +3 -10
  276. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm +3 -11
  277. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -1
  278. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +11 -15
  279. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm +3 -11
  280. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js +8 -5
  281. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js +7 -4
  282. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js +7 -4
  283. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js +7 -4
  284. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js +7 -4
  285. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js +8 -8
  286. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js +7 -4
  287. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/about.htm +1 -3
  288. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm +2 -7
  289. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm +0 -1
  290. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm +2 -4
  291. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js +1 -1
  292. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js +252 -188
  293. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/image.htm +2 -7
  294. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  295. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js +7 -7
  296. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js +10 -0
  297. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js +2 -2
  298. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js +4 -4
  299. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/link.htm +2 -7
  300. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css +7 -3
  301. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css +4 -3
  302. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css +5 -6
  303. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css +7 -3
  304. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +3 -2
  305. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +4 -4
  306. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm +2 -8
  307. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js +5 -5
  308. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js +1 -1
  309. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/tiny_mce_popup.js +1 -1
  310. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/tiny_mce_src.js +5492 -4341
  311. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/utils/editable_selects.js +5 -4
  312. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/utils/form_utils.js +6 -5
  313. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/utils/mctabs.js +5 -4
  314. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/utils/validate.js +5 -4
  315. data/public/skyline/javascripts/src/skyline.js +3 -1
  316. data/public/skyline/javascripts/src/user_preferences.js +49 -0
  317. data/public/skyline/stylesheets/general.css +149 -47
  318. data/rails/init.rb +3 -3
  319. data/test/factories.rb +28 -0
  320. data/test/integration/media_browser_super_access_test.rb +52 -0
  321. data/test/integration/media_browser_user_access_test.rb +50 -0
  322. data/test/integration/user_preferences_test.rb +73 -0
  323. data/test/mocks/test_content_object.rb +32 -0
  324. data/test/mocks/test_section.rb +22 -0
  325. data/test/test_helper.rb +60 -0
  326. data/test/unit/inline_ref_test.rb +195 -0
  327. data/test/unit/locales_test.rb +82 -0
  328. data/test/unit/page_test.rb +204 -0
  329. data/test/unit/test_content_object_test.rb +69 -0
  330. data/test/unit/test_section_test.rb +247 -0
  331. data/test/unit/user_preference_test.rb +123 -0
  332. data/test/unit/user_test.rb +74 -0
  333. data/test/user_access_helper.rb +36 -0
  334. data/vendor/digitpaint/personify/test/fixtures/multiple_tags.txt +8 -0
  335. data/vendor/digitpaint/personify/test/parse_runner.rb +25 -0
  336. data/vendor/digitpaint/personify/test/parser_test.rb +109 -0
  337. data/vendor/digitpaint/personify/test/test_helper.rb +16 -0
  338. data/vendor/digitpaint/personify/vendor/treetop/.gitignore +5 -0
  339. data/vendor/mootools-on-rails/lib/mootools_on_rails/mootools_helper.rb +13 -4
  340. data/vendor/mootools-on-rails/test/mootools_helper_test.rb +138 -0
  341. data/vendor/mootools-on-rails/test/test_helper.rb +5 -0
  342. data/vendor/weppos/url_validation.rb +76 -0
  343. metadata +384 -189
  344. data/app/controllers/skyline/media_dirs_controller.rb +0 -56
  345. data/app/controllers/skyline/media_files_controller.rb +0 -87
  346. data/app/helpers/skyline/presenters/article_list.rb +0 -139
  347. data/app/observers/skyline/media_file_observer.rb +0 -32
  348. data/app/views/skyline/media_dirs/_edit.html.erb +0 -25
  349. data/app/views/skyline/media_dirs/_index.html.erb +0 -14
  350. data/app/views/skyline/media_dirs/index.html.erb +0 -42
  351. data/app/views/skyline/media_files/_edit.html.erb +0 -75
  352. data/app/views/skyline/media_files/_header.html.erb +0 -3
  353. data/app/views/skyline/media_files/_index.html.erb +0 -51
  354. data/app/views/skyline/media_files/_new.html.erb +0 -50
  355. data/db/migrate/20090603104115_prefix_tables_for_skyline.rb +0 -30
  356. data/lib/skyline/indexer.rb +0 -36
  357. data/lib/skyline/renderable_scope.rb +0 -27
  358. data/lib/skyline/rendering/helpers/settings_helper.rb +0 -26
  359. data/lib/skyline/searchable_item.rb +0 -132
  360. data/lib/skyline/url_validation.rb +0 -66
  361. data/public/skyline/images/backgrounds/splitter.gif +0 -0
  362. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/build.bat +0 -2
  363. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/build.xml +0 -364
  364. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/examples/full_jquery.html +0 -94
  365. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/AddOnManager.js +0 -95
  366. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/CommandManager.js +0 -54
  367. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ControlManager.js +0 -489
  368. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/Developer.js +0 -91
  369. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/Editor.js +0 -2295
  370. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/EditorCommands.js +0 -934
  371. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/EditorManager.js +0 -453
  372. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ForceBlocks.js +0 -644
  373. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/Popup.js +0 -412
  374. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/UndoManager.js +0 -183
  375. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/WindowManager.js +0 -169
  376. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/adapter/jquery/adapter.js +0 -240
  377. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/adapter/jquery/jquery.tinymce.js +0 -179
  378. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/adapter/prototype/adapter.js +0 -38
  379. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/commands/BlockQuote.js +0 -135
  380. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/commands/CutCopyPaste.js +0 -24
  381. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/commands/InsertHorizontalRule.js +0 -15
  382. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/commands/RemoveFormat.js +0 -173
  383. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/commands/UndoRedo.js +0 -38
  384. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/DOMUtils.js +0 -1823
  385. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/Element.js +0 -199
  386. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/EventUtils.js +0 -349
  387. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/Range.js +0 -721
  388. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/ScriptLoader.js +0 -351
  389. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/Selection.js +0 -747
  390. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/Serializer.js +0 -979
  391. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/Sizzle.js +0 -975
  392. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/StringWriter.js +0 -200
  393. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/TridentSelection.js +0 -273
  394. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/dom/XMLWriter.js +0 -155
  395. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/firebug/firebug-lite.js +0 -2518
  396. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/tinymce.js +0 -549
  397. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/Button.js +0 -68
  398. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/ColorSplitButton.js +0 -212
  399. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/Container.js +0 -56
  400. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/Control.js +0 -182
  401. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/DropMenu.js +0 -397
  402. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/ListBox.js +0 -320
  403. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/Menu.js +0 -175
  404. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/MenuButton.js +0 -128
  405. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/MenuItem.js +0 -69
  406. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/NativeListBox.js +0 -198
  407. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/Separator.js +0 -34
  408. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/SplitButton.js +0 -99
  409. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/ui/Toolbar.js +0 -86
  410. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/util/Cookie.js +0 -126
  411. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/util/Dispatcher.js +0 -101
  412. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/util/JSON.js +0 -81
  413. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/util/JSONP.js +0 -25
  414. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/util/JSONRequest.js +0 -87
  415. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/util/URI.js +0 -289
  416. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/util/XHR.js +0 -80
  417. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/classes/xml/Parser.js +0 -126
  418. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/jquery.tinymce.js +0 -1
  419. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/compat2x/editor_plugin.js +0 -1
  420. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/compat2x/editor_plugin_src.js +0 -616
  421. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/safari/blank.htm +0 -1
  422. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/safari/editor_plugin.js +0 -1
  423. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/plugins/safari/editor_plugin_src.js +0 -438
  424. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/tiny_mce_dev.js +0 -128
  425. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/tiny_mce_jquery.js +0 -1
  426. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/tiny_mce_jquery_src.js +0 -12198
  427. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/tiny_mce_prototype.js +0 -1
  428. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/jscripts/tiny_mce/tiny_mce_prototype_src.js +0 -13057
  429. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/api.html +0 -18
  430. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/api_jquery.html +0 -18
  431. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/api_prototype.html +0 -19
  432. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/basic.html +0 -548
  433. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/crossdomain.html +0 -87
  434. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/css/unit.css +0 -120
  435. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/index.html +0 -10
  436. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/jquery_plugin.html +0 -112
  437. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/js/api.js +0 -1438
  438. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/js/testrunner.js +0 -791
  439. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/main.html +0 -8
  440. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/media.html +0 -221
  441. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/menu.html +0 -22
  442. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/parts.html +0 -90
  443. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/paste.html +0 -132
  444. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/performance.html +0 -152
  445. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/range.html +0 -522
  446. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/removeformat.html +0 -88
  447. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/selection.html +0 -235
  448. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/config.ini +0 -27
  449. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/footer.html +0 -3
  450. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/header.html +0 -6
  451. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/index.php +0 -1
  452. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/instructions.txt +0 -4
  453. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/logo.png +0 -0
  454. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/selectors.list +0 -40
  455. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/style.css +0 -181
  456. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/system/index.php +0 -112
  457. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/system/slickspeed.js +0 -147
  458. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/system/template.php +0 -47
  459. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/slickspeed/template.html +0 -2865
  460. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tests/test.xml +0 -6
  461. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tools/ant/ant-contrib.jar +0 -0
  462. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tools/ant/js_build_tools.jar +0 -0
  463. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tools/ant/svnClientAdapter.jar +0 -0
  464. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tools/ant/svnant.jar +0 -0
  465. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tools/ant/svnjavahl.jar +0 -0
  466. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tools/ant/svnkit.jar +0 -0
  467. data/public/skyline/javascripts/src/skyline.editor/vendor/tinymce/tools/ant/yuicompressor.jar +0 -0
@@ -1,16 +1,46 @@
1
1
  /**
2
- * $Id: editor_plugin_src.js 1143 2009-05-27 10:05:31Z spocke $
2
+ * editor_plugin_src.js
3
3
  *
4
- * @author Moxiecode
5
- * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved.
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
6
9
  */
7
10
 
8
11
  (function() {
9
- var each = tinymce.each;
12
+ var each = tinymce.each,
13
+ entities = null,
14
+ defs = {
15
+ paste_auto_cleanup_on_paste : true,
16
+ paste_block_drop : false,
17
+ paste_retain_style_properties : "none",
18
+ paste_strip_class_attributes : "mso",
19
+ paste_remove_spans : false,
20
+ paste_remove_styles : false,
21
+ paste_remove_styles_if_webkit : true,
22
+ paste_convert_middot_lists : true,
23
+ paste_convert_headers_to_strong : false,
24
+ paste_dialog_width : "450",
25
+ paste_dialog_height : "400",
26
+ paste_text_use_dialog : false,
27
+ paste_text_sticky : false,
28
+ paste_text_notifyalways : false,
29
+ paste_text_linebreaktype : "p",
30
+ paste_text_replacements : [
31
+ [/\u2026/g, "..."],
32
+ [/[\x93\x94\u201c\u201d]/g, '"'],
33
+ [/[\x60\x91\x92\u2018\u2019]/g, "'"]
34
+ ]
35
+ };
36
+
37
+ function getParam(ed, name) {
38
+ return ed.getParam(name, defs[name]);
39
+ }
10
40
 
11
41
  tinymce.create('tinymce.plugins.PastePlugin', {
12
42
  init : function(ed, url) {
13
- var t = this, cb;
43
+ var t = this;
14
44
 
15
45
  t.editor = ed;
16
46
  t.url = url;
@@ -33,8 +63,12 @@
33
63
  ed.execCallback('paste_postprocess', pl, o);
34
64
  });
35
65
 
66
+ // Initialize plain text flag
67
+ ed.pasteAsPlainText = false;
68
+
36
69
  // This function executes the process handlers and inserts the contents
37
- function process(o) {
70
+ // force_rich overrides plain text mode set by user, important for pasting with execCommand
71
+ function process(o, force_rich) {
38
72
  var dom = ed.dom;
39
73
 
40
74
  // Execute pre process handlers
@@ -49,29 +83,69 @@
49
83
  // Serialize content
50
84
  o.content = ed.serializer.serialize(o.node, {getInner : 1});
51
85
 
52
- // Insert cleaned content. We need to handle insertion of contents containing block elements separately
53
- if (/<(p|h[1-6]|ul|ol)/.test(o.content))
86
+ // Plain text option active?
87
+ if ((!force_rich) && (ed.pasteAsPlainText)) {
88
+ t._insertPlainText(ed, dom, o.content);
89
+
90
+ if (!getParam(ed, "paste_text_sticky")) {
91
+ ed.pasteAsPlainText = false;
92
+ ed.controlManager.setActive("pastetext", false);
93
+ }
94
+ } else if (/<(p|h[1-6]|ul|ol)/.test(o.content)) {
95
+ // Handle insertion of contents containing block elements separately
54
96
  t._insertBlockContent(ed, dom, o.content);
55
- else
97
+ } else {
56
98
  t._insert(o.content);
57
- };
99
+ }
100
+ }
58
101
 
59
102
  // Add command for external usage
60
103
  ed.addCommand('mceInsertClipboardContent', function(u, o) {
61
- process(o);
104
+ process(o, true);
62
105
  });
63
106
 
107
+ if (!getParam(ed, "paste_text_use_dialog")) {
108
+ ed.addCommand('mcePasteText', function(u, v) {
109
+ var cookie = tinymce.util.Cookie;
110
+
111
+ ed.pasteAsPlainText = !ed.pasteAsPlainText;
112
+ ed.controlManager.setActive('pastetext', ed.pasteAsPlainText);
113
+
114
+ if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) {
115
+ if (getParam(ed, "paste_text_sticky")) {
116
+ ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));
117
+ } else {
118
+ ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));
119
+ }
120
+
121
+ if (!getParam(ed, "paste_text_notifyalways")) {
122
+ cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31))
123
+ }
124
+ }
125
+ });
126
+ }
127
+
128
+ ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'});
129
+ ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'});
130
+
64
131
  // This function grabs the contents from the clipboard by adding a
65
132
  // hidden div and placing the caret inside it and after the browser paste
66
133
  // is done it grabs that contents and processes that
67
134
  function grabContent(e) {
68
135
  var n, or, rng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY;
69
136
 
137
+ // Check if browser supports direct plaintext access
138
+ if (ed.pasteAsPlainText && (e.clipboardData || dom.doc.dataTransfer)) {
139
+ e.preventDefault();
140
+ process({content : (e.clipboardData || dom.doc.dataTransfer).getData('Text')}, true);
141
+ return;
142
+ }
143
+
70
144
  if (dom.get('_mcePaste'))
71
145
  return;
72
146
 
73
147
  // Create container to paste into
74
- n = dom.add(body, 'div', {id : '_mcePaste'}, '&nbsp;');
148
+ n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste'}, '\uFEFF<br _mce_bogus="1">');
75
149
 
76
150
  // If contentEditable mode we need to find out the position of the closest element
77
151
  if (body != ed.getDoc().body)
@@ -98,11 +172,28 @@
98
172
  // Remove container
99
173
  dom.remove(n);
100
174
 
175
+ // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due
176
+ // to IE security settings so we pass the junk though better than nothing right
177
+ if (n.innerHTML === '\uFEFF') {
178
+ ed.execCommand('mcePasteWord');
179
+ e.preventDefault();
180
+ return;
181
+ }
182
+
101
183
  // Process contents
102
184
  process({content : n.innerHTML});
103
185
 
186
+ // Block the real paste event
104
187
  return tinymce.dom.Event.cancel(e);
105
188
  } else {
189
+ function block(e) {
190
+ e.preventDefault();
191
+ };
192
+
193
+ // Block mousedown and click to prevent selection change
194
+ dom.bind(ed.getDoc(), 'mousedown', block);
195
+ dom.bind(ed.getDoc(), 'keydown', block);
196
+
106
197
  or = ed.selection.getRng();
107
198
 
108
199
  // Move caret into hidden div
@@ -114,32 +205,55 @@
114
205
 
115
206
  // Wait a while and grab the pasted contents
116
207
  window.setTimeout(function() {
117
- var n = dom.get('_mcePaste'), h;
208
+ var h = '', nl = dom.select('div.mcePaste');
209
+
210
+ // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string
211
+ each(nl, function(n) {
212
+ var child = n.firstChild;
213
+
214
+ // WebKit inserts a DIV container with lots of odd styles
215
+ if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {
216
+ dom.remove(child, 1);
217
+ }
218
+
219
+ // WebKit duplicates the divs so we need to remove them
220
+ each(dom.select('div.mcePaste', n), function(n) {
221
+ dom.remove(n, 1);
222
+ });
118
223
 
119
- // Webkit clones the _mcePaste div for some odd reason so this will ensure that we get the real new div not the old empty one
120
- n.id = '_mceRemoved';
121
- dom.remove(n);
122
- n = dom.get('_mcePaste') || n;
224
+ // Remove apply style spans
225
+ each(dom.select('span.Apple-style-span', n), function(n) {
226
+ dom.remove(n, 1);
227
+ });
123
228
 
124
- // Grab the HTML contents
125
- // We need to look for a apple style wrapper on webkit it also adds a div wrapper if you copy/paste the body of the editor
126
- // It's amazing how strange the contentEditable mode works in WebKit
127
- h = (dom.select('> span.Apple-style-span div', n)[0] || dom.select('> span.Apple-style-span', n)[0] || n).innerHTML;
229
+ // Remove bogus br elements
230
+ each(dom.select('br[_mce_bogus]', n), function(n) {
231
+ dom.remove(n);
232
+ });
128
233
 
129
- // Remove hidden div and restore selection
130
- dom.remove(n);
234
+ h += n.innerHTML;
235
+ });
236
+
237
+ // Remove the nodes
238
+ each(nl, function(n) {
239
+ dom.remove(n);
240
+ });
131
241
 
132
242
  // Restore the old selection
133
243
  if (or)
134
244
  sel.setRng(or);
135
245
 
136
246
  process({content : h});
247
+
248
+ // Unblock events ones we got the contents
249
+ dom.unbind(ed.getDoc(), 'mousedown', block);
250
+ dom.unbind(ed.getDoc(), 'keydown', block);
137
251
  }, 0);
138
252
  }
139
- };
253
+ }
140
254
 
141
255
  // Check if we should use the new auto process method
142
- if (ed.getParam('paste_auto_cleanup_on_paste', true)) {
256
+ if (getParam(ed, "paste_auto_cleanup_on_paste")) {
143
257
  // Is it's Opera or older FF use key handler
144
258
  if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
145
259
  ed.onKeyDown.add(function(ed, e) {
@@ -155,7 +269,7 @@
155
269
  }
156
270
 
157
271
  // Block all drag/drop events
158
- if (ed.getParam('paste_block_drop')) {
272
+ if (getParam(ed, "paste_block_drop")) {
159
273
  ed.onInit.add(function() {
160
274
  ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {
161
275
  e.preventDefault();
@@ -181,10 +295,15 @@
181
295
  },
182
296
 
183
297
  _preProcess : function(pl, o) {
184
- var ed = this.editor, h = o.content, process, stripClass;
185
-
186
298
  //console.log('Before preprocess:' + o.content);
187
299
 
300
+ var ed = this.editor,
301
+ h = o.content,
302
+ grep = tinymce.grep,
303
+ explode = tinymce.explode,
304
+ trim = tinymce.trim,
305
+ len, stripClass;
306
+
188
307
  function process(items) {
189
308
  each(items, function(v) {
190
309
  // Remove or replace
@@ -193,71 +312,205 @@
193
312
  else
194
313
  h = h.replace(v[0], v[1]);
195
314
  });
196
- };
197
-
198
- // Process away some basic content
199
- process([
200
- /^\s*(&nbsp;)+/g, // nbsp entities at the start of contents
201
- /(&nbsp;|<br[^>]*>)+\s*$/g // nbsp entities at the end of contents
202
- ]);
315
+ }
203
316
 
204
317
  // Detect Word content and process it more aggressive
205
- if (/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(h) || o.wordContent) {
206
- o.wordContent = true; // Mark the pasted contents as word specific content
318
+ if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {
319
+ o.wordContent = true; // Mark the pasted contents as word specific content
207
320
  //console.log('Word contents detected.');
208
321
 
209
- if (ed.getParam('paste_convert_middot_lists', true)) {
322
+ // Process away some basic content
323
+ process([
324
+ /^\s*(&nbsp;)+/gi, // &nbsp; entities at the start of contents
325
+ /(&nbsp;|<br[^>]*>)+\s*$/gi // &nbsp; entities at the end of contents
326
+ ]);
327
+
328
+ if (getParam(ed, "paste_convert_headers_to_strong")) {
329
+ h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");
330
+ }
331
+
332
+ if (getParam(ed, "paste_convert_middot_lists")) {
210
333
  process([
211
- [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker
212
- [/(<span[^>]+:\s*symbol[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert symbol spans to list items
213
- [/(<span[^>]+mso-list:[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list to item marker
334
+ [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker
335
+ [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol spans to item markers
214
336
  ]);
215
337
  }
216
338
 
217
339
  process([
218
- /<!--[\s\S]+?-->/gi, // Word comments
219
- /<\/?(img|font|meta|link|style|div|v:\w+)[^>]*>/gi, // Remove some tags including VML content
220
- /<\\?\?xml[^>]*>/gi, // XML namespace declarations
221
- /<\/?o:[^>]*>/gi, // MS namespaced elements <o:tag>
222
- / (id|name|language|type|on\w+|v:\w+)=\"([^\"]*)\"/gi, // on.., class, style and language attributes with quotes
223
- / (id|name|language|type|on\w+|v:\w+)=(\w+)/gi, // on.., class, style and language attributes without quotes (IE)
224
- [/<(\/?)s>/gi, '<$1strike>'], // Convert <s> into <strike> for line-though
225
- /<script[^>]+>[\s\S]*?<\/script>/gi, // All scripts elements for msoShowComment for example
226
- [/&nbsp;/g, '\u00a0'] // Replace nsbp entites to char since it's easier to handle
340
+ // Word comments like conditional comments etc
341
+ /<!--[\s\S]+?-->/gi,
342
+
343
+ // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags
344
+ /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,
345
+
346
+ // Convert <s> into <strike> for line-though
347
+ [/<(\/?)s>/gi, "<$1strike>"],
348
+
349
+ // Replace nsbp entites to char since it's easier to handle
350
+ [/&nbsp;/gi, "\u00a0"]
227
351
  ]);
228
352
 
353
+ // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.
354
+ // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot.
355
+ do {
356
+ len = h.length;
357
+ h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");
358
+ } while (len != h.length);
359
+
229
360
  // Remove all spans if no styles is to be retained
230
- if (!ed.getParam('paste_retain_style_properties')) {
231
- process([
232
- /<\/?(span)[^>]*>/gi
233
- ]);
234
- }
235
- }
361
+ if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {
362
+ h = h.replace(/<\/?span[^>]*>/gi, "");
363
+ } else {
364
+ // We're keeping styles, so at least clean them up.
365
+ // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx
236
366
 
237
- // Allow for class names to be retained if desired; either all, or just the ones from Word
238
- // Note that the paste_strip_class_attributes: 'none, verify_css_classes: true is also a good variation.
239
- stripClass = ed.getParam('paste_strip_class_attributes', 'all');
240
- if (stripClass != 'none') {
241
- if (stripClass == 'all') {
242
- process([
243
- / class=\"([^\"]*)\"/gi, // class attributes with quotes
244
- / class=(\w+)/gi // class attributes without quotes (IE)
245
- ]);
246
- } else { // Only strip the 'mso*' classes
247
367
  process([
248
- / class=\"(mso[^\"]*)\"/gi, // class attributes with quotes
249
- / class=(mso\w+)/gi // class attributes without quotes (IE)
368
+ // Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length
369
+ [/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,
370
+ function(str, spaces) {
371
+ return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";
372
+ }
373
+ ],
374
+
375
+ // Examine all styles: delete junk, transform some, and keep the rest
376
+ [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,
377
+ function(str, tag, style) {
378
+ var n = [],
379
+ i = 0,
380
+ s = explode(trim(style).replace(/&quot;/gi, "'"), ";");
381
+
382
+ // Examine each style definition within the tag's style attribute
383
+ each(s, function(v) {
384
+ var name, value,
385
+ parts = explode(v, ":");
386
+
387
+ function ensureUnits(v) {
388
+ return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";
389
+ }
390
+
391
+ if (parts.length == 2) {
392
+ name = parts[0].toLowerCase();
393
+ value = parts[1].toLowerCase();
394
+
395
+ // Translate certain MS Office styles into their CSS equivalents
396
+ switch (name) {
397
+ case "mso-padding-alt":
398
+ case "mso-padding-top-alt":
399
+ case "mso-padding-right-alt":
400
+ case "mso-padding-bottom-alt":
401
+ case "mso-padding-left-alt":
402
+ case "mso-margin-alt":
403
+ case "mso-margin-top-alt":
404
+ case "mso-margin-right-alt":
405
+ case "mso-margin-bottom-alt":
406
+ case "mso-margin-left-alt":
407
+ case "mso-table-layout-alt":
408
+ case "mso-height":
409
+ case "mso-width":
410
+ case "mso-vertical-align-alt":
411
+ n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);
412
+ return;
413
+
414
+ case "horiz-align":
415
+ n[i++] = "text-align:" + value;
416
+ return;
417
+
418
+ case "vert-align":
419
+ n[i++] = "vertical-align:" + value;
420
+ return;
421
+
422
+ case "font-color":
423
+ case "mso-foreground":
424
+ n[i++] = "color:" + value;
425
+ return;
426
+
427
+ case "mso-background":
428
+ case "mso-highlight":
429
+ n[i++] = "background:" + value;
430
+ return;
431
+
432
+ case "mso-default-height":
433
+ n[i++] = "min-height:" + ensureUnits(value);
434
+ return;
435
+
436
+ case "mso-default-width":
437
+ n[i++] = "min-width:" + ensureUnits(value);
438
+ return;
439
+
440
+ case "mso-padding-between-alt":
441
+ n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);
442
+ return;
443
+
444
+ case "text-line-through":
445
+ if ((value == "single") || (value == "double")) {
446
+ n[i++] = "text-decoration:line-through";
447
+ }
448
+ return;
449
+
450
+ case "mso-zero-height":
451
+ if (value == "yes") {
452
+ n[i++] = "display:none";
453
+ }
454
+ return;
455
+ }
456
+
457
+ // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name
458
+ if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) {
459
+ return;
460
+ }
461
+
462
+ // If it reached this point, it must be a valid CSS style
463
+ n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case
464
+ }
465
+ });
466
+
467
+ // If style attribute contained any valid styles the re-write it; otherwise delete style attribute.
468
+ if (i > 0) {
469
+ return tag + ' style="' + n.join(';') + '"';
470
+ } else {
471
+ return tag;
472
+ }
473
+ }
474
+ ]
250
475
  ]);
251
476
  }
252
477
  }
253
478
 
254
- // Remove spans option
255
- if (ed.getParam('paste_remove_spans')) {
479
+ // Replace headers with <strong>
480
+ if (getParam(ed, "paste_convert_headers_to_strong")) {
256
481
  process([
257
- /<\/?(span)[^>]*>/gi
482
+ [/<h[1-6][^>]*>/gi, "<p><strong>"],
483
+ [/<\/h[1-6][^>]*>/gi, "</strong></p>"]
258
484
  ]);
259
485
  }
260
486
 
487
+ // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").
488
+ // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.
489
+ stripClass = getParam(ed, "paste_strip_class_attributes");
490
+
491
+ if (stripClass !== "none") {
492
+ function removeClasses(match, g1) {
493
+ if (stripClass === "all")
494
+ return '';
495
+
496
+ var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),
497
+ function(v) {
498
+ return (/^(?!mso)/i.test(v));
499
+ }
500
+ );
501
+
502
+ return cls.length ? ' class="' + cls.join(" ") + '"' : '';
503
+ };
504
+
505
+ h = h.replace(/ class="([^"]+)"/gi, removeClasses);
506
+ h = h.replace(/ class=(\w+)/gi, removeClasses);
507
+ }
508
+
509
+ // Remove spans option
510
+ if (getParam(ed, "paste_remove_spans")) {
511
+ h = h.replace(/<\/?span[^>]*>/gi, "");
512
+ }
513
+
261
514
  //console.log('After preprocess:' + h);
262
515
 
263
516
  o.content = h;
@@ -276,56 +529,58 @@
276
529
  dom.remove(a, 1);
277
530
  });
278
531
 
279
- if (t.editor.getParam('paste_convert_middot_lists', true))
532
+ if (getParam(ed, "paste_convert_middot_lists")) {
280
533
  t._convertLists(pl, o);
534
+ }
281
535
 
282
536
  // Process styles
283
- styleProps = ed.getParam('paste_retain_style_properties'); // retained properties
537
+ styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties
284
538
 
285
- // If string property then split it
286
- if (tinymce.is(styleProps, 'string'))
287
- styleProps = tinymce.explode(styleProps);
539
+ // Process only if a string was specified and not equal to "all" or "*"
540
+ if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {
541
+ styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));
288
542
 
289
- // Retains some style properties
290
- each(dom.select('*', o.node), function(el) {
291
- var newStyle = {}, npc = 0, i, sp, sv;
292
-
293
- // Store a subset of the existing styles
294
- if (styleProps) {
295
- for (i = 0; i < styleProps.length; i++) {
296
- sp = styleProps[i];
297
- sv = dom.getStyle(el, sp);
298
-
299
- if (sv) {
300
- newStyle[sp] = sv;
301
- npc++;
543
+ // Retains some style properties
544
+ each(dom.select('*', o.node), function(el) {
545
+ var newStyle = {}, npc = 0, i, sp, sv;
546
+
547
+ // Store a subset of the existing styles
548
+ if (styleProps) {
549
+ for (i = 0; i < styleProps.length; i++) {
550
+ sp = styleProps[i];
551
+ sv = dom.getStyle(el, sp);
552
+
553
+ if (sv) {
554
+ newStyle[sp] = sv;
555
+ npc++;
556
+ }
302
557
  }
303
558
  }
304
- }
305
559
 
306
- // Remove all of the existing styles
307
- dom.setAttrib(el, 'style', '');
560
+ // Remove all of the existing styles
561
+ dom.setAttrib(el, 'style', '');
308
562
 
309
- if (styleProps && npc > 0)
310
- dom.setStyles(el, newStyle); // Add back the stored subset of styles
311
- else // Remove empty span tags that do not have class attributes
312
- if (el.nodeName == 'SPAN' && !el.className)
313
- dom.remove(el, true);
314
- });
563
+ if (styleProps && npc > 0)
564
+ dom.setStyles(el, newStyle); // Add back the stored subset of styles
565
+ else // Remove empty span tags that do not have class attributes
566
+ if (el.nodeName == 'SPAN' && !el.className)
567
+ dom.remove(el, true);
568
+ });
569
+ }
315
570
  }
316
571
 
317
572
  // Remove all style information or only specifically on WebKit to avoid the style bug on that browser
318
- if (ed.getParam("paste_remove_styles") || (ed.getParam("paste_remove_styles_if_webkit") && tinymce.isWebKit)) {
573
+ if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {
319
574
  each(dom.select('*[style]', o.node), function(el) {
320
575
  el.removeAttribute('style');
321
- el.removeAttribute('mce_style');
576
+ el.removeAttribute('_mce_style');
322
577
  });
323
578
  } else {
324
579
  if (tinymce.isWebKit) {
325
580
  // We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." />
326
581
  // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles
327
582
  each(dom.select('*', o.node), function(el) {
328
- el.removeAttribute('mce_style');
583
+ el.removeAttribute('_mce_style');
329
584
  });
330
585
  }
331
586
  }
@@ -417,7 +672,7 @@
417
672
  * This logic can be improved so text nodes at the start/end remain in the start/end block elements
418
673
  */
419
674
  _insertBlockContent : function(ed, dom, content) {
420
- var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight;
675
+ var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker';
421
676
 
422
677
  function select(n) {
423
678
  var r;
@@ -431,14 +686,15 @@
431
686
  sel.select(n, 1);
432
687
  sel.collapse(false);
433
688
  }
434
- };
689
+ }
435
690
 
436
691
  // Insert a marker for the caret position
437
- this._insert('<span id="_marker">&nbsp;</span>', 1);
438
- marker = dom.get('_marker');
439
- parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol');
692
+ this._insert('<span id="' + markerId + '"></span>', 1);
693
+ marker = dom.get(markerId);
694
+ parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td');
440
695
 
441
- if (parentBlock) {
696
+ // If it's a parent block but not a table cell
697
+ if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) {
442
698
  // Split parent block
443
699
  marker = dom.split(parentBlock, marker);
444
700
 
@@ -455,7 +711,9 @@
455
711
  sel.collapse(0);
456
712
  }
457
713
 
458
- dom.remove('_marker'); // Remove marker if it's left
714
+ // Remove marker if it's left
715
+ while (elm = dom.get(markerId))
716
+ dom.remove(elm);
459
717
 
460
718
  // Get element, position and height
461
719
  elm = sel.getStart();
@@ -472,41 +730,223 @@
472
730
  * Inserts the specified contents at the caret position.
473
731
  */
474
732
  _insert : function(h, skip_undo) {
475
- var ed = this.editor;
733
+ var ed = this.editor, r = ed.selection.getRng();
476
734
 
477
- // First delete the contents seems to work better on WebKit
478
- if (!ed.selection.isCollapsed())
735
+ // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells.
736
+ if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)
479
737
  ed.getDoc().execCommand('Delete', false, null);
480
738
 
481
739
  // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents
482
740
  ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo});
483
741
  },
484
742
 
743
+ /**
744
+ * Instead of the old plain text method which tried to re-create a paste operation, the
745
+ * new approach adds a plain text mode toggle switch that changes the behavior of paste.
746
+ * This function is passed the same input that the regular paste plugin produces.
747
+ * It performs additional scrubbing and produces (and inserts) the plain text.
748
+ * This approach leverages all of the great existing functionality in the paste
749
+ * plugin, and requires minimal changes to add the new functionality.
750
+ * Speednet - June 2009
751
+ */
752
+ _insertPlainText : function(ed, dom, h) {
753
+ var i, len, pos, rpos, node, breakElms, before, after,
754
+ w = ed.getWin(),
755
+ d = ed.getDoc(),
756
+ sel = ed.selection,
757
+ is = tinymce.is,
758
+ inArray = tinymce.inArray,
759
+ linebr = getParam(ed, "paste_text_linebreaktype"),
760
+ rl = getParam(ed, "paste_text_replacements");
761
+
762
+ function process(items) {
763
+ each(items, function(v) {
764
+ if (v.constructor == RegExp)
765
+ h = h.replace(v, "");
766
+ else
767
+ h = h.replace(v[0], v[1]);
768
+ });
769
+ };
770
+
771
+ if ((typeof(h) === "string") && (h.length > 0)) {
772
+ if (!entities)
773
+ entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(",");
774
+
775
+ // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line
776
+ if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(h)) {
777
+ process([
778
+ /[\n\r]+/g
779
+ ]);
780
+ } else {
781
+ // Otherwise just get rid of carriage returns (only need linefeeds)
782
+ process([
783
+ /\r+/g
784
+ ]);
785
+ }
786
+
787
+ process([
788
+ [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them
789
+ [/<br[^>]*>|<\/tr>/gi, "\n"], // Single linebreak for <br /> tags and table rows
790
+ [/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"], // Table cells get tabs betweem them
791
+ /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags
792
+ [/&nbsp;/gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*)
793
+ [
794
+ // HTML entity
795
+ /&(#\d+|[a-z0-9]{1,10});/gi,
796
+
797
+ // Replace with actual character
798
+ function(e, s) {
799
+ if (s.charAt(0) === "#") {
800
+ return String.fromCharCode(s.slice(1));
801
+ }
802
+ else {
803
+ return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " ";
804
+ }
805
+ }
806
+ ],
807
+ [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars.
808
+ [/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks
809
+ /^\s+|\s+$/g // Trim the front & back
810
+ ]);
811
+
812
+ h = dom.encode(h);
813
+
814
+ // Delete any highlighted text before pasting
815
+ if (!sel.isCollapsed()) {
816
+ d.execCommand("Delete", false, null);
817
+ }
818
+
819
+ // Perform default or custom replacements
820
+ if (is(rl, "array") || (is(rl, "array"))) {
821
+ process(rl);
822
+ }
823
+ else if (is(rl, "string")) {
824
+ process(new RegExp(rl, "gi"));
825
+ }
826
+
827
+ // Treat paragraphs as specified in the config
828
+ if (linebr == "none") {
829
+ process([
830
+ [/\n+/g, " "]
831
+ ]);
832
+ }
833
+ else if (linebr == "br") {
834
+ process([
835
+ [/\n/g, "<br />"]
836
+ ]);
837
+ }
838
+ else {
839
+ process([
840
+ /^\s+|\s+$/g,
841
+ [/\n\n/g, "</p><p>"],
842
+ [/\n/g, "<br />"]
843
+ ]);
844
+ }
845
+
846
+ // This next piece of code handles the situation where we're pasting more than one paragraph of plain
847
+ // text, and we are pasting the content into the middle of a block node in the editor. The block
848
+ // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining).
849
+ // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the
850
+ // pasted text is prepended to "Para B". Any other paragraphs of pasted text are placed between
851
+ // "Para A" and "Para B". This code solves a host of problems with the original plain text plugin and
852
+ // now handles styles correctly. (Pasting plain text into a styled paragraph is supposed to make the
853
+ // plain text take the same style as the existing paragraph.)
854
+ if ((pos = h.indexOf("</p><p>")) != -1) {
855
+ rpos = h.lastIndexOf("</p><p>");
856
+ node = sel.getNode();
857
+ breakElms = []; // Get list of elements to break
858
+
859
+ do {
860
+ if (node.nodeType == 1) {
861
+ // Don't break tables and break at body
862
+ if (node.nodeName == "TD" || node.nodeName == "BODY") {
863
+ break;
864
+ }
865
+
866
+ breakElms[breakElms.length] = node;
867
+ }
868
+ } while (node = node.parentNode);
869
+
870
+ // Are we in the middle of a block node?
871
+ if (breakElms.length > 0) {
872
+ before = h.substring(0, pos);
873
+ after = "";
874
+
875
+ for (i=0, len=breakElms.length; i<len; i++) {
876
+ before += "</" + breakElms[i].nodeName.toLowerCase() + ">";
877
+ after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">";
878
+ }
879
+
880
+ if (pos == rpos) {
881
+ h = before + after + h.substring(pos+7);
882
+ }
883
+ else {
884
+ h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7);
885
+ }
886
+ }
887
+ }
888
+
889
+ // Insert content at the caret, plus add a marker for repositioning the caret
890
+ ed.execCommand("mceInsertRawHTML", false, h + '<span id="_plain_text_marker">&nbsp;</span>');
891
+
892
+ // Reposition the caret to the marker, which was placed immediately after the inserted content.
893
+ // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers.
894
+ // The second part of the code scrolls the content up if the caret is positioned off-screen.
895
+ // This is only necessary for WebKit browsers, but it doesn't hurt to use for all.
896
+ window.setTimeout(function() {
897
+ var marker = dom.get('_plain_text_marker'),
898
+ elm, vp, y, elmHeight;
899
+
900
+ sel.select(marker, false);
901
+ d.execCommand("Delete", false, null);
902
+ marker = null;
903
+
904
+ // Get element, position and height
905
+ elm = sel.getStart();
906
+ vp = dom.getViewPort(w);
907
+ y = dom.getPos(elm).y;
908
+ elmHeight = elm.clientHeight;
909
+
910
+ // Is element within viewport if not then scroll it into view
911
+ if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) {
912
+ d.body.scrollTop = y < vp.y ? y : y - vp.h + 25;
913
+ }
914
+ }, 0);
915
+ }
916
+ },
917
+
485
918
  /**
486
919
  * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.
487
920
  */
488
921
  _legacySupport : function() {
489
922
  var t = this, ed = t.editor;
490
923
 
491
- // Register commands for backwards compatibility
492
- each(['mcePasteText', 'mcePasteWord'], function(cmd) {
493
- ed.addCommand(cmd, function() {
924
+ // Register command(s) for backwards compatibility
925
+ ed.addCommand("mcePasteWord", function() {
926
+ ed.windowManager.open({
927
+ file: t.url + "/pasteword.htm",
928
+ width: parseInt(getParam(ed, "paste_dialog_width")),
929
+ height: parseInt(getParam(ed, "paste_dialog_height")),
930
+ inline: 1
931
+ });
932
+ });
933
+
934
+ if (getParam(ed, "paste_text_use_dialog")) {
935
+ ed.addCommand("mcePasteText", function() {
494
936
  ed.windowManager.open({
495
- file : t.url + (cmd == 'mcePasteText' ? '/pastetext.htm' : '/pasteword.htm'),
496
- width : parseInt(ed.getParam("paste_dialog_width", "450")),
497
- height : parseInt(ed.getParam("paste_dialog_height", "400")),
937
+ file : t.url + "/pastetext.htm",
938
+ width: parseInt(getParam(ed, "paste_dialog_width")),
939
+ height: parseInt(getParam(ed, "paste_dialog_height")),
498
940
  inline : 1
499
941
  });
500
942
  });
501
- });
943
+ }
502
944
 
503
- // Register buttons for backwards compatibility
504
- ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText'});
505
- ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord'});
506
- ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'selectall'});
945
+ // Register button for backwards compatibility
946
+ ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});
507
947
  }
508
948
  });
509
949
 
510
950
  // Register plugin
511
- tinymce.PluginManager.add('paste', tinymce.plugins.PastePlugin);
512
- })();
951
+ tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);
952
+ })();