Я пишу мессенджер и моя цель добавить возможность вставлять код и выделять его, как это делается на Stack Overflow. Я использую библиотеку prettify от Google. Вот часть html:
<div id="test" style="margin-left: auto; margin-right: auto; overflow-y: scroll;" contenteditable="true"
placeholder="Type your message" name="message" ng-model="message">
</div>
и js-функция:
$scope.pasteHtmlAtCaret = function () {
document.getElementById('test').focus();
var sel, range;
if (window.getSelection) {
// IE9 and non-IE
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
// Range.createContextualFragment() would be useful here but is
// only relatively recently standardized and is not supported in
// some browsers (IE9, for one)
var el = document.createElement("div");
//var el = document.getElementById('test');
/*var text = sel.toString().replace(/</g, "<");
text = text.replace(/>/g, ">");
text = text.replace(/&/g, "&");*/
el.innerHTML = "<pre class=prettyprint linenums><code>" + sel.toString() + '</code></pre></br>';
range.deleteContents();
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
var firstNode = frag.firstChild;
range.insertNode(frag);
prettyPrint();
// Preserve the selection
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.setStartBefore(firstNode);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if ((sel = document.selection) && sel.type != "Control") {
var originalRange = sel.createRange();
originalRange.collapse(true);
sel.createRange().pasteHTML(html);
range = sel.createRange();
range.setEndPoint("StartToStart", originalRange);
range.select();
}
}
Как видите, я уже пробовал ставить <
(в комментариях) и другие символы вместо символов ‹, > и &. Однако они отображаются так, как они есть в коде js, а не как символы. Подскажите, пожалуйста, как мне вставить преттифицированный html-код внутрь моего блока div (или, возможно, другого контейнера).
Возможно, вы могли бы также сказать мне, как сделать так, чтобы prettify отображал номера строк, потому что они сейчас не отображаются (они как-то воспринимаются как другой класс)