Как сделать tinymce вставить обычный текст по умолчанию
Googled it тысячи раз, никто не дает полного решения, как сделать Tinymce вставить обычный текст по умолчанию и вычеркнуть любое форматирование, не нажимая кнопку "вставить как текст".
Любые идеи о том, как это реализовать? или как автоматически активировать кнопку "вставить как текст"?
Спасибо
Ответы
Ответ 1
EDIT: это решение для версии 3.x, для версии 4.x прочитайте ответ от @Paulo Neves
Проблема заключается в том, что плагин Paste автоматически сбрасывает обычную текстовую вставку для каждой вставки. Так что все, что нам нужно сделать - вернуть его обратно. Следующий код должен помочь.
tinyMCE.init({
...
oninit : "setPlainText",
plugins : "paste"
....
});
Определение 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;
});
}
}
Итак, теперь это всегда будет ясно.
Ответ 2
Для крошечных MCE 3X или 4X вещи немного изменились.
теперь вы можете сделать это, и он отлично работает.
tinymce.init({
plugins: "paste",
paste_as_text: true
});
Ответ 3
Я решил эту проблему с этим кодом
tinyMCE.init({
...
plugins : "paste",
paste_text_sticky : true,
setup : function(ed) {
ed.onInit.add(function(ed) {
ed.pasteAsPlainText = true;
});
}
....
})
Ответ 4
Просто наткнулся на это сам и обнаружил, что с TinyMCE 3.4.2 вы можете просто:
paste_text_sticky: true,
paste_text_sticky_default: true
... что было приятно.
Ответ 5
Я думаю, что самым простым способом было бы это:
tinymce.init({
...
paste_as_text: true,
plugins: "paste",
...
});
Ответ 6
Не лучше ли использовать:
var ed = tinyMCE.activeEditor;
вместо:
var ed = tinyMCE.get('elm1');
Ответ 7
FYI, TinyMCE улучшил это, реализовав его как параметр по умолчанию в плагине вставки.
Дополнительная информация: http://www.tinymce.com/wiki.php/Plugin:paste
Однако он все еще не идеален.
Итак, вот script, который также отключает все 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', '');
});
},
Источник:
http://www.tinymce.com/forum/viewtopic.php?pid=60121#p60121
Ответ 8
Без подключаемого модуля: прослушивание вставки события, получение данных буфера обмена
Если вы не можете использовать или не хотите использовать плагин по какой-либо причине, вы можете создать свою собственную функцию обратного вызова "вставить как обычный текст":
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);
});
}
});
Примечание. Это было создано для TinyMCE 3.5.x. Совместимость может варьироваться в зависимости от версии.
Ответ 9
если вы используете файл .yml, добавьте плагин paste
и paste_as_text: true
default:
plugins:
- paste
paste_as_text: true
Ответ 10
Я не уверен, что это возможно, так как "вставить как открытый текст" на самом деле выполняет очистку текста перед тем, как добавить его в окно. Если вы просто вставляете данные в окно, никакие операции не выполняются. (Если вы не подключены к onChange
или что-то еще), но вы можете в конечном итоге исправить код, который уже был вставлен, и, таким образом, "двойная фиксация".
Ответ 11
Я сделал следующее:
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;
});
}
};
И затем:
tinyMCE.init({
// ...
plugins: "paste",
oninit: pastePlainText // Note, without "
// ...
})