summaryrefslogtreecommitdiff
path: root/pages/log.js
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2026-06-28 18:17:50 +0200
committerTom Smeding <tom@tomsmeding.com>2026-06-28 18:19:58 +0200
commit06dbdee019256ec52fce87d0bac4ffcda09fa392 (patch)
tree72225f9d68d2319427fe189b0e8dfbf02bc8004e /pages/log.js
parent5299662f7dacdb636df009aefdc8a7d52d5faf8e (diff)
Nick colors on client in JS
Diffstat (limited to 'pages/log.js')
-rw-r--r--pages/log.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/pages/log.js b/pages/log.js
new file mode 100644
index 0000000..b7fe9e3
--- /dev/null
+++ b/pages/log.js
@@ -0,0 +1,94 @@
+"use strict";
+
+var colorTableLight = [
+ // Tomorrow theme (light) (ish)
+ "#4d4d4c", // Foreground
+ "#c82829", // Red
+ "#cb6b01", // Orange (darker)
+ "#2d981a", // Green(ish)
+ "#3e999f", // Aqua
+ "#4271ae", // Blue
+ "#8959a8", // Purple
+ // Solarized theme
+ "#002b36", // Base03
+ "#586e75", // Base01
+ "#657b83", // Base00
+ "#839496", // Base0
+ "#b58900", // Yellow
+ "#cb4b16", // Orange
+ "#dc322f", // Red
+ "#d33682", // Magenta
+ "#6c71c4", // Violet
+ "#268bd2", // Blue
+ "#2aa198", // Cyan
+ "#859900", // Green
+];
+
+var colorTableDark = [
+ // Tomorrow theme (dark)
+ "#c5c8c6", // Foreground
+ "#969896", // Comment
+ "#cc6666", // Red
+ "#de935f", // Orange
+ "#f0c674", // Yellow
+ "#b5bd68", // Green
+ "#8abeb7", // Aqua
+ "#81a2be", // Blue
+ "#b294bb", // Purple
+ // Solarized theme
+ "#fdf6e3", // Base3
+ "#eee8d5", // Base2
+ "#93a1a1", // Base1
+ "#839496", // Base0
+ "#b58900", // Yellow
+ "#cb4b16", // Orange
+ "#dc322f", // Red
+ "#d33682", // Magenta
+ "#6c71c4", // Violet
+ "#268bd2", // Blue
+ "#2aa198", // Cyan
+ "#859900", // Green
+];
+
+// weechat's gui_nick_hash_djb2_32
+function nickhash(nick) {
+ var h = 0;
+ for (var i = 0; i < nick.length; i++)
+ h ^= (h << 5) + (h >> 2) + nick.charCodeAt(i);
+ return h;
+}
+
+function renderNickColors(dark) {
+ var table = dark ? colorTableDark : colorTableLight;
+ var n = table.length;
+
+ var spans = document.querySelectorAll("table#events span.nick");
+ for (var i = 0; i < spans.length; i++) {
+ var el = spans[i];
+ var text = el.innerText;
+ var h = nickhash(el.innerText);
+ el.setAttribute("style", "color: " + table[h % n]);
+ }
+}
+
+window.addEventListener("load", function() {
+ var querystr = "(prefers-color-scheme: dark)";
+ if (!("matchMedia" in window)) {
+ renderNickColors(false);
+ return;
+ }
+
+ var queryList = window.matchMedia(querystr);
+ renderNickColors(queryList.matches);
+
+ // Apparently older Safari doesn't have addEventListener here yet
+ if ("addEventListener" in queryList) {
+ queryList.addEventListener("change", function(ql) {
+ renderNickColors(ql.matches);
+ });
+ } else if ("addListener" in queryList) {
+ queryList.addListener(function() {
+ renderNickColors(window.matchMedia(querystr).matches);
+ });
+ }
+});