Могу ли я применить наложение зеркала кода вне определения режима? Код ниже работает, но кажется излишним и медленным. Я определяю режим для каждого редактора/зрителя на странице, которая может быть нулевой для многих. Как это можно оптимизировать?Нанесено зеркальное покрытие кода
В идеале, я хотел бы определить режим один раз, а затем применить наложение по мере необходимости.
Я не смог найти ответ, если смогу. Я хочу определить режим (он выделяет поисковый запрос (see this question)), а затем я хочу применить этот режим для многих редакторов/зрителей на странице. Каждый редактор/просмотрщик имеет другой язык и установлен на элемент DOM (например, <pre class="sourcecode" language="javascript">code</pr>
).
Я думаю, что решение будет иметь дело с return CodeMirror.overlayMode(CodeMirror.getMode(config, mode),searchOverlay, true);
, но я не смог заставить его работать.
$('.sourcecode').each(function() {
var value = $(this).text(),
search = (typeof keyword === 'undefined') ? false : true,
mode = $(this).attr('language'),
pre = $(this).get(0),
line = ($(this).attr('firstLineNumber') == undefined) ? 1 : parseInt($(this).attr('firstLineNumber'), 10);
// CodeMirror search highlighing
// this seems redundent, slow, and messy
if (search) {
CodeMirror.defineMode("highlightSearch", function(config, parserConfig) {
var searchOverlay = {
token: function(stream, state) {
if (stream.match(keyword)) {
return "highlightSearch";
}
while (stream.next() != null && !stream.match(keyword, false)) {}
return null;
}
};
return CodeMirror.overlayMode(CodeMirror.getMode(config, mode),searchOverlay, true);
});
}
var viewer = CodeMirror(function(elt) {
pre.parentNode.replaceChild(elt, pre);
}, {
value: value,
lineNumbers: true,
firstLineNumber: line,
matchBrackets: true,
lineWrapping: true,
readOnly: true,
mode: (search) ? 'highlightSearch' : mode,
});
});
Благодарим за любую помощь.
это может быть лучше уместиться на [codereview.stackexchange. ком] (http://codereview.stackexchange.com/). –