1. linker

    28.07.2008 14:51

    День добрый,

    Пытаюсь использовать highlight.js для подсветки содержимого (XHTML), которое добавляется в документ динамически (XHR и немного разбора текста).

    Не работает (WinXP/FireFox 3.0 и Opera 9.51).
    Вот что я проверял:
    - содержимое находится внутри тэгов pre>code
    - знаки "больше", "меньше" и т.д. заменены на соотв. character references
    - вызов hljs.initHighlightingOnLoad сделан после определения другого обработчика window.onload (того, который генерирует это содержимое)

    Наверняка что-то забыл. =)

    Есть ли возможность вызвать функцию "обработать текст", которая будет возвращать фрагмент DOM или XHTML, сериализованный в строку? (В общем-то, это все, что мне нужно.)

    - Артем
  2. Иван Сагалаев

    28.07.2008 15:32

    Там есть hljs.highlightBlock(block), которой надо передпть элемент <code> (который в свою очередь находится внутри <pre>), и она его обработает прямо на месте. Поиск самих <code> остается на долю юзера (а точнее, его любимой библиотеки).

  3. linker

    29.07.2008 09:06

    >Там есть hljs.highlightBlock(block), которой надо передпть элемент <code> (который в свою очередь находится внутри <pre>)
    Получается, что block уже должен быть в документе? У меня в скрипте это содержимое генерируется вот так:

    DIV({id: 'test-'+sid},
    H2(parsed.comment), DIV(PRE(CODE(parsed.html))),
    TABLE(TBODY(
    map(rows, function(r) {
    return TR(TD(r.expr), TD(r.expect), TD(r.status), TD(r.detail));
    }))));

    parsed.html - это просто (X)HTML, без всякого экранирования (escaping'а).

    Подставляю вызов hljs.highlightBlock в PRE(CODE(parsed.html)) - не работает (функция ничего не возвращает, зато пытается модифицировать дерево DOM, где все и останавливается).

    Могу ли я немного изменить ваш код?
  4. Иван Сагалаев

    29.07.2008 11:27

    Изменить конечно можно, кто вам может помешать? :-)

    Я думаю, что все заработает, если результат вызова всего этого кода сначала вставить в документ, а потом прогнать на нужном <code> highlightBlock.

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

    Но повторюсь, меняйте все смело, потому что когда я еще доберусь до этого, не понятно.

  5. linker

    29.07.2008 12:01

    >Изменить конечно можно, кто вам может помешать? :-)
    Лень разве что. :)

    >Но повторюсь, меняйте все смело, потому что когда я еще доберусь до этого, не понятно.
    Ничего если добавится немного зависимостей? В частности мой NIH-free фреймворк (состоящий из modulesjs.com, DOMBuilder, Functional, XPath от LlamaLab и пр.).

    В общем, выложу немного переписанный вариант, как будет готово.
  6. Иван Сагалаев

    29.07.2008 12:29

    Ничего если добавится немного зависимостей? В частности мой NIH-free фреймворк (состоящий из modulesjs.com, DOMBuilder, Functional, XPath от LlamaLab и пр.).

    М-м... Если речь идет о том, чтобы включить ваши изменения потом в сам highlight.js, то тогда нет. Отсутствие зависимостей от какого-либо фреймворка — его фича. Я сначала подумал, что вы просто хотите его поменять у себя или выложить отдельную версию где-то. С этим все хорошо, конечно.

bbcode