diff --git a/js/filters.js b/js/filters.js index 0b7abc5..71ecee9 100644 --- a/js/filters.js +++ b/js/filters.js @@ -24,7 +24,7 @@ weechat.filter('toArray', function () { }; }); -weechat.filter('irclinky', ['$filter', function($filter) { +weechat.filter('irclinky', function() { return function(text) { if (!text) { return text; @@ -36,12 +36,12 @@ weechat.filter('irclinky', ['$filter', function($filter) { // "#1" is much more likely to be "number 1" than "IRC channel #1". // Thus, we only match channels beginning with a # and having at least one letter in them. 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. - var substitute = '$1$2'; + // Call the method we bound to window.openBuffer when we instantiated + // the Weechat controller. + var substitute = '$1$2'; return text.replace(channelRegex, substitute); }; -}]); +}); weechat.filter('inlinecolour', function() { return function(text) { diff --git a/js/glowingbear.js b/js/glowingbear.js index 8e2d642..55ac297 100644 --- a/js/glowingbear.js +++ b/js/glowingbear.js @@ -15,6 +15,11 @@ weechat.config(['$compileProvider', function ($compileProvider) { weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', '$log', 'models', 'connection', 'notifications', 'utils', 'settings', function ($rootScope, $scope, $store, $timeout, $log, models, connection, notifications, utils, settings) { + window.openBuffer = function(channel) { + $scope.openBuffer(channel); + $scope.$apply(); + }; + $scope.command = ''; $scope.themes = ['dark', 'light']; diff --git a/test/unit/filters.js b/test/unit/filters.js index c8ea29e..ca1228e 100644 --- a/test/unit/filters.js +++ b/test/unit/filters.js @@ -16,11 +16,11 @@ describe('Filters', function() { })); it('should linkify IRC channels', inject(function(irclinkyFilter) { - expect(irclinkyFilter('#foo')).toEqual('#foo'); + expect(irclinkyFilter('#foo')).toEqual('#foo'); })); it('should not mess up IRC channels surrounded by HTML entities', inject(function(irclinkyFilter) { - expect(irclinkyFilter('<"#foo">')).toEqual('<"\'); $scope.$apply();">#foo">'); + expect(irclinkyFilter('<"#foo">')).toEqual('<"\');">#foo">'); })); });