diff --git a/.jshintrc b/.jshintrc index 37932d6..1456f16 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,11 +1,20 @@ { "browser": true, + "esversion": 6, + "node": true, "devel": true, "globals": { "angular": false, "weeChat": false, "_": false, "Notification": false, - "Favico": false + "Favico": false, + "linkifyStr": false, + "renderMathInElement": false, + "describe": false, + "it": false, + "expect": false, + "beforeEach": false, + "escape": true } } diff --git a/src/js/connection.js b/src/js/connection.js index 0531e84..5ee80c6 100644 --- a/src/js/connection.js +++ b/src/js/connection.js @@ -18,6 +18,7 @@ export const connectionFactory = ['$rootScope', '$log', 'handlers', 'models', 's var connectionData = []; var reconnectTimer; + var handleClose; // Global connection lock to prevent multiple connections from being opened var locked = false; @@ -402,7 +403,7 @@ export const connectionFactory = ['$rootScope', '$log', 'handlers', 'models', 's handleWrongPassword(); }; - var handleClose = function (evt) { + handleClose = function (evt) { if (ssl && evt && evt.code === 1006) { // A password error doesn't trigger onerror, but certificate issues do. Check time of last error. if (typeof $rootScope.lastError !== "undefined" && (Date.now() - $rootScope.lastError) < 1000) { diff --git a/test/unit/filters.js b/test/unit/filters.js index 661fc5d..6c09c77 100644 --- a/test/unit/filters.js +++ b/test/unit/filters.js @@ -12,19 +12,19 @@ describe('Filters', function() { $provide.value('version', 'TEST_VER'); }));*/ - it('has an irclinky filter', inject(function($filter) { + it('has an irclinky filter', angular.mock.inject(function($filter) { expect($filter('irclinky')).not.toBeNull(); })); describe('conditionalLinkify', function() { - it('should create links from an url', inject(function($filter) { + it('should create links from an url', angular.mock.inject(function($filter) { var url = 'asdf https://a.example.com/wiki/asdf_qwer_(rivi%C3%A8re) Some text.', link = 'asdf https://a.example.com/wiki/asdf_qwer_(rivi%C3%A8re) Some text.', result = $filter('conditionalLinkify')(url); expect(result).toEqual(link); })); - it('should not make emails into links', inject(function($filter) { + it('should not make emails into links', angular.mock.inject(function($filter) { var url = 'asdf@gmail.com', link = 'asdf@gmail.com', result = $filter('conditionalLinkify')(url); @@ -33,19 +33,19 @@ describe('Filters', function() { }); describe('irclinky', function() { - it('should not mess up text', inject(function(irclinkyFilter) { + it('should not mess up text', angular.mock.inject(function(irclinkyFilter) { expect(irclinkyFilter('foo')).toEqual('foo'); })); - it('should linkify IRC channels', inject(function(irclinkyFilter) { + it('should linkify IRC channels', angular.mock.inject(function(irclinkyFilter) { expect(irclinkyFilter('#foo')).toEqual('#foo'); })); - 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', angular.mock.inject(function(irclinkyFilter) { expect(irclinkyFilter('<"#foo">')).toEqual('<"\');">#foo">'); })); - it('should not touch links created by `linky`', inject(function($filter, DOMfilterFilter) { + it('should not touch links created by `linky`', angular.mock.inject(function($filter, DOMfilterFilter) { var url = 'http://foo.bar/#baz', link = $filter('conditionalLinkify')(url), result = DOMfilterFilter(link, 'irclinky').$$unwrapTrustedValue(); @@ -54,59 +54,59 @@ describe('Filters', function() { }); describe('inlinecolour', function() { - it('should not mess up normal text', inject(function(inlinecolourFilter) { + it('should not mess up normal text', angular.mock.inject(function(inlinecolourFilter) { expect(inlinecolourFilter('foo')).toEqual('foo'); expect(inlinecolourFilter('test #foobar baz')).toEqual('test #foobar baz'); })); - it('should detect inline colours in #rrggbb format', inject(function(inlinecolourFilter) { + it('should detect inline colours in #rrggbb format', angular.mock.inject(function(inlinecolourFilter) { expect(inlinecolourFilter('#123456')).toEqual('#123456
'); expect(inlinecolourFilter('#aabbcc')).toEqual('#aabbcc
'); })); - it('should not detect inline colours in #rgb format', inject(function(inlinecolourFilter) { + it('should not detect inline colours in #rgb format', angular.mock.inject(function(inlinecolourFilter) { expect(inlinecolourFilter('#123')).toEqual('#123'); expect(inlinecolourFilter('#abc')).toEqual('#abc'); })); - it('should detect inline colours in rgb(12,34,56) and rgba(12,34,56,0.78) format', inject(function(inlinecolourFilter) { + it('should detect inline colours in rgb(12,34,56) and rgba(12,34,56,0.78) format', angular.mock.inject(function(inlinecolourFilter) { expect(inlinecolourFilter('rgb(1,2,3)')).toEqual('rgb(1,2,3)
'); expect(inlinecolourFilter('rgb(1,2,3);')).toEqual('rgb(1,2,3);
'); expect(inlinecolourFilter('rgba(1,2,3,0.4)')).toEqual('rgba(1,2,3,0.4)
'); expect(inlinecolourFilter('rgba(255,123,0,0.5);')).toEqual('rgba(255,123,0,0.5);
'); })); - it('should tolerate whitespace in between numbers in rgb/rgba colours', inject(function(inlinecolourFilter) { + it('should tolerate whitespace in between numbers in rgb/rgba colours', angular.mock.inject(function(inlinecolourFilter) { expect(inlinecolourFilter('rgb( 1\t, 2 , 3 )')).toEqual('rgb( 1\t, 2 , 3 )
'); })); - it('should handle multiple and mixed occurrences of colour values', inject(function(inlinecolourFilter) { + it('should handle multiple and mixed occurrences of colour values', angular.mock.inject(function(inlinecolourFilter) { expect(inlinecolourFilter('rgb(1,2,3) #123456')).toEqual('rgb(1,2,3)
#123456
'); expect(inlinecolourFilter('#f00baa #123456 #234567')).toEqual('#f00baa
#123456
#234567
'); expect(inlinecolourFilter('rgba(1,2,3,0.4) foorgb(50,100,150)')).toEqual('rgba(1,2,3,0.4)
foorgb(50,100,150)
'); })); - it('should not replace HTML escaped 𞉀', inject(function(inlinecolourFilter) { + it('should not replace HTML escaped 𞉀', angular.mock.inject(function(inlinecolourFilter) { expect(inlinecolourFilter('𞉀')).toEqual('𞉀'); })); }); describe('DOMfilter', function() { - it('should run a filter on all text nodes', inject(function(DOMfilterFilter) { + it('should run a filter on all text nodes', angular.mock.inject(function(DOMfilterFilter) { var dom = 'a

bcdefgh

i', expected = 'A

BCDEFGH

I', result = DOMfilterFilter(dom, 'uppercase').$$unwrapTrustedValue(); expect(result).toEqual(expected); })); - it('should pass additional arguments to the filter', inject(function(DOMfilterFilter) { + it('should pass additional arguments to the filter', angular.mock.inject(function(DOMfilterFilter) { var dom = '1

2

3.14159265', expected = '1.00

2.00

3.14', result = DOMfilterFilter(dom, 'number', 2).$$unwrapTrustedValue(); expect(result).toEqual(expected); })); - it('should never lock up like in bug #688', inject(function($filter, DOMfilterFilter) { + it('should never lock up like in bug #688', angular.mock.inject(function($filter, DOMfilterFilter) { var msg = '#crash http://google.com', linked = $filter('conditionalLinkify')(msg), irclinked = DOMfilterFilter(linked, 'irclinky'); @@ -116,39 +116,39 @@ describe('Filters', function() { }); describe('codify', function() { - it('should not mess up text', inject(function(codifyFilter) { + it('should not mess up text', angular.mock.inject(function(codifyFilter) { expect(codifyFilter('foo')).toEqual('foo'); })); - it('should codify single snippets', inject(function(codifyFilter) { + it('should codify single snippets', angular.mock.inject(function(codifyFilter) { expect(codifyFilter('z `foo` z')).toEqual('z `foo` z'); expect(codifyFilter('z `a` z')).toEqual('z `a` z'); expect(codifyFilter('z ```foo``` z')).toEqual('z ```foo``` z'); })); - it('should codify multiple snippets', inject(function(codifyFilter) { + it('should codify multiple snippets', angular.mock.inject(function(codifyFilter) { expect(codifyFilter('z `foo` z `bar` `baz`')).toEqual('z `foo` z `bar` `baz`'); })); - it('should not codify empty snippets', inject(function(codifyFilter) { + it('should not codify empty snippets', angular.mock.inject(function(codifyFilter) { expect(codifyFilter('``')).toEqual('``'); })); - it('should not codify single backticks', inject(function(codifyFilter) { + it('should not codify single backticks', angular.mock.inject(function(codifyFilter) { expect(codifyFilter('foo`bar')).toEqual('foo`bar'); })); - it('should not codify double backticks', inject(function(codifyFilter) { + it('should not codify double backticks', angular.mock.inject(function(codifyFilter) { expect(codifyFilter('some ``non-code``')).toEqual('some ``non-code``'); })); - it('should not codify pseudo-fancy quotes', inject(function(codifyFilter) { + it('should not codify pseudo-fancy quotes', angular.mock.inject(function(codifyFilter) { expect(codifyFilter('some ``fancy qoutes\'\'')).toEqual('some ``fancy qoutes\'\''); })); - it('should not codify stuff in the middle of a word or URL', inject(function(codifyFilter) { + it('should not codify stuff in the middle of a word or URL', angular.mock.inject(function(codifyFilter) { expect(codifyFilter('https://foo.bar/`wat`')).toEqual('https://foo.bar/`wat`'); expect(codifyFilter('Weird`ness`')).toEqual('Weird`ness`'); })); diff --git a/test/unit/plugins.js b/test/unit/plugins.js index 0a74e80..e77d9f8 100644 --- a/test/unit/plugins.js +++ b/test/unit/plugins.js @@ -35,7 +35,7 @@ describe('filter', function() { $provide.value('version', 'TEST_VER'); })); - it('should recognize spotify links', inject(function(plugins) { + it('should recognize spotify links', angular.mock. angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'spotify:track:6JEK0CvvjDjjMUBFoXShNZ', 'spotify:user:lorenzhs:playlist:18aXdzQ4Ar1p019OSICtu4', @@ -49,7 +49,7 @@ describe('filter', function() { })); - it('should recognize youtube videos', inject(function(plugins) { + it('should recognize youtube videos', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', 'http://www.youtube.com/watch?v=dQw4w9WgXcQ', @@ -62,7 +62,7 @@ describe('filter', function() { plugins); })); - it('should recognize dailymotion videos', inject(function(plugins) { + it('should recognize dailymotion videos', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'dailymotion.com/video/test', 'dailymotion.com/video/#video=asdf', @@ -72,7 +72,7 @@ describe('filter', function() { plugins); })); - it('should recognize allocine videos', inject(function(plugins) { + it('should recognize allocine videos', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'allocine.fr/videokast/video-12', 'allocine.fr/cmedia=234' @@ -81,7 +81,7 @@ describe('filter', function() { plugins); })); - it('should recognize html5 videos', inject(function(plugins) { + it('should recognize html5 videos', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4', 'http://www.quirksmode.org/html5/videos/big_buck_bunny.webm', @@ -91,7 +91,7 @@ describe('filter', function() { plugins); })); - it('should recognize images', inject(function(plugins) { + it('should recognize images', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'http://i.imgur.com/BTNIDBR.gif', 'https://i.imgur.com/1LmDmct.jpg', @@ -107,7 +107,7 @@ describe('filter', function() { plugins); })); - it('should recognize cloud music', inject(function(plugins) { + it('should recognize cloud music', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'http://soundcloud.com/', 'https://sadf.mixcloud.com/', @@ -116,7 +116,7 @@ describe('filter', function() { plugins); })); - it('should recognize google map', inject(function(plugins) { + it('should recognize google map', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'https://www.google.com/maps/@48.0034139,-74.9129088,6z', ], @@ -124,7 +124,7 @@ describe('filter', function() { plugins); })); - it('should recognize google map', inject(function(plugins) { + it('should recognize google map', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'https://asciinema.org/a/10625', ], @@ -132,7 +132,7 @@ describe('filter', function() { plugins); })); - it('should recognize meteograms', inject(function(plugins) { + it('should recognize meteograms', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'http://www.yr.no/sted/Canada/Quebec/Montreal/', ], @@ -140,7 +140,7 @@ describe('filter', function() { plugins); })); - it('should recognize gists', inject(function(plugins) { + it('should recognize gists', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'https://gist.github.com/lorenzhs/e8c1a7d56fa170320eb8', 'https://gist.github.com/e8c1a7d56fa170320eb8', @@ -149,7 +149,7 @@ describe('filter', function() { plugins); })); - it('should recognize pastebins', inject(function(plugins) { + it('should recognize pastebins', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'http://pastebin.com/Wn3TetSE', 'http://pastebin.com/raw/Wn3TetSE', @@ -158,7 +158,7 @@ describe('filter', function() { plugins); })); - it('should recognize giphy gifs', inject(function(plugins) { + it('should recognize giphy gifs', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'https://giphy.com/gifs/eyes-shocked-bird-feqkVgjJpYtjy/', 'http://giphy.com/gifs/funny-cat-FiGiRei2ICzzG', @@ -167,7 +167,7 @@ describe('filter', function() { plugins); })); - it('should recognize tweets', inject(function(plugins) { + it('should recognize tweets', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'https://twitter.com/DFB_Team_EN/statuses/488436782959448065', ], @@ -175,7 +175,7 @@ describe('filter', function() { plugins); })); - it('should recognize tiktoks', inject(function(plugins) { + it('should recognize tiktoks', angular.mock.inject(function(plugins) { expectTheseMessagesToContain([ 'https://www.tiktok.com/@scout2015/video/6718335390845095173', 'https://www.tiktok.com/@lewiscatpaldi/video/6800461190058298629',