Новости | Об игре | Форум
18:02, 2958 онлайн
Форумы » Общий Форум » Скрипт для форума 

АвторТема: Скрипт для форума
Acid-base



 1 
 139   
  написано: 10.12.2021 15:48:50 
Всем привет.
Добавил немного интерактивности зеленому форуму. Сначала краткое описание, чтобы стало понятно о чем речь и стоит ли тратить время на чтение, далее более подробный обзор функционала и, вторым сообщением, технические детали.


Скрипт включает в себя две функциональности:

• просмотр сообщения (или цепочки сообщений) к которому обращаются
[ GanjaFoto:#2292807 ]

• удобные ответы на сообщение
[ GanjaFoto:#2292814 ]

Ссылка на скрипт https://www.ganjafile.io/download.php?mid=1013870&id=245792


Просмотр сообщения (или цепочки сообщений)

На форуме, в качестве обращения, часто используется число в начале сообщения
(скрипт использует более сложный паттерн, подробности во втором сообщении).
На этом построена первая функциональность.

Обращения, которые соответствуют паттерну, становятся интерактивными.

Левый клик покажет сообщение. Нажатие на колесико откроет сообщение в новой вкладке, а клик правой вызывает нативный диалог работы с ссылками (скопировать ссылку, открыть в новой вкладке и т.д.)
[ GanjaFoto:#2292807 ]

В том случае, когда показанное сообщение ссылается на другое сообщение, можно пройти по цепочке
[ GanjaFoto:#2292808 ]

Также есть возможность развернуть всю цепочку сообщений
[ GanjaFoto:#2292809 ]

Цепочки могут быть довольно длинными
[ GanjaFoto:#2292810 ]

Номер сообщения и автор повторяют стандартное поведение
[ GanjaFoto:#2292811 ]


Удобные ответы

В каждое сообщение добавлена кнопка [Ответить].
[ GanjaFoto:#2292814 ]

Клик по ней открывает форму отправки в этом же сообщении с предзаполненным обращением. Теперь нет необходимости прокручивать страницу вниз и видно сообщение на которое отвечаете. Форма закрывается по клику на кнопку [Не отвечать].

Клик на [Отправить сообщение] или комбинация клавиш [ctrl+enter] закроет форму и отправит сообщение, текст кнопки [Не отвечать] поменяется на [Отправка...].

После отправки повторится стандартное поведение - загрузится последняя страница

PS: планировал сделать без перезагрузки, но возникли трудности с кодировкой, подробности во втором сообщении.


Настройки

Интерфейс не реализовал, но кое-что можно настроить в скрипте (строки 82-97)
[ GanjaFoto:#2293192 ]

Есть возможность:
• не показывать кнопки скрыть/еще/ответить
• показывать сразу все сообщения (только целевые сообщения, не цепочки)
• показывать сразу только те сообщения, которые находятся на другой странице
• менять названия кнопок
• менять время жизни кеша

Текст меняется внутри кавычек, время жизни кеша - количество дней числом, остальные поля могут быть или true, или false.
Acid-base



 2 
 17   
  написано: 10.12.2021 15:48:57 
Работа с данными

Постарался оптимизировать работу скрипта как сервером, так и с клиентом.

Заходя в тему, скрипт строит объектное представления текущей страницы, сохраняет его в локальное хранилище браузера (если в теме больше одной страницы) и начинается работа со страницей (описано в следующем пункте).

Если в теме больше двух страниц, то они будут загружены с сервера. Загружаются те страницы, на которые можно перейти с помощью пагинации (кроме текущей и последней так, как в этом нет необходимости).

Страницы загружаются с интервалом в 200 мс, на каждом шаге строится объектное представление, сохраняется и обновляется контент на текущей странице, если в этом есть необходимость.

Изобразил схематически разные варианты загрузки на примере темы из 6 страниц
[ GanjaFoto:#2293148 ]

После этого дополнительные запросы будут только в том случае, если в теме появилось больше одной страницы с последнего посещения (будут загружены только недостающие страницы).

Данные хранятся 5 дней (можно изменить). Страница весит ~15-20 Кб. В хроме, по умолчанию, хранилище размером 5 Мб на сайт.
Если хранилище будет переполнено, то будут удаляться самые старые данные.


Работа со страницей

После того, как построено объектное представление, начинается работа со страницей.

Скрипт находит все обращения на странице и заменяет их на ссылки, сами сообщения при этом на страницу не добавляются. Сообщения будут добавлены только в том случае, если пользователь кликнет по номеру обращения или включит в настройках показ всех сообщений.

Форма для ответа будет добавлена только тогда, когда пользователь кликнет на кнопку [Ответить]. При закрытии формы она скрывается, состояние сохраняется.

Отправить сообщение без перезагрузки получилось, но есть проблема с кодировкой. Игра использует windows-1251, аякс запросы летят в UTF-8, в итоге кириллица отображается некорректно. Тут поможет только админ.

На всё про всё добавлено два слушателя с делегацией событий - один на все клики, второй на комбинацию клавиш [ctrl+enter] для отправки всех форм.


Паттерн

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

Сообщение опционально может начинаться с не цифро-буквенного символа или пробела (или комбинации последних двух), далее обязательно число, за ним или не цифро-буквенный символ, или пробел, или перенос строки, или комбинация последних.

Несколько примеров валидных обращений:
4 сообщение
+8 сообщение
15:сообщение
# 16. сообщение
23
сообщение

Скрипт обрабатывает только первое обращение в начале сообщения.
Magical Owl



 3 
 2   
  написано: 10.12.2021 15:51:09 
Пушка-гонка! Спасибо!
Dexter77



 4 
 4   
  написано: 10.12.2021 15:52:13 
Не геве, а оперсорс проект какой-то!
Windhose



 5 
 27   
  написано: 10.12.2021 15:52:21 
Не знаю нафига это надо. Но дядь, твой труд бесценен
*apofis*



 6 
 33   
  написано: 10.12.2021 16:04:59 
Потыкал. Прикольно, мне нравится. Срачи читать удобнее)
ILTYA



 7 
 26   
  написано: 10.12.2021 16:06:00 
Ууууу~!

Домой захотелось скорее, затестить.
KaMaT0ZZZHuK8))



 8 
 3   
  написано: 10.12.2021 16:09:38 
7 ждем экспертной оценки )
Жонег



 9 
   
  написано: 10.12.2021 16:17:15 
Только их бы сделать бледным шрифтом, чтоб цветовой акцент сделать на основную переписку на странице, а подгруженную историю полупрозрачным

К списку тем