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">');
}));
});