Deff, работает даже несмотря на не закрытые теги <p> и </p>.
Мне кажется на форумах есть какая-то система защиты от дурака, а может дело в jquery.
Обновленный спойлер
Сообщений 221 страница 240 из 314
Поделиться221Сб, 10 Мар 2012 15:37:29
Поделиться222Сб, 10 Мар 2012 15:49:42
RUSSIAN_GOBLIN
Хм - возможно разныя методики в браузерах (в Opere не вставляет при начальном теге </p>), давно уже тестил
.innerHTML - проходит
Поделиться223Сб, 10 Мар 2012 15:50:23
RUSSIAN_GOBLIN
Deff
Так какой лучше ставить?
Поделиться224Сб, 10 Мар 2012 15:52:48
ruslan_as
Я не наю, мой работает, но пока без доп названий и кнопка большая
Поделиться225Сб, 10 Мар 2012 16:02:44
Я не наю, мой работает, но пока без доп названий и кнопка большая
Это не беда
В HTML-верх:
<script type="text/javascript"> FORUM.set('editor.spoiler_d', {name:'Спойлер',onclick:function(){bbcode('[quote==Spoiler]','[/quote]');}}); </script> <style type="text/css"> #button-spoiler_d {background:url('http://img706.imageshack.us/img706/1943/spoiler.gif') no-repeat center !important;} </style> <style id="MakeSpoiler">.punbb .post .quote-box{display:none!important;}</style>
В HTML-низ:
<script type="text/javascript"> var spl_wrap_1='<div class="spoiler quote-box" style="border:none; background:transparent; margin:0;"><input type="button" onclick="spl_2(this);" value="Спойлер"/><div class="show-hide" style="margin-top:6px;width:100%!important;display:none;"></br><blockquote>'; var spl_wrap_2='</blockquote></div></div>'; function spl_2(n){ $(n).parents('div.spoiler').children('div.show-hide').toggle('slow'); if($(n).val()=='Спойлер')$(n).val('Закрыть'); else $(n).val('Спойлер'); } $(".post-box .quote-box cite:contains('=Spoiler написал(а):')").each(function (i) { $(this).parent(".quote-box").replaceWith(spl_wrap_1+$(this).parent(".quote-box").find("blockquote:first").html()+spl_wrap_2);}) $('#MakeSpoiler').replaceWith(""); </script>
Поделиться226Сб, 10 Мар 2012 16:47:55
В связи с вышеуказанным фактом
вместо этого скрипта спойлера лучше ставить этот:
во всех этих вариантах один минус без указания тега <p> в селекторе, спойлер начинает работать в теге [ code ][ /code ]
так-то можно и без регулярки обойтись, типа так
для спойлера с описанием открытой и закрытой кнопки
<script language="javascript"> $('td#button-code').before('<td style=\'background-image:url("http://img706.imageshack.us/img706/1943/spoiler.gif");background-repeat:no-repeat;background-position:center center;\' onclick="tag_spolier()"><img src="/i/blank.gif" alt="Спойлер"></td>'); function tag_spolier() {var FoundErrors = ''; var enterTITLE = prompt("Введите описание закрытой кнопки", 'Спойлер'); var enterTITLE2 = prompt("Введите описание открытой кнопки", 'Закрыть'); bbcode('[spoiler='+enterTITLE+'|'+enterTITLE2+']','[/spoiler]');} $(function(){ $('input.spoiler-button').click(function(){ $(this).parents('div.spoiler-box').find('blockquote.quote-box').toggle('normal'); var a = $(this).attr('value');$(this).attr('value',$(this).attr('id'));$(this).attr('id',a); }); }); if ((document.URL.indexOf("viewtopic.php") != -1) || (document.URL.indexOf("post.php") != -1)) { var lis = document.querySelectorAll("div.post-content"); for (x in lis){ var post = lis[x].innerHTML; while (post.indexOf("[spoiler") != -1) { post = post.replace(/\[spoiler=(.*?)\|(.*?)\]/gim, "<div class='spoiler-box' style='padding:1px;background: none;border: 0;'><input id='$2' class='spoiler-button' style='width:140px;font-size:10px; margin:0; cursor: pointer; font-weight:bold' type='button' value='$1'><blockquote class='quote-box' style='display:none; width:97%;border: 1px solid #88b5df;margin:0;'>"); }; while (post.indexOf("[/spoiler]") != -1) { post = post.replace("[/spoiler]", "</blockquote></div>"); }; lis[x].innerHTML = post;}} </script>
с тегом <p> в селекторе не катит пустая строка, без тега <p> спойлер работает в бб-коде, дилемма остаётся,
так что исключение третьего подшаблона из регулярки проблему не решает
Поделиться227Сб, 10 Мар 2012 16:54:36
а может дело в jquery.
последний мой вариант здесь, который в посте №231, на обычном js, работает с любым количеством пустых строк и тегов <p> внутри спойлера
Поделиться228Сб, 10 Мар 2012 16:58:34
Romych
Для блока код - обычно стандартное решение, временное изъятие его в переменную с заменой на группу спецсимволов =>к примеру %%%%%%%%%%%%%%%%%%%%%%% - после перепарсивания со спойлером - данную группу опять заменяем на код, в нашей переменной
Поделиться229Сб, 10 Мар 2012 17:10:20
Romych
Для блока код - обычно стандартное решение, временное изъятие его в переменную с заменой на группу спецсимволов =>к примеру %%%%%%%%%%%%%%%%%%%%%%% - после перепарсивания со спойлером - данную группу опять заменяем на код, в нашей переменной
как вариант, оно то понятно, но всё это костыли по большому счёту, было бы здорово, если бы Макс в движке в парсере поколдовал с тегом бб-код
Поделиться230Сб, 10 Мар 2012 17:11:47
Romych
Да ясный фиг - Спойлер востребован везде, старый более 4кб, тем паче вроде Админ ориентирован на сокращение кодов на странице
Поделиться231Сб, 10 Мар 2012 17:17:42
Deff
а ещё было бы супер, если бы в Цензуре в поле Заменяющее слово, появилась бы поддержка html вместо слова,
пока срабатывает лишь замена слова на бб-теги или замена одного бб-тега на другой,
тогда бы можно было лепить собственные теги в любых количествах и любого качества
Поделиться232Сб, 10 Мар 2012 17:28:57
последний мой вариант здесь, который в посте №231, на обычном js, работает с любым количеством пустых строк и тегов <p> внутри спойлера
В мозилле и мой код работает также. В др. браузерах надо проверитьь. Но Deff пишет что в опере не пашет...
P.S.: сделал так, что при наличии в сообщении бб-кода [ code ][ /code ] спойлер не работает.
Осталось сделать так чтобы спойлер не работал, если он именно внутри бб-кода.
а ещё было бы супер, если бы в Цензуре в поле Заменяющее слово, появилась бы поддержка html вместо слова
Этого не будет. Админ делает наоборот, чтобы снизить нагрузку на сервер.
Отредактировано RUSSIAN_GOBLIN (Сб, 10 Мар 2012 17:32:55)
Поделиться233Сб, 10 Мар 2012 17:35:15
Осталось сделать так чтобы спойлер не работал, если он именно внутри бб-кода.
об этом и речь
В мозилле и мой код работает также.
если быть точным, то это тоже мой, но переделанный тобою
Поделиться234Сб, 10 Мар 2012 17:51:02
если быть точным, то это тоже мой, но переделанный тобою
Да, это действительно так
Суть вот в чём: нужно найти и подсчитать кол-во bb-code до спойлера - открытия их и закрытия, если они равны - спойлер не в bb-code.
Но есть и ещё варианты. Я думаю вообщем.
Добавлено:
Я сделал так чтобы код не работал внутри bb-code. Но он стал не работать при пустых строках
И ещё добавлено:
Сделал уже так что работает при пустых строках и не работает в bb-code,
но за одним исключением - не работает при пустых строчках, если в том же сообщении есть bb-code.
Отредактировано RUSSIAN_GOBLIN (Сб, 10 Мар 2012 19:43:35)
Поделиться235Сб, 10 Мар 2012 21:41:34
Универсальный парсер BB-кодов, с вложенностью тегов
и исключением из парсинга code-box
<script> // 888888 =SETTING-SECTION= 88888 var a='Spoiler'; //Имя тега; var b='[/'+a+']'; //Вид конечного тега; var c='['+a+'='; //Вид неизменяемой части начального тега; var patt1='\\['+a+'=(.*?)\\|(.*?)\\]'; //Паттерн начала; var patt2='\\[\/'+a+'\\]'; //Паттерн концовки; var zamena1 ="<div class='spoiler-box' style='padding:1px;background: none;border: 0;'><input id='$2' class='spoiler-button' style='width:auto;font-size:11px; margin:0; cursor: pointer; font-weight:bold' title='Cкрыть/показать' type='button' value='$1'><blockquote class='quote-box' style='display:none; width:auto;margin:0;'>"; var zamena2 ='</blockquote></div>'; //888888 =END//SETTING-SECTION = 88888 var regexp1 = new RegExp(patt1,"img"); var regexp2 = new RegExp(patt2,"img"); $("div.post-content").each(function (){ var Arr_CodeBox=[]; var d=$(this).html(); if(d.indexOf(b)==-1) return true; $(this).find('.code-box').each(function (j){ $(this).wrap('<p class=CodeBox alt='+j+'></p>') Arr_CodeBox[j]=$(this).remove(); }); d=$(this).html(); for(i=0; i<1000; i++){ if((x=d.indexOf(b))==-1)break; //alert(x); if((z=d.lastIndexOf(c,x))==-1)break; var kj=d.substring(z,x); N=kj.replace(regexp1,zamena1)//alert(kj+'=>'+N) if(N==kj)break; d=d.substring(0,z)+N+zamena2+d.substring(x+b.length);//alert(d) $(this).html(d); } $(this).find('p.CodeBox').each(function (j){ $(this).replaceWith(Arr_CodeBox[j]); }); }); </script>
В принципе мон приделать парсинг одним проходом нескольких различных BB-кодов
Ксать кликкер для вложенных чуть уточнить
<script>
$(function(){
$('input.spoiler-button').click(function(){
$(this).parents('div.spoiler-box:first').find('blockquote.quote-box:first').toggle('normal');
var a = $(this).attr('value');$(this).attr('value',$(this).attr('id'));$(this).attr('id',a);
});});
</script>
Отредактировано Deff (Вс, 11 Мар 2012 10:59:00)
Поделиться236Сб, 10 Мар 2012 23:07:07
Универсальный парсер BB-кодов, с вложенностью и обходом code-box
а для чего он?) я чет и не понял из названия)
Поделиться237Сб, 10 Мар 2012 23:22:15
kosoy
Эт к дисскуссиям C Ромычем и Гоблином
Поделиться238Сб, 10 Мар 2012 23:38:46
Deff
ааа, как успехи со спойлером под ник? ну или скрытый текст, виден только тому , кому адресовано сообщение.
Отредактировано kosoy (Сб, 10 Мар 2012 23:44:21)
Поделиться239Вс, 11 Мар 2012 01:44:27
Суть вот в чём: нужно найти и подсчитать кол-во bb-code до спойлера - открытия их и закрытия, если они равны - спойлер не в bb-code.
Чот какие-то сложности - распарси те BB коды - перед спойлером, или распарси и удали их как мну удалял code-box(если нужно)
ааа, как успехи со спойлером
kosoy
В Ближайшие полторы недели -вряд ли - кавыряюсь со своим прибамбахом
Отредактировано Deff (Вс, 11 Мар 2012 01:55:18)
Поделиться240Пн, 12 Мар 2012 21:29:02
Caligula
Есть два варианта - самый простой:
Оставить от старого спойлера блок отображения в сообщениях - старые будут парсицо старым блоком - новые - новым, *кнопку от старого - убираем,
Вариант 2 - можно попробовать все старые теги преобразовать через цензуру (не факт что получицо успешно, если есть разные наименования вместо скрыть показать - но попробовать можно
Отредактировано Deff (Пн, 12 Мар 2012 21:36:02)
Похожие темы
Не получается установить спойлер. | Корзина | Вс, 10 Янв 2010 |
Спойлеры. | Корзина | Пт, 11 Июн 2010 |
Спойлер | Корзина | Ср, 30 Мар 2011 |
Спойлер | Корзина | Ср, 22 Июн 2011 |
Поставил скрипт спойлера и форум "сломался" | Корзина | Чт, 14 Июл 2011 |