Ну, у меня есть только частичный ответ, но он все еще может вам помочь. Исходя из того, что я понял, вы хотели бы иметь возможность набирать или вставлять некоторый код в текстовую область tinyMCE (а не необработанный HTML-код поля редактора), а затем применять некоторые стили к этому блоку, так что это будет prettified.
(Как примечание, я думаю, что любой, кто квалифицирует добавление блока кода в поле текстового редактора richt, должен иметь возможность нажать кнопку «raw html», вставить свой код и обернуть его в <pre>
или * Тег 1004 *. Особенно, если вы добавите немного инструкций о том, что делать, чуть выше или ниже области редактора. И тогда вы будете свободны дома. И все так поступают.)
Тем не менее, возвращаясь к исходной проблеме. Если вы вводите строки кодов в текстовую область tinyMCE, то при каждом нажатии вы вводите свою строку в тег <p>
.
Так что если вы наберете:
if (this_is_the_best_line_ever == true) { ... }
и нажмите Enter, вы получите
<p>if (this_is_the_best_line_ever == true) { ... }</p>
Итак, используя ваш пример, вы бы никогда не увидели это
<code class="prettyprint">
codeline1
codeline2
codeline3
</code>
а точнее это
<code class="prettyprint">
<p>codeline1</p>
<p>codeline2</p>
<p>codeline3</p>
</code>
Проблема с последним в том, что это недействительный HTML, никогда не было, никогда не будет, и tinyMCE по праву не будет генерировать этот код. Причина в том, что <pre>
и <code>
являются встроенными элементами, а <p>
является элементом блочного уровня, поэтому <pre>
и <code>
не могут содержать <p>
s.
Мы подходим к ответу (даже если это только половина ответа), поэтому не сдавайтесь.
Лучшим подходом было бы использовать <div>
обертки вокруг вашего блока кода. Это законно, tinyMCE с радостью сделает это за вас, см. Ниже (обратите внимание на атрибут обертки!):
style_formats : [
{title : 'Codigo fuente', block : 'div', classes : 'prettyprint', wrapper: 1}
]
Мы могли бы начать праздновать прямо сейчас, но выбранный вами плагин, префтификатор кода, обрабатывает только теги <pre>
и <code>
из вашего html, так что, к сожалению, эти <div>
обернутые блоки кода не будут красивыми, о, так красиво ...
Вы можете а) взломать плагин prettify и заставить его проглотить теги div, имеющие определенные классы, или б) заставить tinyMCE забыть об этих <p>
оболочках.
Пока, перейдя ко второму варианту, вы можете инициализировать tinyMCE со следующими параметрами:
forced_root_block : false,
force_br_newlines : true,
force_p_newlines : false
и с этим ваши строки будут разделены тегами <br>
вместо обернутых тегами <p>
. Это очень не одобряется авторами tinyMCE по разным причинам (см. FAQ ), но это все еще допустимый вариант.
Теперь вы можете обмануть tinyMCE, чтобы обернуть весь контент в блок <code>
, со следующей конфигурацией (что само по себе немного взломано, но в основном работает, ахмм):
style_formats : [
{title : 'Codigo fuente', block : 'code', classes : 'prettyprint', wrapper: 1}
]
Ваша единственная проблема в том, что применение этого стиля лишит существующие теги <br>
из выделенного вами текста. Все верно, у вас будет весь выбранный вами код, сжатый в одну строку. И я попробовал много способов сохранить эти крошечные жалкие <br>
теги, но не смог уговорить tinyMCE сделать это. Вот где я сдался, отсюда и «полуответ». Удачи!