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

How Text Selection Works

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

Selection Delay

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

Unique Conversation IDs

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

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

Visual Highlights

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

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

Chat Window Positioning

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

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

Chat Window Dimensions

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

Cross-Element Selections

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

Browser Compatibility

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

Selection Persistence

Після створення розмови для виділеного тексту ця анотація зберігається навіть якщо сторінка перезавантажиться. Серіалізований діапазон і шлях 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 у виробничому середовищі.