From 2901b45188196a25fa595e4f424eed8004da391e Mon Sep 17 00:00:00 2001 From: Eboubaker Bekkouche Date: Thu, 29 Feb 2024 03:45:17 +0100 Subject: [PATCH] Web worker for search engine. Squashed commits: - Fix up & down keys functionality - fix index. - forgot my self review... - show inaccurate results warning, and hide dropdown when not searching. - refactor - fix build error on Windows. - web worker for search engine --- process/src/GameData.js | 5 +- process/src/readFileNormalized.js | 9 ++ src/components/Select.vue | 212 ++++++++++++++++-------------- src/mixins/typeAheadPointer.js | 8 +- src/search.worker.js | 95 +++++++++++++ 5 files changed, 226 insertions(+), 103 deletions(-) create mode 100644 process/src/readFileNormalized.js create mode 100644 src/search.worker.js diff --git a/process/src/GameData.js b/process/src/GameData.js index 262894cac..270265715 100644 --- a/process/src/GameData.js +++ b/process/src/GameData.js @@ -14,6 +14,7 @@ const SpriteProcessor = require('./SpriteProcessor'); const ObjectFilters = require('./ObjectFilters'); const ObjectBadges = require('./ObjectBadges'); const SitemapGenerator = require('./SitemapGenerator'); +const readFileNormalized = require('./readFileNormalized'); class GameData { constructor(processDir, dataDir, staticDir) { @@ -91,7 +92,7 @@ class GameData { }); this.eachFileInDir("objects", ".txt", (path, filename) => { if (filename.startsWith("groundHeat")) { - const content = fs.readFileSync(path, "utf8"); + const content = readFileNormalized(path); Biome.applyGroundHeat(this.biomes, filename, content); } }); @@ -234,7 +235,7 @@ class GameData { eachFileContent(dirName, extension, callback) { this.eachFileInDir(dirName, extension, (path, filename) => { - callback(fs.readFileSync(path, "utf8"), filename); + callback(readFileNormalized(path, "utf8"), filename); }); } diff --git a/process/src/readFileNormalized.js b/process/src/readFileNormalized.js new file mode 100644 index 000000000..27d2ccb68 --- /dev/null +++ b/process/src/readFileNormalized.js @@ -0,0 +1,9 @@ +"use strict"; +const fs = require("fs"); + +/** read file and normalize line endings of CR to LF */ +function readFileNormalized(path) { + return fs.readFileSync(path, "utf8").replaceAll('\r\n', '\n'); +} + +module.exports = readFileNormalized; diff --git a/src/components/Select.vue b/src/components/Select.vue index 1db4dc098..0805e0c83 100644 --- a/src/components/Select.vue +++ b/src/components/Select.vue @@ -86,7 +86,7 @@ } /* Search Button */ - .v-select .dropdown-toggle .search-icon { + .v-select .dropdown-toggle .search-icon, .v-select .dropdown-toggle .spin { position: absolute; top: 9px; left: 10px; @@ -323,13 +323,35 @@ .v-select .selected-tag { position: absolute; } + .spin { + transform: rotate(0); + animation: spin 1.1s infinite linear; + } + @keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } + }