django-tinymce HTMLField — вставить как обычный текст в админку

У меня установлен django-tinymce и различные модели в моем приложении с расширением HTMLField.

Я пытаюсь создать какую-то функцию «вставить как обычный текст» в администраторе django. Я хочу, чтобы форматирование из MS Word, тегов HTML и почти всего остального было удалено, когда пользователи делают ctrl + v / cmd + v / правый клик > вставить и т. д.

Я вижу, что многие люди говорят об этом, но я не могу заставить что-либо работать. Будучи django-tinymce, я делаю все это в TINYMCE_DEFAULT_CONFIG в settings.py.

Я думал, что у меня это сработало - я переопределил базовый шаблон администратора, чтобы включить файл js со следующей функцией (я не могу вспомнить, кому приписать эту функцию - возможно, кто-то на SO) -

function tinymcePastePlainText() {
    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_DEFAULT_CONFIG = {

'plugins': "'paste'",

'paste_text_sticky': "true",
'paste_retain_style_properties': "",
'oninit': "tinymcePastePlainText",

#...Further config

}

Это, казалось, делало то, что я хотел в прошлый раз, когда я смотрел, но теперь это перестало работать - отладка в браузере, кажется, показывает, что функция tinymcePastePlainText() никогда не запускается (хотя она загружена).

Я пробовал различные другие методы, такие как простая настройка моей конфигурации на -

TINYMCE_DEFAULT_CONFIG = {

'plugins': "'paste'",

'paste_auto_cleanup_on_paste': 'true',
'paste_remove_styles': 'true',
'paste_remove_styles_if_webkit': 'true',
'paste_strip_class_attributes': 'true',

#....further config

}

(это вроде ничего не изменило). Или

TINYMCE_DEFAULT_CONFIG = {

'plugins': "'paste'",

'setup': "function(ed) { ed.onInit.add(function(ed) {ed.pasteAsPlainText = true;});",

#....further config

}

Я попытался загрузить вышеуказанную функцию из отдельного js-файла, а затем включить имя функции в свою конфигурацию - 'setup': 'pasteAsPlainTextFuncion()', но это тоже не сработало.

Кажется, я потратил на это целую вечность, и на самом деле я не добился никакого прогресса - я понятия не имею, почему моя функция вызывалась, а теперь нет - инструмент отладки браузера не обнаруживает никаких ошибок.


person Aidan Ewen    schedule 24.01.2013    source источник
comment
Взгляните на: tinymce.com/wiki.php/Plugin:paste   -  person Brandon    schedule 25.01.2013
comment
Спасибо, Брэндон, я включил вашу ссылку в свое решение ниже.   -  person Aidan Ewen    schedule 25.01.2013


Ответы (2)


Возможно, вы захотите рассмотреть возможность использования четкого подхода с использованием специализированной функции. Взгляните на этот SO-вопрос: TinyMCE Вставить как обычный текст

person Thariama    schedule 25.01.2013
comment
Спасибо, Тариама. +1 от меня (здесь и в вашем связанном ответе). - person Aidan Ewen; 25.01.2013

Бесит! - По какой-то причине я применил и одинарные, и двойные кавычки на строке - 'plugins': "'paste'",. Плагин вставки не загружался. Я не знаю, как, почему и когда я это сделал.

Для всех, кто пытается сделать то же самое (я использую django 1.4.3 и django-tinymce 1.5.1b2). Мне удалось получить некоторые базовые функции «вставить как обычный текст» (по умолчанию) без использования обратного вызова javascript в любом месте. Я просто использовал следующую настройку -

TINYMCE_DEFAULT_CONFIG = {

'plugins': "paste",

'paste_remove_styles': 'true',
'paste_remove_styles_if_webkit': 'true',
'paste_strip_class_attributes': 'all',

#... further config

}

Я нашел документацию плагина вставки и Ответ Тариамы на SO очень информативен.

person Aidan Ewen    schedule 25.01.2013