Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Подключение bbcode к LocalStorage (https://javascript.ru/forum/dom-window/61404-podklyuchenie-bbcode-k-localstorage.html)

ureech 19.02.2016 12:09

Ещё на шаг ближе.:)
С переносом получилось. Но работает только с php и css кодом, c html не хочет.Потому, как в этой части кода
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;
});

мне не понятно,что такое s,p1,p2,p3?
И не понятен '==bound=='.Что это что с ним делать.

Deff 19.02.2016 18:39

Цитата:

Сообщение от ureech
s,p1,p2,p3?

Ну давал жи ссылку на страницу с регулярками
s - найденная подсрока
pn - найденная скобка (по порядковому номеру - три скобки - три параметра

Deff 19.02.2016 18:44

Цитата:

Сообщение от ureech
И не понятен '==bound=='.Что это что с ним делать.

//После распарса парсером
//вставляем назад перепарсенные теги код из стека (ток их надо самому распарсить, заменить начальный тег(p1), к примеру на '<div><pre>', конечный(p3) - на '</pre></div>'; меж ними p2 =>(контент), т.е в каждой ячейке стека должен быть распарсенный тег, вместо массива [p1,p2,p3]
//str - строка после парсера, меняем "==bound==NUMstack==bound==", на распарсенный тег из стека
str = str.replace(/==bound==(\d+)==bound==/g, function (s,p1){
   return stack[+p1];
});

ureech 19.02.2016 21:11

Вроде всё получилось. Большое спасибо, теперь попробую самостоятельно с audio и video справиться.:)

ureech 20.02.2016 14:31

Вложений: 1
Возник небольшой баг. Если я оборачиваю строку в код, а затем в спойлер, то при сохранении строка в спойлере выглядит как строка, а не код.
Путь для решения ясен.
Добавляю к существующей
var cod = /(\[code(:?=[^\]]+)?\])(.*?)(\[\/code\])/gi;

переменную
var sp_cod = /(\[spoiler(:?=[^\]]+)?\]\[code(:?=[^\]]+)?\])(.*?)(\[\/code\]\[\/spoiler\])/gi;

для использования в стеке
a.mess = (a.mess).replace(sp_cod, function (s,p1,p2,p3){
    stack[++j]=[p1,p2,p3]; return bound+j+bound;
});

Но не могу сообразить как правильно условие прописать здесь, а затем и в парсере.
Если здесь думаю что так
if(cod){
var stack = [], j=-1, bound = '==bound==';
a.mess = (a.mess).replace(cod, function (s,p1,p2,p3){
    stack[++j]=[p1,p2,p3]; return bound+j+bound;
});
}
if(sp_cod){
var stack = [], j=-1, bound = '==bound==';
a.mess = (a.mess).replace(sp_cod, function (s,p1,p2,p3){
    stack[++j]=[p1,p2,p3]; return bound+j+bound;
});
}


То в парсере вообще не знаю. Там используется такой метод
me.addBBCode('[code=php]{CODE}[/code]', '<code>{CODE}</code>');

Для сойлера соответственно свой, для кода в спойлере я допишу, но как заставить использовать нужный?

Deff 20.02.2016 15:51

Цитата:

if(cod){
var stack = [], j=-1, bound = '==bound==';
a.mess = (a.mess).replace(cod, function (s,p1,p2,p3){
stack[++j]=[p1,p2,p3]; return bound+j+bound;
});
}
if(sp_cod){
var stack = [], j=-1, bound = '==bound=='; //строка лишняя
a.mess = (a.mess).replace(sp_cod, function (s,p1,p2,p3){
stack[++j]=[p1,p2,p3]; return bound+j+bound;
});
}
По идее все блоки c кодами нужно складывать в один стек и индекс j продолжать наращивать, а не сбрасывать в -1
Либо заводить на каждый иной блок код новый массив стека, с иным именем(не вижу в этом смысла)
И ставя второй раз stack = [] - вы убили все данные, добавленные в Первом цикле
================
Про спойлер,
Есть некий Вариант с прописыванием своих собственных функций обработки
http://javascript.ru/forum/misc/2493...tml#post403467

ureech 20.02.2016 16:10

Понятно. Спасибо.


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