From 0bc757121782fbfbee7a97c28d6c23ee850d8638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lorenz=20H=C3=BCbschle-Schneider?= Date: Thu, 6 Nov 2014 13:55:33 +0100 Subject: [PATCH] Fix conflicts between URL/email and irc channel linkification URL/email links take priority over IRC channel links with this filter order. --- index.html | 4 ++-- js/filters.js | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/index.html b/index.html index 5accbc7..e35094a 100644 --- a/index.html +++ b/index.html @@ -215,7 +215,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel -
+
@@ -270,7 +270,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
+ --> diff --git a/js/filters.js b/js/filters.js index bfc2719..2e4d312 100644 --- a/js/filters.js +++ b/js/filters.js @@ -30,8 +30,6 @@ weechat.filter('irclinky', ['$filter', function($filter) { return text; } - var linkiedText = $filter('linky')(text, target); - // This regex in no way matches all IRC channel names (they could also begin with &, + or an // exclamation mark followed by 5 alphanumeric characters, and are bounded in length by 50). // However, it matches all *common* IRC channels while trying to minimise false positives. @@ -40,8 +38,8 @@ weechat.filter('irclinky', ['$filter', function($filter) { var channelRegex = /(^|[\s,.:;?!"'()+@-])(#+[^\x00\x07\r\n\s,:]*[a-z][^\x00\x07\r\n\s,:]*)/gmi; // This is SUPER nasty, but ng-click does not work inside a filter, as the markup has to be $compiled first, which is not possible in filter afaik. // Therefore, get the scope, fire the method, and $apply. Yuck. I sincerely hope someone finds a better way of doing this. - linkiedText = linkiedText.replace(channelRegex, '$1$2'); - return linkiedText; + var substitute = '$1$2'; + return text.replace(channelRegex, substitute); }; }]); @@ -66,6 +64,9 @@ weechat.filter('DOMfilter', ['$filter', '$sce', function($filter, $sce) { return text; } + // hacky way to pass an extra argument without using .apply, which + // would require assembling an argument array. PERFORMANCE!!! + var extraArgument = (arguments.length > 2) ? arguments[2] : null; var filterFunction = $filter(filter); var el = document.createElement('div'); el.innerHTML = text; @@ -73,7 +74,7 @@ weechat.filter('DOMfilter', ['$filter', '$sce', function($filter, $sce) { // Recursive DOM-walking function applying the filter to the text nodes var process = function(node) { if (node.nodeType === 3) { // text node - var value = filterFunction(node.nodeValue); + var value = filterFunction(node.nodeValue, extraArgument); if (value !== node.nodeValue) { // we changed something. create a new node to replace the current one // we could also only add its children but that would probably incur