Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.02.2016, 09:32
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Подключение bbcode к LocalStorage
Здравствуйте. Имею код, спасибо за помощь сообществу,для предосмотра сообщений.Для работы bbcode подключил ф-цию bbcodeParser, нашёл в инете. Всё работает, но не хватает кое чего, в том числе [code=php]. Решил использовать скрипт highlight.js. Дописал в bbcodeParser что надо, что бы парсил bbcode [code=php] в то, что нужно highlight.js но как его связать с bbcodeParser не понимаю.Прошу помощи.
Вот подключение bbcodeParser и вывода LocalStorage

function GetStorage() {
if (localStorage.currPerson !== undefined) {
var user = JSON.parse(localStorage.currPerson)
var bbcode = bbcodeParser.bbcodeToHtml(user.mess);
            $(get_mes).empty().append(bbcode)
..................................
}
}

bbcodeParser во вложении.
Сейчас на выходе имею
<pre><code class="php">/**здесь мой код**/</code></pre>
Но класс не подхватывается, как в прочем наверное и сам js. Класс и скрипт подключил в шаблоне в котором выводится код.

<script src="/components/forum/highlight/highlight.pack.js" type="text/javascript"></script>
<link href="/components/forum/highlight/styles/default.css" rel="stylesheet" type="text/css">
$(document).ready(function() {
  $('pre code').each(function(i, block) {
    hljs.highlightBlock(block);
  });
});
Вложения:
Тип файла: txt bbcode.txt (6.9 Кб, 6 просмотров)

Последний раз редактировалось ureech, 17.02.2016 в 09:39.
Ответить с цитированием
  #2 (permalink)  
Старый 17.02.2016, 13:07
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ureech,
М.б. инициализацию highlight делать не по $(document).ready, а по завершении работы bbcodeParser?
Ответить с цитированием
  #3 (permalink)  
Старый 17.02.2016, 15:08
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Да, разобрался, спасибо.Заработало, но на половину.Спрошу здесь, если не по теме пойду на другой форум.Код работает только в одну строку, если есть перенос то не парсит.Т.е. так работает
[code=php]$model = new cms_model_forum();[/code]
или так
[code=php]$model = new cms_model_forum();[/code]
[code=php]$model = new cms_model_forum();[/code]
а так нет
[code=php]$model = new cms_model_forum();
$model = new cms_model_forum();[/code]


Думаю дело в регулярке, пытался опции дописать в bbcodeParser, но что то не выходит
Ответить с цитированием
  #4 (permalink)  
Старый 17.02.2016, 15:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

ureech,
Перед парсером строку распарса нужно препарсить и заменить & на &и угловые скобки на &lt; , &gt;
Затем из строки изымают блоки [code] в стек, заменяя их в строке на boundary+n.stack+boundary и вставляя назад после парсера BB-кодов(дабы не парсило BB-теги в блоках с кодами)

Последний раз редактировалось Deff, 19.02.2016 в 01:08.
Ответить с цитированием
  #5 (permalink)  
Старый 17.02.2016, 15:39
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Deff,
Сори, но я мало что понял, но главное не вижу в коде \n и что такое нун?
Если можно, ткните носом или ссылку на пример.
Ответить с цитированием
  #6 (permalink)  
Старый 17.02.2016, 17:40
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от ureech
нун
нужно
\n - спецсимвол перевода строки (обычно его и не увидишь, (просто следущая подстрока отображается с новой строчки)
Сообщение от ureech
Если можно, ткните носом или ссылку на пример.
Просмотрите таблицу в регулярных выражениях http://javascript.ru/basic/regular-e...nom-vyrazhenii

Последний раз редактировалось Deff, 17.02.2016 в 17:54.
Ответить с цитированием
  #7 (permalink)  
Старый 17.02.2016, 19:53
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Понятно,сенкс.
Ответить с цитированием
  #8 (permalink)  
Старый 18.02.2016, 11:45
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Что то не выходит ничего. Пробовал в коде дописать сюда
'CODE' : '(.*?)' -> 'CODE' : '([.*?]\n)'
ничего не меняется.
Хотел добавить символ сюда
var token_match = /{([A-Z_]+[0-9]*)\n}/ig;

Вообще не работает. Может подскажите?
Вложения:
Тип файла: txt bbcode.txt (2.9 Кб, 2 просмотров)
Ответить с цитированием
  #9 (permalink)  
Старый 18.02.2016, 14:00
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

В общем жрёт парсер символ \n. Посмотрел исходный код и там после записи в LocalStorage
{"mess":"[code=php]    function b_2html($elem) {\n        return '<strong>'.$this ->[/code]"}


а после

[code=php]    function b_2html($elem) {
        return '<strong>'.$this ->[/code]

Последний раз редактировалось ureech, 18.02.2016 в 14:43.
Ответить с цитированием
  #10 (permalink)  
Старый 18.02.2016, 21:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

ureech,
Ну просто входную строку перед парсером
var str ="asdasdasdasd\nasdasdasd";
str = str.replace(/\n/g,'<br>');
alert(str)

Блоки BB-код [code=...]что-то[/code] нун вытаскивать из строки до парсера
ну короче:

var str = "asdas&da<sda>sd\nas[code=XXX]dasdasd[/code]asdasdasdasd\nas[code=YYY]dasdasd[/code]вавапвапвапва";
//Тут парсим & и угловые скобки
str = str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
alert(str);
//Вынимаем теги [code] из строки
var stack = [], j=-1, bound = '==bound==';
str = str.replace(/(\[code(:?=[^\]]+)?\])(.*?)(\[\/code\])/gi, function (s,p1,p2,p3){
    stack[++j]=[p1,p2,p3]; return bound+j+bound;
});
//Заменяем \n на <br>
str = str.replace(/\n/g,'<br>');
alert(str); /*Эту строку можно запихивать в парсер*/

Теги [code] парсим в стеке, вставляем их обратно в стек же, вместо [p1,p2,p3] и значение стека(распарсенный тег [code]) вставляем после распарса всей строки в парсере, заменяя ==bound==NUMstack==bound== на значение стека.

Типично boundary(разделитель или селектор) более длинный, типо bound = '====12358====';

Последний раз редактировалось Deff, 19.02.2016 в 22:25.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BBCode аля [html] для форумов phpBB pupena_san Javascript под браузер 0 06.07.2014 14:25
После добавления localstorage в backbone модель, POST запрос ничего не возвращает aphex Общие вопросы Javascript 0 03.12.2013 15:26
localstorage internet explorer10 не работает kostant Javascript под браузер 3 28.08.2013 18:15
Обход элементов localStorage berserk10 Events/DOM/Window 8 11.08.2013 14:55
Не сохраняется localStorage после перезагрузки браузера Бобр Firefox/Mozilla 1 20.10.2011 20:31