Я использую WYSIHTML5 Bootstrap ( http://jhollingworth.github.com/bootstrap-wysihtml5) , основанный на WYSIHTML5 ( https://github.com/xing/wysihtml5 ), который отлично справляется с очисткой HTML при копировании с веб-сайтов.
Я хотел бы иметь возможность обрабатывать код в редакторе, а затем выделять синтаксис с помощью HighlightJS.
Я создал новую кнопку и воспроизвел метод, используемый в wysihtml5.js, для включения и выключения жирного шрифта <b>
, используя вместо этого <pre>
:
(function(wysihtml5) {
var undef;
wysihtml5.commands.pre = {
exec: function(composer, command) {
return wysihtml5.commands.formatInline.exec(composer, command, "pre");
},
state: function(composer, command, color) {
return wysihtml5.commands.formatInline.state(composer, command, "pre");
},
value: function() {
return undef;
}
};
})(wysihtml5)
Но этого недостаточно. Редактор скрывает теги при редактировании. Мне нужно иметь возможность обернуть мой контент как в <pre>
, так и в <code>
ie. <pre><code></code></pre>
.
Это означает написание функции, отличной от той, что используется wysihtml5, и я не знаю, как это сделать... Может ли кто-нибудь помочь мне с этим?
Вот код функции formatInline в wysihtml5:
wysihtml5.commands.formatInline = {
exec: function(composer, command, tagName, className, classRegExp) {
var range = composer.selection.getRange();
if (!range) {
return false;
}
_getApplier(tagName, className, classRegExp).toggleRange(range);
composer.selection.setSelection(range);
},
state: function(composer, command, tagName, className, classRegExp) {
var doc = composer.doc,
aliasTagName = ALIAS_MAPPING[tagName] || tagName,
range;
// Check whether the document contains a node with the desired tagName
if (!wysihtml5.dom.hasElementWithTagName(doc, tagName) &&
!wysihtml5.dom.hasElementWithTagName(doc, aliasTagName)) {
return false;
}
// Check whether the document contains a node with the desired className
if (className && !wysihtml5.dom.hasElementWithClassName(doc, className)) {
return false;
}
range = composer.selection.getRange();
if (!range) {
return false;
}
return _getApplier(tagName, className, classRegExp).isAppliedToRange(range);
},
value: function() {
return undef;
}
};
})(wysihtml5);