From 15274a6eb3477eab2601376e205a0efde37e6261 Mon Sep 17 00:00:00 2001 From: mk Date: Sat, 21 Feb 2026 13:57:47 -0300 Subject: [PATCH] fist commit --- README.md | 9 + emoji-autocomplete.css | 46 +++++ emoji-autocomplete.js | 409 +++++++++++++++++++++++++++++++++++++++++ emoji-autocomplete.png | Bin 0 -> 32852 bytes 4 files changed, 464 insertions(+) create mode 100644 README.md create mode 100644 emoji-autocomplete.css create mode 100644 emoji-autocomplete.js create mode 100644 emoji-autocomplete.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..f6cd667 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# How to use + +On admin panel on owncast under configuration. + +1. Copy the contents of `emoji-autocomplete.css` under Appearance tab and into `Customize your page styling with css` +2. Copy the contents of `emoji-autocomplete.js` under Custom Scripting tab and into `Customize your page with Javascript` + +Example of what it looks like when you do press ':' +![Emoji autocomplete](./emoji-autocomplete.png) diff --git a/emoji-autocomplete.css b/emoji-autocomplete.css new file mode 100644 index 0000000..8173af7 --- /dev/null +++ b/emoji-autocomplete.css @@ -0,0 +1,46 @@ +/* Emoji Autocomplete Popup - paste into Owncast Admin > Custom CSS */ + +#emoji-autocomplete-popup { + position: absolute; + bottom: 100%; + left: 0; + right: 0; + display: flex; + flex-wrap: wrap; + align-content: end; + overflow: hidden; + background-color: var(--theme-color-components-chat-background); + border: 1px solid var(--theme-color-palette-3); + border-radius: var(--theme-rounded-corners); + z-index: 200; + list-style: none; + margin: 0 0 4px; + padding: 4px; + gap: 3px; +} + +#emoji-autocomplete-popup li { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 38px; + height: 38px; + padding: 4px; + cursor: pointer; + font-size: 24px; + border-radius: 4px; +} + +#emoji-autocomplete-popup li:hover { + background-color: var(--theme-color-palette-3); +} + +#emoji-autocomplete-popup li img { + width: 28px; + height: 28px; +} + +#emoji-autocomplete-popup li.selected { + background-color: var(--theme-color-palette-3); +} diff --git a/emoji-autocomplete.js b/emoji-autocomplete.js new file mode 100644 index 0000000..fd7441c --- /dev/null +++ b/emoji-autocomplete.js @@ -0,0 +1,409 @@ +/* Emoji Autocomplete - paste into Owncast Admin > Custom JavaScript */ +(function () { + "use strict"; + + var MAX_ROWS = 3; + var ITEM_SIZE = 38; // px, matches CSS width/height of li + var ITEM_GAP = 3; // px, matches CSS gap + var POPUP_PADDING = 4; // px, matches CSS padding + var allEmojis = []; // {name, native?, url?, keywords?} + var autocompleteActive = false; + var autocompleteQuery = ""; + var autocompleteIndex = 0; + var colonNode = null; // the Text node containing the ':' + var colonOffset = 0; // character offset of ':' within that node + var popupEl = null; + + // ── Load emoji data ────────────────────────────────────────────────── + + async function loadEmojis() { + var customList = []; + try { + var customResponse = await fetch("/api/emoji"); + var custom = await customResponse.json(); + customList = (custom || []).map(function (e) { + return { name: e.name, url: e.url }; + }); + } catch (ex) { + /* no custom emoji */ + return; + } + + try { + var cdnResponse = await fetch( + "https://cdn.jsdelivr.net/npm/@emoji-mart/data@1/sets/1/native.json", + ); + var data = await cdnResponse.json(); + + var standardList = []; + var emojis = data.emojis || {}; + Object.keys(emojis).forEach(function (key) { + var e = emojis[key]; + var native = e.skins && e.skins[0] && e.skins[0].native; + if (native) { + standardList.push({ + name: e.id || key, + native: native, + keywords: e.keywords || [], + }); + } + }); + + // Read emoji-mart frequency data from localStorage + var freqMap = {}; + try { + var stored = localStorage.getItem("emoji-mart.frequently"); + if (stored) freqMap = JSON.parse(stored); + } catch (ex) { + /* ignore */ + } + + var merged = customList.concat(standardList); + merged.sort(function (a, b) { + var aCustom = a.url ? 0 : 1; + var bCustom = b.url ? 0 : 1; + if (aCustom !== bCustom) return aCustom - bCustom; + var fa = freqMap[a.name] || 0; + var fb = freqMap[b.name] || 0; + if (fb !== fa) return fb - fa; + return a.name.localeCompare(b.name); + }); + allEmojis = merged; + } catch (ex) { + // If CDN fails, at least use custom emoji + allEmojis = customList; + } + } + + // ── Filtering ──────────────────────────────────────────────────────── + + function matchesQuery(emoji, q) { + var lower = q.toLowerCase(); + if (emoji.name.toLowerCase().startsWith(lower)) return true; + if (emoji.keywords) { + for (var i = 0; i < emoji.keywords.length; i++) { + if (emoji.keywords[i].toLowerCase().startsWith(lower)) + return true; + } + } + return false; + } + + function filterEmojis(query) { + if (!query) return allEmojis; + return allEmojis.filter(function (e) { + return matchesQuery(e, query); + }); + } + + // ── Popup rendering ───────────────────────────────────────────────── + + function getOrCreatePopup() { + if (popupEl) return popupEl; + popupEl = document.createElement("ul"); + popupEl.id = "emoji-autocomplete-popup"; + return popupEl; + } + + function getMaxVisible(container) { + var width = container.clientWidth; + var usable = width - POPUP_PADDING * 2; + var cols = Math.max( + 1, + Math.floor((usable + ITEM_GAP) / (ITEM_SIZE + ITEM_GAP)), + ); + return cols * MAX_ROWS; + } + + function showPopup(filtered) { + var chatInput = document.getElementById("chat-input"); + if (!chatInput) return; + + var popup = getOrCreatePopup(); + popup.innerHTML = ""; + + var count = Math.min(filtered.length, getMaxVisible(chatInput)); + for (let i = 0; i < count; i++) { + var li = document.createElement("li"); + li.setAttribute("title", ":" + filtered[i].name + ":"); + if (i === autocompleteIndex) li.className = "selected"; + + if (filtered[i].native) { + li.textContent = filtered[i].native; + } else if (filtered[i].url) { + var img = document.createElement("img"); + img.src = filtered[i].url; + img.alt = filtered[i].name; + img.className = "emoji"; + li.appendChild(img); + } + + li.addEventListener("mousedown", function (ev) { + ev.preventDefault(); + insertEmoji(filtered[i]); + }); + + popup.appendChild(li); + } + + if (!popup.parentNode) { + chatInput.insertBefore(popup, chatInput.firstChild); + } + + // Scroll selected item into view + var selectedItem = popup.children[autocompleteIndex]; + if (selectedItem) { + selectedItem.scrollIntoView({ + inline: "nearest", + block: "nearest", + }); + } + } + + function hidePopup() { + autocompleteActive = false; + autocompleteQuery = ""; + autocompleteIndex = 0; + colonNode = null; + colonOffset = 0; + if (popupEl && popupEl.parentNode) { + popupEl.parentNode.removeChild(popupEl); + } + } + + // ── Emoji insertion ───────────────────────────────────────────────── + + function insertNodeAndMoveCursor(range, node) { + var sel = window.getSelection(); + range.insertNode(node); + sel.removeAllRanges(); + var newRange = document.createRange(); + newRange.setStartAfter(node); + newRange.collapse(true); + sel.addRange(newRange); + } + + function insertEmoji(emoji) { + var sel = window.getSelection(); + if (!sel || !colonNode) { + hidePopup(); + return; + } + + var range = document.createRange(); + range.setStart(colonNode, colonOffset); + + // End at current cursor position + var curRange = sel.getRangeAt(0); + range.setEnd(curRange.startContainer, curRange.startOffset); + range.deleteContents(); + + if (emoji.native) { + insertNodeAndMoveCursor( + range, + document.createTextNode(emoji.native), + ); + } else if (emoji.url) { + var img = document.createElement("img"); + img.src = emoji.url; + img.alt = ":" + emoji.name + ":"; + img.title = ":" + emoji.name + ":"; + img.className = "emoji"; + insertNodeAndMoveCursor(range, img); + } + + hidePopup(); + } + + // ── Colon detection ───────────────────────────────────────────────── + + function detectAutocomplete() { + var sel = window.getSelection(); + if (!sel || sel.rangeCount === 0) { + hidePopup(); + return; + } + + var range = sel.getRangeAt(0); + if (!range.collapsed) { + hidePopup(); + return; + } + + var container = range.startContainer; + var offset = range.startOffset; + if (container.nodeType !== Node.TEXT_NODE) { + hidePopup(); + return; + } + + var text = container.textContent || ""; + var beforeCursor = text.slice(0, offset); + + var colonIdx = beforeCursor.lastIndexOf(":"); + if (colonIdx === -1) { + hidePopup(); + return; + } + + // Only trigger if ':' is at start, or preceded by whitespace / non-alnum + if (colonIdx > 0 && /[a-zA-Z0-9]/.test(beforeCursor[colonIdx - 1])) { + hidePopup(); + return; + } + + var query = beforeCursor.slice(colonIdx + 1); + if (/\s/.test(query)) { + hidePopup(); + return; + } + + colonNode = container; + colonOffset = colonIdx; + autocompleteQuery = query; + autocompleteIndex = 0; + autocompleteActive = true; + + var filtered = filterEmojis(query); + if (filtered.length === 0) { + hidePopup(); + return; + } + showPopup(filtered); + } + + // ── Grid helpers ──────────────────────────────────────────────────── + + function getColumnsPerRow() { + if (!popupEl || !popupEl.children.length) return 1; + var firstTop = popupEl.children[0].getBoundingClientRect().top; + var cols = 0; + for (var i = 0; i < popupEl.children.length; i++) { + if (popupEl.children[i].getBoundingClientRect().top === firstTop) { + cols++; + } else { + break; + } + } + return cols || 1; + } + + // ── Event listeners ───────────────────────────────────────────────── + + function waitForChatInput() { + var input = document.getElementById("chat-input-content-editable"); + if (input) { + attachListeners(input); + return; + } + // Poll until the chat input appears (it may load async) + var observer = new MutationObserver(function () { + var el = document.getElementById("chat-input-content-editable"); + if (el) { + observer.disconnect(); + attachListeners(el); + } + }); + observer.observe(document.body, { childList: true, subtree: true }); + } + + function attachListeners(input) { + // Use capturing phase so we fire BEFORE React's delegated handlers + input.addEventListener("keydown", onKeyDown, true); + input.addEventListener("input", onInput, true); + + // Also detect on selection changes (e.g., clicking after a colon) + document.addEventListener("selectionchange", function () { + if (document.activeElement === input) { + detectAutocomplete(); + } + }); + } + + function onInput() { + detectAutocomplete(); + } + + function onKeyDown(e) { + if (!autocompleteActive) return; // let everything pass through to React + + var filtered = filterEmojis(autocompleteQuery); + if (filtered.length === 0) { + hidePopup(); + return; + } + + switch (e.key) { + case "Enter": + e.preventDefault(); + e.stopPropagation(); + insertEmoji(filtered[autocompleteIndex] || filtered[0]); + return; + + case "Tab": + e.preventDefault(); + e.stopPropagation(); + if (e.shiftKey) { + autocompleteIndex = + (autocompleteIndex - 1 + filtered.length) % + filtered.length; + } else { + autocompleteIndex = + (autocompleteIndex + 1) % filtered.length; + } + showPopup(filtered); + return; + + case "ArrowRight": + e.preventDefault(); + e.stopPropagation(); + autocompleteIndex = Math.min( + autocompleteIndex + 1, + filtered.length - 1, + ); + showPopup(filtered); + return; + + case "ArrowLeft": + e.preventDefault(); + e.stopPropagation(); + autocompleteIndex = Math.max(autocompleteIndex - 1, 0); + showPopup(filtered); + return; + + case "ArrowDown": + e.preventDefault(); + e.stopPropagation(); + var cols = getColumnsPerRow(); + autocompleteIndex = Math.min( + autocompleteIndex + cols, + filtered.length - 1, + ); + showPopup(filtered); + return; + + case "ArrowUp": + e.preventDefault(); + e.stopPropagation(); + var colsUp = getColumnsPerRow(); + autocompleteIndex = Math.max(autocompleteIndex - colsUp, 0); + showPopup(filtered); + return; + + case "Escape": + e.preventDefault(); + e.stopPropagation(); + hidePopup(); + return; + } + } + + // ── Init ───────────────────────────────────────────────────────────── + + loadEmojis(); + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", waitForChatInput); + } else { + waitForChatInput(); + } +})(); diff --git a/emoji-autocomplete.png b/emoji-autocomplete.png new file mode 100644 index 0000000000000000000000000000000000000000..591f2f847eaebb2415c3a4551d00fd7c9db1857f GIT binary patch literal 32852 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 literal 0 HcmV?d00001