Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Архив » Обновленный спойлер


Обновленный спойлер

Сообщений 221 страница 240 из 314

221

Deff, работает даже несмотря на не закрытые теги <p> и </p>.
Мне кажется на форумах есть какая-то система защиты от дурака, а может дело в jquery.

0

222

RUSSIAN_GOBLIN
Хм - возможно разныя методики в браузерах (в Opere не вставляет при начальном теге </p>), давно уже тестил
.innerHTML - проходит

0

223

RUSSIAN_GOBLIN
Deff

Так какой лучше ставить? :D

0

224

ruslan_as
Я не наю, мой работает, но пока без доп названий и кнопка большая

0

225

Deff написал(а):

Я не наю, мой работает, но пока без доп названий и кнопка большая

Это не беда  :D

В 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>

0

226

RUSSIAN_GOBLIN написал(а):

В связи с вышеуказанным фактом  ^^  вместо этого скрипта спойлера лучше ставить этот:

во всех этих вариантах один минус без указания тега <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> спойлер работает в бб-коде, дилемма остаётся,
так что исключение третьего подшаблона из регулярки проблему не решает

0

227

RUSSIAN_GOBLIN написал(а):

а может дело в jquery.

последний мой вариант здесь, который в посте №231, на обычном js, работает с любым количеством пустых строк и тегов <p> внутри спойлера

+1

228

Romych
Для блока код - обычно стандартное решение, временное изъятие его в переменную с заменой на группу спецсимволов =>к примеру %%%%%%%%%%%%%%%%%%%%%%% - после перепарсивания со спойлером - данную группу опять заменяем на код, в нашей переменной

0

229

Deff написал(а):

Romych
Для блока код - обычно стандартное решение, временное изъятие его в переменную с заменой на группу спецсимволов =>к примеру %%%%%%%%%%%%%%%%%%%%%%% - после перепарсивания со спойлером - данную группу опять заменяем на код, в нашей переменной

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

0

230

Romych
Да ясный фиг - Спойлер востребован везде, старый более 4кб, тем паче вроде Админ ориентирован на сокращение кодов на странице

0

231

Deff
а ещё было бы супер, если бы в Цензуре в поле Заменяющее слово, появилась бы поддержка html вместо слова,
пока срабатывает лишь замена слова на бб-теги или замена одного бб-тега на другой,
тогда бы можно было лепить собственные теги в любых количествах и любого качества ;)

0

232

Romych написал(а):

последний мой вариант здесь, который в посте №231, на обычном js, работает с любым количеством пустых строк и тегов <p> внутри спойлера

В мозилле и мой код работает также. В др. браузерах надо проверитьь. Но Deff пишет что в опере не пашет...

P.S.: сделал так, что при наличии в сообщении бб-кода [ code ][ /code ] спойлер не работает.
Осталось сделать так чтобы спойлер не работал, если он именно внутри бб-кода.  :insane:

а ещё было бы супер, если бы в Цензуре в поле Заменяющее слово, появилась бы поддержка html вместо слова

Этого не будет. Админ делает наоборот, чтобы снизить нагрузку на сервер.

Отредактировано RUSSIAN_GOBLIN (Сб, 10 Мар 2012 17:32:55)

0

233

RUSSIAN_GOBLIN написал(а):

Осталось сделать так чтобы спойлер не работал, если он именно внутри бб-кода.

об этом и речь

RUSSIAN_GOBLIN написал(а):

В мозилле и мой код работает также.

если быть точным, то это тоже мой, но переделанный тобою ;)

+1

234

Romych написал(а):

если быть точным, то это тоже мой, но переделанный тобою

Да, это действительно так  :yep:

Суть вот в чём: нужно найти и подсчитать кол-во bb-code до спойлера - открытия их и закрытия, если они равны - спойлер не в bb-code.

Но есть и ещё варианты. Я думаю вообщем.

Добавлено:

Я сделал так чтобы код не работал внутри bb-code. Но он стал не работать при пустых строках  :suspicious:

И ещё добавлено:

Сделал уже так что работает при пустых строках и не работает в bb-code,
но за одним исключением - не работает при пустых строчках, если в том же сообщении есть bb-code:disappointed:

Отредактировано RUSSIAN_GOBLIN (Сб, 10 Мар 2012 19:43:35)

0

235

Универсальный парсер 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)

+1

236

Deff написал(а):

Универсальный парсер BB-кодов, с вложенностью и обходом code-box

а для чего он?) я чет и не понял из названия)

0

237

kosoy
Эт к дисскуссиям C Ромычем и Гоблином

0

238

Deff
ааа, как успехи со спойлером под ник? ну или скрытый текст, виден только тому , кому адресовано сообщение.

Отредактировано kosoy (Сб, 10 Мар 2012 23:44:21)

0

239

RUSSIAN_GOBLIN написал(а):

Суть вот в чём: нужно найти и подсчитать кол-во bb-code до спойлера - открытия их и закрытия, если они равны - спойлер не в bb-code.

:canthearyou: Чот какие-то сложности - распарси те BB коды - перед спойлером, или распарси и удали их как мну удалял code-box(если нужно)

kosoy написал(а):

ааа, как успехи со спойлером

kosoy
В Ближайшие полторы недели -вряд ли - кавыряюсь со своим прибамбахом

Отредактировано Deff (Вс, 11 Мар 2012 01:55:18)

0

240

Caligula
Есть два варианта - самый простой:
  Оставить от старого спойлера блок отображения в сообщениях - старые будут парсицо старым блоком - новые - новым, *кнопку от старого - убираем,

Вариант 2 - можно попробовать все старые теги преобразовать через цензуру (не факт что получицо успешно, если есть разные наименования вместо скрыть показать - но попробовать можно

Отредактировано Deff (Пн, 12 Мар 2012 21:36:02)

0


Вы здесь » Единый форум поддержки » Архив » Обновленный спойлер