[Назад] [Вся нить] [Последние 50 сообщений]
Ответ в нить
Имя
Captcha image [Д]
Animapcha image [@] [?] [Т]
Тема    ( ответ в 1000357)
Сообщение flower
Message Preview
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов GIF, JPG, PNG, WEBP размером до 20480 кБ.
  • Ныне 47 уникальных клиентов. Посмотреть каталог
  • Предельное количество бампов нити: 200
114167649_p0.jpg - (1.88MB, 1191×1684)
1000357
No. 1000357  
Замечания и предложения по нему, а также их обсуждение.
Предыдущий тред >>1000000.
No. 1000358  
99399090_p0.jpg - (1.22MB, 1013×1433)
1000358
>>/b/1003098
Раньше не было возможности escape-ить символы разметки, теперь есть.

Раньше на ***%%You are a buggy fork!%%*** Кусаба выводила ломаный HTML, <b><i><spoiler></spoiler></b></i>, ибо ** имеет приоритет над *, и возник вопрос, что делать в ситуации, когда встречаем тэг, закрывающий блок верхнего уровня, а внутренние блоки ещё не закрыты.
A.   Закрывать все внутренние блоки по тэгу закрытия блока верхнего уровня. ***%%*** => <b><i><spoiler></spoiler></i></b><i>;
A++. По закрытию, восстанавливать незакрытый внутри закрываемого блока контекст. ***%%*** => <b><i><spoiler></spoiler></b><i></i>;
B.   Сделать приоритет тэгов разметки контекстно-зависимым, чтобы ***%%You are a buggy fork!%%*** интерпретировалось как [b][i]%%You are a buggy fork!%%[/i][/b]. Или ***%%*** => <b><i><spoiler></spoiler></i></b>

Вариант A позволяет написать You are a buggy fork! как ***%%You are a buggy fork!**, что короче и потенциально удобнее. Варианты A++ и B имитируют, как было раньше.
Вариант A было меньше кодить, потому и был реализован. Но, если нужно, могу к началу января взяться сделать совместимость. Который из вариантов больше по душе?
No. 1000368  
>>1000358
Поспав на этом два дня, думаю, что можно, технически, просто добавить пример со спойлером в раздел Markdown->Особенности (и поставить туда якорь, чтобы ссылаться удобнее).

Но я думал над тем как сделать Совусу кодоподсветку, и знаете, было бы неплохо внести наши изменения в апстрим. И тогда Совусу наверное захочется совместимость, и чтобы теги не закрывались по концу сообщения а игнорировались наверное?

Я попробую потыкать до рождества и сам и его что кому надо.

Но если говорить про фичи, можно придумать вообще кнопку текстового превью поста? Решает вообще все текущие и будущие проблемы с разметкой, если пользователь может починить всё сам. Ещё можно заморочиться и аж в постформе это делать по ходу заполнения текста, но это или часто дёргать движок, или переписывать то же самое по второму разу на жс.
No. 1000369  
116657344_p0.jpg - (858.52KB, 1215×2088)
1000369
>>1000368
> И тогда Совусу наверное захочется совместимость
Скорее всего. A++ вариант к нему ближе всего. Кусаба parse'ит ***Жирный**Курсив* как ЖирныйКурсив, after all.

Хотя не идентичен: скажем, **text* Кусаба распарсит как *text, но не текущий алгоритм. Чтобы, как Кусаба, нужно вводить lookahead до закрывающего тэга. Который ещё может оказаться в [nofmt] блоке, и который должен будет игнорироваться поэтому. И который если не найдётся, должен будет привести к reparsing'у того would-be открывающего ** как *.
> и чтобы теги не закрывались по концу сообщения а игнорировались наверное
И это тоже. И тут тоже нужно искать закрывающий тэг. В любом случае, похоже, стоит отказаться от parsing'а в один проход. Скажем, можно разбить ввод на токены, инактивировать незакрытые тэги, убрать пустые блоки, и уже потом делать HTML. Можно сделать и lookahead-зависимый **/* parsing, но это куда муторнее.
No. 1000370  
> можно придумать вообще кнопку текстового превью поста?
Why not. Если силы есть.
> или переписывать то же самое по второму разу
Даёшь Flower Bus на Node.js!
No. 1000377  
122717863_p0.jpg - (6.21MB, 3735×6035)
1000377
>>/b/1003427
> 300x100
Поднимаем баннер?
No. 1000378  
>>1000377
Сначала пусть кто-то нарисует.
No. 1000379  
faptcha.png - (9.98KB, 90×50)
1000379
>>1000378
??
No. 1000380  
>>1000377
Миленько, но кто это там на самолёте?
No. 1000381  
faptcha.png - (6.58KB, 90×50)
1000381
>>1000380
Pea Ace (Горошина-Ас) же!
No. 1000383  
125431975_p0.jpg - (1.76MB, 6000×2553)
1000383
Пытались что-нибудь трогать?

> И который если не найдётся, должен будет привести к reparsing'у того would-be открывающего ** как *
Любопытная циклическая лабуда в оригинальной Кусабе.

'' => '';
'*' => '*';
'**' => '**';
'***' => '*';
'****' => '**';
'*****' => '*';
'******' => ''; // <b><i></b></i>

Если приставлять звёздочки к 'text*' и 'text**' период тоже 6, но свой.

Наверное, нет смысла такое поведение копировать? А то как бы не получилось, что последовательное применение регулякок со strtr-ом выйдет не только на несколько сотен строк кода меньше, но и быстрее.

Пускай, наверное, будет '****' => '', то бишь <b></b>. В конце концов, оригинальный parser не убирает возможность отправить пустое сообщение, either. Тогда, пусть будет '***' => '***', '***t*' => '**t' '***t**' => '*t' и '***t***' => 't'. Пустые же блоки дополнительным проходом поубирать.
No. 1000385  
123407810_p0.webp - (1.65MB, 1200×1572)
1000385
Стоит сделать обновление RSSа по удалению поста. >>/b/1003583
No. 1000386  
faptcha.png - (7.57KB, 90×50)
1000386
>>1000385
Что там обновлять?
Если такое сообщение попало в кеш твоего ридера то сервер с ним уже ничего не сделает.
No. 1000387  
>>1000385
Done.

>>1000386
RSS обновлялся только по постингу новых постов.
No. 1000388  
>>1000370
Силы на это нашлись, прикрутить перевод после нескольких попыток не нашлись.

>>1000377
Done.
No. 1000389  
>>1000383
Если '****' это <b></b>, то почему *** не <i>*</i>?
Алсо, '***t**' => '<b>*t</b>' или *<b>t</b>? По идее наверное первое?
No. 1000390  
125279141_p0.jpg - (1.09MB, 3493×2578)
1000390
> Done.
Cool.

>>1000389
> почему *** не <i>*</i>?
У позиции 0 распознаётся **, поскольку имеет приоритет над *, и parsing идёт дальше. У позиции 2 * распознаётся как *, но ни для раннего **, ни для * не находится закрытие. Поэтому оба инактивируются и печатаются, как есть. Reparsing'а у позиции 0 не происходит. Если бы происходило, было бы <i></i>*, и было бы '**' => ''.

> По идее наверное первое?
Да.

Если саму систему parsing-а пока не трогали, напишу новый BBCode() тогда. Где-то к началу января будет готово.

Как-то так пока вижу.
Оставляем continue-проверки только для кода/nofmt и для \n\r-тэга закрытия списка, а также для открывающего BB-тэга, если ровно тот же тэг пока не был закрыт, i.e. в '[i] [i] [/i]' второе [i] вызывает continue, '[i] [i] [/i]' => ' [i] '.

Встречаем тэг? Добавляем его в список, а также простой текст между ним и предыдущим тэгом. Вместо true в $states пишем ссылку на свежедобавленный элемент списка. Встречаем закрывающий тэг? Из $states, если есть, по ссылке достаём соответствующий открывающему тэгу элемент списка, и прописываем туда ссылку на закрывающий элемент. Вторым проходом инактивируем незакрытые тэги, третьим делаем HTML, следя, чтобы '* [i] test * [/i]' и подобное не приводило к некорректному HTML: '* test0 [i] test1 * test2 [/i]' => ' test0 test1 test2 '.
No. 1000391  
125394419_p0.jpg - (1.06MB, 1448×2048)
1000391
> к началу января
Или к середине.
No. 1000392  
>>1000391
Да это я думаю пока не критично, хоть и хорошо было бы.

Я сам-то в разъездах до 12го.
No. 1000402  
leak.png - (739.19KB, 3884×1639)
1000402
Всё-таки течёт оно у меня невероятно. И без раскрытых картинок. И наверно, получается, проблема уникальная для этой конфигурации, раз больше никот. Какая-то несовместимость может. Ои на месте, а версия с sw всё поднимается и поднимается.
No. 1000403  
>>1000402
Не совсем понимаю, как это читать. Это всё местное, и заодно течёт не только воркер? Ну и на всякий случай тот же вопрос про 410.

Так-то я могу себе вернуть/поставить тоже рикай и помониторить.
No. 1000404  
>>1000403
Я тоже не понимаю, как это читать, лол.
Эото скриншоты с девтулсов, открытых на вкладке именно тут. Просто тыкнул что-то с надписью memory как очевидное, а там почему-то экстеншоны. Воркера не видно было, но единственное отличие 0141 от 014 в нём, поэтому на него и грешу.
Вот сейчас рикая нет, а вкладка опять 200,000 K и растёт дальше пока пишу этот пост.

Открыл /b/ 410 сейчас, прокрутил сверху донизу, открыл quick reply, попечатал, развернул картинку на 4000×4000, подождал. Около 70,000 K, стабильно, (норма).
Быстрый тест булки (поставил sleep 5m) - так же.

Попробовал Clear site data в Devtools (и Unregister service workers которая там). Всё равно отъелась до 400,000K просто постояв открытая.

В общем, мистика.

Сделать тут мало что можно, так как подозреваю всё-таки какую-то непонятную несовместимость с моей уникальной конфигурацией. Но мне хотелось бы узнать, сколько у вас вкладка потребляет просто постояв. Может, у вас много памяти свободно и вам просто незаметно. А я тут постоянно на границе OOM сижу. Месяц непрерывно запущенного хрома это не шутки, собсно, там сам Browser утекает, а кнопки Minimize mem usage, как в Firefox, не завезли.
No. 1000405  
173703329939.webp - (5.88KB, 186×249)
1000405
Как-то так на моей лисе. Наверное, действительно течёт где-то.

>>1000404
> но единственное отличие 0141 от 014 в нём
Не единственное же. Есть изменения в kusaba.js.
No. 1000406  
>>1000405
Это очень долгий замер! У меня за пять минут все улетает. Ну и в "лисе", а надо на хромиум-подобных!
No. 1000407  
410.webp - (4.96KB, 179×129)
1000407
>>1000406
Или не течёт. Проверю в хромиуме чуть позже.
No. 1000408  
what??.png - (40.87KB, 1311×413)
1000408
На TaskManager-е в Хромиуме memory footprint действительно растёт, но и периодически сбрасывается. Наверное, дело в сборке мусора.
No. 1000409  
window.webp - (49.94KB, 1434×1175)
1000409
Memory Snapshot за 5 минут, однако, ничего интересного не показывает.
No. 1000410  
120928054_p0_sample.webp - (3.63MB, 3472×4854)
1000410
>>1000391
Новости.

У меня депрессия.
tokenize → fix_integrity → print почти готово, оставалось бы только отдебажить, но поскольку [nofmt] и [code] сами по себе являются escaper'ами, для них нужно будет делать предобработку отдельным циклом и таки с lookahead'ом, и уже потом дотокенезировать гарантированно непокрытый активными [nofmt] или [code] блоками текст. Завис пока на этом.

Иначе, как пока сейчас у меня в черновике, будет вывод «every mark after unclosed ` is **ignored** ». А должно быть «every mark after unclosed ` is ignored"».

Also, погодя возник вопрос, что делать, если, скажем, для незакрытого [code] встречаются за-escape'ленные и escape-блоком другого типа, и тильдою [/code], например «[code] This is `NOW ~[/code]`». Думаю резолвить такой ввод как «[code] This is NOW ~[/code]» всё-таки.

Другие заметки по надвигающемуся.

Будет пофикшена ситуация (±костыльно, но можно будет включить и цитирование в обобщённую обработку)
  • List end.
> Citation

Будет пофикшена ситуация

%%
- Bug.
%%

↓↓↓↓↓↓↓
  • Bug.

No. 1000411  
>>1000410
Поправляйтесь.

Ради развлечения, попробовал чисто теоретически сформулировать грамматикой. Выходит как-то не очень:

Message => List\nMessage|Quote\nMessage|Paragraph\nMessage|EOF
List => OrderedList|UnorderedList
OrderedList => OLElement\nOrderedListContinuation|OLElement
OrderedListContinuation => OLElement\nOrderedListContinuation|OLElement
OLElement => +InlineParagraph|#InlineParagraph
UnrderedList => ULElement\nUnorderedListContinuation|ULElement
UnorderedListContinuation => ULElement\nUnorderedListContinuation|ULElement
ULElement => -InlineParagraph|*InlineParagraph
InlineParagraph => Line|Line~\nInlineParagraph
Line => NoFmtLine,Line|CodeLine,Line|BoldLine,Line|ItalicLine,Line|UnderscoreLine,Line|StrikethroughLine,Line|AsciiLine,Line|SpoilerLine,Line|URL,Line|Text,Line|<empty>
NoFmtLine => [nofmt]Text,NoEscape[/nofmt]|``Text,NoEscape``
CodeLine => [code]Text,NoEscape[/code]|`Text,NoEscape`
BoldLine => [b]Line,NoEscape[/b]|**Line,NoEscape**
ItalicLine => [i]Line,NoEscape[/i]|**Line,NoEscape**
UnderscoreLine => [u]Line,NoEscape[/u]
StrikethroughLine => [s]Line,NoEscape[/s]|^^Line,NoEscape^^
AsciiLine => [aa]Line,NoEscape[/aa]
SpoilerLine => [spoiler]Line,NoEscape[/spoiler]|%%Line,NoEscape%%
NoEscape => (~~)*|Text,(~~)*
Text => [^\n]*?
URL => (http|https|ftp|sftp|mailto)://[^, \n]+
Paragraph => NoFmtParagraph,Paragraph|CodeParagraph,Paragraph|BoldParagraph,Paragraph|ItalicParagraph,Paragraph|UnderscoreParagraph,Paragraph|StrikethroughParagraph,Paragraph|AsciiParagraph,Paragraph|SpoilerParagraph,Paragraph|Line,Paragraph|<empty>
NoFmtParagraph => [nofmt]MLText,NoEscape[/nofmt]\n?
CodeParagraph => [code]MLText,NoEscape[/code]\n?
BoldParagraph => [b]\n?Paragraph\n?,NoEscape[/b]\n?
ItalicParagraph => [i]\n?Paragraph\n?,NoEscape[/i]\n?
UnderscoreParagraph => [u]\n?Paragraph\n?,NoEscape[/u]\n?
StrikethroughParagraph => [s]\n?Paragraph\n?,NoEscape[/s]\n?
AsciiParagraph => [aa]\n?Paragraph\n?,NoEscape[/aa]\n?
SpoilerParagraph => [spoiler]\n?Paragraph\n?,NoEscape[/spoiler]\n?
MLText => Text\nMLText|Text|\n|<empty>

Хорошо что мы вложенные списки пока не даём.
No. 1000412  
>>1000411
А, ну и >>ссылки забыл добавить на одном уровне с урл и определить Quote как >Line. (или InlineParagraph?)
No. 1000413  
125116194_p0.webp - (3.90MB, 2500×2744)
1000413
>>1000410
Готово. parse.class.php и markdown.html в архиве. Запилено, как оговорено, Кусаба-подобное поведение, пофикшено упомянутое в >>1000410 и >>/b/1004023 пофикшено тоже.

Обработка (">", "\r\n") обобщённым токенизатором привела к конфликту с >>post_id, который был решён запихиванием обработки этого >>post_id в общий же токенизатор: как следствие, внутренние ссылки теперь подлежат escape-у. Возможно, стоит запихать в него же и обработку внешних ссылок, что может быть удобно, если хочется поместить ссылку под спойлер. InterboardQuoteCheck и InterthreadQuoteCheck я не трогал.

Наверное, можно как-то красиво сжать определения констант, но я не стал заморачиваться.

Часть debug_* функций я не стал удалять. Вдруг пригодятся.
No. 1000414  
114000515_p0.jpg - (277.93KB, 1536×1536)
1000414
> Поправляйтесь
Спасибо.

> чисто теоретически сформулировать грамматикой
Тоже вот думалось, можно ли как-то это дело формально определить и скормить Bison-у, и чтобы оно само всё сгенерировало. Но у нас, вполне возможно, не context-free grammar.

> Хорошо что мы вложенные списки пока не даём
Scary.
No. 1000415  
>>1000413
It's up!
No. 1000416  
>>1000410
Мужик сказал — мужик сделал. Круто и ответственно!
No. 1000417  
111813238_p0.jpg - (1.70MB, 1831×2289)
1000417
Добавил URLы в обобщённую обработку. Теперь можно escape-ить начало URLа по ~. Условия, по которым терминируется URL, отличаются от оригинала.
  • Пробельный символ;
  • ~ (поглощается);
  • .,:;?!«»“”’… перед пробельным символом или в конце строки;
  • Текст, соответствующий любому из тэгов разметки.
То бишь, нет терминации по скобкам: чтобы отправить "Автобус (https://410chan.org/b/)" нужно будет набрать "Автобус (https://410chan.org/b/~)".

Убрал возможность делать ссылки с ftp://-дескриптором, потому что FTP выпилен из современных браузеров, но там легко в url_start_subregex и в mark_to_mark_type по аналогии добавить.

>> у >>post_link теперь тоже опознаётся через mark_to_mark_type, и токенизируется тем же, что и внешние ссылки, кодом. На будущее, должно быть легко g://here_goes_gelbooru_hash и p://pixiv_artwork_id добавить. Можно даже без префиксов-дескрипторов сделать.

[nofmt] и `` теперь не превращают пробелы в неразрывные.

Файлы в архиве.
No. 1000418  
123640181_p0.jpg - (4.70MB, 3976×2048)
1000418
Also, надо бы поменять тип message столбца с text, на mediumtext. И на Чио тоже. Когда длина сообщения будет считаться по mb_strlen, вызвать переполнение будет даже проще, чем сейчас.
No. 1000419  
>>1000417
>Firefox 90 will no longer support the FTP protocol
Однако.
No. 1000420  
125248806_p0.jpg - (443.23KB, 1012×1800)
1000420
>>1000419
https://kb.mozillazine.org/Register_protocol
Но есть такое вот. Так что, наверное, стоит поддержку ftp:// вернуть. Заодно ftps и sftp добавить. Может, ещё что-то? Также, если есть возможность как-то проверять, есть у протокола handler или нет, можно будет добавить в kusaba.js, чтобы по клику на ссылку происходило её копирование в случае, если нет.
No. 1000423  
>>1000417
Добавлено, но:
1. Оставил mailto, ftp, news
2. Оставил декодирование ссылок как было чтобы не нарваться на XSS из прошлого года

>>1000418
TODO. Как и обновить код на кодберге.

Ещё надо наверное проверить есть ли изменения в рендере от смены пробелов неразрывных на обычные в коде.
No. 1000425  
&gt;.png - (123.36KB, 1487×555)
1000425
>>1000423
2. Я там убрал htmlspecialchars decode, потому что теперь не вызывается htmlspecialchars encode перед parsing-ом, prettify_url оставив тем же. Иначе получается, как на приложенной картинке.

> есть ли изменения в рендере от смены пробелов неразрывных на обычные в коде.
Я только для [nofmt] и для `` убрал. Не для [code] и `. Если убрать их и для [code], оно съест отступы.
No. 1000426  
подсветка.webp - (69.71KB, 1553×737)
1000426
BTW, если по запилу кодоподсветки оформлять развод, то, наверное, стоит и [nbsp] добавить.
No. 1000427  
Перетащу сюда всякое в видный пост чтобы не терялось.

>>1000340 якорь добавить-перекрасить.
>>1000344 sodane отдельным скриптом(?)
>>1000402 попробовать это отладить. При желании можно костыль-версию добавить и включать или одно или другое по каким настройкам...

Было бы ещё неплохо для модерки какой экран просмотра анимапчи...
No. 1000428  
>>1000418>>1000425
Done.
No. 1000429  
125519984_p0.jpg - (1.51MB, 1378×2039)
1000429
>>1000428
Gut.

>>1000427
> Было бы ещё неплохо для модерки какой экран просмотра анимапчи
Список, где слева картинка, справа — имена, и можно редактировать?

> При желании можно костыль-версию добавить и включать или одно или другое по каким настройкам...
Есть версия, которая не использует SharedWorker, поскольку тот не реализован в мобильном Хроме. Можно if(!!window.SharedWorker) поменять на if(false) и посмотреть, в нём ли дело.
No. 1000430  
>>1000429
И кнопочку аплоада/разрешения для какой доски.
Или два разных экрана, один для алиасов, один для доскопринадлежности.
Так можно избавиться от текстофайлов и их в БД держать.
>Можно if(!!window.SharedWorker) поменять на if(false) и посмотреть, в нём ли дело.
А я пожалуй так и сделаю.
No. 1000433  
&nbs.webp - (119.03KB, 423×637)
1000433

> $catalog_page .= '<span class="catalogmsg">' . closeOpenTags(mb_substr(strip_tags(stripslashes($line['message'])), 0, 40)) .'</span><br />';
> closeOpenTags(mb_substr(strip_tags(stripslashes($line['message'])), 0, 40))
С учётом HTML Entities, получать catalogmsg можно вот так, наверное.
function get_catalog_msg($msg, $max_catalog_msg_length){
    $catalog_msg = '';
    $msg_id = 0;
    $catalog_msg_len = 0;
    $brs = ['<br>' => 1, '<br/>' => 1, '<br />' => 1];
    while($msg_id < strlen($msg) && $catalog_msg_len  < $max_catalog_msg_length){
        $c = $msg[$msg_id];
        if($c === '<'){
            $html_tag_term_id = strpos($msg, '>', $msg_id);
            if($html_tag_term_id === false)
                break;
            if($html_tag_term_id - $msg_id + 1 <= strlen("<br />")){
                $maybe_br = substr($msg, $msg_id, $html_tag_term_id - $msg_id + 1);
                if(array_key_exists($maybe_br, $brs)){
                    $catalog_msg .= ' ';
                    $catalog_msg++;
                }
            }
            $msg_id = $html_tag_term_id + 1;
        }
        else if($c === '&'){
            $html_entity_term_id = strpos($msg, ';', $msg_id);
            if($html_entity_term_id === false)
                break;
            $html_entity = substr($msg, $msg_id, $html_entity_term_id - $msg_id + 1);
            $decoded = html_entity_decode($html_entity, ENT_QUOTES | ENT_HTML5);
            if($html_entity != $decoded){
                $catalog_msg .= $html_entity;
                $catalog_msg_len++;
            }
            $msg_id = $html_entity_term_id + 1;
        }
        else{
            $o = ord($c);
            // we're at the start of some UTF-8 symbol
            if($o > 0xDF)
                $bytes = $o > 0xEF ? 4 : 3;
            else
                $bytes = $o > 0x7F ? 2 : 1;
            $catalog_msg .= substr($msg, $msg_id, $bytes);
            $catalog_msg_len += 1;
            $msg_id += $bytes;
        }
    }
    return $catalog_msg;
}
No. 1000434  
Ох, вау.webp - (186.67KB, 2377×664)
1000434
キタ━━━(゚∀゚)━━━!!
No. 1000435  
1434667218460.jpg - (114.96KB, 769×478)
1000435
>>1000434
Ахаха ох вау.
No. 1000436  
>>1000435
> $to_append = strtr($to_append, [" " => "&nbsp", "\t" => "&nbsp;&nbsp;&nbsp;&nbsp;"]);
Забыл ; добавить.
No. 1000437  
>>1000436
Поправлено.

>>1000433
Хммм.
Вообще, было бы неплохо это через formatLongMessage сделать что уже делает примерно то же самое. И парсер хтмл заново писать не надо, потому что он либу использует.
No. 1000438  
>>1000437
Теперь там просто DomDocument->loadHTML->getNode->textContent, и всё в mb_substr.
Алсо, оказывается всё время с ввода нового formatLongMessage оно выводило лишние <!DOCTYPE><html><body></body></html>, лол.

>>1000430
Так и сделано. >>1000402 прожмите F5 и проверьте, пожалуйста.
No. 1000439  
127600446_p0.webp - (1.02MB, 4093×2894)
1000439
>>1000437
Стоит, думаю, и посты поправить.
update posts_b set message=regexp_replace(message, '&nbsp(?!;)', '\\1&nbsp;') where postedat > unix_timestamp('2025-02-17 08:23:40') and postedat < unix_timestamp('2025-03-04 08:47:55');
update posts_d set message=regexp_replace(message, '&nbsp(?!;)', '\\1&nbsp;') where postedat > unix_timestamp('2025-02-17 08:23:40') and postedat < unix_timestamp('2025-03-04 08:47:55');


>>1000438
> Теперь там просто DomDocument->loadHTML->getNode->textContent, и всё в mb_substr.
В formatLongMessage или вместо closeOpenTags(...)?
No. 1000440  
>>1000439
Не особо любо менять посты, но так как это был баг, то ладно.
И да, в closeOpenTags. То есть там теперь не мешанина из striptags()stripslashes()closeopentags() а просто берётся текстовая часть хтмл и обрезается до 40 символов.
No. 1000445  
Спустя долгие месяцы разработки, анонимная кармочка наконец-то запилена! Теперь вы можете проголосовать, насколько каждый пост "девочка", "булочка" или "кот" и накрутить этот рейтинг, передёргивая роутер! Кто знает, может самые популярные посты за месяц получат настоящую булочку??
No. 1000446  
Screenshot.jpg - (494.73KB, 1080×1532)
1000446
>>1000445
Жалко, что основного пропонента идеи нет.

На телефоне несколько за-missalign'уто выглядят новые кнопки по вертикли по отношению ко кнопке быстрого ответа. Нету padding-а меж кнопкой быстрого ответа и девочкой, можно промахнуться. Также, custom_tags, может быть, стоит переносить целиком на следущую строку, если не влазит. Или, по крайней мере, сделать, чтобы иконка и соответствующее ей значение переносились вместе.

Девочка, булочка и кот в качестве счётчиков — удачное решение. А вот с SVGшками сложнее. Кот получился довольно удачно. Или сравнительно удачно. Девочка скорее похожа на кролика. Рот крестиком, будто зашитый. Булочка не Sternsemmel. Круассан?

Сложно SVGшки делать. Пытался вот для тонущего треда сделать иконку с кораблём, но хорошо не получается.

В /b/ при переходе на каталог кидает сообщение про JSON parsing error.
No. 1000447  
float:right.webp - (280.68KB, 2551×830)
1000447
>>1000446
> Нету padding-а меж кнопкой быстрого ответа и девочкой, можно промахнуться.
Вроде, достаточно поставить пробел перед custom_tags span-ом, но в ОП-постах он уже есть.

Думал вот ещё, может сделать float: right для того span'а, но всё-таки при разномастной ширине постов лучше выглядит так, как есть.
No. 1000448  
>>1000446
Ну, может ещё заглянет, пока будет висеть.
По css сложно~. Но перенос запретить емнип можно. Пробел в ОП-посте из-за того что там и других кнопок добавлено порядком. Попробовал ещё один для всех.
>Булочка не Sternsemmel. Круассан?
Да. Может попытаюсь переделать.
>Пытался вот для тонущего треда сделать иконку с кораблём, но хорошо не получается.
Там обычно просто якорь.

Будет убрано к выходным, версия в виде юзеркрипта скорее всего попозже.
Удалить сообщение []
Пароль  
[Mod]