gratis español ejemplos configurar advanced javascript jquery tinymce

javascript - español - Cómo hacer que tinymce pegue en texto sin formato de forma predeterminada



tinymce gratis (10)

Lo busqué en Google miles de veces, Nadie ofrece una solución completa sobre cómo hacer que Tinymce pegue en texto plano por defecto y elimina cualquier formato sin hacer clic en el botón "pegar como texto".

¿Alguna idea de cómo implementar eso? ¿o cómo habilitar automáticamente el botón "pegar como texto"?

Gracias


Sin complemento: escuchar el evento de pegar, obtener datos del portapapeles

Si no puede usar o no desea utilizar un complemento por cualquier motivo, puede crear su propia función de devolución de llamada "pegar como texto sin formato" así:

tinyMCE.init({ // ..., setup: function (editor) { // Listen for paste event, add "Paste as plain text" callback editor.onPaste.add(function (editor, e) { // Prevent default paste behavior e.preventDefault(); // Check for clipboard data in various places for cross-browser compatibility. // Get that data as text. var content = ((e.originalEvent || e).clipboardData || window.clipboardData).getData(''Text''); // Let TinyMCE do the heavy lifting for inserting that content into the editor. editor.execCommand(''mceInsertContent'', false, content); }); } });

Nota: Esto fue creado para TinyMCE 3.5.x. La compatibilidad puede variar según la versión.


¿No es mejor usar:

var ed = tinyMCE.activeEditor;

en lugar de:

var ed = tinyMCE.get(''elm1'');


Acabo de encontrarme con este y descubrí que a partir de TinyMCE 3.4.2 puedes simplemente:

paste_text_sticky: true, paste_text_sticky_default: true

... que estuvo bien


Creo que la manera más fácil sería esta:

tinymce.init({ ... paste_as_text: true, plugins: "paste", ... });


FYI, TinyMCE ha mejorado esto al implementarlo como una opción predeterminada en el complemento de pegar. Más información: http://www.tinymce.com/wiki.php/Plugin:paste

Sin embargo, todavía no es perfecto. Así que aquí hay un script que también desconecta todo el HTML:

// Paste paste_auto_cleanup_on_paste : true, paste_remove_spans: true, paste_remove_styles: true, paste_retain_style_properties: false, paste_preprocess : function(pl, o) { // Replace <div> with <p> o.content = o.content.replace(/<div>/gi, "<p>"); o.content = o.content.replace(/<//div>/gi, "</p>"); o.content = o.content.replace(/</r/n/gi, "/n"); o.content = o.content.replace(/</n/n/gi, "/n"); o.content = o.content.replace(/</n/n/gi, "/n"); // Replace empty styles o.content = o.content.replace(/<style><//style>/gi, ""); o.wordContent = true; }, paste_postprocess : function(pl, o) { //console.log(o.node.innerHTML); var ed = pl.editor, dom = ed.dom; // Remove all tags which are not <p> or <br> tinymce.each(dom.select(''*'', o.node), function(el) { if (el.tagName.toLowerCase() != "p" && el.tagName.toLowerCase() != "br") { dom.remove(el, 1); // 1 = KeepChildren console.log(el.tagName); } dom.setAttrib(el, ''style'', ''''); }); },

Fuente: http://www.tinymce.com/forum/viewtopic.php?pid=60121#p60121


He resuelto este problema con este código

tinyMCE.init({ ... plugins : "paste", paste_text_sticky : true, setup : function(ed) { ed.onInit.add(function(ed) { ed.pasteAsPlainText = true; }); } .... })


Hice lo siguiente:

var pastePlainText = function() { // No need to pass in an ID, instead fetch the first tinyMCE instance var ed = tinyMCE.get(0); ed.pasteAsPlainText = true; //adding handlers crossbrowser if (tinymce.isOpera || /Firefox//2/.test(navigator.userAgent)) { ed.onKeyDown.add(function (ed, e) { if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) ed.pasteAsPlainText = true; }); } else { ed.onPaste.addToTop(function (ed, e) { ed.pasteAsPlainText = true; }); } };

Y entonces:

tinyMCE.init({ // ... plugins: "paste", oninit: pastePlainText // Note, without " // ... })


No estoy seguro de que esto sea posible, ya que "pegar como texto plano" en realidad realiza una limpieza en el texto antes de agregarlo a la ventana. Si solo pegas datos en la ventana, no se pueden realizar operaciones. (A menos que te hayas conectado al onChange o algo así), pero podrían terminar arreglando un código que ya había sido pegado y, por lo tanto, "corregirlo".


Para el tinyMCE 3X o 4X las cosas han cambiado un poco. ahora puedes hacer esto y funciona bien.

tinymce.init({ plugins: "paste", paste_as_text: true });


EDITAR: esta solución es para la versión 3.x, para la versión 4.x lea la respuesta de @Paulo Neves

El problema es que el complemento Pegar restablece automáticamente el texto sin formato pegar en cada pegado. Entonces, todo lo que tenemos que hacer: restablecerlo. El siguiente código debería ayudar.

tinyMCE.init({ ... oninit : "setPlainText", plugins : "paste" .... });

La definición de setPlainText

function setPlainText() { var ed = tinyMCE.get(''elm1''); ed.pasteAsPlainText = true; //adding handlers crossbrowser if (tinymce.isOpera || /Firefox//2/.test(navigator.userAgent)) { ed.onKeyDown.add(function (ed, e) { if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) ed.pasteAsPlainText = true; }); } else { ed.onPaste.addToTop(function (ed, e) { ed.pasteAsPlainText = true; }); } }

Entonces ahora siempre será claro.