From 1ee213f742fc58a331f95ecb89bf79f039c3cb1d Mon Sep 17 00:00:00 2001 From: Aevann Date: Sun, 22 Jan 2023 04:43:28 +0200 Subject: [PATCH] another chat rework --- files/assets/css/chat.css | 4 +- files/assets/images/WPD/alert.ico | Bin 0 -> 3362 bytes files/assets/images/WPD/alert.webp | Bin 10348 -> 0 bytes files/assets/images/rDrama/alert.ico | Bin 0 -> 3890 bytes files/assets/images/rDrama/alert.webp | Bin 5190 -> 0 bytes files/assets/js/chat.js | 48 +++++--------- files/routes/chat.py | 19 +++--- files/templates/chat.html | 90 +++++++++++++++++++------- files/templates/util/html_head.html | 2 +- 9 files changed, 93 insertions(+), 70 deletions(-) create mode 100644 files/assets/images/WPD/alert.ico delete mode 100644 files/assets/images/WPD/alert.webp create mode 100644 files/assets/images/rDrama/alert.ico delete mode 100644 files/assets/images/rDrama/alert.webp diff --git a/files/assets/css/chat.css b/files/assets/css/chat.css index f52e564b3..02231ef2e 100644 --- a/files/assets/css/chat.css +++ b/files/assets/css/chat.css @@ -26,7 +26,7 @@ } .chat-mention { - background-color: #{{v.themecolor}}55; + background-color: #ffffff44; border-radius: 3px; } @@ -68,7 +68,7 @@ p { width: 100%; } -.cdiv { +.chat-line { overflow: hidden; margin-left: 27px; } diff --git a/files/assets/images/WPD/alert.ico b/files/assets/images/WPD/alert.ico new file mode 100644 index 0000000000000000000000000000000000000000..0125fe6ccaeae7fc0d2ce007c29e60cd94b99dad GIT binary patch literal 3362 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 K)M6390001)!X>=` diff --git a/files/assets/images/rDrama/alert.ico b/files/assets/images/rDrama/alert.ico new file mode 100644 index 0000000000000000000000000000000000000000..02c723bef90c29a40f55ce145c32d9a3b318b806 GIT binary patch literal 3890 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 literal 0 HcmV?d00001 diff --git a/files/assets/images/rDrama/alert.webp b/files/assets/images/rDrama/alert.webp deleted file mode 100644 index cbb93f39695a5843df022b752f4d527c5cc07ba2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5190 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 1 && !focused){ title.innerHTML = `[+${notifs}] Chat`; if (alert) { - icon.href = escapeHTML(`/assets/images/${site_name}/alert.webp?v=3`) + icon.href = `/i/${site_name}/alert.ico?v=3009` alert=false; } else { - icon.href = escapeHTML(`/assets/images/${site_name}/icon.webp?v=3009`) + icon.href = `/i/${site_name}/icon.webp?v=3009` alert=true; } setTimeout(flash, 500) } else { - icon.href = escapeHTML(`/assets/images/${site_name}/icon.webp?v=3009`) + icon.href = `/i/${site_name}/icon.webp?v=3009` notifs = 0 title.innerHTML = 'Chat'; } @@ -64,11 +65,11 @@ function flash(){ } -function handle_message(json) { +socket.on('speak', function(json) { let text = json['text'] let text_html - if (slurreplacer == 'True') text_html = json['text_censored'] + if (slurreplacer != '0') text_html = json['text_censored'] else text_html = json['text_html'] if (text_html.includes(``)){ @@ -87,15 +88,9 @@ function handle_message(json) { const last_user = users[users.length-1].innerHTML; const scrolled_down = (box.scrollHeight - box.scrollTop <= window.innerHeight) - if (last_user == json['username']) { - document.getElementsByClassName('userlink')[0].classList.add('d-none') - document.getElementsByClassName('avatar')[0].classList.add('d-none') - document.getElementsByClassName('time')[0].classList.add('d-none') - } - else { - document.getElementsByClassName('userlink')[0].classList.remove('d-none') - document.getElementsByClassName('avatar')[0].classList.remove('d-none') + if (last_user != json['username']) { document.getElementsByClassName('avatar-pic')[0].src = '/pp/' + json["user_id"] + if (json['hat']) document.getElementsByClassName('avatar-hat')[0].src = json['hat'] + "?h=7" else @@ -103,7 +98,8 @@ function handle_message(json) { document.getElementsByClassName('userlink')[0].href = '/@' + json['username'] document.getElementsByClassName('userlink')[0].style.color = '#' + json['namecolor'] - document.getElementsByClassName('time')[0].classList.remove('d-none') + document.getElementsByClassName('userlink')[0].innerHTML = json['username'] + if (Date.now() - json['time']*1000 > 5000) document.getElementsByClassName('time')[0].innerHTML = timeSince(json['time']*1000) + ' ago' else @@ -111,7 +107,6 @@ function handle_message(json) { } document.getElementsByClassName('chat-line')[0].id = json['id'] - document.getElementsByClassName('userlink')[0].innerHTML = json['username'] document.getElementsByClassName('text')[0].innerHTML = escapeHTML(text) document.getElementsByClassName('chat-message')[0].innerHTML = text_html.replace(/data-src/g, 'src').replace(/data-cfsrc/g, 'src').replace(/style="display:none;visibility:hidden;"/g, '') @@ -121,7 +116,7 @@ function handle_message(json) { if (quoted) { document.getElementsByClassName('quotes')[0].classList.remove("d-none") document.getElementsByClassName('QuotedMessageLink')[0].href = '#' + json['quotes'] - document.getElementsByClassName('QuotedUser')[0].innerHTML = quoted.querySelector('.userlink').innerHTML + document.getElementsByClassName('QuotedUser')[0].innerHTML = quoted.parentElement.querySelector('.userlink').innerHTML document.getElementsByClassName('QuotedMessage')[0].innerHTML = quoted.querySelector('.text').innerHTML } } @@ -133,26 +128,13 @@ function handle_message(json) { box.querySelector('.chat-group:last-child').append(line) } else { - const chatgroup = document.createElement("div"); - chatgroup.className = "chat-group"; + const chatgroup = document.getElementsByClassName('chat-group')[0].cloneNode(true) chatgroup.append(line) box.append(chatgroup) } if (scrolled_down || json['username'] == vusername) box.scrollTo(0, box.scrollHeight) -} - -socket.on('speak', function(json) { - handle_message(json) -}) - -socket.on('catchup', function(json) { - for (const message of json) { - const existing = document.getElementById(message['id']) - if (existing) break - handle_message(message) - } }) function send() { @@ -190,10 +172,10 @@ function quote(t) { const text = t.parentElement.getElementsByClassName("text")[0].innerHTML.replace(/\*/g,"\\*").split('\n').pop() document.getElementById('QuotedMessage').innerHTML = text - const username = t.parentElement.parentElement.getElementsByClassName('userlink')[0].innerHTML + const username = t.parentElement.parentElement.parentElement.parentElement.getElementsByClassName('userlink')[0].innerHTML document.getElementById('QuotedUser').innerHTML = username - const id = t.parentElement.parentElement.parentElement.parentElement.id + const id = t.parentElement.parentElement.parentElement.id document.getElementById('quotes_id').value = id document.getElementById('QuotedMessageLink').href = `#${id}` diff --git a/files/routes/chat.py b/files/routes/chat.py index 485eb05f9..6f6b1bba9 100644 --- a/files/routes/chat.py +++ b/files/routes/chat.py @@ -31,8 +31,8 @@ muted = cache.get(f'muted') or { f'{SITE_FULL}/admin/chat': {} } messages = cache.get(f'messages') or { - f'{SITE_FULL}/chat': [], - f'{SITE_FULL}/admin/chat': [] + f'{SITE_FULL}/chat': {}, + f'{SITE_FULL}/admin/chat': {} } @app.get("/chat") @@ -41,12 +41,12 @@ messages = cache.get(f'messages') or { def chat(v): if not v.admin_level and TRUESCORE_CHAT_MINIMUM and v.truescore < TRUESCORE_CHAT_MINIMUM: abort(403, f"Need at least {TRUESCORE_CHAT_MINIMUM} truescore for access to chat.") - return render_template("chat.html", v=v) + return render_template("chat.html", v=v, messages=messages[request.url]) @app.get("/admin/chat") @admin_level_required(2) def admin_chat(v): - return render_template("chat.html", v=v) + return render_template("chat.html", v=v, messages=messages[request.url]) @socketio.on('speak') @limiter.limit("3/second;10/minute") @@ -78,8 +78,8 @@ def speak(data, v): text_html = sanitize(text, count_marseys=True) quotes = data['quotes'] + id = str(uuid.uuid4()) data = { - "id": str(uuid.uuid4()), "quotes": quotes, "hat": v.hat_active(v)[0], "user_id": v.id, @@ -95,7 +95,7 @@ def speak(data, v): emit('speak', data) else: emit('speak', data, room=request.referrer, broadcast=True) - messages[request.referrer].append(data) + messages[request.referrer][id] = data messages[request.referrer] = messages[request.referrer][-500:] if v.admin_level >= PERMS['USER_BAN']: @@ -136,7 +136,6 @@ def connect(v): online.append(v.username) refresh_online() - emit('catchup', messages[request.referrer], room=request.referrer) emit('typing', typing[request.referrer], room=request.referrer) return '', 204 @@ -174,9 +173,9 @@ def typing_indicator(data, v): @limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID) @admin_level_required(PERMS['POST_COMMENT_MODERATION']) def delete(id, v): - for message in messages[request.referrer]: - if message['id'] == id: - messages[request.referrer].remove(message) + for k, val in messages[request.referrer].items(): + if k == id: + del messages[request.referrer][k] break emit('delete', id, room=request.referrer, broadcast=True) diff --git a/files/templates/chat.html b/files/templates/chat.html index 66c27e080..c4aea118b 100644 --- a/files/templates/chat.html +++ b/files/templates/chat.html @@ -22,37 +22,79 @@ -
-
-
-
-
- - -
-
- just now -
- + {% macro chat_group_template(id, m) %} +
+
+ + +
+ + {% if m %}{{m['username']}}{% endif %} + + {% if m %}{{m['time'] | timestamp}}{% else %}just now{% endif %} + {% endmacro %} - - - {% if v.admin_level > 1 %} - - - {% endif %} - + {% macro chat_line_template(id, m) %} +
+
+
+ + + + {% if m %} + {% if v.slurreplacer %} + {{m['text_censored'] | safe}} + {% else %} + {{m['text_html'] | safe}} + {% endif %} + {% endif %} + + {% if m %}{{m['text']}}{% endif %} + {% if v.admin_level > 1 %} + + + {% endif %} +
+ {% endmacro %} + + +
+ {{chat_group_template()}} +
+ +
+ {{chat_line_template()}} +
+
+ {% for id, m in messages.items() %} + {% set previous = m %} + {% if not (loop.index > 1 and m['user_id'] == previous['user_id']) %} + {% if loop.index > 1 %} +
+ {% endif %} + {{chat_group_template(id, m)}} + {% endif %} + {{chat_line_template(id, m)}} + {% endfor %} +
@@ -80,7 +122,7 @@ - +
diff --git a/files/templates/util/html_head.html b/files/templates/util/html_head.html index cb1a0ed9b..936bd4bc8 100644 --- a/files/templates/util/html_head.html +++ b/files/templates/util/html_head.html @@ -59,7 +59,7 @@ '/h/'+sub.name, sub.sidebar if sub.sidebar %} {% endif %} - +