diff --git a/client/js/lounge.js b/client/js/lounge.js
index 25e67f4b..9fcf8cb1 100644
--- a/client/js/lounge.js
+++ b/client/js/lounge.js
@@ -51,17 +51,10 @@ $(function() {
id: "emoji",
match: /\B:([-+\w:?]{2,}):?$/,
search(term, callback) {
- const results = fuzzy.filter(
- // Trim colon from the matched term,
- // as we are unable to get a clean string from match regex
- term.replace(/:$/, ""),
- emojiSearchTerms,
- {
- pre: "",
- post: ""
- }
- );
- callback(results.map((el) => [el.string, el.original]));
+ // Trim colon from the matched term,
+ // as we are unable to get a clean string from match regex
+ term = term.replace(/:$/, ""),
+ callback(fuzzyGrep(term, emojiSearchTerms));
},
template([string, original]) {
return `${emojiMap[original]} ${string}`;
@@ -78,16 +71,17 @@ $(function() {
search(term, callback) {
term = term.slice(1);
if (term[0] === "@") {
- callback(completeNicks(term.slice(1)).map((val) => "@" + val));
+ callback(completeNicks(term.slice(1), true)
+ .map((val) => ["@" + val[0], "@" + val[1]]));
} else {
- callback(completeNicks(term));
+ callback(completeNicks(term, true));
}
},
- template(value) {
- return value;
+ template([string, ]) {
+ return string;
},
- replace(value) {
- return value;
+ replace([, original]) {
+ return original;
},
index: 1
};
@@ -98,11 +92,11 @@ $(function() {
search(term, callback, match) {
callback(completeChans(match[0]));
},
- template(value) {
- return value;
+ template([string,]) {
+ return string;
},
- replace(value) {
- return value;
+ replace([, original]) {
+ return original;
},
index: 1
};
@@ -113,11 +107,11 @@ $(function() {
search(term, callback) {
callback(completeCommands("/" + term));
},
- template(value) {
- return value;
+ template([string, ]) {
+ return string;
},
- replace(value) {
- return value;
+ replace([, original]) {
+ return original;
},
index: 1
};
@@ -127,8 +121,18 @@ $(function() {
match: /\x03(\d{0,2}|[A-Za-z ]{0,10})$/,
search(term, callback) {
term = term.toLowerCase();
+
const matchingColorCodes = constants.colorCodeMap
- .filter((i) => i[0].startsWith(term) || i[1].toLowerCase().startsWith(term));
+ .filter((i) => fuzzy.test(term, i[0]) || fuzzy.test(term, i[1]))
+ .map((i) => {
+ if (fuzzy.test(term, i[1])) {
+ return [i[0], fuzzy.match(term, i[1], {
+ pre: "",
+ post: ""
+ }).rendered];
+ }
+ return i;
+ });
callback(matchingColorCodes);
},
@@ -147,7 +151,16 @@ $(function() {
search(term, callback, match) {
term = term.toLowerCase();
const matchingColorCodes = constants.colorCodeMap
- .filter((i) => i[0].startsWith(term) || i[1].toLowerCase().startsWith(term))
+ .filter((i) => fuzzy.test(term, i[0]) || fuzzy.test(term, i[1]))
+ .map((pair) => {
+ if (fuzzy.test(term, pair[1])) {
+ return [pair[0], fuzzy.match(term, pair[1], {
+ pre: "",
+ post: ""
+ }).rendered];
+ }
+ return pair;
+ })
.map((pair) => pair.concat(match[1])); // Needed to pass fg color to `template`...
callback(matchingColorCodes);
@@ -278,7 +291,7 @@ $(function() {
chat.find(".chan.active .chat").trigger("msg.sticky"); // fix growing
})
- .tab(completeNicks, {hint: false})
+ .tab((word) => completeNicks(word, false), {hint: false})
.on("autocomplete:on", function() {
enableAutocomplete();
});
@@ -919,8 +932,21 @@ $(function() {
}
}());
- function completeNicks(word) {
+ function fuzzyGrep(term, array) {
+ const results = fuzzy.filter(
+ term,
+ array,
+ {
+ pre: "",
+ post: ""
+ }
+ );
+ return results.map((el) => [el.string, el.original]);
+ }
+
+ function completeNicks(word, isFuzzy) {
const users = chat.find(".active .users");
+ word = word.toLowerCase();
// Lobbies and private chats do not have an user list
if (!users.length) {
@@ -928,20 +954,19 @@ $(function() {
}
const words = users.data("nicks");
-
+ if (isFuzzy) {
+ return fuzzyGrep(word, words);
+ }
return $.grep(
words,
- (w) => !w.toLowerCase().indexOf(word.toLowerCase())
+ (w) => !w.toLowerCase().indexOf(word)
);
}
function completeCommands(word) {
const words = constants.commands.slice();
- return $.grep(
- words,
- (w) => !w.toLowerCase().indexOf(word.toLowerCase())
- );
+ return fuzzyGrep(word, words);
}
function completeChans(word) {
@@ -955,10 +980,7 @@ $(function() {
}
});
- return $.grep(
- words,
- (w) => !w.toLowerCase().indexOf(word.toLowerCase())
- );
+ return fuzzyGrep(word, words);
}
$(document).on("visibilitychange focus click", () => {