Подсветка синтаксиса FreePascal

Вопросы, связанные с работой сайта и форума. Замечания и пожелания.

Модератор: Модераторы

Нужна подсветка синтаксиса на форуме?

да, это очень нужный функционал
4
14%
да, хотелось бы
22
76%
нет
0
Голосов нет
не важно
3
10%
 
Всего голосов : 29

Re: Подсветка синтаксиса FreePascal

Сообщение hinst » 15.04.2014 21:50:21

ev писал(а):т.е. еще тянуть в зависимости jQuery?

Если highlight.js не использует jQuery, то будет работать без jQuery. Я умею писать на JavaScript, и скрипт я предлагаю создать на чистом JavaScript, а jQuery я не изучал. Мой код не будет требовать jQuery
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Подсветка синтаксиса FreePascal

Сообщение ev » 15.04.2014 22:08:17

готовый скрипт только приветствуется

Добавлено спустя 19 минут 38 секунд:
вроде сам набросал
Код: Выделить всё
   var boxes = document.getElementsByTagName('pre');
   for (i=0; i<boxes.length; i++) {
      if (boxes[i].className == 'code')
      hljs.highlightBlock(boxes[i]);
   }

теперь на сайте подсвечивается вроде все
но форум не хочет только по <code> подсвечивать
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Подсветка синтаксиса FreePascal

Сообщение hinst » 15.04.2014 22:39:55

Ну как хотите. А он работает? Так мне что-нибудь делать или нет? Просто зачем я буду делать, если за меня уже всё сделано
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Подсветка синтаксиса FreePascal

Сообщение ev » 15.04.2014 22:46:34

А он работает?

для статей на сайте - вроде работает
для подсветки на форуме - нет
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Подсветка синтаксиса FreePascal

Сообщение hinst » 15.04.2014 22:55:38

ну тогда пока что выключите его на форуме если не трудно. Когда добьюсь чтобы у меня заработало, тогда выложу готовый скрипт здесь
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Подсветка синтаксиса FreePascal

Сообщение Mirage » 15.04.2014 22:57:58

mirk писал(а):
Mirage писал(а):Лучше всего было бы обновить PHPBB до 3 и попробовать установить плагин типа этого

А где же ваше любимое "просто включить плагин"?


Это кто-то другой писал.

mirk писал(а):Ключевое слово "вроде". Просто так подключить нельзя - он не будет раскрашивать.
Надо либо в коде форума менять html теги для [code], либо править сам код скрипта подсветки.
Но как я писал выше - это беглый осмотр проблемы, т.е. я могу ошибаться.


Я, прежде чем предложить, посмотрел что подсвечивает JS и как выводит код форум. Выводит он именно в теге "code" - см. скрин.
И JS его же "из коробки" подсвечивает.

И объясните что за доблесть такая, не использовать jQuery? Это уже давно как стандартная библиотека для JS.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Подсветка синтаксиса FreePascal

Сообщение ev » 15.04.2014 23:08:48

Mirage писал(а):И JS его же "из коробки" подсвечивает.

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

Mirage писал(а):И объясните что за доблесть такая, не использовать jQuery? Это уже давно как стандартная библиотека для JS.

пока на сайте не используется jQuery, поэтому тянуть библиотеку ради одной мелочи смысла нет
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Подсветка синтаксиса FreePascal

Сообщение hinst » 15.04.2014 23:44:22

В общем мне удалось кое-как получить работающий скрипт
Код: Выделить всё
// ==UserScript==
// @name        Highlight FreePascal.ru
// @namespace   highlight.freepascal.ru
// @include     http://freepascal.ru/*
// @version     1
// @grant       none
// ==/UserScript==
(
    function (window)
    {
        //highlight_js_styleSheetURL = "http://freepascal.ru/highlight.solarized_light.css";
        highlight_js_styleSheetURL = "http://highlightjs.org/static/styles/mono-blue.css";
        //highlight_js_scriptURL = "http://freepascal.ru/highlight.pack.js";
        highlight_js_scriptURL = "http://highlightjs.org/static/highlight.pack.js";
        var loadStyleSheet = function(url)
        {
            var $ = document; // shortcut
            var cssId = 'codeHighlightingStyleSheet';  // you could encode the css path itself to generate id..
            if (!$.getElementById(cssId))
            {
                var head  = $.getElementsByTagName('head')[0];
                var link  = $.createElement('link');
                link.id   = cssId;
                link.rel  = 'stylesheet';
                link.type = 'text/css';
                link.href = url;
                link.media = 'all';
                head.appendChild(link);
            }
        };
        var loadScript = function(url, callback)
        {
            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.src = url;       
            eval(script.innerHTML);
            callback();
        };
        var processCodeBox = function(box)
        {
            for (var i = 0; i < box.children.length; i++)
            {
                var element = box.children[i];
                element.removeAttribute("class");
                if (element.tagName == "DD")
                {
                    var codeElement = element.firstChild;
                    codeElement.style = "color: black";
                    hljs.highlightBlock(codeElement);
                    //console.log(codeElement.innerHTML);
                }
            }           
        };
        var goOn = function()
        {
            console.log("Now highlighting...");
            hljs.tabReplace = '    ';
           hljs.configure({useBR: true});
            var boxes = document.getElementsByClassName("codebox");
            console.log("Found code boxes: " + boxes.length);
            for (var i = 0; i < boxes.length; i++)
            {
                var box = boxes[i];
                processCodeBox(box);
            }
            console.log("Highlighted...");
        };
        var mainRoutine = function()
        {
            console.log("Now loading style sheet...");
            loadStyleSheet(highlight_js_styleSheetURL);
            console.log("Now loading script...");
            loadScript(highlight_js_scriptURL, goOn);     
        };
        mainRoutine();
    }
)(window);

Вот как-то так. По идее можно включить его на форуме, либо использовать в Firefox Greasemonkey, что я прямо сейчас и делаю, так что у меня уже весь код на форуме отображается с подсветкой синтаксиса

Добавлено спустя 1 минуту 24 секунды:
Мне, правда, не очень удалось протестировать его потому, что на сайте сейчас уже включен один ещё скрипт, они могут влиять друг на друга.
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Подсветка синтаксиса FreePascal

Сообщение Mirage » 16.04.2014 11:45:47

ev писал(а):не очень понимаю
яваскрипт из коробки ничего не подсвечивают, это язык


Под "JS" я имел в виду конкретный обсуждаемый здесь скрипт: highlight.js
По умолчанию ему еще тег "pre" нужен.
Значит, с помощью jQuery можно инициализировать так:
Код: Выделить всё
$(document).ready(function() {
  hljs.configure({useBR: true});  // скорее всего, без тега pre эта строчка нужна
  $('.codebox').each(function(i, e) {hljs.highlightBlock(e)});
});


ev писал(а):пока на сайте не используется jQuery, поэтому тянуть библиотеку ради одной мелочи смысла нет


Такие "мелочи" - основной мотив использования jQuery.
Как раз, чтобы не использовать сомнительные костыли, типа приведенного выше.
Ведь в jQuery код, который это делает, уже проверен во всех браузерах, в т.ч. на безопасность и оптимизирован.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Подсветка синтаксиса FreePascal

Сообщение hinst » 16.04.2014 12:12:30

дэ почему сомнительные костыли, всё там нормально на самом деле.
Первые две функции нужны для загрузки CSS-файла и скрипта. По идее их можно заменить на <script src=...> и <link href="..." rel="stylesheet">, это просто сделано чтобы скрипт работал в GreaseMonkey, потому что там надо обойтись только java-скриптом, и просто так вставить теги нельзя. А далее просто идёт код, который выбирает на странице нужные элементы

Добавлено спустя 1 минуту 59 секунд:
там надо выбрать конкретно элементы с классом codebox, а в них только элементы с тэгом DD, а в них ещё вложенный. И ещё светло-зелёный шрифт меняется на чёрный, потому что чёрный на белом на мой взгляд лучше, чем светлое на светлом
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Подсветка синтаксиса FreePascal

Сообщение xdsl » 16.04.2014 12:17:10

Судя по разгоревшейся полемике, тема актуальная.
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03

Re: Подсветка синтаксиса FreePascal

Сообщение hinst » 16.04.2014 12:24:06

по идее можно будет этот скрипт доделать чтобы он вставлял после "ВЫДЕЛИТЬ ВСЁ" ещё такую кнопочку чтобы можно было отключить подсветку вообще, ещё кнопочку чтобы выбрать конкретную подсветку на случай, если язык автоматически определился не правильно, и ещё чтобы можно было выбрать другой моноширинный шрифт кроме Courier New, который страшный
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Подсветка синтаксиса FreePascal

Сообщение ev » 16.04.2014 13:31:36

hinst писал(а):там надо выбрать конкретно элементы с классом codebox, а в них только элементы с тэгом DD, а в них ещё вложенный.

почему не выбрать просто <code>?

Mirage писал(а):Значит, с помощью jQuery можно инициализировать так:

не сильно отличается от кода на чистом JS (я выше приводил)

Mirage писал(а):Такие "мелочи" - основной мотив использования jQuery.

все зависит от ситуации
если на чистом JS лишние несколько строк - то тянуть jQuery не имеет смысла

xdsl писал(а):Судя по разгоревшейся полемике, тема актуальная.

тема актуальна 4 пользователям из 2928... это скольким в % ? ;)
даже если активных не более 10%, то это менее 1.5%

hinst писал(а):если язык автоматически определился не правильно

на таких маленьких кусках кода скрипт очень часто ошибается (в отладчике видно какой язык он определяет)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Подсветка синтаксиса FreePascal

Сообщение mirk » 16.04.2014 13:54:20

Mirage писал(а):Это кто-то другой писал.

Извиняюсь, спутал с hinst (правда сути это не меняет).

ev писал(а):к слову, крайняя статья на сайте за авторством именно hinst
за что ему определенно спасибо ;)

Определенно спасибо, но это ведь не 50 статей за 6 лет ;)
Раз уж пошли претензии к модераторам за медленную реакцию на просьбы, то в ответ можно тоже услышать претензии за аналогичную реакцию.

hinst писал(а):И ещё светло-зелёный шрифт меняется на чёрный, потому что чёрный на белом на мой взгляд лучше, чем светлое на светлом

Это разве не задается в CSS с темой?

Сейчас я вижу работает первый вариант (от ev). Причем JS отрабатывается корректно. Но не подхватывается тема.
Это глюк такой? Разве может не подхватываться указанный CSS?

ev
Хоть некоторые и высказывают свое недовольство отсутствием подсветки синтаксиса, но им все лень создать опрос.
Можно ли опрос в этой теме создать? Посмотрим на активность пользователей.
mirk
постоялец
 
Сообщения: 317
Зарегистрирован: 24.09.2007 10:03:39

Re: Подсветка синтаксиса FreePascal

Сообщение hinst » 16.04.2014 13:58:42

ev писал(а):почему не выбрать просто <code>?

Это как раз чтобы можно было доработать, добавить ещё какие-то кнопки, например, чтобы можно было вырубить подсветку или шрифт поменять, или тему

Насчёт CSS предполагаю, что CSS лежит в http://freepascal.ru/highlight.pack.js, а сейчас он ищется скорее всего в http://freepascal.ru/forum/highlight.pack.js, потому и не открывается

Добавлено спустя 2 минуты 4 секунды:
точнее, css файл, я имею в виду. Не то написал. В общем, css-файл в корне, а не в /forum/
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Пред.След.

Вернуться в Обсуждение сайта

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru