Re-implement click to join functionality.
Clicking channel names to join broke because of angular issue 9515. Reimplement the functionality by binding the scope.openBuffer method to the window and calling it from an onclick handler for channel name anchors.
This commit is contained in:
parent
5df0ce21a2
commit
febbb3ffdb
3 changed files with 12 additions and 7 deletions
|
@ -24,7 +24,7 @@ weechat.filter('toArray', function () {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
weechat.filter('irclinky', ['$filter', function($filter) {
|
weechat.filter('irclinky', function() {
|
||||||
return function(text) {
|
return function(text) {
|
||||||
if (!text) {
|
if (!text) {
|
||||||
return 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".
|
// "#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.
|
// 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;
|
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.
|
// Call the method we bound to window.openBuffer when we instantiated
|
||||||
// Therefore, get the scope, fire the method, and $apply. Yuck. I sincerely hope someone finds a better way of doing this.
|
// the Weechat controller.
|
||||||
var substitute = '$1<a href="#" onclick="var $scope = angular.element(event.target).scope(); $scope.openBuffer(\'$2\'); $scope.$apply();">$2</a>';
|
var substitute = '$1<a href="#" onclick="openBuffer(\'$2\');">$2</a>';
|
||||||
return text.replace(channelRegex, substitute);
|
return text.replace(channelRegex, substitute);
|
||||||
};
|
};
|
||||||
}]);
|
});
|
||||||
|
|
||||||
weechat.filter('inlinecolour', function() {
|
weechat.filter('inlinecolour', function() {
|
||||||
return function(text) {
|
return function(text) {
|
||||||
|
|
|
@ -15,6 +15,11 @@ weechat.config(['$compileProvider', function ($compileProvider) {
|
||||||
weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', '$log', 'models', 'connection', 'notifications', 'utils', 'settings',
|
weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', '$log', 'models', 'connection', 'notifications', 'utils', 'settings',
|
||||||
function ($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.command = '';
|
||||||
$scope.themes = ['dark', 'light'];
|
$scope.themes = ['dark', 'light'];
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,11 @@ describe('Filters', function() {
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should linkify IRC channels', inject(function(irclinkyFilter) {
|
it('should linkify IRC channels', inject(function(irclinkyFilter) {
|
||||||
expect(irclinkyFilter('#foo')).toEqual('<a href="#" onclick="var $scope = angular.element(event.target).scope(); $scope.openBuffer(\'#foo\'); $scope.$apply();">#foo</a>');
|
expect(irclinkyFilter('#foo')).toEqual('<a href="#" onclick="openBuffer(\'#foo\');">#foo</a>');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should not mess up IRC channels surrounded by HTML entities', inject(function(irclinkyFilter) {
|
it('should not mess up IRC channels surrounded by HTML entities', inject(function(irclinkyFilter) {
|
||||||
expect(irclinkyFilter('<"#foo">')).toEqual('<"<a href="#" onclick="var $scope = angular.element(event.target).scope(); $scope.openBuffer(\'#foo">\'); $scope.$apply();">#foo"></a>');
|
expect(irclinkyFilter('<"#foo">')).toEqual('<"<a href="#" onclick="openBuffer(\'#foo">\');">#foo"></a>');
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue