Add shell emoji tests

This commit is contained in:
David Heinemeier Hansson
2026-05-25 13:16:47 +02:00
parent 81f4896879
commit 4277f5346b
7 changed files with 188 additions and 50 deletions
+46
View File
@@ -0,0 +1,46 @@
function parseEmojis(raw) {
try {
var data = JSON.parse(String(raw || ""))
return Array.isArray(data) ? data : []
} catch (e) {
return []
}
}
function normalizedQuery(query) {
return String(query || "").trim().toLowerCase()
}
function keywordText(item) {
return String((item && item.k) || "").toLowerCase()
}
function filterEmojis(emojis, query, limit) {
var values = Array.isArray(emojis) ? emojis : []
var needle = normalizedQuery(query)
var max = limit === undefined || limit === null ? 1000 : Number(limit)
if (isNaN(max)) max = 1000
max = Math.max(0, max)
if (max === 0) return []
var out = []
for (var i = 0; i < values.length; i++) {
var item = values[i]
if (!item || !item.e) continue
if (!needle || keywordText(item).indexOf(needle) >= 0) {
out.push(item)
if (out.length >= max) break
}
}
return out
}
if (typeof module !== "undefined") {
module.exports = {
parseEmojis: parseEmojis,
normalizedQuery: normalizedQuery,
filterEmojis: filterEmojis
}
}
+3 -16
View File
@@ -3,6 +3,7 @@ import Quickshell.Io
import Quickshell.Wayland
import QtQuick
import qs.Commons
import "EmojiSearch.js" as EmojiSearch
Item {
id: root
@@ -65,26 +66,12 @@ Item {
}
function loadEmojis(raw) {
try {
var data = JSON.parse(raw)
root.emojis = data || []
} catch (e) {
console.warn("Failed to parse emojis.json:", e)
root.emojis = []
}
root.emojis = EmojiSearch.parseEmojis(raw)
if (root.opened) root.rebuildDisplay()
}
function rebuildDisplay() {
var query = root.filterText.trim().toLowerCase()
var out = []
for (var i = 0; i < root.emojis.length; i++) {
var item = root.emojis[i]
if (!query || item.k.indexOf(query) >= 0) {
out.push(item)
if (out.length >= 1000) break // limit to keep it fast
}
}
var out = EmojiSearch.filterEmojis(root.emojis, root.filterText, 1000)
root.filteredEmojis = out
displayModel.clear()