Merge pull request #1109 from thelounge/astorije/autocomplete-colors

Add autocomplete strategy for foreground and background colors
This commit is contained in:
Pavel Djundik 2017-05-06 13:42:47 +03:00 committed by GitHub
commit 57d7616d1b
3 changed files with 67 additions and 1 deletions

View File

@ -1533,6 +1533,10 @@ kbd {
display: inline-block; display: inline-block;
} }
.textcomplete-item .irc-bg {
display: block;
}
/** /**
* Tooltips v0.5.3 * Tooltips v0.5.3
* See http://primercss.io/tooltips/ * See http://primercss.io/tooltips/

View File

@ -1,5 +1,24 @@
"use strict"; "use strict";
const colorCodeMap = [
["00", "White"],
["01", "Black"],
["02", "Blue"],
["03", "Green"],
["04", "Red"],
["05", "Brown"],
["06", "Magenta"],
["07", "Orange"],
["08", "Yellow"],
["09", "Light Green"],
["10", "Cyan"],
["11", "Light Cyan"],
["12", "Light Blue"],
["13", "Pink"],
["14", "Grey"],
["15", "Light Grey"],
];
const commands = [ const commands = [
"/away", "/away",
"/back", "/back",
@ -36,5 +55,6 @@ const commands = [
]; ];
module.exports = { module.exports = {
colorCodeMap: colorCodeMap,
commands: commands commands: commands
}; };

View File

@ -111,6 +111,45 @@ $(function() {
index: 1 index: 1
}; };
const foregroundColorStrategy = {
id: "foreground-colors",
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));
callback(matchingColorCodes);
},
template(value) {
return `<span class="irc-fg${parseInt(value[0], 10)}">${value[1]}</span>`;
},
replace(value) {
return "\x03" + value[0];
},
index: 1
};
const backgroundColorStrategy = {
id: "background-colors",
match: /\x03(\d{2}),(\d{0,2}|[A-Za-z ]{0,10})$/,
search(term, callback, match) {
term = term.toLowerCase();
const matchingColorCodes = constants.colorCodeMap
.filter(i => i[0].startsWith(term) || i[1].toLowerCase().startsWith(term))
.map(pair => pair.concat(match[1])); // Needed to pass fg color to `template`...
callback(matchingColorCodes);
},
template(value) {
return `<span class="irc-fg${parseInt(value[2], 10)} irc-bg irc-bg${parseInt(value[0], 10)}">${value[1]}</span>`;
},
replace(value) {
return "\x03$1," + value[0];
},
index: 2
};
socket.on("auth", function(data) { socket.on("auth", function(data) {
var login = $("#sign-in"); var login = $("#sign-in");
var token; var token;
@ -724,7 +763,10 @@ $(function() {
chat.find(".chan.active .chat").trigger("msg.sticky"); // fix growing chat.find(".chan.active .chat").trigger("msg.sticky"); // fix growing
}) })
.tab(completeNicks, {hint: false}) .tab(completeNicks, {hint: false})
.textcomplete([emojiStrategy, nicksStrategy, chanStrategy, commandStrategy], { .textcomplete([
emojiStrategy, nicksStrategy, chanStrategy, commandStrategy,
foregroundColorStrategy, backgroundColorStrategy
], {
dropdownClassName: "textcomplete-menu", dropdownClassName: "textcomplete-menu",
placement: "top" placement: "top"
}).on({ }).on({