Javascript-форум (https://javascript.ru/forum/)
-   Сайт Javascript.ru (https://javascript.ru/forum/site/)
-   -   Перевод подсветки на highlight.js (https://javascript.ru/forum/site/7071-perevod-podsvetki-na-highlight-js.html)

PeaceCoder 24.01.2010 00:24

Цитата:

Сообщение от B@rmaley.e><e
Позиционировать js'ом не надо. А вот задавать каждому номеру свою высоту — да.

а если строка длинная и твой "номер" расширяется на 2 и более строк? в случае overflow - согласен можно, а если вот как хотят люди? что бы длинная строка переносилась на новую но нумерация оставалась "wordwrap" ?
А задавать высоту, своего рода и есть позиционирование.

Илья Кантор 24.01.2010 00:33

Dmitry A. Soshnikov,
Спасибо, исправлено.

По позиционированию - идея идеей, а вот бы прототип.. Чтоб работало ;)
Firefox он в буфер кладет даже display:none в случае таблицы.

PeaceCoder 24.01.2010 00:45

Цитата:

Сообщение от Илья Кантор
По позиционированию - идея идеей, а вот бы прототип.. Чтоб работало

делать ща нечего ща промучу маленький скрипт там умаю сам расширишь.

PeaceCoder 24.01.2010 01:07

<style>
.box {
  position: relative;
  width: 150px;
  }
#numbers{
  position: absolute;
  width: 25px;
  top: 0;
  bottom: 0;
  
  }
#numbers DIV {
  position: relative;
  width: 100%;
  text-align: right;
  
  }
#content {
  position: absolute;
  left: 30px;
  right: 0;
  }
</style>
  <div class='box'>
    <div id='numbers'>
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
      <div>5</div>
    </div>
    <div id="content">
      <div>строка 1 sdf sdf sdg sd gsdf gsd gsd gsd gs gsd gsd fgsd gsd g</div>
      <div>строка 2</div> 
      <div>строка 3 sdf sd sd gs s gs dfsd gsdf gsdf gsdf gsdf sd sd gsd gsdf sf s gsdf sdf sdf gsd sd gsd sd gsd gsdsdf gsd fsdf sd gsd gsd f</div> 
      <div>строка 4</div> 
      <div>строка 5</div> 
    </div>
  </div>
<script type="text/javascript">
var i,n=document.getElementById('numbers').childNodes,c=document.getElementById('content').childNodes;
for (var i=0;n[i];i++) if (n[i].nodeType!=3) n[i].style.height = c[i].clientHeight+'px';
</script>


ток чет тут не раскрывается область видимости.

B@rmaley.e><e 24.01.2010 01:24

Цитата:

Сообщение от PeaceCoder
а если строка длинная и твой "номер" расширяется на 2 и более строк? в случае overflow - согласен можно, а если вот как хотят люди? что бы длинная строка переносилась на новую но нумерация оставалась "wordwrap" ?

Что?

Octane 24.01.2010 04:02

Фиксированная ширина страницы спасает такой вариант.
А если кто-нибудь вставит большое изображение, вся нумерация строк кода развалится?
А есть гарантия, что на момент запуска скрипта, CSS уже загрузился, и стили применились?

Илья Кантор 24.01.2010 10:44

PeaceCoder - очень интересный вариант. .box width фиксированная - так, для примера да? В реальности блок кода может быть разной ширины..

С одной стороны могут быть глюки при ресайзе - ну так никто не мешает на onresize номера перепозиционировать.. Еще какие-то проблемы возможны?

PeaceCoder 24.01.2010 15:34

Цитата:

Сообщение от Илья Кантор
PeaceCoder - очень интересный вариант. .box width фиксированная - так, для примера да? В реальности блок кода может быть разной ширины..

Для примера, а вообще если убрать то ширина второй колонки будет на 30 пикс меньше общей ширины бокса (а он в свою очередь на всю ширину)
Цитата:

Сообщение от Илья Кантор
С одной стороны могут быть глюки при ресайзе - ну так никто не мешает на onresize номера перепозиционировать.. Еще какие-то проблемы возможны?

скипт надо запускать только тогда когда знаем что сайт полностью сформирован и отрисован. А можно сделать иначе - задать для кода фикс ширину, как я привел пример, а по по высоте получившейся строки задать фикс высоту номера. В случае этого сайта так и надо поступить. т.к. тут фикс ширина сайта.
Цитата:

Сообщение от Octane
А если кто-нибудь вставит большое изображение, вся нумерация строк кода развалится?
А есть гарантия, что на момент запуска скрипта, CSS уже загрузился, и стили применились?

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

B@rmaley.e><e 24.01.2010 18:16

http://df34.ru/barmaley/sh/test.html
IE6 идет лесом.

Dmitry A. Soshnikov 24.01.2010 18:21

Подсветка Питона сломалась

class A(object):
    def __init__(self):
        pass


А здесь не сломалась )

В блоге: http://javascript.ru/blog/Dmitry-A.-...a-organizaciya (теги закрыты правильно)

Dmitry A. Soshnikov 25.01.2010 00:51

Цитата:

Сообщение от Илья Кантор
Dmitry A. Soshnikov,
Спасибо, исправлено.

Было исправлено один момент, сейчас снова сломалось, ссылка та же - http://javascript.ru/blog/subzey/Fir...t#comment-2675 - смайлики преобразуются в <img />

Илья Кантор 25.01.2010 13:40

Теперь все ок?

PeaceCoder 25.01.2010 14:59

Хм. А че мы мучаемся ? Есть же спец тег OL=1 LI через него вот тут сделано так и нет никаких выделений

Илья Кантор 25.01.2010 15:39

Потому что Firefox в буфер кидает номера из списка такого.

P.S. файл не качал.

Dmitry A. Soshnikov 25.01.2010 19:26

Да, теперь ок.

Dmitry A. Soshnikov 25.01.2010 19:34

Нет, не ок. http://javascript.ru/ecmascript-in-detail - адрес почты преобразовался в смайлики и теги.

Илья Кантор 25.01.2010 21:48

Еще дубль. Теперь ок?

Dmitry A. Soshnikov 25.01.2010 22:11

Да, сейчас нормально.

Илья Кантор 26.01.2010 00:53

Ну... Перевод на новую подсветку можно считать успешным.

Сейчас сделаю опрос.

Илья Кантор 26.01.2010 12:24

Да, и еще сделал корректное автозакрытие тегов с кодом при генерации анонсов.

Gvozd 11.06.2010 16:44

ку
в прошлой версии подсветки, при запуске выполняемого JS он вроде бы выполнялся на отдельном же домене, для избежания кражи кук?!
А в новой версии такого не наблюдается.
было бы неплохо поправить

Kolyaj 11.06.2010 16:47

Да ну не только для кражи кук. Можно ведь всякую другую гадость делать. Не скажу какую на всякий случай :)

Gvozd 11.06.2010 16:52

да, я думаю, все и так прекрасно понимают, чем грозит незакрытая XSS

Илья Кантор 12.06.2010 22:09

Код запускается в рамках текущей страницы. Это бывает очень удобно, особенно для записей в блогах, демок и т.п.

С другой стороны, это действительно может быть небезопасно.

Теперь при запуске JS/HTML будет выводиться предупреждение (отключаемое).

Об XSS речи нет, т.к. код запускается непосредственно посетителем, при нажатии на кнопку.

Gvozd 12.06.2010 22:26

Цитата:

Сообщение от Илья Кантор
д запускается в рамках текущей страницы. Это бывает очень удобно, особенно для записей в блогах, демок и т.п.

разве код в форме для этого публикуется???!!!
он публикуется для того чтобы показать возможность самостоятельного кода, а не по отношению к данному сайту
так, что стоит вые-таки запускать для построннего домена
Цитата:

Сообщение от Илья Кантор
Теперь при запуске JS/HTML будет выводиться предупреждение (отключаемое).

очень фигово выводится
Цитата:

Сообщение от Илья Кантор
Об XSS речи нет, т.к. код запускается непосредственно посетителем, при нажатии на кнопку.

это все равно XSS соглсно моему определеию, и определению wiki

Илья Кантор 12.06.2010 23:00

Цитата:

Сообщение от Gvozd (Сообщение 59217)
разве код в форме для этого публикуется???!!!
он публикуется для того чтобы показать возможность самостоятельного кода, а не по отношению к данному сайту
так, что стоит вые-таки запускать для построннего домена

Хочется запускать код в рамках единого окна. Чтобы можно было разбивать пример на несколько блоков кода и т.п.

В принципе, есть одна идея. Можно сделать окно с другого домена и передавать ему код для eval через кросс-доменное общение между окнами: postMessage.

Для iframe можно постить код на сервис, который будет в ответ выдавать страничку с кодом.

Что думаете? Насколько это будет удобно?

Илья Кантор 13.06.2010 11:58

Реализовал выполнение на отдельном домене. К сообщению добавил стили.

e1f 13.06.2010 12:50

Илья, в Опере 10.53 сообщение не появляется, код не выполняется. :(

Илья Кантор 13.06.2010 13:52

CTRL-F5 ? CTRL-R ?
alert('Код')


<b>HTML</b>

Gvozd 13.06.2010 14:20

Opera 10.53
полет нормальный
Спасибо большое)

e1f 13.06.2010 18:34

Да, полет уже тоже нормальный :)
Большое спасибо.

Kolyaj 13.06.2010 21:22

А как word wrap отключить?

Илья Кантор 14.06.2010 00:17

Что отключить? Где?
Если в коде - сейчас не отключается. Имхо там если что-то еще и стоит сделать, то добавить глифы с индикацией переноса строк.

Гориз. прокрутка зло..

Kolyaj 14.06.2010 08:56

Цитата:

Сообщение от Илья Кантор
Гориз. прокрутка зло..

word wrap зло, ибо портит все отступы, делая из кода кашу.

B@rmaley.e><e 24.08.2010 19:04

SyntaxHighlighter обновился до 3-ей версии.

bevalorous 19.10.2012 09:50

Не работает подсветка кода при открытии локально сохраненной страницы
 
При открытии локально сохраненных страниц учебника не работает подсветка кода.
Firebug при этом показывает следующее сообщение в консоли ошибок:
Код:

ReferenceError: docRoot is not defined
Ошибка возникает только для страниц, которые были скачаны оффлайн-браузером Teleport Pro, т.к. там они сохраняются "как есть". Браузер Firefox сохраняет страницу по-другому, - меняя ее код, - и ошибка не появляется.

Ошибка вызвана тем, что не происходит правильная инициализация одного из классов SyntaxHighlighter - SHStrings. Конкретный участок кода, вызывающий ошибку, находится в файле shCore.js библиотеки SyntaxHighlighter, строки 40 и 41:
Код:

showhtml:
location.protocol == 'file:' ?
docRoot+'/files/local/showhtml.html' :
'http://ru.lookatcode.com/showhtml',
showjs:
location.protocol == 'file:' ?
docRoot+'/files/local/showjs.html' :
'http://ru.lookatcode.com/showjs',

Точнее, ошибку вызывает сжатая версия этого файла, которая лежит в папке /files/js, но ведь она, скорее всего, создается у вас автоматически?

Как видите, переменная docRoot нигде не инициализирована, и ошибка возникает только при открытии локального файла (location.protocol == 'file:'). Соответствующие файлы (showhtml.html и showjs.html) также отсутствуют на сервере.
Возможно, для устранения ошибки нужно обновить библиотеку SyntaxHighlighter, в последней версии (3.0.83) этот участок кода уже переработан и выглядит совершенно по-другому. Если я не ошибаюсь, ваш сайт использует SyntaxHighlighter версии 2.1.382, вышедшую около 2 лет назад.

Илья Кантор 19.10.2012 14:29

Старая версия хайлайтера лучше, поэтому используется она. Кроме того, на ней багфиксы и патчи мои.

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

bevalorous 22.10.2012 09:09

Цитата:

Сообщение от Илья Кантор (Сообщение 211201)
Старая версия хайлайтера лучше, поэтому используется она. Кроме того, на ней багфиксы и патчи мои.

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

Понимаю, что не гарантируется и что обновлять SyntaxHighlighter - не вариант. Но в данном случае ошибка совершенно точно возникает не по вине Teleport, а из-за того, что в режиме просмотра локального файла переменная docRoot не определена. Это ошибка в javascript-коде, и она проявляется и при сохранении страницы обычным браузером.

Если сохранить страницу локально в Opera, Chrome или IE8, при ее открытии возникает эта же самая ошибка, и подсветка не показывается как надо: все эти браузеры "спотыкаются" на неизвестной переменной docRoot и заканчивают выполнение скрипта (Chrome - продолжает). Firefox сохраняет страницу своим особым способом, выкидывая Javascript, и лишь поэтому ошибка при просмотре локально сохраненной страницы в нем не возникает.

Очень хороший учебник, примеры простые и понятные, указываются многие подводные камни :thanks: Скачал его себе целиком, а подсветка кода при локальном просмотре не работает :( У себя я эту ошибку заблокировал - достаточно оказалось просто закомментировать единственные два упоминания переменной docRoot в shCore.js, строки 40 и 41, - но вдруг кто-то еще наткнется на эту ситуацию и не сможет найти, в чем причина?

tenshi 22.10.2012 18:30

думаю было бы не плохо иметь такой учебник в chm формате, как для php.

nerv_ 05.11.2012 00:53

если написать $( и заключить в теги [js][//js] будет неожиданный результат :)


Часовой пояс GMT +3, время: 21:25.