Fix conflicts between URL/email and irc channel linkification
URL/email links take priority over IRC channel links with this filter order.
This commit is contained in:
parent
6854b9b83d
commit
0bc7571217
|
@ -215,7 +215,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
|
|||
</a>
|
||||
<button ng-if="debugMode" ng-click="countWatchers()">Count<br />Watchers</button>
|
||||
</div>
|
||||
<div class="title" ng-bind-html="activeBuffer().title | irclinky:'_blank'" title="{{activeBuffer().title}}"></div>
|
||||
<div class="title" ng-bind-html="activeBuffer().title | linky | DOMfilter:'irclinky':'_blank'" title="{{activeBuffer().title}}"></div>
|
||||
<div class="actions pull-right vertical-line-left">
|
||||
<div class="pull-left">
|
||||
<a class="settings-toggle" ng-click="showModal('settingsModal')" title="Options menu">
|
||||
|
@ -270,7 +270,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
|
|||
<td class="prefix"><a ng-click="addMention(bufferline.prefix)"><span ng-repeat="part in ::bufferline.prefix" ng-class="::part.classes" ng-bind="::part.text"></span></a></td><!--
|
||||
--><td class="message"><!--
|
||||
--><div ng-repeat="metadata in ::bufferline.metadata" plugin data="::metadata"></div><!--
|
||||
--><span ng-repeat="part in ::bufferline.content" class="text" ng-class="::part.classes" ng-bind-html="::part.text | irclinky:'_blank' | DOMfilter:'inlinecolour'"></span>
|
||||
--><span ng-repeat="part in ::bufferline.content" class="text" ng-class="::part.classes" ng-bind-html="::part.text | linky | DOMfilter:'irclinky':'_blank' | DOMfilter:'inlinecolour'"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="readmarker" ng-if="activeBuffer().lastSeen==$index">
|
||||
|
|
|
@ -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<a href="#" onclick="var $scope = angular.element(event.target).scope(); $scope.openBuffer(\'$2\'); $scope.$apply();">$2</a>');
|
||||
return linkiedText;
|
||||
var substitute = '$1<a href="#" onclick="var $scope = angular.element(event.target).scope(); $scope.openBuffer(\'$2\'); $scope.$apply();">$2</a>';
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue