/** * $Id: editor_plugin_src.js 520 2008-01-07 16:30:32Z spocke $ * * @author Moxiecode * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function() { var Event = tinymce.dom.Event; tinymce.create('tinymce.plugins.PastePlugin', { init : function(ed, url) { var t = this; t.editor = ed; // Register commands ed.addCommand('mcePasteText', function(ui, v) { if (ui) { ed.windowManager.open({ file : url + '/pastetext.htm', width : 450, height : 400, inline : 1 }, { plugin_url : url }); } else t._insertText(v.html, v.linebreaks); }); ed.addCommand('mcePasteWord', function(ui, v) { if (ui) { ed.windowManager.open({ file : url + '/pasteword.htm', width : 450, height : 400, inline : 1 }, { plugin_url : url }); } else t._insertWordContent(v); }); ed.addCommand('mceSelectAll', function() { ed.execCommand('selectall'); }); // Register buttons ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText', ui : true}); ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord', ui : true}); ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'mceSelectAll'}); if (ed.getParam("paste_auto_cleanup_on_paste", false)) { ed.onPaste.add(function(ed, e) { return t._handlePasteEvent(e) }); } if (!tinymce.isIE && ed.getParam("paste_auto_cleanup_on_paste", false)) { // Force paste dialog if non IE browser ed.onKeyDown.add(function(ed, e) { if (e.ctrlKey && e.keyCode == 86) { window.setTimeout(function() { ed.execCommand("mcePasteText", true); }, 1); Event.cancel(e); } }); } }, 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 }; }, // Private methods _handlePasteEvent : function(e) { var html = this._clipboardHTML(), ed = this.editor, sel = ed.selection, r; // Removes italic, strong etc, the if was needed due to bug #1437114 if (ed && (r = sel.getRng()) && r.text.length > 0) ed.execCommand('delete'); if (html && html.length > 0) ed.execCommand('mcePasteWord', false, html); return Event.cancel(e); }, _insertText : function(content, bLinebreaks) { if (content && content.length > 0) { if (bLinebreaks) { // Special paragraph treatment if (this.editor.getParam("paste_create_paragraphs", true)) { var rl = this.editor.getParam("paste_replace_list", '\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); for (var i=0; i

'); content = content.replace(/\r\r/g, '

'); content = content.replace(/\n\n/g, '

'); // Has paragraphs if ((pos = content.indexOf('

')) != -1) { this.editor.execCommand("Delete"); var node = this.editor.selection.getNode(); // Get list of elements to break var breakElms = []; do { if (node.nodeType == 1) { // Don't break tables and break at body if (node.nodeName == "TD" || node.nodeName == "BODY") break; breakElms[breakElms.length] = node; } } while(node = node.parentNode); var before = "", after = "

"; before += content.substring(0, pos); for (var i=0; i"; after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; } before += "

"; content = before + content.substring(pos+7) + after; } } if (this.editor.getParam("paste_create_linebreaks", true)) { content = content.replace(/\r\n/g, '
'); content = content.replace(/\r/g, '
'); content = content.replace(/\n/g, '
'); } } this.editor.execCommand("mceInsertRawHTML", false, content); } }, _insertWordContent : function(content) { var t = this, ed = t.editor; if (content && content.length > 0) { // Cleanup Word content var bull = String.fromCharCode(8226); var middot = String.fromCharCode(183); var cb; if ((cb = this.editor.getParam("paste_insert_word_content_callback", "")) != "") content = eval(cb + "('before', content)"); var rl = this.editor.getParam("paste_replace_list", '\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); for (var i=0; i(.*?)<\/p>', 'gi'), '

$1

'); } content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--"); content = content.replace(new RegExp(bull + "(.*?)
", "gi"), "

" + middot + "$1

"); content = content.replace(new RegExp('', 'gi'), "" + bull); // Covert to bull list content = content.replace(/<\/o:p>/gi, ""); content = content.replace(new RegExp('
]*>/gi, ""); if (this.editor.getParam("paste_remove_styles", true)) content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3"); content = content.replace(/<\/?font[^>]*>/gi, ""); // Strips class attributes. switch (this.editor.getParam("paste_strip_class_attributes", "all")) { case "all": content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"); break; case "mso": content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3"); break; } content = content.replace(new RegExp('href="?' + this._reEscape("" + document.location) + '', 'gi'), 'href="' + this.editor.documentBaseURI.getURI()); content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3"); content = content.replace(/<\\?\?xml[^>]*>/gi, ""); content = content.replace(/<\/?\w+:[^>]*>/gi, ""); content = content.replace(/-- page break --\s*

 <\/p>/gi, ""); // Remove pagebreaks content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks // content = content.replace(/\/? */gi, "");   // content = content.replace(/

 <\/p>/gi, ''); if (!this.editor.getParam('force_p_newlines')) { content = content.replace('', '' ,'gi'); content = content.replace('

', '

' ,'gi'); } if (!tinymce.isIE && !this.editor.getParam('force_p_newlines')) { content = content.replace(/<\/?p[^>]*>/gi, ""); } content = content.replace(/<\/?div[^>]*>/gi, ""); // Convert all middlot lists to UL lists if (this.editor.getParam("paste_convert_middot_lists", true)) { var div = ed.dom.create("div", null, content); // Convert all middot paragraphs to li elements var className = this.editor.getParam("paste_unindented_list_class", "unIndentedList"); while (this._convertMiddots(div, "--list--")) ; // bull while (this._convertMiddots(div, middot, className)) ; // Middot while (this._convertMiddots(div, bull)) ; // bull content = div.innerHTML; } // Replace all headers with strong and fix some other issues if (this.editor.getParam("paste_convert_headers_to_strong", false)) { content = content.replace(/ <\/h[1-6]>/gi, '

  

'); content = content.replace(//gi, '

'); content = content.replace(/<\/h[1-6]>/gi, '

'); content = content.replace(/ <\/b>/gi, '  '); content = content.replace(/^( )*/gi, ''); } content = content.replace(/--list--/gi, ""); // Remove --list-- if ((cb = this.editor.getParam("paste_insert_word_content_callback", "")) != "") content = eval(cb + "('after', content)"); // Insert cleaned content this.editor.execCommand("mceInsertContent", false, content); if (this.editor.getParam('paste_force_cleanup_wordpaste', true)) { var ed = this.editor; window.setTimeout(function() { ed.execCommand("mceCleanup"); }, 1); // Do normal cleanup detached from this thread } } }, _reEscape : function(s) { var l = "?.\\*[](){}+^$:"; var o = ""; for (var i=0; i