FastComments.com

Спільний чат

Додавання вбудованих живих коментарів до документів, книг тощо

FastComments Collab Chat дозволяє користувачам виділяти та додавати анотації до будь-якого текстового вмісту на вашому вебсайті, створюючи ниткові обговорення, прив'язані до конкретних виділень тексту. Користувачі можуть виділяти слова, речення або цілі абзаци, щоб розпочати спільні розмови безпосередньо в контенті.

Ця функція ідеально підходить для редакційного зворотного зв'язку, середовищ спільного читання, освітніх платформ, перегляду документів та будь-якого сценарію, де потрібні контекстні обговорення, прив'язані до конкретного тексту.

Note that these docs are specific to the Collab Chat functionality. Ви можете додати можливість коментування для контенту з великою кількістю сторінок, наприклад книг, з thread-per-page, without using collab chat. FastComments також не стягує плату за сторінку або за тред. Collab Chat призначений саме для випадків, коли ви хочете дозволити користувачам виділяти текст і коментувати підсвічений фрагмент тексту.


Ви можете побачити приклад тут.

Приклади Internal Link

Базовий приклад

Найпростіший спосіб використання Collab Chat — націлити його на один контейнер з контентом. У цьому прикладі показано, як увімкнути текстові анотації в статті:

Базовий приклад Collab Chat
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat</title>
6</head>
7<body>
8 <div id="article-content" style="min-height: 500px">
9 <h1>My Article Title</h1>
10 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
11 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
12 </div>
13
14 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
15 <script>
16 FastCommentsCollabChat(document.getElementById('article-content'), {
17 tenantId: 'demo'
18 });
19 </script>
20</body>
21</html>
22

Приклад із власним URL ID (для сторінки книги, статті тощо)

За замовчуванням Collab Chat використовує URL сторінки в поєднанні з шляхом до елемента та діапазоном тексту для ідентифікації обговорень. Ви можете надати власний urlId, щоб мати більший контроль над тим, як групуються обговорення:

Collab Chat with Custom URL ID
Copy Copy
1
2<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
3<script>
4 FastCommentsCollabChat(document.getElementById('article-content'), {
5 tenantId: 'demo',
6 urlId: 'book-one-page-2'
7 });
8</script>
9

Це корисно, якщо структура ваших URL змінюється, але ви хочете зберегти ті ж обговорення, або якщо ви хочете спільно використовувати одні й ті самі анотації обговорень на кількох сторінках.

Приклад із темним режимом

Якщо на вашому сайті темний фон, увімкніть підтримку темного режиму, щоб інтерфейс чату відображався правильно:

Collab Chat у темному режимі
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat - Dark Mode</title>
6 <style>
7 body {
8 background-color: #1a1a1a !important;
9 color: #e0e0e0 !important;
10 font-family: system-ui, -apple-system, sans-serif;
11 padding: 20px;
12 margin: 0;
13 }
14 #article-content {
15 max-width: 800px;
16 margin: 0 auto;
17 background-color: #2d2d2d;
18 padding: 20px;
19 border-radius: 8px;
20 }
21 h1 {
22 color: #ffffff !important;
23 }
24 p {
25 color: #e0e0e0 !important;
26 line-height: 1.6;
27 }
28 .fastcomments-collab-chat-top-bar {
29 background-color: #2d2d2d !important;
30 color: #e0e0e0 !important;
31 border-bottom: 1px solid #444 !important;
32 }
33 </style>
34</head>
35<body>
36 <div id="article-content" style="min-height: 500px">
37 <h1>My Article Title</h1>
38 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
39 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
40 </div>
41
42 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
43 <script>
44 FastCommentsCollabChat(document.getElementById('article-content'), {
45 tenantId: 'demo',
46 hasDarkBackground: true
47 });
48 </script>
49</body>
50</html>
51

Приклад з вимкненим верхнім баром

За замовчуванням Collab Chat показує верхню панель з кількістю користувачів та кількістю обговорень. Ви можете її вимкнути:

Collab Chat з вимкненим верхнім баром
Copy CopyRun External Link
1
2<!DOCTYPE html>
3<html>
4<head>
5 <title>My Article with Collab Chat - No Top Bar</title>
6</head>
7<body>
8 <div id="article-content" style="min-height: 500px">
9 <h1>My Article Title</h1>
10 <p>This is a paragraph that users can annotate. Simply highlight any text to start a discussion!</p>
11 <p>You can have multiple paragraphs, and users can highlight text across any of them.</p>
12 </div>
13
14 <script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
15 <script>
16 FastCommentsCollabChat(document.getElementById('article-content'), {
17 tenantId: 'demo',
18 topBarTarget: null
19 });
20 </script>
21</body>
22</html>
23

Приклад із зворотним викликом оновлення кількості коментарів

Ви можете відстежувати, коли коментарі додаються або оновлюються, використовуючи зворотний виклик commentCountUpdated:

Collab Chat зі зворотним викликом оновлення кількості коментарів
Copy Copy
1
2<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
3<script>
4 FastCommentsCollabChat(document.getElementById('article-content'), {
5 tenantId: 'demo',
6 commentCountUpdated: function(count) {
7 console.log('Total comments:', count);
8 document.getElementById('comment-badge').textContent = count;
9 }
10 });
11</script>
12

Приклад з кількома секціями

Ви можете ініціалізувати Collab Chat на кількох окремих секціях сторінки. Кожна секція матиме свої незалежні анотації:

Collab Chat у кількох секціях
Copy Copy
1
2<div id="intro-section">
3 <h2>Introduction</h2>
4 <p>Content for the introduction...</p>
5</div>
6
7<div id="main-section">
8 <h2>Main Content</h2>
9 <p>Content for the main article...</p>
10</div>
11
12<script src="https://cdn.fastcomments.com/js/embed-collab-chat.min.js"></script>
13<script>
14 // Ініціалізація для секції intro
15 FastCommentsCollabChat(document.getElementById('intro-section'), {
16 tenantId: 'demo',
17 urlId: 'my-article-intro'
18 });
19
20 // Ініціалізація для секції main
21 FastCommentsCollabChat(document.getElementById('main-section'), {
22 tenantId: 'demo',
23 urlId: 'my-article-main'
24 });
25</script>
26

Додавання живих коментарів до онлайн-книг Internal Link

Ви можете ініціалізувати Collab Chat для кожної сторінки, якщо бажаєте, і мати окремі треди для кожної сторінки; просто передайте параметру urlId значення на кшталт book-one-page1. Ця конфігурація також працює для звичайного віджета коментування.

Поведінка виділення тексту Internal Link

Як працює виділення тексту

Коли користувачі виділяють текст у контейнері Collab Chat, віджет фіксує це виділення та дозволяє розпочати обговорення. Виділення може бути як маленьким — одне слово, так і великим — кілька абзаців, що охоплюють різні елементи.

Затримка виділення

На настільних пристроях є затримка 3,5 секунди між моментом виділення тексту користувачем і появою запрошення до обговорення. Це запобігає мерехтінню інтерфейсу, коли користувачі просто виділяють текст для копіювання чи читання. На мобільних пристроях запрошення з'являється одразу, оскільки виділення тексту на сенсорних екранах є більш навмисним.

Унікальні ідентифікатори розмов

Кожна розмова отримує унікальний urlId, який поєднує URL сторінки, шлях до елемента DOM та серіалізований діапазон тексту. Це гарантує, що кожне виділення тексту створює окрему розмову, яку можна знайти пізніше.

Якщо ви вказали власний urlId у своїй конфігурації, він буде поєднаний зі шляхом до елемента та діапазоном тексту для створення кінцевого ідентифікатора.

Візуальні виділення

Коли для певного виділеного тексту існує обговорення, цей текст отримує візуальне підсвічування. Підсвічування реалізовано за допомогою кольорів фону та з'являється при наведенні курсору або коли відкрите відповідне вікно чату.

Система підсвічування працює шляхом обгортання виділеного тексту в спеціальний елемент, який можна стилізувати. Цей підхід гарантує, що підсвічування залишаються точними навіть тоді, коли структура HTML є складною.

Позиціонування вікна чату

Коли користувач натискає на підсвічування або створює нову анотацію, вікно чату з'являється біля виділеного тексту. Віджет автоматично обчислює найкращу позицію для цього вікна на основі доступного простору в області перегляду.

Система позиціонування використовує CSS-класи, такі як to-right, to-left, to-top та to-bottom, щоб вказати, у якому напрямку вікно чату має розширюватися від підсвічування. На мобільних пристроях (екрани шириною менше 768px) вікно чату завжди з'являється на весь екран для кращої зручності використання.

Розміри вікна чату

Вікна чату мають ширину 410px на настільних пристроях з відступом 20px та візуальною стрілкою 16px, що вказує на виділений текст. Ці розміри є фіксованими для забезпечення узгодженої поведінки, але ви можете налаштувати зовнішній вигляд за допомогою CSS.

Виділення, що охоплює кілька елементів

Користувачі можуть виділяти текст, що охоплює кілька HTML-елементів, наприклад, виділення від середини одного абзацу до початку іншого. Система серіалізації діапазонів коректно обробляє такі випадки та підсвітить весь виділений текст навіть через межі елементів.

Сумісність з браузерами

Система виділення тексту використовує стандартний API window.getSelection(), який підтримується в усіх сучасних браузерах. Для старіших версій Internet Explorer передбачено резервний варіант document.selection для сумісності.

Збереження виділень

Після створення розмови для виділеного тексту ця анотація зберігається навіть після перезавантаження сторінки. Серіалізований діапазон і шлях DOM дозволяють віджету відновити підсвічування точно в тому ж місці, коли користувачі повертаються на сторінку.

Це працює надійно, доки вміст вашої сторінки залишається стабільним. Якщо ви зміните текстовий вміст або реструктуризуєте HTML, наявні анотації можуть більше не відповідати тексту. З цієї причини краще уникати значних змін вмісту на сторінках з активними анотаціями або розглянути можливість міграції анотацій, коли зміни вмісту є необхідними.

Налаштування Internal Link

Підтримка темного режиму

Динамічний темний режим

Якщо темний режим на вашому сайті керується додаванням класу .dark до елементу body, інтерфейс Collab Chat автоматично враховуватиме це без потреби в повторній ініціалізації. Стилі віджета спроєктовані так, щоб реагувати на наявність цього класу.

Приклад CSS темного режиму
Copy Copy
1
2/* Ваш CSS для темного режиму */
3body.dark {
4 background: #1a1a1a;
5 color: #ffffff;
6}
7

Налаштування стилю за допомогою CSS

Ви можете налаштувати зовнішній вигляд виділень тексту, вікон чату та інших елементів за допомогою CSS. Віджет додає спеціальні класи, які ви можете використовувати у вашому файлі стилів.

Виділення тексту використовують систему стилів бульбашок коментарів FastComments, тому будь-які зміни, які ви застосували до стандартного віджета коментування, також вплинуть на Collab Chat.

Налаштування верхньої панелі

Верхня панель показує кількість користувачів онлайн та кількість дискусій. Ви можете налаштувати її розташування, надавши власний елемент як topBarTarget:

Користувацьке розташування верхньої панелі
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 topBarTarget: document.getElementById('my-custom-header')
5});
6

Або вимкнути її повністю, встановивши значення null:

Вимкнути верхню панель
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 topBarTarget: null
5});
6

Поведінка на мобільних пристроях

На екранах шириною менше 768px Collab Chat автоматично переключається на оптимізований для мобільних пристроїв макет. Вікна чату з'являються на весь екран замість того, щоб плавати поруч із текстом, а затримка виділення видаляється для більш негайної взаємодії.

Ця поведінка вбудована і не потребує ніякої конфігурації. Віджет автоматично визначає розмір екрану та відповідно підлаштовується.

Зовнішній вигляд вікна чату

Вікна чату мають ширину 410px на настільних пристроях з вказівною стрілкою 16px, що вказує на виділений текст. Вікна позиціонуються автоматично залежно від доступного простору у вікні перегляду, використовуючи класи позиціонування, такі як to-right, to-left, to-top, і to-bottom.

Ви можете додати власний CSS, щоб відрегулювати кольори, шрифти, відступи або інші візуальні властивості цих вікон. Вікна чату використовують ту саму структуру компонентів, що й стандартний віджет FastComments, тому вони успадковують будь-які глобальні налаштування, які ви застосували.

Локалізація

Collab Chat підтримує ті ж опції локалізації, що й стандартний віджет FastComments. Встановіть опцію locale, щоб відобразити текст інтерфейсу різними мовами:

Встановити локаль
Copy Copy
1
2FastCommentsCollabChat(element, {
3 tenantId: 'demo',
4 locale: 'es' // Іспанська
5});
6

FastComments підтримує десятки мов. Налаштування локалі впливає на весь текст інтерфейсу, включаючи підказки, кнопки та текст заповнювачів.

Успадковані параметри налаштування

Оскільки Collab Chat розширює стандартний віджет коментування, він успадковує всі параметри налаштування базового віджета. Це включає користувацькі CSS-класи, власні переклади, налаштування аватарів, форматування дат та багато іншого.

Дивіться основну документацію з налаштування FastComments для повного списку доступних параметрів налаштування.

Робота з користувацькими шрифтами

Якщо ваш сайт використовує користувацькі шрифти, інтерфейс Collab Chat успадкує ці шрифти з вашого CSS сторінки. Можливо, вам доведеться створити правило налаштування віджета та @import будь-які шрифти у користувацькому CSS в цьому правилі, якщо ви хочете, щоб плаваюче вікно чату використовувало ті самі шрифти.

Жива синхронізація Internal Link

Оновлення в реальному часі

Collab Chat використовує WebSocket-з'єднання для синхронізації всіх розмов у реальному часі між усіма підключеними користувачами. Коли хтось створює нову анотацію, додає коментар або видаляє обговорення, всі інші користувачі, що переглядають ту саму сторінку, бачать оновлення негайно без оновлення сторінки.

Як працює синхронізація через WebSocket

Коли ви ініціалізуєте Collab Chat, віджет встановлює WebSocket-з'єднання із серверами FastComments. Це з'єднання залишається відкритим протягом сесії користувача і прослуховує оновлення, що стосуються поточної сторінки.

Система WebSocket використовує три типи широкомовних повідомлень для Collab Chat. Подія new-text-chat спрацьовує, коли хтось створює нову анотацію на сторінці. Подія updated-text-chat спрацьовує, коли хтось оновлює існуючу розмову. Подія deleted-text-chat спрацьовує, коли хтось видаляє анотацію.

Система Broadcast ID

Щоб уникнути ефекту відлуння, коли користувачі бачать свої власні дії, що транслюються назад до них, кожне оновлення містить унікальний broadcastId. Коли користувач створює або оновлює анотацію, його клієнт генерує UUID для цієї операції. Коли WebSocket транслює оновлення назад усім клієнтам, клієнт-ініціатор ігнорує це оновлення, оскільки воно збігається з його власним broadcastId.

Це забезпечує плавну взаємодію: користувачі бачать свої зміни в інтерфейсі негайно, не чекаючи кругового обміну із сервером, при цьому всі інші користувачі також отримують оновлення.

Живий лічильник користувачів

У верхній панелі відображається кількість користувачів, які наразі переглядають сторінку. Цей лічильник оновлюється в реальному часі у міру приєднання та виходу користувачів. Кількість користувачів надається через те саме WebSocket-з'єднання і автоматично збільшується/зменшується на основі подій підключення та відключення.

Стійкість з'єднання

Якщо WebSocket-з'єднання обривається через проблеми з мережею або технічне обслуговування сервера, віджет автоматично намагається повторно підключитися. Під час періоду повторного підключення користувачі все ще можуть взаємодіяти з наявними анотаціями, але вони не бачитимуть оновлень від інших користувачів у реальному часі, доки з'єднання не буде відновлено.

Після відновлення з'єднання віджет повторно синхронізується, щоб упевнитися, що жодні оновлення не були пропущені. Це відбувається прозоро, без необхідності втручання користувача.

Розглядання використання пропускної здатності

Повідомлення WebSocket є легкими і містять лише мінімальну інформацію, необхідну для синхронізації стану. Створення нової анотації зазвичай використовує менше ніж 1KB пропускної здатності. Система також включає інтелектуальне пакетування, щоб зменшити частоту повідомлень у періоди високої активності.

Ваші метрики використання в панелі керування FastComments відстежують pubSubMessageCount і pubSubBandwidth, щоб ви могли контролювати активність синхронізації в реальному часі на ваших сайтах.

Синхронізація між вкладками

Якщо користувач має ту саму сторінку відкритою в кількох вкладках браузера, оновлення в одній вкладці з'являються негайно в інших вкладках. Це працює через той самий механізм синхронізації WebSocket і не вимагає додаткової конфігурації.

Безпека

Повідомлення WebSocket передаються по захищених з'єднаннях (WSS) і включають перевірку орендаря, щоб переконатися, що користувачі отримують лише ті оновлення для розмов, до яких вони мають доступ. Сервер перевіряє всі операції перед їх трансляцією, щоб запобігти несанкціонованому доступу або маніпуляціям.

Маєте питання?

Ось і все щодо FastComments Collab Chat! Якщо у вас є будь-які питання, потрібна допомога з впровадженням або є пропозиції щодо функцій, будь ласка, повідомте нам нижче або зверніться до нашої служби підтримки.

Для прикладів у реальному застосуванні перегляньте Govscent.org, який використовує Collab Chat у виробничому середовищі.