tiny_mce 0.1.1 → 0.1.2

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 (393) hide show
  1. data/CHANGELOG_PLUGIN.rdoc +4 -0
  2. data/CHANGELOG_TINYMCE +78 -7
  3. data/LICENSE +2 -2
  4. data/README.rdoc +36 -14
  5. data/Rakefile +1 -3
  6. data/SPELLCHECKING_PLUGIN.rdoc +3 -1
  7. data/VERSION +1 -1
  8. data/lib/tiny_mce.rb +2 -7
  9. data/lib/tiny_mce/assets/tiny_mce/langs/ar.js +95 -95
  10. data/lib/tiny_mce/assets/tiny_mce/langs/cs.js +13 -13
  11. data/lib/tiny_mce/assets/tiny_mce/langs/es.js +1 -1
  12. data/lib/tiny_mce/assets/tiny_mce/langs/fa.js +1 -1
  13. data/lib/tiny_mce/assets/tiny_mce/langs/fr.js +41 -41
  14. data/lib/tiny_mce/assets/tiny_mce/langs/he.js +93 -93
  15. data/lib/tiny_mce/assets/tiny_mce/langs/hu.js +10 -10
  16. data/lib/tiny_mce/assets/tiny_mce/langs/hy.js +157 -0
  17. data/lib/tiny_mce/assets/tiny_mce/langs/id.js +71 -71
  18. data/lib/tiny_mce/assets/tiny_mce/langs/ii.js +78 -70
  19. data/lib/tiny_mce/assets/tiny_mce/langs/ja.js +91 -99
  20. data/lib/tiny_mce/assets/tiny_mce/langs/lb.js +155 -0
  21. data/lib/tiny_mce/assets/tiny_mce/langs/pl.js +3 -3
  22. data/lib/tiny_mce/assets/tiny_mce/langs/ps.js +154 -0
  23. data/lib/tiny_mce/assets/tiny_mce/langs/pt.js +2 -2
  24. data/lib/tiny_mce/assets/tiny_mce/langs/ru.js +61 -59
  25. data/lib/tiny_mce/assets/tiny_mce/langs/sk.js +25 -25
  26. data/lib/tiny_mce/assets/tiny_mce/langs/th.js +1 -1
  27. data/lib/tiny_mce/assets/tiny_mce/langs/tr.js +51 -51
  28. data/lib/tiny_mce/assets/tiny_mce/langs/tw.js +2 -0
  29. data/lib/tiny_mce/assets/tiny_mce/langs/uk.js +7 -7
  30. data/lib/tiny_mce/assets/tiny_mce/langs/vi.js +17 -17
  31. data/lib/tiny_mce/assets/tiny_mce/langs/zu.js +162 -0
  32. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/editor_plugin_src.js +6 -3
  33. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/ar_dlg.js +3 -3
  34. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/he_dlg.js +3 -3
  35. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/hy_dlg.js +5 -0
  36. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/id_dlg.js +3 -3
  37. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/ii_dlg.js +1 -1
  38. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/ja_dlg.js +3 -3
  39. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/lb_dlg.js +5 -0
  40. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/ps_dlg.js +5 -0
  41. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/langs/zu_dlg.js +5 -0
  42. data/lib/tiny_mce/assets/tiny_mce/plugins/advhr/rule.htm +2 -7
  43. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/editor_plugin_src.js +6 -3
  44. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/image.htm +2 -7
  45. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/js/image.js +1 -1
  46. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/ar_dlg.js +41 -41
  47. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/de_dlg.js +1 -1
  48. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/fa_dlg.js +2 -2
  49. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/fr_dlg.js +14 -14
  50. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/he_dlg.js +37 -37
  51. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/hy_dlg.js +43 -0
  52. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/id_dlg.js +22 -22
  53. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/ii_dlg.js +24 -24
  54. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/ja_dlg.js +38 -38
  55. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/lb_dlg.js +43 -0
  56. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/ps_dlg.js +43 -0
  57. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/pt_dlg.js +1 -1
  58. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/ru_dlg.js +31 -31
  59. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/sk_dlg.js +2 -2
  60. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/th_dlg.js +1 -1
  61. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/tr_dlg.js +13 -13
  62. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/uk_dlg.js +1 -1
  63. data/lib/tiny_mce/assets/tiny_mce/plugins/advimage/langs/zu_dlg.js +43 -0
  64. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/editor_plugin_src.js +6 -3
  65. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/js/advlink.js +1 -1
  66. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/ar_dlg.js +49 -49
  67. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/fr_dlg.js +12 -12
  68. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/he_dlg.js +40 -40
  69. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/hy_dlg.js +52 -0
  70. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/id_dlg.js +32 -32
  71. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/ii_dlg.js +31 -31
  72. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/ja_dlg.js +49 -49
  73. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/lb_dlg.js +52 -0
  74. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/ps_dlg.js +52 -0
  75. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/pt_dlg.js +1 -1
  76. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/ru_dlg.js +38 -38
  77. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/sk_dlg.js +5 -5
  78. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/th_dlg.js +5 -5
  79. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/tr_dlg.js +23 -23
  80. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/uk_dlg.js +11 -11
  81. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/vi_dlg.js +1 -1
  82. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/langs/zu_dlg.js +52 -0
  83. data/lib/tiny_mce/assets/tiny_mce/plugins/advlink/link.htm +2 -7
  84. data/lib/tiny_mce/assets/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
  85. data/lib/tiny_mce/assets/tiny_mce/plugins/advlist/editor_plugin_src.js +154 -0
  86. data/lib/tiny_mce/assets/tiny_mce/plugins/autoresize/editor_plugin_src.js +6 -3
  87. data/lib/tiny_mce/assets/tiny_mce/plugins/autosave/editor_plugin.js +1 -1
  88. data/lib/tiny_mce/assets/tiny_mce/plugins/autosave/editor_plugin_src.js +388 -17
  89. data/lib/tiny_mce/assets/tiny_mce/plugins/autosave/langs/en.js +4 -0
  90. data/lib/tiny_mce/assets/tiny_mce/plugins/bbcode/editor_plugin_src.js +6 -3
  91. data/lib/tiny_mce/assets/tiny_mce/plugins/contextmenu/editor_plugin_src.js +35 -3
  92. data/lib/tiny_mce/assets/tiny_mce/plugins/directionality/editor_plugin_src.js +6 -3
  93. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/editor_plugin.js +1 -1
  94. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/editor_plugin_src.js +8 -5
  95. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/ar_dlg.js +18 -18
  96. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/fr_dlg.js +3 -3
  97. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/he_dlg.js +18 -18
  98. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/hy_dlg.js +20 -0
  99. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/id_dlg.js +1 -1
  100. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/ii_dlg.js +3 -3
  101. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/ja_dlg.js +18 -18
  102. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/lb_dlg.js +20 -0
  103. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/ps_dlg.js +20 -0
  104. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/ru_dlg.js +18 -18
  105. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/sk_dlg.js +18 -18
  106. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/th_dlg.js +1 -1
  107. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/tr_dlg.js +12 -12
  108. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/vi_dlg.js +18 -18
  109. data/lib/tiny_mce/assets/tiny_mce/plugins/emotions/langs/zu_dlg.js +20 -0
  110. data/lib/tiny_mce/assets/tiny_mce/plugins/example/dialog.htm +2 -7
  111. data/lib/tiny_mce/assets/tiny_mce/plugins/example/editor_plugin_src.js +6 -3
  112. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/editor_plugin_src.js +6 -3
  113. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/fullpage.htm +2 -7
  114. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/js/fullpage.js +17 -7
  115. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/ar_dlg.js +78 -78
  116. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/fr_dlg.js +4 -4
  117. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/he_dlg.js +40 -40
  118. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/hy_dlg.js +85 -0
  119. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/ii_dlg.js +51 -51
  120. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/ja_dlg.js +75 -75
  121. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/lb_dlg.js +85 -0
  122. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/ps_dlg.js +85 -0
  123. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/pt_dlg.js +1 -1
  124. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/ru_dlg.js +54 -54
  125. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/tr_dlg.js +42 -42
  126. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/tw_dlg.js +3 -3
  127. data/lib/tiny_mce/assets/tiny_mce/plugins/fullpage/langs/zu_dlg.js +85 -0
  128. data/lib/tiny_mce/assets/tiny_mce/plugins/fullscreen/editor_plugin_src.js +6 -3
  129. data/lib/tiny_mce/assets/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -1
  130. data/lib/tiny_mce/assets/tiny_mce/plugins/iespell/editor_plugin_src.js +6 -3
  131. data/lib/tiny_mce/assets/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +6 -3
  132. data/lib/tiny_mce/assets/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +6 -3
  133. data/lib/tiny_mce/assets/tiny_mce/plugins/layer/editor_plugin_src.js +6 -3
  134. data/lib/tiny_mce/assets/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
  135. data/lib/tiny_mce/assets/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +136 -0
  136. data/lib/tiny_mce/assets/tiny_mce/plugins/media/editor_plugin.js +1 -1
  137. data/lib/tiny_mce/assets/tiny_mce/plugins/media/editor_plugin_src.js +10 -7
  138. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/ar_dlg.js +86 -86
  139. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/cs_dlg.js +12 -12
  140. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/fr_dlg.js +15 -15
  141. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/he_dlg.js +24 -24
  142. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/hy_dlg.js +103 -0
  143. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/id_dlg.js +16 -16
  144. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/ii_dlg.js +70 -70
  145. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/ja_dlg.js +91 -91
  146. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/lb_dlg.js +103 -0
  147. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/ps_dlg.js +103 -0
  148. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/ru_dlg.js +88 -88
  149. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/sk_dlg.js +1 -1
  150. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/tr_dlg.js +44 -44
  151. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/uk_dlg.js +24 -24
  152. data/lib/tiny_mce/assets/tiny_mce/plugins/media/langs/zu_dlg.js +103 -0
  153. data/lib/tiny_mce/assets/tiny_mce/plugins/media/media.htm +2 -7
  154. data/lib/tiny_mce/assets/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +6 -3
  155. data/lib/tiny_mce/assets/tiny_mce/plugins/noneditable/editor_plugin_src.js +6 -3
  156. data/lib/tiny_mce/assets/tiny_mce/plugins/pagebreak/editor_plugin_src.js +6 -3
  157. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/editor_plugin.js +1 -1
  158. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/editor_plugin_src.js +509 -111
  159. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/ar_dlg.js +3 -3
  160. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/fr_dlg.js +1 -1
  161. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/he_dlg.js +3 -3
  162. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/hy_dlg.js +5 -0
  163. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/id_dlg.js +2 -2
  164. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/ii_dlg.js +3 -3
  165. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/ja_dlg.js +3 -3
  166. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/lb_dlg.js +5 -0
  167. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/ps_dlg.js +5 -0
  168. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/ru_dlg.js +3 -3
  169. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/tr_dlg.js +3 -3
  170. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/langs/zu_dlg.js +5 -0
  171. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/pastetext.htm +2 -8
  172. data/lib/tiny_mce/assets/tiny_mce/plugins/paste/pasteword.htm +2 -8
  173. data/lib/tiny_mce/assets/tiny_mce/plugins/preview/editor_plugin_src.js +6 -3
  174. data/lib/tiny_mce/assets/tiny_mce/plugins/print/editor_plugin_src.js +6 -3
  175. data/lib/tiny_mce/assets/tiny_mce/plugins/save/editor_plugin_src.js +6 -3
  176. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -1
  177. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/editor_plugin_src.js +7 -4
  178. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/js/searchreplace.js +4 -0
  179. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/ar_dlg.js +14 -14
  180. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/fa_dlg.js +2 -2
  181. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/fr_dlg.js +10 -10
  182. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/he_dlg.js +14 -14
  183. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/hy_dlg.js +16 -0
  184. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/id_dlg.js +13 -13
  185. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/ii_dlg.js +11 -11
  186. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/ja_dlg.js +13 -13
  187. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/lb_dlg.js +16 -0
  188. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/pl_dlg.js +2 -2
  189. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/ps_dlg.js +16 -0
  190. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/ru_dlg.js +8 -8
  191. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/sk_dlg.js +11 -11
  192. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/tr_dlg.js +5 -5
  193. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/langs/zu_dlg.js +16 -0
  194. data/lib/tiny_mce/assets/tiny_mce/plugins/searchreplace/searchreplace.htm +4 -9
  195. data/lib/tiny_mce/assets/tiny_mce/plugins/spellchecker/editor_plugin_src.js +6 -3
  196. data/lib/tiny_mce/assets/tiny_mce/plugins/style/editor_plugin_src.js +6 -3
  197. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/ar_dlg.js +61 -61
  198. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/cs_dlg.js +1 -1
  199. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/fr_dlg.js +4 -4
  200. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/he_dlg.js +56 -56
  201. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/hy_dlg.js +63 -0
  202. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/ii_dlg.js +33 -33
  203. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/ja_dlg.js +59 -59
  204. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/lb_dlg.js +63 -0
  205. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/pl_dlg.js +1 -1
  206. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/ps_dlg.js +63 -0
  207. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/ru_dlg.js +21 -21
  208. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/sk_dlg.js +7 -7
  209. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/th_dlg.js +3 -3
  210. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/tr_dlg.js +18 -18
  211. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/tw_dlg.js +2 -2
  212. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/uk_dlg.js +19 -19
  213. data/lib/tiny_mce/assets/tiny_mce/plugins/style/langs/zu_dlg.js +63 -0
  214. data/lib/tiny_mce/assets/tiny_mce/plugins/style/props.htm +4 -8
  215. data/lib/tiny_mce/assets/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -1
  216. data/lib/tiny_mce/assets/tiny_mce/plugins/tabfocus/editor_plugin_src.js +7 -4
  217. data/lib/tiny_mce/assets/tiny_mce/plugins/table/cell.htm +2 -7
  218. data/lib/tiny_mce/assets/tiny_mce/plugins/table/editor_plugin.js +1 -1
  219. data/lib/tiny_mce/assets/tiny_mce/plugins/table/editor_plugin_src.js +889 -973
  220. data/lib/tiny_mce/assets/tiny_mce/plugins/table/js/cell.js +40 -23
  221. data/lib/tiny_mce/assets/tiny_mce/plugins/table/js/merge_cells.js +18 -20
  222. data/lib/tiny_mce/assets/tiny_mce/plugins/table/js/row.js +47 -22
  223. data/lib/tiny_mce/assets/tiny_mce/plugins/table/js/table.js +17 -8
  224. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/ar_dlg.js +70 -70
  225. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/fr_dlg.js +14 -14
  226. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/he_dlg.js +56 -56
  227. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/hy_dlg.js +74 -0
  228. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/id_dlg.js +25 -25
  229. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/ii_dlg.js +54 -54
  230. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/ja_dlg.js +67 -67
  231. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/lb_dlg.js +74 -0
  232. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/ps_dlg.js +74 -0
  233. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/pt_dlg.js +1 -1
  234. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/ru_dlg.js +47 -47
  235. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/sk_dlg.js +2 -2
  236. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/tr_dlg.js +25 -25
  237. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/uk_dlg.js +22 -22
  238. data/lib/tiny_mce/assets/tiny_mce/plugins/table/langs/zu_dlg.js +74 -0
  239. data/lib/tiny_mce/assets/tiny_mce/plugins/table/merge_cells.htm +3 -8
  240. data/lib/tiny_mce/assets/tiny_mce/plugins/table/row.htm +2 -7
  241. data/lib/tiny_mce/assets/tiny_mce/plugins/table/table.htm +2 -7
  242. data/lib/tiny_mce/assets/tiny_mce/plugins/template/editor_plugin_src.js +6 -3
  243. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/ar_dlg.js +11 -11
  244. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/cs_dlg.js +4 -4
  245. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/es_dlg.js +1 -1
  246. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/fr_dlg.js +2 -2
  247. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/he_dlg.js +7 -7
  248. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/hy_dlg.js +15 -0
  249. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/id_dlg.js +6 -6
  250. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/ii_dlg.js +10 -10
  251. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/ja_dlg.js +11 -11
  252. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/lb_dlg.js +15 -0
  253. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/ps_dlg.js +15 -0
  254. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/ru_dlg.js +9 -9
  255. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/tr_dlg.js +5 -5
  256. data/lib/tiny_mce/assets/tiny_mce/plugins/template/langs/zu_dlg.js +15 -0
  257. data/lib/tiny_mce/assets/tiny_mce/plugins/template/template.htm +2 -8
  258. data/lib/tiny_mce/assets/tiny_mce/plugins/visualchars/editor_plugin_src.js +6 -3
  259. data/lib/tiny_mce/assets/tiny_mce/plugins/wordcount/editor_plugin_src.js +6 -3
  260. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/abbr.htm +3 -10
  261. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/acronym.htm +3 -10
  262. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/attributes.htm +2 -7
  263. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/cite.htm +3 -10
  264. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/del.htm +3 -11
  265. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -1
  266. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +11 -3
  267. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/ins.htm +3 -11
  268. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/js/abbr.js +8 -5
  269. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/js/acronym.js +7 -4
  270. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/js/attributes.js +7 -4
  271. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/js/cite.js +7 -4
  272. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/js/del.js +7 -4
  273. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/js/element_common.js +8 -8
  274. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/js/ins.js +7 -4
  275. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/ar_dlg.js +30 -30
  276. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/cs_dlg.js +2 -2
  277. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/fr_dlg.js +6 -6
  278. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/he_dlg.js +27 -27
  279. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/hy_dlg.js +32 -0
  280. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/id_dlg.js +22 -22
  281. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/ii_dlg.js +14 -14
  282. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/ja_dlg.js +25 -25
  283. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/lb_dlg.js +32 -0
  284. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/pl_dlg.js +3 -3
  285. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/ps_dlg.js +32 -0
  286. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/ru_dlg.js +15 -15
  287. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/sk_dlg.js +2 -2
  288. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/th_dlg.js +5 -5
  289. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/tr_dlg.js +18 -18
  290. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js +9 -9
  291. data/lib/tiny_mce/assets/tiny_mce/plugins/xhtmlxtras/langs/zu_dlg.js +32 -0
  292. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/about.htm +1 -3
  293. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/anchor.htm +2 -7
  294. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/color_picker.htm +1 -3
  295. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/editor_template.js +1 -1
  296. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/editor_template_src.js +166 -169
  297. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/image.htm +2 -7
  298. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/img/icons.gif +0 -0
  299. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/js/anchor.js +7 -7
  300. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/js/charmap.js +10 -0
  301. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/js/image.js +2 -2
  302. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ar.js +59 -61
  303. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ar_dlg.js +49 -49
  304. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/cs.js +1 -1
  305. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/el.js +3 -1
  306. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/es.js +4 -4
  307. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/es_dlg.js +2 -2
  308. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/fa_dlg.js +1 -1
  309. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/fr.js +14 -17
  310. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/fr_dlg.js +17 -17
  311. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/he.js +57 -57
  312. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/he_dlg.js +49 -49
  313. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/hu.js +2 -2
  314. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/hu_dlg.js +4 -4
  315. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/hy.js +62 -0
  316. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/hy_dlg.js +51 -0
  317. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/id.js +5 -5
  318. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/id_dlg.js +13 -13
  319. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ii.js +42 -40
  320. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ii_dlg.js +28 -28
  321. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/it_dlg.js +5 -5
  322. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ja.js +57 -59
  323. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ja_dlg.js +48 -48
  324. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/lb.js +63 -0
  325. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/lb_dlg.js +51 -0
  326. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/pl.js +2 -2
  327. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ps.js +62 -0
  328. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ps_dlg.js +51 -0
  329. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/pt.js +5 -5
  330. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ru.js +28 -28
  331. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/ru_dlg.js +37 -37
  332. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/sk.js +15 -15
  333. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/sk_dlg.js +19 -19
  334. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/th.js +4 -4
  335. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/th_dlg.js +4 -4
  336. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/tr.js +27 -27
  337. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/tr_dlg.js +17 -17
  338. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/tw.js +3 -3
  339. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/uk_dlg.js +6 -6
  340. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/vi.js +17 -17
  341. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/vi_dlg.js +1 -1
  342. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/zu.js +64 -0
  343. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/langs/zu_dlg.js +51 -0
  344. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/link.htm +2 -7
  345. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/skins/default/content.css +6 -3
  346. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/skins/default/dialog.css +4 -3
  347. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/skins/default/ui.css +4 -5
  348. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/skins/o2k7/content.css +6 -3
  349. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/skins/o2k7/dialog.css +3 -2
  350. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/skins/o2k7/ui.css +3 -3
  351. data/lib/tiny_mce/assets/tiny_mce/themes/advanced/source_editor.htm +2 -7
  352. data/lib/tiny_mce/assets/tiny_mce/themes/simple/editor_template_src.js +5 -5
  353. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/ar.js +9 -9
  354. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/he.js +8 -8
  355. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/hu.js +1 -1
  356. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/hy.js +11 -0
  357. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/ii.js +8 -8
  358. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/ja.js +9 -9
  359. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/lb.js +11 -0
  360. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/ps.js +11 -0
  361. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/ru.js +4 -4
  362. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/sk.js +4 -4
  363. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/tr.js +4 -4
  364. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/tw.js +1 -1
  365. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/vi.js +9 -9
  366. data/lib/tiny_mce/assets/tiny_mce/themes/simple/langs/zu.js +11 -0
  367. data/lib/tiny_mce/assets/tiny_mce/tiny_mce.js +1 -1
  368. data/lib/tiny_mce/assets/tiny_mce/tiny_mce_popup.js +1 -1
  369. data/lib/tiny_mce/assets/tiny_mce/tiny_mce_src.js +4684 -4107
  370. data/lib/tiny_mce/assets/tiny_mce/utils/editable_selects.js +5 -4
  371. data/lib/tiny_mce/assets/tiny_mce/utils/form_utils.js +5 -4
  372. data/lib/tiny_mce/assets/tiny_mce/utils/mctabs.js +5 -4
  373. data/lib/tiny_mce/assets/tiny_mce/utils/validate.js +5 -4
  374. data/lib/tiny_mce/base.rb +7 -19
  375. data/lib/tiny_mce/configuration.rb +98 -0
  376. data/lib/tiny_mce/exceptions.rb +14 -0
  377. data/lib/tiny_mce/helpers.rb +13 -49
  378. data/lib/tiny_mce/spell_checker.rb +0 -2
  379. data/lib/tiny_mce/valid_tinymce_options.yml +1 -6
  380. data/test/functional/full_tiny_mce_controller_test.rb +9 -12
  381. data/test/functional/multi_configuration_tiny_mce_controller_test.rb +58 -0
  382. data/test/functional/slim_tiny_mce_controller_test.rb +8 -5
  383. data/test/test_helper.rb +12 -0
  384. data/test/unit/configuration_test.rb +56 -0
  385. data/test/unit/helpers/tiny_mce_helper_test.rb +99 -97
  386. data/test/unit/tiny_mce_test.rb +1 -2
  387. data/tiny_mce.gemspec +79 -10
  388. metadata +88 -11
  389. data/lib/tiny_mce/assets/tiny_mce/plugins/safari/blank.htm +0 -1
  390. data/lib/tiny_mce/assets/tiny_mce/plugins/safari/editor_plugin.js +0 -1
  391. data/lib/tiny_mce/assets/tiny_mce/plugins/safari/editor_plugin_src.js +0 -438
  392. data/lib/tiny_mce/option_validator.rb +0 -35
  393. data/test/unit/options_validator_test.rb +0 -51
@@ -1,5 +1,5 @@
1
1
  tinyMCE.addI18n('sk.media_dlg',{
2
- title:"Vlo\u017Eenie / editovanie vnoren\u00FDch m\u00E9di\u00ED",
2
+ title:"Vlo\u017Eenie/editovanie vnoren\u00FDch m\u00E9di\u00ED",
3
3
  general:"Z\u00E1kladn\u00E9",
4
4
  advanced:"Pokro\u010Dil\u00E9",
5
5
  file:"S\u00FAbor/URL",
@@ -1,103 +1,103 @@
1
1
  tinyMCE.addI18n('tr.media_dlg',{
2
- title:"T\u00FCmle\u015Fik medya ekle/d\u00FCzenle",
2
+ title:"T\u00FCmle\u015Fik medya ekle / d\u00FCzenle",
3
3
  general:"Genel",
4
4
  advanced:"Geli\u015Fmi\u015F",
5
5
  file:"Dosya/URL",
6
- list:"Liste",
6
+ list:"Listele",
7
7
  size:"Boyutlar",
8
8
  preview:"\u00D6nizleme",
9
- constrain_proportions:"Orant\u0131y\u0131 koru",
9
+ constrain_proportions:"Oran\u0131 s\u0131n\u0131rla",
10
10
  type:"Tip",
11
11
  id:"Id",
12
12
  name:"\u0130sim",
13
13
  class_name:"S\u0131n\u0131f",
14
- vspace:"Dik.Bo\u015Fluk",
15
- hspace:"Yty.Bo\u015Fluk",
16
- play:"Oto.\u00C7al",
17
- loop:"D\u00F6ng\u00FC",
18
- menu:"Men\u00FC g\u00F6ster",
14
+ vspace:"Dikey bo\u015Fluk",
15
+ hspace:"Yatay bo\u015Fluk",
16
+ play:"Otomatik oynat",
17
+ loop:"D\u00F6nd\u00FCr",
18
+ menu:"Men\u00FCy\u00FC g\u00F6ster",
19
19
  quality:"Kalite",
20
20
  scale:"\u00D6l\u00E7ek",
21
21
  align:"Hizala",
22
22
  salign:"SHizala",
23
- wmode:"WMode",
23
+ wmode:"WModu",
24
24
  bgcolor:"Arkaplan",
25
25
  base:"Taban",
26
- flashvars:"Flash de\u011Fi\u015F.",
26
+ flashvars:"Flash de\u011Fi\u015Fkeni",
27
27
  liveconnect:"SWLiveConnect",
28
- autohref:"Oto.HREF",
28
+ autohref:"AutoHREF",
29
29
  cache:"\u00D6nbellek",
30
30
  hidden:"Gizli",
31
- controller:"Kontrolc\u00FC",
31
+ controller:"Kontroller",
32
32
  kioskmode:"Kiosk modu",
33
- playeveryframe:"Her \u00E7er\u00E7eveyi \u00E7al",
33
+ playeveryframe:"Her \u00E7er\u00E7eveyi oynat",
34
34
  targetcache:"Hedef \u00F6nbellek",
35
- correction:"D\u00FCzeltmesiz",
36
- enablejavascript:"JavaScript etkin",
37
- starttime:"Ba\u015Flang\u0131c zaman\u0131",
35
+ correction:"D\u00FCzeltme yok",
36
+ enablejavascript:"Javascript Aktif",
37
+ starttime:"Ba\u015Flang\u0131\u00E7 zaman\u0131",
38
38
  endtime:"Biti\u015F zaman\u0131",
39
39
  href:"Href",
40
- qtsrcchokespeed:"T\u0131kanma h\u0131z\u0131",
40
+ qtsrcchokespeed:"S\u0131k\u0131\u015Ft\u0131rma h\u0131z\u0131",
41
41
  target:"Hedef",
42
42
  volume:"Ses d\u00FCzeyi",
43
- autostart:"Oto.ba\u015Flat",
44
- enabled:"Etkin",
43
+ autostart:"Otomatik ba\u015Flat",
44
+ enabled:"Aktif",
45
45
  fullscreen:"Tam ekran",
46
- invokeurls:"\u00C7a\u011Fr\u0131lacak URL'ler",
46
+ invokeurls:"Ba\u015Flatma URL'si",
47
47
  mute:"Sessiz",
48
48
  stretchtofit:"S\u0131\u011Facak \u015Fekilde boyutland\u0131r",
49
49
  windowlessvideo:"Penceresiz video",
50
- balance:"Balans",
51
- baseurl:"Taban URL",
52
- captioningid:"Ba\u015Fl\u0131kland\u0131rma id",
53
- currentmarker:"\u015Eimdiki i\u015Faret\u00E7i",
54
- currentposition:"\u015Eimdiki konum",
50
+ balance:"Denge",
51
+ baseurl:"Ge\u00E7erli URL",
52
+ captioningid:"Ba\u015Fl\u0131k id",
53
+ currentmarker:"Se\u00E7ili i\u015Faret\u00E7i",
54
+ currentposition:"Se\u00E7ili konum",
55
55
  defaultframe:"Varsay\u0131lan \u00E7er\u00E7eve",
56
- playcount:"\u00C7alma say\u0131s\u0131",
56
+ playcount:"Oynatma say\u0131s\u0131",
57
57
  rate:"Oran",
58
58
  uimode:"UI Modu",
59
59
  flash_options:"Flash se\u00E7enekleri",
60
60
  qt_options:"Quicktime se\u00E7enekleri",
61
61
  wmp_options:"Windows media player se\u00E7enekleri",
62
62
  rmp_options:"Real media player se\u00E7enekleri",
63
- shockwave_options:"Shockwave se\u00E7enekleri",
64
- autogotourl:"Otomatik gidilecek URL",
65
- center:"Ortala",
63
+ shockwave_options:"Shockware se\u00E7enekleri",
64
+ autogotourl:"URL'e otomatik git",
65
+ center:"Orta",
66
66
  imagestatus:"Resim durumu",
67
67
  maintainaspect:"Orant\u0131y\u0131 koru",
68
68
  nojava:"Java yok",
69
- prefetch:"\u00D6n-getirme",
69
+ prefetch:"\u00D6n belle\u011Fe al",
70
70
  shuffle:"Kar\u0131\u015Ft\u0131r",
71
71
  console:"Konsol",
72
72
  numloop:"D\u00F6ng\u00FC say\u0131s\u0131",
73
73
  controls:"Kontroller",
74
- scriptcallbacks:"Script \u00E7a\u011Fr\u0131mlar\u0131",
74
+ scriptcallbacks:"Script \u00E7a\u011F\u0131r",
75
75
  swstretchstyle:"Esnetme stili",
76
76
  swstretchhalign:"Esnetme Y-Hiza",
77
77
  swstretchvalign:"Esnetme D-Hiza",
78
78
  sound:"Ses",
79
- progress:"\u0130lerleme",
79
+ progress:"\u0130lerle",
80
80
  qtsrc:"QT Kay.",
81
- qt_stream_warn:"Ak\u0131nt\u0131 rtsp kaynaklar\u0131 geli\u015Fmi\u015F alt\u0131ndaki QT Kay. alan\u0131na girilmeli.\nSrc alan\u0131na ayr\u0131ca ak\u0131nt\u0131l\u0131 olmayan bir s\u00FCr\u00FCm\u00FC de girmelisiniz..",
81
+ qt_stream_warn:"Ak\u0131\u015F rtsp kaynaklar\u0131 geli\u015Fmi\u015F alt\u0131ndaki QT Kay. alan\u0131na girilmeli.\nKay. alan\u0131na ayr\u0131ca ak\u0131\u015Fkan olmayan eklenir.",
82
82
  align_top:"\u00DCst",
83
- align_right:"Sa\u011Fa",
84
- align_bottom:"Alt",
85
- align_left:"Sola",
86
- align_center:"Ortala",
87
- align_top_left:"Sol \u00DCst",
83
+ align_right:"Sa\u011F",
84
+ align_bottom:"Bottom",
85
+ align_left:"Sol",
86
+ align_center:"Orta",
87
+ align_top_left:"Sol \u00FCst",
88
88
  align_top_right:"Sa\u011F \u00FCst",
89
89
  align_bottom_left:"Sol alt",
90
90
  align_bottom_right:"Sa\u011F alt",
91
91
  flv_options:"Flash video se\u00E7enekleri",
92
- flv_scalemode:"Esnetme modu",
92
+ flv_scalemode:"\u00D6l\u00E7ek modu",
93
93
  flv_buffer:"Tampon",
94
- flv_startimage:"Ba\u015Flang\u0131\u00E7 resmi",
94
+ flv_startimage:"Resmi ba\u015Flat",
95
95
  flv_starttime:"Ba\u015Flang\u0131\u00E7 zaman\u0131",
96
96
  flv_defaultvolume:"Varsay\u0131lan ses d\u00FCzeyi",
97
97
  flv_hiddengui:"Gizli GUI",
98
98
  flv_autostart:"Otomatik ba\u015Flat",
99
- flv_loop:"D\u00F6ng\u00FC",
100
- flv_showscalemodes:"\u00D6l\u00E7ek modlar\u0131n\u0131 g\u00F6ster",
101
- flv_smoothvideo:"Video'yu yumu\u015Fat",
102
- flv_jscallback:"JS \u00C7a\u011Fr\u0131mlar\u0131"
99
+ flv_loop:"D\u00F6nd\u00FCr",
100
+ flv_showscalemodes:"\u00D6l\u00E7ek modunu g\u00F6ster",
101
+ flv_smoothvideo:"D\u00FCzg\u00FCn video",
102
+ flv_jscallback:"JS \u00C7e\u011F\u0131r"
103
103
  });
@@ -1,5 +1,5 @@
1
1
  tinyMCE.addI18n('uk.media_dlg',{
2
- title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 embedded media",
2
+ title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043E\u0432\u0430\u043D\u0456 \u043C\u0435\u0434\u0456\u044F",
3
3
  general:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0435",
4
4
  advanced:"\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u043E",
5
5
  file:"\u0424\u0430\u0439\u043B/URL",
@@ -17,18 +17,18 @@ play:"\u0410\u0432\u0442\u043E\u043F\u043B\u0435\u0439",
17
17
  loop:"\u041B\u0443\u043F",
18
18
  menu:"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043C\u0435\u043D\u044E",
19
19
  quality:"\u042F\u043A\u0456\u0441\u0442\u044C",
20
- scale:"Scale",
21
- align:"Align",
22
- salign:"SAlign",
23
- wmode:"WMode",
20
+ scale:"\u041C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043D\u043D\u044F",
21
+ align:"\u0412\u0438\u0440\u0456\u0432\u043D\u044E\u0432\u0430\u043D\u043D\u044F",
22
+ salign:"S-\u0412\u0438\u0440\u0456\u0432\u043D\u044E\u0432\u0430\u043D\u043D\u044F",
23
+ wmode:"W-\u0440\u0435\u0436\u0438\u043C",
24
24
  bgcolor:"\u0424\u043E\u043D",
25
- base:"Base",
26
- flashvars:"Flashvars",
25
+ base:"\u0411\u0430\u0437\u0430",
26
+ flashvars:"Flash-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438",
27
27
  liveconnect:"SWLiveConnect",
28
28
  autohref:"AutoHREF",
29
29
  cache:"\u041A\u0435\u0448",
30
- hidden:"Hidden",
31
- controller:"Controller",
30
+ hidden:"\u041F\u0440\u0438\u0445\u043E\u0432\u0430\u043D\u0438\u0439",
31
+ controller:"\u041A\u043E\u043D\u0442\u0440\u043E\u043B\u0435\u0440",
32
32
  kioskmode:"Kiosk mode",
33
33
  playeveryframe:"Play every frame",
34
34
  targetcache:"Target cache",
@@ -41,11 +41,11 @@ qtsrcchokespeed:"Choke speed",
41
41
  target:"Target",
42
42
  volume:"\u0413\u0443\u0447\u043D\u0456\u0441\u0442\u044C",
43
43
  autostart:"\u0410\u0432\u0442\u043E\u0441\u0442\u0430\u0440\u0442",
44
- enabled:"Enabled",
45
- fullscreen:"Fullscreen",
46
- invokeurls:"Invoke URLs",
47
- mute:"Mute",
48
- stretchtofit:"Stretch to fit",
44
+ enabled:"\u0414\u043E\u0437\u0432\u043E\u043B\u0435\u043D\u0438\u0439",
45
+ fullscreen:"\u041F\u043E\u0432\u043D\u0438\u0439 \u0435\u043A\u0440\u0430\u043D",
46
+ invokeurls:"\u0412\u0438\u043A\u043B\u0438\u043A\u0430\u0442\u0438 URLs",
47
+ mute:"\u0417\u0430\u0433\u043B\u0443\u0448\u0438\u0442\u0438",
48
+ stretchtofit:"\u0417\u043C\u0435\u043D\u0448\u0438\u0442\u0438, \u0449\u043E\u0431 \u0432\u043C\u0456\u0441\u0442\u0438\u043B\u043E\u0441\u044C",
49
49
  windowlessvideo:"Windowless video",
50
50
  balance:"\u0411\u0430\u043B\u0430\u043D\u0441",
51
51
  baseurl:"Base URL",
@@ -79,18 +79,18 @@ sound:"Sound",
79
79
  progress:"Progress",
80
80
  qtsrc:"QT Src",
81
81
  qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",
82
- align_top:"Top",
83
- align_right:"Right",
84
- align_bottom:"Bottom",
85
- align_left:"Left",
86
- align_center:"Center",
87
- align_top_left:"Top left",
88
- align_top_right:"Top right",
89
- align_bottom_left:"Bottom left",
90
- align_bottom_right:"Bottom right",
82
+ align_top:"\u0412\u0435\u0440\u0445",
83
+ align_right:"\u041F\u0440\u0430\u0432\u043E",
84
+ align_bottom:"\u041D\u0438\u0437",
85
+ align_left:"\u041B\u0456\u0432\u043E",
86
+ align_center:"\u0426\u0435\u043D\u0442\u0440",
87
+ align_top_left:"\u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043B\u0456\u0432\u0430",
88
+ align_top_right:"\u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043F\u0440\u0430\u0432\u0430",
89
+ align_bottom_left:"\u0417\u043D\u0438\u0437\u0443 \u0437\u043B\u0456\u0432\u0430",
90
+ align_bottom_right:"\u0417\u043D\u0438\u0437\u0443 \u0437\u043F\u0440\u0430\u0432\u0430",
91
91
  flv_options:"Flash video options",
92
92
  flv_scalemode:"Scale mode",
93
- flv_buffer:"Buffer",
93
+ flv_buffer:"\u0411\u0443\u0444\u0435\u0440",
94
94
  flv_startimage:"Start image",
95
95
  flv_starttime:"Start time",
96
96
  flv_defaultvolume:"Default volumne",
@@ -0,0 +1,103 @@
1
+ tinyMCE.addI18n('zu.media_dlg',{
2
+ title:"\u63D2\u5165/\u7F16\u8F91\u5D4C\u5165\u5A92\u4F53",
3
+ general:"\u4E00\u822C",
4
+ advanced:"\u9AD8\u7EA7",
5
+ file:"\u6587\u4EF6/\u7F51\u5740",
6
+ list:"\u5217\u8868",
7
+ size:"\u5C3A\u5BF8",
8
+ preview:"\u9884\u89C8",
9
+ constrain_proportions:"\u4FDD\u6301\u6BD4\u4F8B",
10
+ type:"\u7C7B\u578B",
11
+ id:"Id",
12
+ name:"\u540D\u79F0",
13
+ class_name:"\u7C7B\u578B",
14
+ vspace:"\u6C34\u51C6\u95F4\u8DDD",
15
+ hspace:"\u5782\u76F4\u95F4\u8DDD",
16
+ play:"\u81EA\u52A8\u64AD\u653E",
17
+ loop:"\u56DE\u5708\u64AD\u653E",
18
+ menu:"\u663E\u793A\u529F\u80FD\u8868",
19
+ quality:"\u54C1\u8D28",
20
+ scale:"\u6BD4\u4F8B",
21
+ align:"\u5BF9\u9F50",
22
+ salign:"SAlign",
23
+ wmode:"\u89C6\u7A97\u6A21\u5F0F",
24
+ bgcolor:"\u80CC\u666F\u8272",
25
+ base:"\u57FA\u5E95",
26
+ flashvars:"\u53C2\u6570",
27
+ liveconnect:"SWLiveConnect",
28
+ autohref:"\u81EA\u52A8HREF",
29
+ cache:"\u7F13\u5B58",
30
+ hidden:"\u9690\u85CF",
31
+ controller:"\u63A7\u5236\u53F0",
32
+ kioskmode:"Kiosk\u6A21\u5F0F",
33
+ playeveryframe:"\u64AD\u653E\u6BCF\u4E00\u5E27",
34
+ targetcache:"\u76EE\u6807\u7F13\u5B58",
35
+ correction:"\u6CA1\u6709\u4FEE\u6B63",
36
+ enablejavascript:"\u542F\u7528JavaScript",
37
+ starttime:"\u5F00\u59CB\u65F6\u95F4",
38
+ endtime:"\u7ED3\u675F\u65F6\u95F4",
39
+ href:"\u8FDE\u7ED3",
40
+ qtsrcchokespeed:"Choke speed",
41
+ target:"\u76EE\u6807",
42
+ volume:"\u97F3\u91CF",
43
+ autostart:"\u81EA\u52A8\u5F00\u59CB",
44
+ enabled:"\u542F\u7528",
45
+ fullscreen:"\u5168\u5C4F",
46
+ invokeurls:"\u76F8\u5173URLs",
47
+ mute:"\u9759\u97F3",
48
+ stretchtofit:"\u62C9\u4F38",
49
+ windowlessvideo:"\u65E0\u8FB9\u6846",
50
+ balance:"\u5E73\u8861",
51
+ baseurl:"\u57FA\u51C6URL",
52
+ captioningid:"Captioning id",
53
+ currentmarker:"\u5F53\u524D\u6807\u8BB0",
54
+ currentposition:"\u5F53\u524D\u4F4D\u7F6E",
55
+ defaultframe:"\u9ED8\u8BA4\u5E27",
56
+ playcount:"\u64AD\u653E\u8BA1\u6570",
57
+ rate:"\u5E27\u7387",
58
+ uimode:"\u9762\u677F\u6A21\u5F0F",
59
+ flash_options:"Flash\u9009\u9879",
60
+ qt_options:"Quicktime\u9009\u9879",
61
+ wmp_options:"Windows media player\u9009\u9879",
62
+ rmp_options:"Real media player\u9009\u9879",
63
+ shockwave_options:"Shockwave\u9009\u9879",
64
+ autogotourl:"\u81EA\u52A8\u8F6C\u5230URL",
65
+ center:"\u4E2D\u5FC3",
66
+ imagestatus:"\u56FE\u50CF\u72B6\u6001",
67
+ maintainaspect:"Maintain aspect",
68
+ nojava:"No java",
69
+ prefetch:"\u9884\u8BFB\u53D6",
70
+ shuffle:"Shuffle",
71
+ console:"\u63A7\u5236\u53F0",
72
+ numloop:"\u56DE\u5708\u6B21\u6570",
73
+ controls:"\u63A7\u5236\u5668",
74
+ scriptcallbacks:"\u811A\u672C\u56DE\u6863",
75
+ swstretchstyle:"\u62C9\u5347\u6A21\u5F0F",
76
+ swstretchhalign:"\u6C34\u51C6\u62C9\u5347",
77
+ swstretchvalign:"\u5782\u76F4\u62C9\u5347",
78
+ sound:"\u58F0\u97F3",
79
+ progress:"\u8FDB\u5EA6",
80
+ qtsrc:"QT Src",
81
+ qt_stream_warn:"\u6D41\u5F0Frtsp\u8D44\u6E90\u5E94\u8BE5\u6DFB\u52A0\u5230\u201C\u9AD8\u7EA7\u201D\u4E2DQT Src\u3002\n\u540C\u65F6\u6DFB\u52A0\u975E\u6D41\u5F0F\u8D44\u6E90\u5230Src\u3002",
82
+ align_top:"\u4E0A\u65B9",
83
+ align_right:"\u9760\u53F3",
84
+ align_bottom:"\u4E0B\u65B9",
85
+ align_left:"\u9760\u5DE6",
86
+ align_center:"\u4E2D\u95F4",
87
+ align_top_left:"\u5DE6\u4E0A",
88
+ align_top_right:"\u53F3\u4E0A",
89
+ align_bottom_left:"\u5DE6\u4E0B",
90
+ align_bottom_right:"\u53F3\u4E0B",
91
+ flv_options:"Flash\u89C6\u9891\u9009\u9879",
92
+ flv_scalemode:"Scale mode",
93
+ flv_buffer:"\u7F13\u51B2",
94
+ flv_startimage:"\u5F00\u59CB\u753B\u9762",
95
+ flv_starttime:"\u5F00\u59CB\u65F6\u95F4",
96
+ flv_defaultvolume:"\u9884\u8BBE\u97F3\u91CF",
97
+ flv_hiddengui:"\u9690\u85CFGUI",
98
+ flv_autostart:"\u81EA\u52A8\u64AD\u653E",
99
+ flv_loop:"\u56DE\u5708",
100
+ flv_showscalemodes:"Show scale modes",
101
+ flv_smoothvideo:"\u5E73\u6ED1\u56FE\u50CF",
102
+ flv_jscallback:"JS\u56DE\u6863"
103
+ });
@@ -809,13 +809,8 @@
809
809
  </div>
810
810
 
811
811
  <div class="mceActionPanel">
812
- <div style="float: left">
813
- <input type="submit" id="insert" name="insert" value="{#insert}" />
814
- </div>
815
-
816
- <div style="float: right">
817
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
818
- </div>
812
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
813
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
819
814
  </div>
820
815
  </form>
821
816
  </body>
@@ -1,8 +1,11 @@
1
1
  /**
2
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z 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() {
@@ -1,8 +1,11 @@
1
1
  /**
2
- * $Id: editor_plugin_src.js 743 2008-03-23 17:47:33Z 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() {
@@ -1,8 +1,11 @@
1
1
  /**
2
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z 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() {
@@ -1 +1 @@
1
- (function(){var a=tinymce.each;tinymce.create("tinymce.plugins.PastePlugin",{init:function(c,d){var e=this,b;e.editor=c;e.url=d;e.onPreProcess=new tinymce.util.Dispatcher(e);e.onPostProcess=new tinymce.util.Dispatcher(e);e.onPreProcess.add(e._preProcess);e.onPostProcess.add(e._postProcess);e.onPreProcess.add(function(h,i){c.execCallback("paste_preprocess",h,i)});e.onPostProcess.add(function(h,i){c.execCallback("paste_postprocess",h,i)});function g(i){var h=c.dom;e.onPreProcess.dispatch(e,i);i.node=h.create("div",0,i.content);e.onPostProcess.dispatch(e,i);i.content=c.serializer.serialize(i.node,{getInner:1});if(/<(p|h[1-6]|ul|ol)/.test(i.content)){e._insertBlockContent(c,h,i.content)}else{e._insert(i.content)}}c.addCommand("mceInsertClipboardContent",function(h,i){g(i)});function f(l){var p,k,i,j=c.selection,o=c.dom,h=c.getBody(),m;if(o.get("_mcePaste")){return}p=o.add(h,"div",{id:"_mcePaste"},"\uFEFF");if(h!=c.getDoc().body){m=o.getPos(c.selection.getStart(),h).y}else{m=h.scrollTop}o.setStyles(p,{position:"absolute",left:-10000,top:m,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){i=o.doc.body.createTextRange();i.moveToElementText(p);i.execCommand("Paste");o.remove(p);if(p.innerHTML==="\uFEFF"){c.execCommand("mcePasteWord");l.preventDefault();return}g({content:p.innerHTML});return tinymce.dom.Event.cancel(l)}else{k=c.selection.getRng();p=p.firstChild;i=c.getDoc().createRange();i.setStart(p,0);i.setEnd(p,1);j.setRng(i);window.setTimeout(function(){var q="",n=o.select("div[id=_mcePaste]");a(n,function(r){q+=(o.select("> span.Apple-style-span div",r)[0]||o.select("> span.Apple-style-span",r)[0]||r).innerHTML});a(n,function(r){o.remove(r)});if(k){j.setRng(k)}g({content:q})},0)}}if(c.getParam("paste_auto_cleanup_on_paste",true)){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){c.onKeyDown.add(function(h,i){if(((tinymce.isMac?i.metaKey:i.ctrlKey)&&i.keyCode==86)||(i.shiftKey&&i.keyCode==45)){f(i)}})}else{c.onPaste.addToTop(function(h,i){return f(i)})}}if(c.getParam("paste_block_drop")){c.onInit.add(function(){c.dom.bind(c.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(h){h.preventDefault();h.stopPropagation();return false})})}e._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(d,i){var b=this.editor,c=i.content,g,f;function g(h){a(h,function(j){if(j.constructor==RegExp){c=c.replace(j,"")}else{c=c.replace(j[0],j[1])}})}if(/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(c)||i.wordContent){i.wordContent=true;g([/^\s*(&nbsp;)+/g,/(&nbsp;|<br[^>]*>)+\s*$/g]);if(b.getParam("paste_convert_middot_lists",true)){g([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+:\s*symbol[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<span[^>]+mso-list:[^>]+>)/gi,"$1__MCE_ITEM__"]])}g([/<!--[\s\S]+?-->/gi,/<\/?(img|font|meta|link|style|div|v:\w+)[^>]*>/gi,/<\\?\?xml[^>]*>/gi,/<\/?o:[^>]*>/gi,/ (id|name|language|type|on\w+|v:\w+)=\"([^\"]*)\"/gi,/ (id|name|language|type|on\w+|v:\w+)=(\w+)/gi,[/<(\/?)s>/gi,"<$1strike>"],/<script[^>]+>[\s\S]*?<\/script>/gi,[/&nbsp;/g,"\u00a0"]]);if(!b.getParam("paste_retain_style_properties")){g([/<\/?(span)[^>]*>/gi])}}f=b.getParam("paste_strip_class_attributes");if(f!="none"){function e(l,h){var k,j="";if(f=="all"){return""}h=tinymce.explode(h," ");for(k=h.length-1;k>=0;k--){if(!/^(Mso)/i.test(h[k])){j+=(!j?"":" ")+h[k]}}return' class="'+j+'"'}g([[/ class=\"([^\"]*)\"/gi,e],[/ class=(\w+)/gi,e]])}if(b.getParam("paste_remove_spans")){g([/<\/?(span)[^>]*>/gi])}i.content=c},_postProcess:function(e,g){var d=this,c=d.editor,f=c.dom,b;if(g.wordContent){a(f.select("a",g.node),function(h){if(!h.href||h.href.indexOf("#_Toc")!=-1){f.remove(h,1)}});if(d.editor.getParam("paste_convert_middot_lists",true)){d._convertLists(e,g)}b=c.getParam("paste_retain_style_properties");if(tinymce.is(b,"string")){b=tinymce.explode(b)}a(f.select("*",g.node),function(l){var m={},j=0,k,n,h;if(b){for(k=0;k<b.length;k++){n=b[k];h=f.getStyle(l,n);if(h){m[n]=h;j++}}}f.setAttrib(l,"style","");if(b&&j>0){f.setStyles(l,m)}else{if(l.nodeName=="SPAN"&&!l.className){f.remove(l,true)}}})}if(c.getParam("paste_remove_styles")||(c.getParam("paste_remove_styles_if_webkit")&&tinymce.isWebKit)){a(f.select("*[style]",g.node),function(h){h.removeAttribute("style");h.removeAttribute("mce_style")})}else{if(tinymce.isWebKit){a(f.select("*",g.node),function(h){h.removeAttribute("mce_style")})}}},_convertLists:function(e,c){var g=e.editor.dom,f,j,b=-1,d,k=[],i,h;a(g.select("p",c.node),function(r){var n,s="",q,o,l,m;for(n=r.firstChild;n&&n.nodeType==3;n=n.nextSibling){s+=n.nodeValue}s=r.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(s)){q="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(s)){q="ol"}if(q){d=parseFloat(r.style.marginLeft||0);if(d>b){k.push(d)}if(!f||q!=i){f=g.create(q);g.insertAfter(f,r)}else{if(d>b){f=j.appendChild(g.create(q))}else{if(d<b){l=tinymce.inArray(k,d);m=g.getParents(f.parentNode,q);f=m[m.length-1-l]||f}}}a(g.select("span",r),function(t){var p=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(q=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){g.remove(t)}else{if(/^[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){g.remove(t)}}});o=r.innerHTML;if(q=="ul"){o=r.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*(&nbsp;|\u00a0)+\s*/,"")}else{o=r.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}j=f.appendChild(g.create("li",0,o));g.remove(r);b=d;i=q}else{f=b=0}});h=c.node.innerHTML;if(h.indexOf("__MCE_ITEM__")!=-1){c.node.innerHTML=h.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(h,e,i){var c,g,d=h.selection,m,j,b,k,f;function l(p){var o;if(tinymce.isIE){o=h.getDoc().body.createTextRange();o.moveToElementText(p);o.collapse(false);o.select()}else{d.select(p,1);d.collapse(false)}}this._insert('<span id="_marker">&nbsp;</span>',1);g=e.get("_marker");c=e.getParent(g,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(c&&!/TD|TH/.test(c.nodeName)){g=e.split(c,g);a(e.create("div",0,i).childNodes,function(o){m=g.parentNode.insertBefore(o.cloneNode(true),g)});l(m)}else{e.setOuterHTML(g,i);d.select(h.getBody(),1);d.collapse(0)}e.remove("_marker");j=d.getStart();b=e.getViewPort(h.getWin());k=h.dom.getPos(j).y;f=j.clientHeight;if(k<b.y||k+f>b.y+b.h){h.getDoc().body.scrollTop=k<b.y?k:k-b.h+25}},_insert:function(d,b){var c=this.editor;if(!c.selection.isCollapsed()){c.getDoc().execCommand("Delete",false,null)}c.execCommand(tinymce.isGecko?"insertHTML":"mceInsertContent",false,d,{skip_undo:b})},_legacySupport:function(){var c=this,b=c.editor;a(["mcePasteText","mcePasteWord"],function(d){b.addCommand(d,function(){b.windowManager.open({file:c.url+(d=="mcePasteText"?"/pastetext.htm":"/pasteword.htm"),width:parseInt(b.getParam("paste_dialog_width","450")),height:parseInt(b.getParam("paste_dialog_height","400")),inline:1})})});b.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});b.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"});b.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
1
+ (function(){var c=tinymce.each,d=null,a={paste_auto_cleanup_on_paste:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_notifyalways:false,paste_text_linebreaktype:"p",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(e,f){return e.getParam(f,a[f])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(e,f){var g=this;g.editor=e;g.url=f;g.onPreProcess=new tinymce.util.Dispatcher(g);g.onPostProcess=new tinymce.util.Dispatcher(g);g.onPreProcess.add(g._preProcess);g.onPostProcess.add(g._postProcess);g.onPreProcess.add(function(j,k){e.execCallback("paste_preprocess",j,k)});g.onPostProcess.add(function(j,k){e.execCallback("paste_postprocess",j,k)});e.pasteAsPlainText=false;function i(l,j){var k=e.dom;g.onPreProcess.dispatch(g,l);l.node=k.create("div",0,l.content);g.onPostProcess.dispatch(g,l);l.content=e.serializer.serialize(l.node,{getInner:1});if((!j)&&(e.pasteAsPlainText)){g._insertPlainText(e,k,l.content);if(!b(e,"paste_text_sticky")){e.pasteAsPlainText=false;e.controlManager.setActive("pastetext",false)}}else{if(/<(p|h[1-6]|ul|ol)/.test(l.content)){g._insertBlockContent(e,k,l.content)}else{g._insert(l.content)}}}e.addCommand("mceInsertClipboardContent",function(j,k){i(k,true)});if(!b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(k,j){var l=tinymce.util.Cookie;e.pasteAsPlainText=!e.pasteAsPlainText;e.controlManager.setActive("pastetext",e.pasteAsPlainText);if((e.pasteAsPlainText)&&(!l.get("tinymcePasteText"))){if(b(e,"paste_text_sticky")){e.windowManager.alert("Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.")}else{e.windowManager.alert("Paste is now in plain text mode. Click again to toggle back to regular paste mode.")}if(!b(e,"paste_text_notifyalways")){l.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}e.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});e.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function h(s){var m,q,k,l=e.selection,p=e.dom,r=e.getBody(),j;if(p.get("_mcePaste")){return}m=p.add(r,"div",{id:"_mcePaste","class":"mcePaste"},"\uFEFF");if(r!=e.getDoc().body){j=p.getPos(e.selection.getStart(),r).y}else{j=r.scrollTop}p.setStyles(m,{position:"absolute",left:-10000,top:j,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){k=p.doc.body.createTextRange();k.moveToElementText(m);k.execCommand("Paste");p.remove(m);if(m.innerHTML==="\uFEFF"){e.execCommand("mcePasteWord");s.preventDefault();return}i({content:m.innerHTML});return tinymce.dom.Event.cancel(s)}else{function o(n){n.preventDefault()}p.bind(e.getDoc(),"mousedown",o);p.bind(e.getDoc(),"keydown",o);q=e.selection.getRng();m=m.firstChild;k=e.getDoc().createRange();k.setStart(m,0);k.setEnd(m,1);l.setRng(k);window.setTimeout(function(){var t="",n=p.select("div.mcePaste");c(n,function(u){c(p.select("div.mcePaste",u),function(v){p.remove(v,1)});t+=(p.select("> span.Apple-style-span div",u)[0]||p.select("> span.Apple-style-span",u)[0]||u).innerHTML});c(n,function(u){p.remove(u)});if(q){l.setRng(q)}i({content:t});p.unbind(e.getDoc(),"mousedown",o);p.unbind(e.getDoc(),"keydown",o)},0)}}if(b(e,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){e.onKeyDown.add(function(j,k){if(((tinymce.isMac?k.metaKey:k.ctrlKey)&&k.keyCode==86)||(k.shiftKey&&k.keyCode==45)){h(k)}})}else{e.onPaste.addToTop(function(j,k){return h(k)})}}if(b(e,"paste_block_drop")){e.onInit.add(function(){e.dom.bind(e.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(j){j.preventDefault();j.stopPropagation();return false})})}g._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(i,f){var l=this.editor,k=f.content,q=tinymce.grep,p=tinymce.explode,g=tinymce.trim,m,j;function e(h){c(h,function(o){if(o.constructor==RegExp){k=k.replace(o,"")}else{k=k.replace(o[0],o[1])}})}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(k)||f.wordContent){f.wordContent=true;e([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(l,"paste_convert_headers_to_strong")){k=k.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(l,"paste_convert_middot_lists")){e([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"]])}e([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{m=k.length;k=k.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(m!=k.length);if(b(l,"paste_retain_style_properties").replace(/^none$/i,"").length==0){k=k.replace(/<\/?span[^>]*>/gi,"")}else{e([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(u,h,t){var v=[],o=0,r=p(g(t).replace(/&quot;/gi,"'"),";");c(r,function(s){var w,y,z=p(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":v[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":v[o++]="text-align:"+y;return;case"vert-align":v[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":v[o++]="color:"+y;return;case"mso-background":case"mso-highlight":v[o++]="background:"+y;return;case"mso-default-height":v[o++]="min-height:"+x(y);return;case"mso-default-width":v[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":v[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){v[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){v[o++]="display:none"}return}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(w)){return}v[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+v.join(";")+'"'}else{return h}}]])}}if(b(l,"paste_convert_headers_to_strong")){e([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}j=b(l,"paste_strip_class_attributes");if(j!=="none"){function n(r,o){if(j==="all"){return""}var h=q(p(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(s){return(/^(?!mso)/i.test(s))});return h.length?' class="'+h.join(" ")+'"':""}k=k.replace(/ class="([^"]+)"/gi,n);k=k.replace(/ class=(\w+)/gi,n)}if(b(l,"paste_remove_spans")){k=k.replace(/<\/?span[^>]*>/gi,"")}f.content=k},_postProcess:function(h,j){var g=this,f=g.editor,i=f.dom,e;if(j.wordContent){c(i.select("a",j.node),function(k){if(!k.href||k.href.indexOf("#_Toc")!=-1){i.remove(k,1)}});if(b(f,"paste_convert_middot_lists")){g._convertLists(h,j)}e=b(f,"paste_retain_style_properties");if((tinymce.is(e,"string"))&&(e!=="all")&&(e!=="*")){e=tinymce.explode(e.replace(/^none$/i,""));c(i.select("*",j.node),function(n){var o={},l=0,m,p,k;if(e){for(m=0;m<e.length;m++){p=e[m];k=i.getStyle(n,p);if(k){o[p]=k;l++}}}i.setAttrib(n,"style","");if(e&&l>0){i.setStyles(n,o)}else{if(n.nodeName=="SPAN"&&!n.className){i.remove(n,true)}}})}}if(b(f,"paste_remove_styles")||(b(f,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(i.select("*[style]",j.node),function(k){k.removeAttribute("style");k.removeAttribute("_mce_style")})}else{if(tinymce.isWebKit){c(i.select("*",j.node),function(k){k.removeAttribute("_mce_style")})}}},_convertLists:function(h,f){var j=h.editor.dom,i,m,e=-1,g,n=[],l,k;c(j.select("p",f.node),function(u){var r,v="",t,s,o,q;for(r=u.firstChild;r&&r.nodeType==3;r=r.nextSibling){v+=r.nodeValue}v=u.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(v)){t="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(v)){t="ol"}if(t){g=parseFloat(u.style.marginLeft||0);if(g>e){n.push(g)}if(!i||t!=l){i=j.create(t);j.insertAfter(i,u)}else{if(g>e){i=m.appendChild(j.create(t))}else{if(g<e){o=tinymce.inArray(n,g);q=j.getParents(i.parentNode,t);i=q[q.length-1-o]||i}}}c(j.select("span",u),function(w){var p=w.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(t=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){j.remove(w)}else{if(/^[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){j.remove(w)}}});s=u.innerHTML;if(t=="ul"){s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*(&nbsp;|\u00a0)+\s*/,"")}else{s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}m=i.appendChild(j.create("li",0,s));j.remove(u);e=g;l=t}else{i=e=0}});k=f.node.innerHTML;if(k.indexOf("__MCE_ITEM__")!=-1){f.node.innerHTML=k.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(l,h,m){var f,j,g=l.selection,q,n,e,o,i,k="mce_marker";function p(t){var s;if(tinymce.isIE){s=l.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(false);s.select()}else{g.select(t,1);g.collapse(false)}}this._insert('<span id="'+k+'">&nbsp;</span>',1);j=h.get(k);f=h.getParent(j,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(f&&!/TD|TH/.test(f.nodeName)){j=h.split(f,j);c(h.create("div",0,m).childNodes,function(r){q=j.parentNode.insertBefore(r.cloneNode(true),j)});p(q)}else{h.setOuterHTML(j,m);g.select(l.getBody(),1);g.collapse(0)}while(n=h.get(k)){h.remove(n)}n=g.getStart();e=h.getViewPort(l.getWin());o=l.dom.getPos(n).y;i=n.clientHeight;if(o<e.y||o+i>e.y+e.h){l.getDoc().body.scrollTop=o<e.y?o:o-e.h+25}},_insert:function(g,e){var f=this.editor;if(!f.selection.isCollapsed()){f.getDoc().execCommand("Delete",false,null)}f.execCommand(tinymce.isGecko?"insertHTML":"mceInsertContent",false,g,{skip_undo:e})},_insertPlainText:function(j,x,v){var t,u,l,k,r,e,p,f,n=j.getWin(),z=j.getDoc(),s=j.selection,m=tinymce.is,y=tinymce.inArray,g=b(j,"paste_text_linebreaktype"),o=b(j,"paste_text_replacements");function q(h){c(h,function(i){if(i.constructor==RegExp){v=v.replace(i,"")}else{v=v.replace(i[0],i[1])}})}if((typeof(v)==="string")&&(v.length>0)){if(!d){d=("34,quot,38,amp,39,apos,60,lt,62,gt,"+j.serializer.settings.entities).split(",")}if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(v)){q([/[\n\r]+/g])}else{q([/\r+/g])}q([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/&(#\d+|[a-z0-9]{1,10});/gi,function(i,h){if(h.charAt(0)==="#"){return String.fromCharCode(h.slice(1))}else{return((i=y(d,h))>0)?String.fromCharCode(d[i-1]):" "}}],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.encode(v);if(!s.isCollapsed()){z.execCommand("Delete",false,null)}if(m(o,"array")||(m(o,"array"))){q(o)}else{if(m(o,"string")){q(new RegExp(o,"gi"))}}if(g=="none"){q([[/\n+/g," "]])}else{if(g=="br"){q([[/\n/g,"<br />"]])}else{q([/^\s+|\s+$/g,[/\n\n/g,"</p><p>"],[/\n/g,"<br />"]])}}if((l=v.indexOf("</p><p>"))!=-1){k=v.lastIndexOf("</p><p>");r=s.getNode();e=[];do{if(r.nodeType==1){if(r.nodeName=="TD"||r.nodeName=="BODY"){break}e[e.length]=r}}while(r=r.parentNode);if(e.length>0){p=v.substring(0,l);f="";for(t=0,u=e.length;t<u;t++){p+="</"+e[t].nodeName.toLowerCase()+">";f+="<"+e[e.length-t-1].nodeName.toLowerCase()+">"}if(l==k){v=p+f+v.substring(l+7)}else{v=p+v.substring(l+4,k+4)+f+v.substring(k+7)}}}j.execCommand("mceInsertRawHTML",false,v+'<span id="_plain_text_marker">&nbsp;</span>');window.setTimeout(function(){var h=x.get("_plain_text_marker"),B,i,A,w;s.select(h,false);z.execCommand("Delete",false,null);h=null;B=s.getStart();i=x.getViewPort(n);A=x.getPos(B).y;w=B.clientHeight;if((A<i.y)||(A+w>i.y+i.h)){z.body.scrollTop=A<i.y?A:A-i.h+25}},0)}},_legacySupport:function(){var f=this,e=f.editor;e.addCommand("mcePasteWord",function(){e.windowManager.open({file:f.url+"/pasteword.htm",width:parseInt(b(e,"paste_dialog_width")),height:parseInt(b(e,"paste_dialog_height")),inline:1})});if(b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(){e.windowManager.open({file:f.url+"/pastetext.htm",width:parseInt(b(e,"paste_dialog_width")),height:parseInt(b(e,"paste_dialog_height")),inline:1})})}e.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
@@ -1,16 +1,46 @@
1
1
  /**
2
- * $Id: editor_plugin_src.js 1225 2009-09-07 19:06:19Z 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,18 +83,51 @@
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("Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.");
117
+ } else {
118
+ ed.windowManager.alert("Paste is now in plain text mode. Click again to toggle back to regular paste mode.");
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
@@ -71,7 +138,7 @@
71
138
  return;
72
139
 
73
140
  // Create container to paste into
74
- n = dom.add(body, 'div', {id : '_mcePaste'}, '\uFEFF');
141
+ n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste'}, '\uFEFF');
75
142
 
76
143
  // If contentEditable mode we need to find out the position of the closest element
77
144
  if (body != ed.getDoc().body)
@@ -112,6 +179,14 @@
112
179
  // Block the real paste event
113
180
  return tinymce.dom.Event.cancel(e);
114
181
  } else {
182
+ function block(e) {
183
+ e.preventDefault();
184
+ };
185
+
186
+ // Block mousedown and click to prevent selection change
187
+ dom.bind(ed.getDoc(), 'mousedown', block);
188
+ dom.bind(ed.getDoc(), 'keydown', block);
189
+
115
190
  or = ed.selection.getRng();
116
191
 
117
192
  // Move caret into hidden div
@@ -123,10 +198,16 @@
123
198
 
124
199
  // Wait a while and grab the pasted contents
125
200
  window.setTimeout(function() {
126
- var h = '', nl = dom.select('div[id=_mcePaste]');
201
+ var h = '', nl = dom.select('div.mcePaste');
127
202
 
128
203
  // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string
129
204
  each(nl, function(n) {
205
+ // WebKit duplicates the divs so we need to remove them
206
+ each(dom.select('div.mcePaste', n), function(n) {
207
+ dom.remove(n, 1);
208
+ });
209
+
210
+ // Contents in WebKit is sometimes wrapped in a apple style span so we need to grab it from that one
130
211
  h += (dom.select('> span.Apple-style-span div', n)[0] || dom.select('> span.Apple-style-span', n)[0] || n).innerHTML;
131
212
  });
132
213
 
@@ -140,12 +221,16 @@
140
221
  sel.setRng(or);
141
222
 
142
223
  process({content : h});
224
+
225
+ // Unblock events ones we got the contents
226
+ dom.unbind(ed.getDoc(), 'mousedown', block);
227
+ dom.unbind(ed.getDoc(), 'keydown', block);
143
228
  }, 0);
144
229
  }
145
- };
230
+ }
146
231
 
147
232
  // Check if we should use the new auto process method
148
- if (ed.getParam('paste_auto_cleanup_on_paste', true)) {
233
+ if (getParam(ed, "paste_auto_cleanup_on_paste")) {
149
234
  // Is it's Opera or older FF use key handler
150
235
  if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
151
236
  ed.onKeyDown.add(function(ed, e) {
@@ -161,7 +246,7 @@
161
246
  }
162
247
 
163
248
  // Block all drag/drop events
164
- if (ed.getParam('paste_block_drop')) {
249
+ if (getParam(ed, "paste_block_drop")) {
165
250
  ed.onInit.add(function() {
166
251
  ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {
167
252
  e.preventDefault();
@@ -187,10 +272,15 @@
187
272
  },
188
273
 
189
274
  _preProcess : function(pl, o) {
190
- var ed = this.editor, h = o.content, process, stripClass;
191
-
192
275
  //console.log('Before preprocess:' + o.content);
193
276
 
277
+ var ed = this.editor,
278
+ h = o.content,
279
+ grep = tinymce.grep,
280
+ explode = tinymce.explode,
281
+ trim = tinymce.trim,
282
+ len, stripClass;
283
+
194
284
  function process(items) {
195
285
  each(items, function(v) {
196
286
  // Remove or replace
@@ -199,81 +289,203 @@
199
289
  else
200
290
  h = h.replace(v[0], v[1]);
201
291
  });
202
- };
292
+ }
203
293
 
204
294
  // 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
295
+ if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {
296
+ o.wordContent = true; // Mark the pasted contents as word specific content
207
297
  //console.log('Word contents detected.');
208
298
 
209
299
  // Process away some basic content
210
300
  process([
211
- /^\s*(&nbsp;)+/g, // nbsp entities at the start of contents
212
- /(&nbsp;|<br[^>]*>)+\s*$/g // nbsp entities at the end of contents
301
+ /^\s*(&nbsp;)+/gi, // &nbsp; entities at the start of contents
302
+ /(&nbsp;|<br[^>]*>)+\s*$/gi // &nbsp; entities at the end of contents
213
303
  ]);
214
304
 
215
- if (ed.getParam('paste_convert_middot_lists', true)) {
305
+ if (getParam(ed, "paste_convert_headers_to_strong")) {
306
+ h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");
307
+ }
308
+
309
+ if (getParam(ed, "paste_convert_middot_lists")) {
216
310
  process([
217
- [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker
218
- [/(<span[^>]+:\s*symbol[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert symbol spans to list items
219
- [/(<span[^>]+mso-list:[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list to item marker
311
+ [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker
312
+ [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol spans to item markers
220
313
  ]);
221
314
  }
222
315
 
223
316
  process([
224
- /<!--[\s\S]+?-->/gi, // Word comments
225
- /<\/?(img|font|meta|link|style|div|v:\w+)[^>]*>/gi, // Remove some tags including VML content
226
- /<\\?\?xml[^>]*>/gi, // XML namespace declarations
227
- /<\/?o:[^>]*>/gi, // MS namespaced elements <o:tag>
228
- / (id|name|language|type|on\w+|v:\w+)=\"([^\"]*)\"/gi, // on.., class, style and language attributes with quotes
229
- / (id|name|language|type|on\w+|v:\w+)=(\w+)/gi, // on.., class, style and language attributes without quotes (IE)
230
- [/<(\/?)s>/gi, '<$1strike>'], // Convert <s> into <strike> for line-though
231
- /<script[^>]+>[\s\S]*?<\/script>/gi, // All scripts elements for msoShowComment for example
232
- [/&nbsp;/g, '\u00a0'] // Replace nsbp entites to char since it's easier to handle
317
+ // Word comments like conditional comments etc
318
+ /<!--[\s\S]+?-->/gi,
319
+
320
+ // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags
321
+ /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,
322
+
323
+ // Convert <s> into <strike> for line-though
324
+ [/<(\/?)s>/gi, "<$1strike>"],
325
+
326
+ // Replace nsbp entites to char since it's easier to handle
327
+ [/&nbsp;/gi, "\u00a0"]
233
328
  ]);
234
329
 
330
+ // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.
331
+ // 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.
332
+ do {
333
+ len = h.length;
334
+ h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");
335
+ } while (len != h.length);
336
+
235
337
  // Remove all spans if no styles is to be retained
236
- if (!ed.getParam('paste_retain_style_properties')) {
338
+ if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {
339
+ h = h.replace(/<\/?span[^>]*>/gi, "");
340
+ } else {
341
+ // We're keeping styles, so at least clean them up.
342
+ // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx
343
+
237
344
  process([
238
- /<\/?(span)[^>]*>/gi
345
+ // Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length
346
+ [/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,
347
+ function(str, spaces) {
348
+ return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";
349
+ }
350
+ ],
351
+
352
+ // Examine all styles: delete junk, transform some, and keep the rest
353
+ [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,
354
+ function(str, tag, style) {
355
+ var n = [],
356
+ i = 0,
357
+ s = explode(trim(style).replace(/&quot;/gi, "'"), ";");
358
+
359
+ // Examine each style definition within the tag's style attribute
360
+ each(s, function(v) {
361
+ var name, value,
362
+ parts = explode(v, ":");
363
+
364
+ function ensureUnits(v) {
365
+ return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";
366
+ }
367
+
368
+ if (parts.length == 2) {
369
+ name = parts[0].toLowerCase();
370
+ value = parts[1].toLowerCase();
371
+
372
+ // Translate certain MS Office styles into their CSS equivalents
373
+ switch (name) {
374
+ case "mso-padding-alt":
375
+ case "mso-padding-top-alt":
376
+ case "mso-padding-right-alt":
377
+ case "mso-padding-bottom-alt":
378
+ case "mso-padding-left-alt":
379
+ case "mso-margin-alt":
380
+ case "mso-margin-top-alt":
381
+ case "mso-margin-right-alt":
382
+ case "mso-margin-bottom-alt":
383
+ case "mso-margin-left-alt":
384
+ case "mso-table-layout-alt":
385
+ case "mso-height":
386
+ case "mso-width":
387
+ case "mso-vertical-align-alt":
388
+ n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);
389
+ return;
390
+
391
+ case "horiz-align":
392
+ n[i++] = "text-align:" + value;
393
+ return;
394
+
395
+ case "vert-align":
396
+ n[i++] = "vertical-align:" + value;
397
+ return;
398
+
399
+ case "font-color":
400
+ case "mso-foreground":
401
+ n[i++] = "color:" + value;
402
+ return;
403
+
404
+ case "mso-background":
405
+ case "mso-highlight":
406
+ n[i++] = "background:" + value;
407
+ return;
408
+
409
+ case "mso-default-height":
410
+ n[i++] = "min-height:" + ensureUnits(value);
411
+ return;
412
+
413
+ case "mso-default-width":
414
+ n[i++] = "min-width:" + ensureUnits(value);
415
+ return;
416
+
417
+ case "mso-padding-between-alt":
418
+ n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);
419
+ return;
420
+
421
+ case "text-line-through":
422
+ if ((value == "single") || (value == "double")) {
423
+ n[i++] = "text-decoration:line-through";
424
+ }
425
+ return;
426
+
427
+ case "mso-zero-height":
428
+ if (value == "yes") {
429
+ n[i++] = "display:none";
430
+ }
431
+ return;
432
+ }
433
+
434
+ // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name
435
+ 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)) {
436
+ return;
437
+ }
438
+
439
+ // If it reached this point, it must be a valid CSS style
440
+ n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case
441
+ }
442
+ });
443
+
444
+ // If style attribute contained any valid styles the re-write it; otherwise delete style attribute.
445
+ if (i > 0) {
446
+ return tag + ' style="' + n.join(';') + '"';
447
+ } else {
448
+ return tag;
449
+ }
450
+ }
451
+ ]
239
452
  ]);
240
453
  }
241
454
  }
242
455
 
243
- // Allow for class names to be retained if desired; either all, or just the ones from Word
244
- // Note that the paste_strip_class_attributes: 'none, verify_css_classes: true is also a good variation.
245
- stripClass = ed.getParam('paste_strip_class_attributes');
246
- if (stripClass != 'none') {
247
- // Cleans everything but mceItem... classes
248
- function cleanClasses(str, cls) {
249
- var i, out = '';
456
+ // Replace headers with <strong>
457
+ if (getParam(ed, "paste_convert_headers_to_strong")) {
458
+ process([
459
+ [/<h[1-6][^>]*>/gi, "<p><strong>"],
460
+ [/<\/h[1-6][^>]*>/gi, "</strong></p>"]
461
+ ]);
462
+ }
250
463
 
251
- // Remove all classes
252
- if (stripClass == 'all')
253
- return '';
464
+ // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").
465
+ // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.
466
+ stripClass = getParam(ed, "paste_strip_class_attributes");
254
467
 
255
- cls = tinymce.explode(cls, ' ');
468
+ if (stripClass !== "none") {
469
+ function removeClasses(match, g1) {
470
+ if (stripClass === "all")
471
+ return '';
256
472
 
257
- for (i = cls.length - 1; i >= 0; i--) {
258
- // Remove Mso classes
259
- if (!/^(Mso)/i.test(cls[i]))
260
- out += (!out ? '' : ' ') + cls[i];
261
- }
473
+ var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),
474
+ function(v) {
475
+ return (/^(?!mso)/i.test(v));
476
+ }
477
+ );
262
478
 
263
- return ' class="' + out + '"';
479
+ return cls.length ? ' class="' + cls.join(" ") + '"' : '';
264
480
  };
265
481
 
266
- process([
267
- [/ class=\"([^\"]*)\"/gi, cleanClasses], // class attributes with quotes
268
- [/ class=(\w+)/gi, cleanClasses] // class attributes without quotes (IE)
269
- ]);
482
+ h = h.replace(/ class="([^"]+)"/gi, removeClasses);
483
+ h = h.replace(/ class=(\w+)/gi, removeClasses);
270
484
  }
271
485
 
272
486
  // Remove spans option
273
- if (ed.getParam('paste_remove_spans')) {
274
- process([
275
- /<\/?(span)[^>]*>/gi
276
- ]);
487
+ if (getParam(ed, "paste_remove_spans")) {
488
+ h = h.replace(/<\/?span[^>]*>/gi, "");
277
489
  }
278
490
 
279
491
  //console.log('After preprocess:' + h);
@@ -294,56 +506,58 @@
294
506
  dom.remove(a, 1);
295
507
  });
296
508
 
297
- if (t.editor.getParam('paste_convert_middot_lists', true))
509
+ if (getParam(ed, "paste_convert_middot_lists")) {
298
510
  t._convertLists(pl, o);
511
+ }
299
512
 
300
513
  // Process styles
301
- styleProps = ed.getParam('paste_retain_style_properties'); // retained properties
514
+ styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties
302
515
 
303
- // If string property then split it
304
- if (tinymce.is(styleProps, 'string'))
305
- styleProps = tinymce.explode(styleProps);
516
+ // Process only if a string was specified and not equal to "all" or "*"
517
+ if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {
518
+ styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));
306
519
 
307
- // Retains some style properties
308
- each(dom.select('*', o.node), function(el) {
309
- var newStyle = {}, npc = 0, i, sp, sv;
310
-
311
- // Store a subset of the existing styles
312
- if (styleProps) {
313
- for (i = 0; i < styleProps.length; i++) {
314
- sp = styleProps[i];
315
- sv = dom.getStyle(el, sp);
316
-
317
- if (sv) {
318
- newStyle[sp] = sv;
319
- npc++;
520
+ // Retains some style properties
521
+ each(dom.select('*', o.node), function(el) {
522
+ var newStyle = {}, npc = 0, i, sp, sv;
523
+
524
+ // Store a subset of the existing styles
525
+ if (styleProps) {
526
+ for (i = 0; i < styleProps.length; i++) {
527
+ sp = styleProps[i];
528
+ sv = dom.getStyle(el, sp);
529
+
530
+ if (sv) {
531
+ newStyle[sp] = sv;
532
+ npc++;
533
+ }
320
534
  }
321
535
  }
322
- }
323
536
 
324
- // Remove all of the existing styles
325
- dom.setAttrib(el, 'style', '');
537
+ // Remove all of the existing styles
538
+ dom.setAttrib(el, 'style', '');
326
539
 
327
- if (styleProps && npc > 0)
328
- dom.setStyles(el, newStyle); // Add back the stored subset of styles
329
- else // Remove empty span tags that do not have class attributes
330
- if (el.nodeName == 'SPAN' && !el.className)
331
- dom.remove(el, true);
332
- });
540
+ if (styleProps && npc > 0)
541
+ dom.setStyles(el, newStyle); // Add back the stored subset of styles
542
+ else // Remove empty span tags that do not have class attributes
543
+ if (el.nodeName == 'SPAN' && !el.className)
544
+ dom.remove(el, true);
545
+ });
546
+ }
333
547
  }
334
548
 
335
549
  // Remove all style information or only specifically on WebKit to avoid the style bug on that browser
336
- if (ed.getParam("paste_remove_styles") || (ed.getParam("paste_remove_styles_if_webkit") && tinymce.isWebKit)) {
550
+ if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {
337
551
  each(dom.select('*[style]', o.node), function(el) {
338
552
  el.removeAttribute('style');
339
- el.removeAttribute('mce_style');
553
+ el.removeAttribute('_mce_style');
340
554
  });
341
555
  } else {
342
556
  if (tinymce.isWebKit) {
343
557
  // 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 ..." />
344
558
  // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles
345
559
  each(dom.select('*', o.node), function(el) {
346
- el.removeAttribute('mce_style');
560
+ el.removeAttribute('_mce_style');
347
561
  });
348
562
  }
349
563
  }
@@ -435,7 +649,7 @@
435
649
  * This logic can be improved so text nodes at the start/end remain in the start/end block elements
436
650
  */
437
651
  _insertBlockContent : function(ed, dom, content) {
438
- var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight;
652
+ var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker';
439
653
 
440
654
  function select(n) {
441
655
  var r;
@@ -449,11 +663,11 @@
449
663
  sel.select(n, 1);
450
664
  sel.collapse(false);
451
665
  }
452
- };
666
+ }
453
667
 
454
668
  // Insert a marker for the caret position
455
- this._insert('<span id="_marker">&nbsp;</span>', 1);
456
- marker = dom.get('_marker');
669
+ this._insert('<span id="' + markerId + '">&nbsp;</span>', 1);
670
+ marker = dom.get(markerId);
457
671
  parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td');
458
672
 
459
673
  // If it's a parent block but not a table cell
@@ -474,7 +688,9 @@
474
688
  sel.collapse(0);
475
689
  }
476
690
 
477
- dom.remove('_marker'); // Remove marker if it's left
691
+ // Remove marker if it's left
692
+ while (elm = dom.get(markerId))
693
+ dom.remove(elm);
478
694
 
479
695
  // Get element, position and height
480
696
  elm = sel.getStart();
@@ -501,31 +717,213 @@
501
717
  ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo});
502
718
  },
503
719
 
720
+ /**
721
+ * Instead of the old plain text method which tried to re-create a paste operation, the
722
+ * new approach adds a plain text mode toggle switch that changes the behavior of paste.
723
+ * This function is passed the same input that the regular paste plugin produces.
724
+ * It performs additional scrubbing and produces (and inserts) the plain text.
725
+ * This approach leverages all of the great existing functionality in the paste
726
+ * plugin, and requires minimal changes to add the new functionality.
727
+ * Speednet - June 2009
728
+ */
729
+ _insertPlainText : function(ed, dom, h) {
730
+ var i, len, pos, rpos, node, breakElms, before, after,
731
+ w = ed.getWin(),
732
+ d = ed.getDoc(),
733
+ sel = ed.selection,
734
+ is = tinymce.is,
735
+ inArray = tinymce.inArray,
736
+ linebr = getParam(ed, "paste_text_linebreaktype"),
737
+ rl = getParam(ed, "paste_text_replacements");
738
+
739
+ function process(items) {
740
+ each(items, function(v) {
741
+ if (v.constructor == RegExp)
742
+ h = h.replace(v, "");
743
+ else
744
+ h = h.replace(v[0], v[1]);
745
+ });
746
+ };
747
+
748
+ if ((typeof(h) === "string") && (h.length > 0)) {
749
+ if (!entities)
750
+ entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(",");
751
+
752
+ // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line
753
+ if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(h)) {
754
+ process([
755
+ /[\n\r]+/g
756
+ ]);
757
+ } else {
758
+ // Otherwise just get rid of carriage returns (only need linefeeds)
759
+ process([
760
+ /\r+/g
761
+ ]);
762
+ }
763
+
764
+ process([
765
+ [/<\/(?: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
766
+ [/<br[^>]*>|<\/tr>/gi, "\n"], // Single linebreak for <br /> tags and table rows
767
+ [/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"], // Table cells get tabs betweem them
768
+ /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags
769
+ [/&nbsp;/gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*)
770
+ [
771
+ // HTML entity
772
+ /&(#\d+|[a-z0-9]{1,10});/gi,
773
+
774
+ // Replace with actual character
775
+ function(e, s) {
776
+ if (s.charAt(0) === "#") {
777
+ return String.fromCharCode(s.slice(1));
778
+ }
779
+ else {
780
+ return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " ";
781
+ }
782
+ }
783
+ ],
784
+ [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars.
785
+ [/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks
786
+ /^\s+|\s+$/g // Trim the front & back
787
+ ]);
788
+
789
+ h = dom.encode(h);
790
+
791
+ // Delete any highlighted text before pasting
792
+ if (!sel.isCollapsed()) {
793
+ d.execCommand("Delete", false, null);
794
+ }
795
+
796
+ // Perform default or custom replacements
797
+ if (is(rl, "array") || (is(rl, "array"))) {
798
+ process(rl);
799
+ }
800
+ else if (is(rl, "string")) {
801
+ process(new RegExp(rl, "gi"));
802
+ }
803
+
804
+ // Treat paragraphs as specified in the config
805
+ if (linebr == "none") {
806
+ process([
807
+ [/\n+/g, " "]
808
+ ]);
809
+ }
810
+ else if (linebr == "br") {
811
+ process([
812
+ [/\n/g, "<br />"]
813
+ ]);
814
+ }
815
+ else {
816
+ process([
817
+ /^\s+|\s+$/g,
818
+ [/\n\n/g, "</p><p>"],
819
+ [/\n/g, "<br />"]
820
+ ]);
821
+ }
822
+
823
+ // This next piece of code handles the situation where we're pasting more than one paragraph of plain
824
+ // text, and we are pasting the content into the middle of a block node in the editor. The block
825
+ // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining).
826
+ // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the
827
+ // pasted text is prepended to "Para B". Any other paragraphs of pasted text are placed between
828
+ // "Para A" and "Para B". This code solves a host of problems with the original plain text plugin and
829
+ // now handles styles correctly. (Pasting plain text into a styled paragraph is supposed to make the
830
+ // plain text take the same style as the existing paragraph.)
831
+ if ((pos = h.indexOf("</p><p>")) != -1) {
832
+ rpos = h.lastIndexOf("</p><p>");
833
+ node = sel.getNode();
834
+ breakElms = []; // Get list of elements to break
835
+
836
+ do {
837
+ if (node.nodeType == 1) {
838
+ // Don't break tables and break at body
839
+ if (node.nodeName == "TD" || node.nodeName == "BODY") {
840
+ break;
841
+ }
842
+
843
+ breakElms[breakElms.length] = node;
844
+ }
845
+ } while (node = node.parentNode);
846
+
847
+ // Are we in the middle of a block node?
848
+ if (breakElms.length > 0) {
849
+ before = h.substring(0, pos);
850
+ after = "";
851
+
852
+ for (i=0, len=breakElms.length; i<len; i++) {
853
+ before += "</" + breakElms[i].nodeName.toLowerCase() + ">";
854
+ after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">";
855
+ }
856
+
857
+ if (pos == rpos) {
858
+ h = before + after + h.substring(pos+7);
859
+ }
860
+ else {
861
+ h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7);
862
+ }
863
+ }
864
+ }
865
+
866
+ // Insert content at the caret, plus add a marker for repositioning the caret
867
+ ed.execCommand("mceInsertRawHTML", false, h + '<span id="_plain_text_marker">&nbsp;</span>');
868
+
869
+ // Reposition the caret to the marker, which was placed immediately after the inserted content.
870
+ // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers.
871
+ // The second part of the code scrolls the content up if the caret is positioned off-screen.
872
+ // This is only necessary for WebKit browsers, but it doesn't hurt to use for all.
873
+ window.setTimeout(function() {
874
+ var marker = dom.get('_plain_text_marker'),
875
+ elm, vp, y, elmHeight;
876
+
877
+ sel.select(marker, false);
878
+ d.execCommand("Delete", false, null);
879
+ marker = null;
880
+
881
+ // Get element, position and height
882
+ elm = sel.getStart();
883
+ vp = dom.getViewPort(w);
884
+ y = dom.getPos(elm).y;
885
+ elmHeight = elm.clientHeight;
886
+
887
+ // Is element within viewport if not then scroll it into view
888
+ if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) {
889
+ d.body.scrollTop = y < vp.y ? y : y - vp.h + 25;
890
+ }
891
+ }, 0);
892
+ }
893
+ },
894
+
504
895
  /**
505
896
  * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.
506
897
  */
507
898
  _legacySupport : function() {
508
899
  var t = this, ed = t.editor;
509
900
 
510
- // Register commands for backwards compatibility
511
- each(['mcePasteText', 'mcePasteWord'], function(cmd) {
512
- ed.addCommand(cmd, function() {
901
+ // Register command(s) for backwards compatibility
902
+ ed.addCommand("mcePasteWord", function() {
903
+ ed.windowManager.open({
904
+ file: t.url + "/pasteword.htm",
905
+ width: parseInt(getParam(ed, "paste_dialog_width")),
906
+ height: parseInt(getParam(ed, "paste_dialog_height")),
907
+ inline: 1
908
+ });
909
+ });
910
+
911
+ if (getParam(ed, "paste_text_use_dialog")) {
912
+ ed.addCommand("mcePasteText", function() {
513
913
  ed.windowManager.open({
514
- file : t.url + (cmd == 'mcePasteText' ? '/pastetext.htm' : '/pasteword.htm'),
515
- width : parseInt(ed.getParam("paste_dialog_width", "450")),
516
- height : parseInt(ed.getParam("paste_dialog_height", "400")),
914
+ file : t.url + "/pastetext.htm",
915
+ width: parseInt(getParam(ed, "paste_dialog_width")),
916
+ height: parseInt(getParam(ed, "paste_dialog_height")),
517
917
  inline : 1
518
918
  });
519
919
  });
520
- });
920
+ }
521
921
 
522
- // Register buttons for backwards compatibility
523
- ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText'});
524
- ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord'});
525
- ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'selectall'});
922
+ // Register button for backwards compatibility
923
+ ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});
526
924
  }
527
925
  });
528
926
 
529
927
  // Register plugin
530
- tinymce.PluginManager.add('paste', tinymce.plugins.PastePlugin);
531
- })();
928
+ tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);
929
+ })();