cable 0.9.15 → 0.9.16

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 (142) hide show
  1. data/VERSION +1 -1
  2. data/public/javascripts/tinymce/langs/en.js +54 -2
  3. data/public/javascripts/tinymce/plugins/advhr/langs/en_dlg.js +2 -0
  4. data/public/javascripts/tinymce/plugins/advhr/rule.htm +30 -29
  5. data/public/javascripts/tinymce/plugins/advimage/image.htm +34 -31
  6. data/public/javascripts/tinymce/plugins/advimage/js/image.js +4 -2
  7. data/public/javascripts/tinymce/plugins/advimage/langs/en_dlg.js +2 -0
  8. data/public/javascripts/tinymce/plugins/advlink/js/advlink.js +5 -10
  9. data/public/javascripts/tinymce/plugins/advlink/langs/en_dlg.js +4 -2
  10. data/public/javascripts/tinymce/plugins/advlink/link.htm +34 -29
  11. data/public/javascripts/tinymce/plugins/advlist/editor_plugin.js +1 -1
  12. data/public/javascripts/tinymce/plugins/advlist/editor_plugin_src.js +3 -3
  13. data/public/javascripts/tinymce/plugins/autolink/editor_plugin.js +1 -0
  14. data/public/javascripts/tinymce/plugins/autolink/editor_plugin_src.js +169 -0
  15. data/public/javascripts/tinymce/plugins/autosave/editor_plugin.js +1 -1
  16. data/public/javascripts/tinymce/plugins/autosave/editor_plugin_src.js +13 -4
  17. data/public/javascripts/tinymce/plugins/bbcode/editor_plugin.js +1 -1
  18. data/public/javascripts/tinymce/plugins/bbcode/editor_plugin_src.js +1 -1
  19. data/public/javascripts/tinymce/plugins/contextmenu/editor_plugin.js +1 -1
  20. data/public/javascripts/tinymce/plugins/contextmenu/editor_plugin_src.js +23 -14
  21. data/public/javascripts/tinymce/plugins/emotions/emotions.htm +15 -14
  22. data/public/javascripts/tinymce/plugins/fullpage/css/fullpage.css +6 -4
  23. data/public/javascripts/tinymce/plugins/fullpage/editor_plugin.js +1 -1
  24. data/public/javascripts/tinymce/plugins/fullpage/editor_plugin_src.js +53 -8
  25. data/public/javascripts/tinymce/plugins/fullpage/fullpage.htm +2 -2
  26. data/public/javascripts/tinymce/plugins/fullpage/js/fullpage.js +45 -19
  27. data/public/javascripts/tinymce/plugins/fullscreen/editor_plugin.js +1 -1
  28. data/public/javascripts/tinymce/plugins/fullscreen/editor_plugin_src.js +10 -2
  29. data/public/javascripts/tinymce/plugins/inlinepopups/editor_plugin.js +1 -1
  30. data/public/javascripts/tinymce/plugins/inlinepopups/editor_plugin_src.js +76 -15
  31. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/window.css +0 -10
  32. data/public/javascripts/tinymce/plugins/layer/editor_plugin.js +1 -1
  33. data/public/javascripts/tinymce/plugins/layer/editor_plugin_src.js +2 -0
  34. data/public/javascripts/tinymce/plugins/legacyoutput/editor_plugin.js +1 -1
  35. data/public/javascripts/tinymce/plugins/legacyoutput/editor_plugin_src.js +29 -26
  36. data/public/javascripts/tinymce/plugins/lists/editor_plugin.js +1 -0
  37. data/public/javascripts/tinymce/plugins/lists/editor_plugin_src.js +617 -0
  38. data/public/javascripts/tinymce/plugins/media/css/media.css +5 -4
  39. data/public/javascripts/tinymce/plugins/media/editor_plugin.js +1 -1
  40. data/public/javascripts/tinymce/plugins/media/editor_plugin_src.js +652 -296
  41. data/public/javascripts/tinymce/plugins/media/js/media.js +327 -603
  42. data/public/javascripts/tinymce/plugins/media/langs/en_dlg.js +8 -2
  43. data/public/javascripts/tinymce/plugins/media/media.htm +283 -288
  44. data/public/javascripts/tinymce/plugins/media/moxieplayer.swf +0 -0
  45. data/public/javascripts/tinymce/plugins/nonbreaking/editor_plugin.js +1 -1
  46. data/public/javascripts/tinymce/plugins/nonbreaking/editor_plugin_src.js +1 -1
  47. data/public/javascripts/tinymce/plugins/pagebreak/editor_plugin.js +1 -1
  48. data/public/javascripts/tinymce/plugins/pagebreak/editor_plugin_src.js +1 -4
  49. data/public/javascripts/tinymce/plugins/paste/editor_plugin.js +1 -1
  50. data/public/javascripts/tinymce/plugins/paste/editor_plugin_src.js +106 -128
  51. data/public/javascripts/tinymce/plugins/searchreplace/editor_plugin.js +1 -1
  52. data/public/javascripts/tinymce/plugins/searchreplace/editor_plugin_src.js +4 -0
  53. data/public/javascripts/tinymce/plugins/searchreplace/js/searchreplace.js +14 -10
  54. data/public/javascripts/tinymce/plugins/searchreplace/searchreplace.htm +17 -16
  55. data/public/javascripts/tinymce/plugins/spellchecker/editor_plugin.js +1 -1
  56. data/public/javascripts/tinymce/plugins/spellchecker/editor_plugin_src.js +55 -37
  57. data/public/javascripts/tinymce/plugins/style/js/props.js +2 -8
  58. data/public/javascripts/tinymce/plugins/style/langs/en_dlg.js +8 -1
  59. data/public/javascripts/tinymce/plugins/style/props.htm +513 -398
  60. data/public/javascripts/tinymce/plugins/tabfocus/editor_plugin.js +1 -1
  61. data/public/javascripts/tinymce/plugins/tabfocus/editor_plugin_src.js +30 -28
  62. data/public/javascripts/tinymce/plugins/table/cell.htm +12 -12
  63. data/public/javascripts/tinymce/plugins/table/editor_plugin.js +1 -1
  64. data/public/javascripts/tinymce/plugins/table/editor_plugin_src.js +85 -26
  65. data/public/javascripts/tinymce/plugins/table/js/cell.js +9 -11
  66. data/public/javascripts/tinymce/plugins/table/js/row.js +13 -18
  67. data/public/javascripts/tinymce/plugins/table/js/table.js +8 -12
  68. data/public/javascripts/tinymce/plugins/table/langs/en_dlg.js +1 -1
  69. data/public/javascripts/tinymce/plugins/table/merge_cells.htm +11 -11
  70. data/public/javascripts/tinymce/plugins/table/row.htm +10 -8
  71. data/public/javascripts/tinymce/plugins/table/table.htm +54 -53
  72. data/public/javascripts/tinymce/plugins/template/js/template.js +1 -1
  73. data/public/javascripts/tinymce/plugins/visualchars/editor_plugin.js +1 -1
  74. data/public/javascripts/tinymce/plugins/visualchars/editor_plugin_src.js +1 -1
  75. data/public/javascripts/tinymce/plugins/wordcount/editor_plugin.js +1 -1
  76. data/public/javascripts/tinymce/plugins/wordcount/editor_plugin_src.js +35 -19
  77. data/public/javascripts/tinymce/plugins/xhtmlxtras/abbr.htm +6 -5
  78. data/public/javascripts/tinymce/plugins/xhtmlxtras/acronym.htm +6 -5
  79. data/public/javascripts/tinymce/plugins/xhtmlxtras/attributes.htm +6 -5
  80. data/public/javascripts/tinymce/plugins/xhtmlxtras/cite.htm +5 -4
  81. data/public/javascripts/tinymce/plugins/xhtmlxtras/del.htm +9 -8
  82. data/public/javascripts/tinymce/plugins/xhtmlxtras/ins.htm +11 -10
  83. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/attributes.js +0 -1
  84. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/del.js +2 -2
  85. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/element_common.js +3 -5
  86. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/ins.js +4 -3
  87. data/public/javascripts/tinymce/themes/advanced/about.htm +3 -5
  88. data/public/javascripts/tinymce/themes/advanced/anchor.htm +5 -5
  89. data/public/javascripts/tinymce/themes/advanced/charmap.htm +39 -40
  90. data/public/javascripts/tinymce/themes/advanced/color_picker.htm +10 -9
  91. data/public/javascripts/tinymce/themes/advanced/editor_template.js +1 -1
  92. data/public/javascripts/tinymce/themes/advanced/editor_template_src.js +171 -40
  93. data/public/javascripts/tinymce/themes/advanced/image.htm +51 -51
  94. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/flash.gif +0 -0
  95. data/public/javascripts/tinymce/themes/advanced/img/iframe.gif +0 -0
  96. data/public/javascripts/tinymce/{plugins/pagebreak → themes/advanced}/img/pagebreak.gif +0 -0
  97. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/quicktime.gif +0 -0
  98. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/realmedia.gif +0 -0
  99. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/shockwave.gif +0 -0
  100. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/trans.gif +0 -0
  101. data/public/javascripts/tinymce/themes/advanced/img/video.gif +0 -0
  102. data/public/javascripts/tinymce/{plugins/media → themes/advanced}/img/windowsmedia.gif +0 -0
  103. data/public/javascripts/tinymce/themes/advanced/js/about.js +1 -0
  104. data/public/javascripts/tinymce/themes/advanced/js/anchor.js +5 -0
  105. data/public/javascripts/tinymce/themes/advanced/js/charmap.js +26 -6
  106. data/public/javascripts/tinymce/themes/advanced/js/color_picker.js +108 -32
  107. data/public/javascripts/tinymce/themes/advanced/js/image.js +3 -1
  108. data/public/javascripts/tinymce/themes/advanced/js/link.js +4 -7
  109. data/public/javascripts/tinymce/themes/advanced/js/source_editor.js +1 -1
  110. data/public/javascripts/tinymce/themes/advanced/langs/en.js +8 -2
  111. data/public/javascripts/tinymce/themes/advanced/langs/en_dlg.js +6 -3
  112. data/public/javascripts/tinymce/themes/advanced/link.htm +27 -28
  113. data/public/javascripts/tinymce/themes/advanced/shortcuts.htm +47 -0
  114. data/public/javascripts/tinymce/themes/advanced/skins/default/content.css +11 -0
  115. data/public/javascripts/tinymce/themes/advanced/skins/default/ui.css +4 -4
  116. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/content.css +23 -0
  117. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/dialog.css +105 -0
  118. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/ui.css +101 -0
  119. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/content.css +10 -0
  120. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/dialog.css +1 -0
  121. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui.css +5 -4
  122. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui_black.css +1 -1
  123. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui_silver.css +1 -1
  124. data/public/javascripts/tinymce/themes/advanced/source_editor.htm +3 -3
  125. data/public/javascripts/tinymce/themes/simple/editor_template.js +1 -1
  126. data/public/javascripts/tinymce/themes/simple/editor_template_src.js +1 -2
  127. data/public/javascripts/tinymce/tiny_mce.js +1 -1
  128. data/public/javascripts/tinymce/tiny_mce_popup.js +1 -1
  129. data/public/javascripts/tinymce/tiny_mce_src.js +6383 -4025
  130. data/public/javascripts/tinymce/utils/form_utils.js +14 -4
  131. data/public/javascripts/tinymce/utils/mctabs.js +95 -10
  132. data/public/javascripts/tinymce/utils/validate.js +34 -2
  133. metadata +50 -93
  134. data/public/javascripts/tinymce/plugins/media/css/content.css +0 -6
  135. data/public/javascripts/tinymce/plugins/media/img/flv_player.swf +0 -0
  136. data/public/javascripts/tinymce/plugins/pagebreak/css/content.css +0 -1
  137. data/public/javascripts/tinymce/plugins/pagebreak/img/trans.gif +0 -0
  138. data/public/javascripts/tinymce/plugins/pdw/editor_plugin.js +0 -4
  139. data/public/javascripts/tinymce/plugins/pdw/editor_plugin_src.js +0 -158
  140. data/public/javascripts/tinymce/plugins/pdw/img/toolbars.gif +0 -0
  141. data/public/javascripts/tinymce/plugins/pdw/langs/en.js +0 -3
  142. data/public/javascripts/tinymce/plugins/pdw/langs/nl.js +0 -3
@@ -1 +1 @@
1
- (function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span _mce_bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>':"&nbsp;")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})();
1
+ (function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>':"&nbsp;")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})();
@@ -17,7 +17,7 @@
17
17
 
18
18
  // Register commands
19
19
  ed.addCommand('mceNonBreaking', function() {
20
- ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span _mce_bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>' : '&nbsp;');
20
+ ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>' : '&nbsp;');
21
21
  });
22
22
 
23
23
  // Register buttons
@@ -1 +1 @@
1
- (function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+d+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();
1
+ (function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+b.theme.url+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();
@@ -11,7 +11,7 @@
11
11
  (function() {
12
12
  tinymce.create('tinymce.plugins.PageBreakPlugin', {
13
13
  init : function(ed, url) {
14
- var pb = '<img src="' + url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;
14
+ var pb = '<img src="' + ed.theme.url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;
15
15
 
16
16
  pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');
17
17
 
@@ -24,9 +24,6 @@
24
24
  ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls});
25
25
 
26
26
  ed.onInit.add(function() {
27
- if (ed.settings.content_css !== false)
28
- ed.dom.loadCSS(url + "/css/content.css");
29
-
30
27
  if (ed.theme.onResolveName) {
31
28
  ed.theme.onResolveName.add(function(th, o) {
32
29
  if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))
@@ -1 +1 @@
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(e.translate("paste.plaintext_mode_sticky"))}else{e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}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(e.pasteAsPlainText&&(s.clipboardData||p.doc.dataTransfer)){s.preventDefault();i({content:(s.clipboardData||p.doc.dataTransfer).getData("Text").replace(/\r?\n/g,"<br />")});return}if(p.get("_mcePaste")){return}m=p.add(r,"div",{id:"_mcePaste","class":"mcePaste"},'\uFEFF<br _mce_bogus="1">');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(v){var u=v.firstChild;if(u&&u.nodeName=="DIV"&&u.style.marginTop&&u.style.backgroundColor){p.remove(u,1)}c(p.select("div.mcePaste",v),function(w){p.remove(w,1)});c(p.select("span.Apple-style-span",v),function(w){p.remove(w,1)});c(p.select("br[_mce_bogus]",v),function(w){p.remove(w)});t+=v.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+'"></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,i=f.selection.getRng();if(!f.selection.isCollapsed()&&i.startContainer!=i.endContainer){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
+ (function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters: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(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=false;function h(m,k){var l=d.dom,i,j;f.onPreProcess.dispatch(f,m);m.node=l.create("div",0,m.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){j=l.select("p,h1,h2,h3,h4,h5,h6,pre",m.node);if(j.length==1&&m.content.indexOf("__MCE_ITEM__")===-1){l.remove(j.reverse(),true)}}}f.onPostProcess.dispatch(f,m);m.content=d.serializer.serialize(m.node,{getInner:1});if((!k)&&(d.pasteAsPlainText)){f._insertPlainText(d,l,m.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(m.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:r.replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},'\uFEFF\uFEFF<br data-mce-bogus="1">');if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort().y}o.setStyles(l,{position:"absolute",left:-10000,top:i,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,1);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<pre>"+o.encode(r).replace(/\r?\n/g,"<br />")+"</pre>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}if(b(d,"paste_block_drop")){d.onInit.add(function(){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})})}f._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(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<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(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(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":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[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}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_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(d){c(d,function(h){if(h.constructor==RegExp){v=v.replace(h,"")}else{v=v.replace(h[0],h[1])}})}if((typeof(v)==="string")&&(v.length>0)){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," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.decode(tinymce.html.Entities.encodeRaw(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 d=x.get("_plain_text_marker"),A,h,w,i;s.select(d,false);z.execCommand("Delete",false,null);d=null;A=s.getStart();h=x.getViewPort(n);w=x.getPos(A).y;i=A.clientHeight;if((w<h.y)||(w+i>h.y+h.h)){z.body.scrollTop=w<h.y?w:w-h.h+25}},0)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
@@ -10,9 +10,9 @@
10
10
 
11
11
  (function() {
12
12
  var each = tinymce.each,
13
- entities = null,
14
13
  defs = {
15
14
  paste_auto_cleanup_on_paste : true,
15
+ paste_enable_default_filters : true,
16
16
  paste_block_drop : false,
17
17
  paste_retain_style_properties : "none",
18
18
  paste_strip_class_attributes : "mso",
@@ -63,13 +63,19 @@
63
63
  ed.execCallback('paste_postprocess', pl, o);
64
64
  });
65
65
 
66
+ ed.onKeyDown.addToTop(function(ed, e) {
67
+ // Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that
68
+ if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
69
+ return false; // Stop other listeners
70
+ });
71
+
66
72
  // Initialize plain text flag
67
73
  ed.pasteAsPlainText = false;
68
74
 
69
75
  // This function executes the process handlers and inserts the contents
70
76
  // force_rich overrides plain text mode set by user, important for pasting with execCommand
71
77
  function process(o, force_rich) {
72
- var dom = ed.dom;
78
+ var dom = ed.dom, rng, nodes;
73
79
 
74
80
  // Execute pre process handlers
75
81
  t.onPreProcess.dispatch(t, o);
@@ -77,6 +83,19 @@
77
83
  // Create DOM structure
78
84
  o.node = dom.create('div', 0, o.content);
79
85
 
86
+ // If pasting inside the same element and the contents is only one block
87
+ // remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element
88
+ if (tinymce.isGecko) {
89
+ rng = ed.selection.getRng(true);
90
+ if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) {
91
+ nodes = dom.select('p,h1,h2,h3,h4,h5,h6,pre', o.node);
92
+
93
+ // Is only one block node and it doesn't contain word stuff
94
+ if (nodes.length == 1 && o.content.indexOf('__MCE_ITEM__') === -1)
95
+ dom.remove(nodes.reverse(), true);
96
+ }
97
+ }
98
+
80
99
  // Execute post process handlers
81
100
  t.onPostProcess.dispatch(t, o);
82
101
 
@@ -91,9 +110,6 @@
91
110
  ed.pasteAsPlainText = false;
92
111
  ed.controlManager.setActive("pastetext", false);
93
112
  }
94
- } else if (/<(p|h[1-6]|ul|ol)/.test(o.content)) {
95
- // Handle insertion of contents containing block elements separately
96
- t._insertBlockContent(ed, dom, o.content);
97
113
  } else {
98
114
  t._insert(o.content);
99
115
  }
@@ -132,26 +148,30 @@
132
148
  // hidden div and placing the caret inside it and after the browser paste
133
149
  // is done it grabs that contents and processes that
134
150
  function grabContent(e) {
135
- var n, or, rng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY;
151
+ var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent;
136
152
 
137
153
  // Check if browser supports direct plaintext access
138
- if (ed.pasteAsPlainText && (e.clipboardData || dom.doc.dataTransfer)) {
139
- e.preventDefault();
140
- process({content : (e.clipboardData || dom.doc.dataTransfer).getData('Text').replace(/\r?\n/g, '<br />')});
141
- return;
154
+ if (e.clipboardData || dom.doc.dataTransfer) {
155
+ textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text');
156
+
157
+ if (ed.pasteAsPlainText) {
158
+ e.preventDefault();
159
+ process({content : textContent.replace(/\r?\n/g, '<br />')});
160
+ return;
161
+ }
142
162
  }
143
163
 
144
164
  if (dom.get('_mcePaste'))
145
165
  return;
146
166
 
147
167
  // Create container to paste into
148
- n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste'}, '\uFEFF<br _mce_bogus="1">');
168
+ n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF<br data-mce-bogus="1">');
149
169
 
150
170
  // If contentEditable mode we need to find out the position of the closest element
151
171
  if (body != ed.getDoc().body)
152
172
  posY = dom.getPos(ed.selection.getStart(), body).y;
153
173
  else
154
- posY = body.scrollTop;
174
+ posY = body.scrollTop + dom.getViewPort().y;
155
175
 
156
176
  // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles
157
177
  dom.setStyles(n, {
@@ -164,6 +184,9 @@
164
184
  });
165
185
 
166
186
  if (tinymce.isIE) {
187
+ // Store away the old range
188
+ oldRng = sel.getRng();
189
+
167
190
  // Select the container
168
191
  rng = dom.doc.body.createTextRange();
169
192
  rng.moveToElementText(n);
@@ -180,8 +203,17 @@
180
203
  return;
181
204
  }
182
205
 
183
- // Process contents
184
- process({content : n.innerHTML});
206
+ // Restore the old range and clear the contents before pasting
207
+ sel.setRng(oldRng);
208
+ sel.setContent('');
209
+
210
+ // For some odd reason we need to detach the the mceInsertContent call from the paste event
211
+ // It's like IE has a reference to the parent element that you paste in and the selection gets messed up
212
+ // when it tries to restore the selection
213
+ setTimeout(function() {
214
+ // Process contents
215
+ process({content : n.innerHTML});
216
+ }, 0);
185
217
 
186
218
  // Block the real paste event
187
219
  return tinymce.dom.Event.cancel(e);
@@ -205,37 +237,42 @@
205
237
 
206
238
  // Wait a while and grab the pasted contents
207
239
  window.setTimeout(function() {
208
- var h = '', nl = dom.select('div.mcePaste');
240
+ var h = '', nl;
209
241
 
210
- // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string
211
- each(nl, function(n) {
212
- var child = n.firstChild;
242
+ // Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit
243
+ if (!dom.select('div.mcePaste > div.mcePaste').length) {
244
+ nl = dom.select('div.mcePaste');
213
245
 
214
- // WebKit inserts a DIV container with lots of odd styles
215
- if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {
216
- dom.remove(child, 1);
217
- }
246
+ // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string
247
+ each(nl, function(n) {
248
+ var child = n.firstChild;
218
249
 
219
- // WebKit duplicates the divs so we need to remove them
220
- each(dom.select('div.mcePaste', n), function(n) {
221
- dom.remove(n, 1);
222
- });
250
+ // WebKit inserts a DIV container with lots of odd styles
251
+ if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {
252
+ dom.remove(child, 1);
253
+ }
223
254
 
224
- // Remove apply style spans
225
- each(dom.select('span.Apple-style-span', n), function(n) {
226
- dom.remove(n, 1);
227
- });
255
+ // Remove apply style spans
256
+ each(dom.select('span.Apple-style-span', n), function(n) {
257
+ dom.remove(n, 1);
258
+ });
228
259
 
229
- // Remove bogus br elements
230
- each(dom.select('br[_mce_bogus]', n), function(n) {
231
- dom.remove(n);
232
- });
260
+ // Remove bogus br elements
261
+ each(dom.select('br[data-mce-bogus]', n), function(n) {
262
+ dom.remove(n);
263
+ });
233
264
 
234
- h += n.innerHTML;
235
- });
265
+ // WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV
266
+ if (n.parentNode.className != 'mcePaste')
267
+ h += n.innerHTML;
268
+ });
269
+ } else {
270
+ // Found WebKit weirdness so force the content into plain text mode
271
+ h = '<pre>' + dom.encode(textContent).replace(/\r?\n/g, '<br />') + '</pre>';
272
+ }
236
273
 
237
274
  // Remove the nodes
238
- each(nl, function(n) {
275
+ each(dom.select('div.mcePaste'), function(n) {
239
276
  dom.remove(n);
240
277
  });
241
278
 
@@ -256,7 +293,7 @@
256
293
  if (getParam(ed, "paste_auto_cleanup_on_paste")) {
257
294
  // Is it's Opera or older FF use key handler
258
295
  if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
259
- ed.onKeyDown.add(function(ed, e) {
296
+ ed.onKeyDown.addToTop(function(ed, e) {
260
297
  if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
261
298
  grabContent(e);
262
299
  });
@@ -295,8 +332,6 @@
295
332
  },
296
333
 
297
334
  _preProcess : function(pl, o) {
298
- //console.log('Before preprocess:' + o.content);
299
-
300
335
  var ed = this.editor,
301
336
  h = o.content,
302
337
  grep = tinymce.grep,
@@ -304,6 +339,8 @@
304
339
  trim = tinymce.trim,
305
340
  len, stripClass;
306
341
 
342
+ //console.log('Before preprocess:' + o.content);
343
+
307
344
  function process(items) {
308
345
  each(items, function(v) {
309
346
  // Remove or replace
@@ -313,6 +350,14 @@
313
350
  h = h.replace(v[0], v[1]);
314
351
  });
315
352
  }
353
+
354
+ if (ed.settings.paste_enable_default_filters == false) {
355
+ return;
356
+ }
357
+
358
+ // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
359
+ if (tinymce.isIE && document.documentMode >= 9)
360
+ process([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g, '$1']]);
316
361
 
317
362
  // Detect Word content and process it more aggressive
318
363
  if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {
@@ -332,7 +377,8 @@
332
377
  if (getParam(ed, "paste_convert_middot_lists")) {
333
378
  process([
334
379
  [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker
335
- [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol spans to item markers
380
+ [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert mso-list and symbol spans to item markers
381
+ [/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol paragraphs to item markers (FF)
336
382
  ]);
337
383
  }
338
384
 
@@ -484,6 +530,11 @@
484
530
  ]);
485
531
  }
486
532
 
533
+ process([
534
+ // Copy paste from Java like Open Office will produce this junk on FF
535
+ [/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, '']
536
+ ]);
537
+
487
538
  // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").
488
539
  // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.
489
540
  stripClass = getParam(ed, "paste_strip_class_attributes");
@@ -503,7 +554,7 @@
503
554
  };
504
555
 
505
556
  h = h.replace(/ class="([^"]+)"/gi, removeClasses);
506
- h = h.replace(/ class=(\w+)/gi, removeClasses);
557
+ h = h.replace(/ class=([\-\w]+)/gi, removeClasses);
507
558
  }
508
559
 
509
560
  // Remove spans option
@@ -522,6 +573,10 @@
522
573
  _postProcess : function(pl, o) {
523
574
  var t = this, ed = t.editor, dom = ed.dom, styleProps;
524
575
 
576
+ if (ed.settings.paste_enable_default_filters == false) {
577
+ return;
578
+ }
579
+
525
580
  if (o.wordContent) {
526
581
  // Remove named anchors or TOC links
527
582
  each(dom.select('a', o.node), function(a) {
@@ -573,14 +628,14 @@
573
628
  if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {
574
629
  each(dom.select('*[style]', o.node), function(el) {
575
630
  el.removeAttribute('style');
576
- el.removeAttribute('_mce_style');
631
+ el.removeAttribute('data-mce-style');
577
632
  });
578
633
  } else {
579
634
  if (tinymce.isWebKit) {
580
635
  // 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 ..." />
581
636
  // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles
582
637
  each(dom.select('*', o.node), function(el) {
583
- el.removeAttribute('_mce_style');
638
+ el.removeAttribute('data-mce-style');
584
639
  });
585
640
  }
586
641
  }
@@ -603,11 +658,11 @@
603
658
  val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/&nbsp;/g, '\u00a0');
604
659
 
605
660
  // Detect unordered lists look for bullets
606
- if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(val))
661
+ if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val))
607
662
  type = 'ul';
608
663
 
609
664
  // Detect ordered lists 1., a. or ixv.
610
- if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(val))
665
+ if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val))
611
666
  type = 'ol';
612
667
 
613
668
  // Check if node value matches the list pattern: o&nbsp;&nbsp;
@@ -637,9 +692,9 @@
637
692
  var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');
638
693
 
639
694
  // Remove span with the middot or the number
640
- if (type == 'ul' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html))
695
+ if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html))
641
696
  dom.remove(span);
642
- else if (/^[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))
697
+ else if (/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))
643
698
  dom.remove(span);
644
699
  });
645
700
 
@@ -647,7 +702,7 @@
647
702
 
648
703
  // Remove middot/list items
649
704
  if (type == 'ul')
650
- html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*(&nbsp;|\u00a0)+\s*/, '');
705
+ html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/, '');
651
706
  else
652
707
  html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');
653
708
 
@@ -667,65 +722,6 @@
667
722
  o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');
668
723
  },
669
724
 
670
- /**
671
- * This method will split the current block parent and insert the contents inside the split position.
672
- * This logic can be improved so text nodes at the start/end remain in the start/end block elements
673
- */
674
- _insertBlockContent : function(ed, dom, content) {
675
- var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker';
676
-
677
- function select(n) {
678
- var r;
679
-
680
- if (tinymce.isIE) {
681
- r = ed.getDoc().body.createTextRange();
682
- r.moveToElementText(n);
683
- r.collapse(false);
684
- r.select();
685
- } else {
686
- sel.select(n, 1);
687
- sel.collapse(false);
688
- }
689
- }
690
-
691
- // Insert a marker for the caret position
692
- this._insert('<span id="' + markerId + '"></span>', 1);
693
- marker = dom.get(markerId);
694
- parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td');
695
-
696
- // If it's a parent block but not a table cell
697
- if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) {
698
- // Split parent block
699
- marker = dom.split(parentBlock, marker);
700
-
701
- // Insert nodes before the marker
702
- each(dom.create('div', 0, content).childNodes, function(n) {
703
- last = marker.parentNode.insertBefore(n.cloneNode(true), marker);
704
- });
705
-
706
- // Move caret after marker
707
- select(last);
708
- } else {
709
- dom.setOuterHTML(marker, content);
710
- sel.select(ed.getBody(), 1);
711
- sel.collapse(0);
712
- }
713
-
714
- // Remove marker if it's left
715
- while (elm = dom.get(markerId))
716
- dom.remove(elm);
717
-
718
- // Get element, position and height
719
- elm = sel.getStart();
720
- vp = dom.getViewPort(ed.getWin());
721
- y = ed.dom.getPos(elm).y;
722
- elmHeight = elm.clientHeight;
723
-
724
- // Is element within viewport if not then scroll it into view
725
- if (y < vp.y || y + elmHeight > vp.y + vp.h)
726
- ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25;
727
- },
728
-
729
725
  /**
730
726
  * Inserts the specified contents at the caret position.
731
727
  */
@@ -736,8 +732,7 @@
736
732
  if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)
737
733
  ed.getDoc().execCommand('Delete', false, null);
738
734
 
739
- // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents
740
- ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo});
735
+ ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo});
741
736
  },
742
737
 
743
738
  /**
@@ -769,9 +764,6 @@
769
764
  };
770
765
 
771
766
  if ((typeof(h) === "string") && (h.length > 0)) {
772
- if (!entities)
773
- entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(",");
774
-
775
767
  // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line
776
768
  if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(h)) {
777
769
  process([
@@ -790,26 +782,12 @@
790
782
  [/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"], // Table cells get tabs betweem them
791
783
  /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags
792
784
  [/&nbsp;/gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*)
793
- [
794
- // HTML entity
795
- /&(#\d+|[a-z0-9]{1,10});/gi,
796
-
797
- // Replace with actual character
798
- function(e, s) {
799
- if (s.charAt(0) === "#") {
800
- return String.fromCharCode(s.slice(1));
801
- }
802
- else {
803
- return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " ";
804
- }
805
- }
806
- ],
807
785
  [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars.
808
786
  [/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks
809
787
  /^\s+|\s+$/g // Trim the front & back
810
788
  ]);
811
789
 
812
- h = dom.encode(h);
790
+ h = dom.decode(tinymce.html.Entities.encodeRaw(h));
813
791
 
814
792
  // Delete any highlighted text before pasting
815
793
  if (!sel.isCollapsed()) {