Merge pull request #1358 from starquake/highlight-wordboundary

Take into account wordboundaries for custom highlighting
This commit is contained in:
Jérémie Astori 2017-08-22 09:35:55 -04:00 committed by GitHub
commit 3b79a3df90
2 changed files with 15 additions and 3 deletions

View File

@ -1,6 +1,7 @@
"use strict"; "use strict";
const $ = require("jquery"); const $ = require("jquery");
const escapeRegExp = require("lodash/escapeRegExp");
const settings = $("#settings"); const settings = $("#settings");
const userStyles = $("#user-specified-css"); const userStyles = $("#user-specified-css");
const storage = require("./localStorage"); const storage = require("./localStorage");
@ -98,6 +99,15 @@ settings.on("change", "input, select, textarea", function() {
// otherwise, users get notifications for everything // otherwise, users get notifications for everything
return h !== ""; return h !== "";
}); });
// Construct regex with wordboundary for every highlight item
const highlightsTokens = options.highlights.map(function(h) {
return escapeRegExp(h);
});
if (highlightsTokens && highlightsTokens.length) {
module.exports.highlightsRE = new RegExp("\\b(?:" + highlightsTokens.join("|") + ")\\b", "i");
} else {
module.exports.highlightsRE = null;
}
} else if (name === "showSeconds") { } else if (name === "showSeconds") {
chat.find(".msg > .time").each(function() { chat.find(".msg > .time").each(function() {
$(this).text(tz($(this).parent().data("time"))); $(this).text(tz($(this).parent().data("time")));

View File

@ -73,9 +73,11 @@ function buildChatMessage(data) {
const chan = chat.find(target); const chan = chat.find(target);
let template = "msg"; let template = "msg";
if (!data.msg.highlight && !data.msg.self && (type === "message" || type === "notice") && options.highlights.some(function(h) { // See if any of the custom highlight regexes match
return data.msg.text.toLocaleLowerCase().indexOf(h.toLocaleLowerCase()) > -1; if (!data.msg.highlight && !data.msg.self
})) { && options.highlightsRE
&& (type === "message" || type === "notice")
&& options.highlightsRE.exec(data.msg.text)) {
data.msg.highlight = true; data.msg.highlight = true;
} }