diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1bb1df8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +# Indent JS with four spaces +[*.js] +indent_style = space +indent_size = 4 + +# Indent HTML with two spaces +[*.html] +indent_style = space +indent_size = 2 diff --git a/README.md b/README.md index 7416a74..61cff33 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Please note that the above instructions set up an *unencrypted* relay, and all y You can run Glowing Bear in many ways: use it like any other webpage, as an app in Firefox (choose "Install app" on the landing page) or Chrome ("Tools", then "Create application shortcuts"), or a full-screen Chrome app on Android ("Add to homescreen"). We also provide an [Android app](https://play.google.com/store/apps/details?id=com.glowing_bear) that you can install from the Google Play Store, and a [Firefox OS app](https://marketplace.firefox.com/app/glowing-bear/) in the Firefox Marketplace. -Android app on Google PlayFirefox OS app in the Firefox Marketplace +Android app on Google PlayFirefox OS app in the Firefox Marketplace ##Screenshots @@ -24,6 +24,9 @@ Running as Chrome application in a separate window on Windows and as Android app ![Glowing bear screenshot](https://4z2.de/glowingbear.png) +Are you good with design? We'd love your help! +![Glowing Bear screenshot with lots of Comic Sans MS](https://4z2.de/glowing-bear3.png) + ##How it Works What follows is a more technical explanation of how Glowing Bear works, and you don't need to understand it to use it. @@ -44,7 +47,10 @@ Here's a simple example using the python simple web server: ```bash git clone https://github.com/glowing-bear/glowing-bear cd glowing-bear +# python 2.* python -m SimpleHTTPServer +# or python 3.* +python -m http.server ``` Now you can point your browser to [http://localhost:8000](http://localhost:8000)! @@ -83,4 +89,4 @@ If you wish to submit code, we try to make the contribution process as simple as We'd also like to ask you to join our IRC channel, #glowing-bear on freenode, so we can discuss your ideas and changes. -If you're curious about the projects we're using, here's a list: [AngularJS](https://angularjs.org/), [Bootstrap](http://getbootstrap.com/), [Underscore](http://underscorejs.org/), [favico.js](http://lab.ejci.net/favico.js/), [twemoji](https://github.com/twitter/twemoji), and [zlib.js](https://github.com/imaya/zlib.js). Technology-wise, [WebSockets](http://en.wikipedia.org/wiki/WebSocket) are the most important part, but we also use [local storage](https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage#localStorage), the [Notification Web API](https://developer.mozilla.org/en/docs/Web/API/notification), and last (but not least) [Apache Cordova](https://cordova.apache.org/) for our mobile app. +If you're curious about the projects we're using, here's a list: [AngularJS](https://angularjs.org/), [Bootstrap](http://getbootstrap.com/), [Underscore](http://underscorejs.org/), [favico.js](http://lab.ejci.net/favico.js/), Emoji provided free by [Emoji One](http://emojione.com/), and [zlib.js](https://github.com/imaya/zlib.js). Technology-wise, [WebSockets](http://en.wikipedia.org/wiki/WebSocket) are the most important part, but we also use [local storage](https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage#localStorage), the [Notification Web API](https://developer.mozilla.org/en/docs/Web/API/notification), and last (but not least) [Apache Cordova](https://cordova.apache.org/) for our mobile app. diff --git a/assets/img/badge_firefoxos.png b/assets/img/badge_firefoxos.png new file mode 100644 index 0000000..3bb6991 Binary files /dev/null and b/assets/img/badge_firefoxos.png differ diff --git a/assets/img/badge_playstore.png b/assets/img/badge_playstore.png new file mode 100644 index 0000000..9891cbb Binary files /dev/null and b/assets/img/badge_playstore.png differ diff --git a/bower.json b/bower.json index f5b5e74..72a4e1c 100644 --- a/bower.json +++ b/bower.json @@ -1,17 +1,17 @@ { "name": "glowing-bear", "description": "A webclient for WeeChat", - "version": "0.5.2", + "version": "0.6.0", "homepage": "https://github.com/glowing-bear/glowing-bear", "license": "GPLv3", "private": true, "dependencies": { - "angular": "1.3.x", - "angular-route": "1.3.x", - "angular-sanitize": "1.3.x", - "angular-touch": "1.3.x", - "angular-loader": "1.3.x", - "angular-mocks": "1.3.x", + "angular": "1.4.x", + "angular-route": "1.4.x", + "angular-sanitize": "1.4.x", + "angular-touch": "1.4.x", + "angular-loader": "1.4.x", + "angular-mocks": "1.4.x", "html5-boilerplate": "~4.3.0" } } diff --git a/css/glowingbear.css b/css/glowingbear.css index 46e1243..33719e2 100644 --- a/css/glowingbear.css +++ b/css/glowingbear.css @@ -15,6 +15,10 @@ a { cursor: pointer; } +.version { + margin-right: 1em; +} + .hidden-bracket { position: absolute; left: -1000px; @@ -29,6 +33,7 @@ td.prefix { border-right: 1px solid #444; } td.message { + overflow: hidden; vertical-align: top; width: 100%; padding: 1px 1px 1px 5px; @@ -84,6 +89,25 @@ input[type=text], input[type=password], #sendMessage { margin-bottom: 5px !important; } +.btn-send-image { + position: relative; + overflow: hidden; + cursor: pointer; +} + +.imgur-upload { + position: absolute; + bottom: 0; + right: 0; + cursor: inherit; + font-size: 1000px !important; + height: 300px; + margin: 0; + padding: 0; + opacity: 0; + filter: ~"alpha(opacity=0)"; +} + .input-group { width: 100%; } @@ -157,6 +181,14 @@ input[type=text], input[type=password], #sendMessage { padding-right: 6px; } +.upload-error { + width: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 4; +} + #sidebar { position: fixed; width: 140px; @@ -330,6 +362,25 @@ td.time { padding-right: 100px; } +#inputform { + position: relative; +} + +#imgur-upload-progress { + width: 100%; + height: auto; + position: absolute; + bottom: 100%; + left: 0; +} + +.imgur-progress-bar { + width: 0%; + height: 5px; + margin-top: 1px; + background: #428BCA; +} + /* fix for mobile firefox which ignores :hover */ .nav-pills > li > a:active, .nav-pills > li > a:active span { text-decoration: none; @@ -547,11 +598,7 @@ li.buffer.channel_ampersand a span:last-of-type:before, #topbar .title .channel_ } li.buffer.channel.active a span:last-of-type:before { - color: #444; -} - -li.buffer.channel.active a:hover span:last-of-type:before { - color: #222; + color: #aaa; } li.buffer.indent.private a { @@ -591,6 +638,31 @@ img.emojione { width: auto; } +.glyphicon-spin { + -webkit-animation: spin 1000ms infinite linear; + animation: spin 1000ms infinite linear; +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + @media (min-width: 1400px) { #sidebar[data-state=visible], #sidebarĀ { width: 200px; @@ -726,7 +798,13 @@ img.emojione { padding-bottom: 0; } + #bufferlines tr.bufferline { + display: block; + overflow: hidden; + } + #bufferlines td.time { + display: inline-block; padding-right: 3px; font-size: 0.8em; } diff --git a/css/themes/black.css b/css/themes/black.css new file mode 100644 index 0000000..08ca482 --- /dev/null +++ b/css/themes/black.css @@ -0,0 +1,22 @@ +@import "dark.css"; + +body, .modal-content { + background-color: #000; +} + +#topbar, #sidebar, .panel, .dropdown-menu, #topbar .actions { + background: #080808; +} + +.nav-pills li:nth-child(2n) { + background: #000; +} + +.form-control option, input.form-control, select.form-control { + color: #ccc; + background: #080808; +} + +.close, .close:hover, .close:focus { + color: #ddd; +} diff --git a/css/themes/dark.css b/css/themes/dark.css index 9e196f7..8d303aa 100644 --- a/css/themes/dark.css +++ b/css/themes/dark.css @@ -10,6 +10,11 @@ body { border: 0px none; } +.form-control option { + color: #eee; + background: #282828; +} + html { background-color: inherit; } @@ -72,12 +77,13 @@ input[type=text], input[type=password], #sendMessage, .badge { box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1), 0px 1px 7px 0px rgba(0, 0, 0, 0.8) inset; } -input[type=text], input[type=password], #sendMessage, .badge, .btn-send { +input[type=text], input[type=password], #sendMessage, .badge, .btn-send, .btn-send-image { color: #ccc; background: none repeat scroll 0% 0% rgba(0, 0, 0, 0.3); } -.btn-send:hover, .btn-send:focus { +.btn-send:hover, .btn-send:focus, +.btn-send-image:hover, .btn-send-image:focus { background-color: #555; color: white; } @@ -271,7 +277,7 @@ input[type=text], input[type=password], #sendMessage, .badge, .btn-send { .cob-chat { } .cob-chat_time { - color: #999; + color: #999; } .cob-chat_time_delimiters { } diff --git a/css/themes/light.css b/css/themes/light.css index b292136..6a5c109 100644 --- a/css/themes/light.css +++ b/css/themes/light.css @@ -22,7 +22,8 @@ html { background-color: #222; } -.btn-send { +.btn-send, +.btn-send-image, { background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.3); color: #428BCA; } @@ -257,7 +258,7 @@ select.form-control, select option, input[type=text], input[type=password], #sen .cob-chat { } .cob-chat_time { - color: #999; + color: #999; } .cob-chat_time_delimiters { } diff --git a/directives/input.html b/directives/input.html index 9b23817..030708f 100644 --- a/directives/input.html +++ b/directives/input.html @@ -1,9 +1,14 @@ -
+
- + +
+
diff --git a/index.html b/index.html index 03da1ec..837cc9c 100644 --- a/index.html +++ b/index.html @@ -8,25 +8,31 @@ - + + + + - + - - - - - - + + + + + + +
+

Upload error: Image upload failed.

+

logo @@ -91,7 +97,7 @@

- + @@ -150,7 +156,7 @@
 $ mkdir -p ~/.weechat/ssl
 $ cd ~/.weechat/ssl
-$ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out relay.pem -subj "/CN={{settings.host || 'your weechat host'}}/"
+$ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out relay.pem -sha256 -subj "/CN={{settings.host || 'your weechat host'}}/"
 

If WeeChat is already running, you can reload the certificate and private key and set up an encrypted relay on port {{ settings.port || 9001 }} with these WeeChat commands:

@@ -174,7 +180,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
               

You don't need to install anything to use this app, it should work with any modern browser. Start using it right now! However, there are a few ways to improve integration with your operating system.

Mobile Applications

If you're running Android 4.4 or later, you can install our app from the Google Play Store! We also provide an optimized application for Firefox OS devices. If you're using the Firefox browser, keep on reading below -- the Firefox OS app won't work for you

-

Android app on Google Play Firefox OS app in the Firefox Marketplace

+

Android app on Google Play Firefox OS app in the Firefox Marketplace

Firefox Browser

If you have a recent version of Firefox you can install Glowing Bear as a Firefox app. Click the button to install.

@@ -219,10 +225,10 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
- + - +
@@ -235,7 +241,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
  • - + {{ buffer.$quickKey }} {{ buffer.trimmedName || buffer.fullName }} @@ -243,7 +249,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
  • -
    +
    • @@ -255,8 +261,8 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel - Fetch more lines - Fetching more lines... + Fetch more lines + Fetching more lines @@ -289,7 +295,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel

      Connection to WeeChat lost

      - Reconnecting... Click to try to reconnect now + Reconnecting... Click to try to reconnect now
      @@ -297,6 +303,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
    • +
    • +
      +
      + +
      + +
      +
      +
      +
    • +
    • @@ -435,7 +453,7 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
      diff --git a/js/connection.js b/js/connection.js index c6a60c9..319219f 100644 --- a/js/connection.js +++ b/js/connection.js @@ -17,10 +17,11 @@ weechat.factory('connection', // Takes care of the connection and websocket hooks var connect = function (host, port, passwd, ssl, noCompression, successCallback, failCallback) { + $rootScope.passwordError = false; connectionData = [host, port, passwd, ssl, noCompression]; var proto = ssl ? 'wss' : 'ws'; // If host is an IPv6 literal wrap it in brackets - if (host.indexOf(":") !== -1) { + if (host.indexOf(":") !== -1 && host[0] !== "[" && host[host.length-1] !== "]") { host = "[" + host + "]"; } var url = proto + "://" + host + ":" + port + "/weechat"; @@ -62,7 +63,7 @@ weechat.factory('connection', return ngWebsockets.send( weeChat.Protocol.formatHdata({ path: 'buffer:gui_buffers(*)', - keys: ['local_variables,notify,number,full_name,short_name,title,hidden'] + keys: ['local_variables,notify,number,full_name,short_name,title,hidden,type'] }) ); }; @@ -99,10 +100,7 @@ weechat.factory('connection', $rootScope.connected = true; }, function() { - // Connection got closed, lets check if we ever was connected successfully - if (!$rootScope.waseverconnected) { - $rootScope.passwordError = true; - } + handleWrongPassword(); } ); @@ -121,12 +119,14 @@ weechat.factory('connection', * Handles websocket disconnection */ $log.info("Disconnected from relay"); + $rootScope.$emit('relayDisconnect'); if ($rootScope.userdisconnect || !$rootScope.waseverconnected) { handleClose(evt); $rootScope.userdisconnect = false; } else { reconnect(evt); } + handleWrongPassword(); }; var handleClose = function (evt) { @@ -140,6 +140,14 @@ weechat.factory('connection', } }; + var handleWrongPassword = function() { + // Connection got closed, lets check if we ever was connected successfully + if (!$rootScope.waseverconnected && !$rootScope.errorMessage) { + $rootScope.passwordError = true; + $rootScope.$apply(); + } + }; + var onerror = function (evt) { /* * Handles cases when connection issues come from @@ -282,10 +290,13 @@ weechat.factory('connection', }; var requestNicklist = function(bufferId, callback) { - bufferId = bufferId || null; + // Prevent requesting nicklist for all buffers if bufferId is invalid + if (!bufferId) { + return; + } ngWebsockets.send( weeChat.Protocol.formatNicklist({ - buffer: bufferId + buffer: "0x"+bufferId }) ).then(function(nicklist) { handlers.handleNicklist(nicklist); @@ -295,6 +306,17 @@ weechat.factory('connection', }); }; + var fetchConfValue = function(name) { + ngWebsockets.send( + weeChat.Protocol.formatInfolist({ + name: "option", + pointer: 0, + args: name + }) + ).then(function(i) { + handlers.handleConfValue(i); + }); + }; var fetchMoreLines = function(numLines) { $log.debug('Fetching ', numLines, ' lines'); diff --git a/js/file-change.js b/js/file-change.js new file mode 100644 index 0000000..1b22359 --- /dev/null +++ b/js/file-change.js @@ -0,0 +1,23 @@ +(function() { +'use strict'; + +var weechat = angular.module('weechat'); + +weechat.directive('fileChange', ['$parse', function($parse) { + + return { + restrict: 'A', + link: function ($scope, element, attrs) { + var attrHandler = $parse(attrs.fileChange); + var handler = function (e) { + $scope.$apply(function () { + attrHandler($scope, { $event: e, files: e.target.files }); + }); + }; + element[0].addEventListener('change', handler, false); + } + }; + + }]); + +})(); diff --git a/js/filters.js b/js/filters.js index 71ecee9..e51f0a2 100644 --- a/js/filters.js +++ b/js/filters.js @@ -61,10 +61,15 @@ weechat.filter('inlinecolour', function() { // apply a filter to an HTML string's text nodes, and do so with not exceedingly terrible performance weechat.filter('DOMfilter', ['$filter', '$sce', function($filter, $sce) { + // To prevent nested anchors, we need to know if a filter is going to create them. + // Here's a list of names. See #681 for more information. + var filtersThatCreateAnchors = ['irclinky']; + return function(text, filter) { if (!text || !filter) { return text; } + var createsAnchor = filtersThatCreateAnchors.indexOf(filter) > -1; var escape_html = function(text) { // First, escape entities to prevent escaping issues because it's a bad idea @@ -92,6 +97,7 @@ weechat.filter('DOMfilter', ['$filter', '$sce', function($filter, $sce) { // as innerHTML causes it to be unescaped. var input = escape_html(node.nodeValue); var value = filterFunction(input, extraArgument, thirdArgument); + if (value !== input) { // we changed something. create a new node to replace the current one // we could also only add its children but that would probably incur @@ -114,7 +120,11 @@ weechat.filter('DOMfilter', ['$filter', '$sce', function($filter, $sce) { if (node === undefined || node === null) return; node = node.firstChild; while (node) { - var nextNode = process(node); + var nextNode = null; + // do not recurse inside links if the filter would create a nested link + if (!(createsAnchor && node.tagName === 'A')) { + nextNode = process(node); + } node = (nextNode ? nextNode : node).nextSibling; } }; @@ -151,7 +161,14 @@ weechat.filter('getBufferQuickKeys', function () { weechat.filter('emojify', function() { return function(text, enable_JS_Emoji) { if (enable_JS_Emoji === true && window.emojione !== undefined) { - return emojione.unicodeToImage(text); + // Emoji live in the D800-DFFF surrogate plane; only bother passing + // this range to CPU-expensive unicodeToImage(); + var emojiRegex = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + if (emojiRegex.test(text)) { + return emojione.unicodeToImage(text); + } else { + return(text); + } } else { return(text); } diff --git a/js/glowingbear.js b/js/glowingbear.js index c0b746a..271916a 100644 --- a/js/glowingbear.js +++ b/js/glowingbear.js @@ -21,8 +21,10 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', }; $scope.command = ''; - $scope.themes = ['dark', 'light']; + $scope.themes = ['dark', 'light', 'black']; + // Initialise all our settings, this needs to include all settings + // or else they won't be saved to the localStorage. settings.setDefaults({ 'theme': 'dark', 'host': 'localhost', @@ -38,30 +40,18 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', 'useFavico': true, 'showtimestamp': true, 'showtimestampSeconds': false, + 'soundnotification': true, 'fontsize': '14px', 'fontfamily': (utils.isMobileUi() ? 'sans-serif' : 'Inconsolata, Consolas, Monaco, Ubuntu Mono, monospace'), 'readlineBindings': false, 'enableJSEmoji': (utils.isMobileUi() ? false : true), 'enableMathjax': false, + 'customCSS': '', }); $scope.settings = settings; - // From: http://stackoverflow.com/a/18539624 by StackOverflow user "plantian" $rootScope.countWatchers = function () { - var q = [$rootScope], watchers = 0, scope; - while (q.length > 0) { - scope = q.pop(); - if (scope.$$watchers) { - watchers += scope.$$watchers.length; - } - if (scope.$$childHead) { - q.push(scope.$$childHead); - } - if (scope.$$nextSibling) { - q.push(scope.$$nextSibling); - } - } - $log.debug(watchers); + $log.debug($rootScope.$$watchersCount); }; $scope.isinstalled = (function() { @@ -168,7 +158,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', // Send a request for the nicklist if it hasn't been loaded yet if (!ab.nicklistRequested()) { - connection.requestNicklist(ab.fullName, function() { + connection.requestNicklist(ab.id, function() { $scope.showNicklist = $scope.updateShowNicklist(); // Scroll after nicklist has been loaded, as it may break long lines $rootScope.scrollWithBuffer(true); @@ -214,8 +204,10 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', ); } notifications.updateTitle(ab); - $scope.notifications = notifications.unreadCount('notification'); - $scope.unread = notifications.unreadCount('unread'); + setTimeout(function(){ + $scope.notifications = notifications.unreadCount('notification'); + $scope.unread = notifications.unreadCount('unread'); + }); $timeout(function() { $rootScope.scrollWithBuffer(true); @@ -262,8 +254,10 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', models.reinitialize(); $rootScope.$emit('notificationChanged'); $scope.connectbutton = 'Connect'; + $scope.connectbuttonicon = 'glyphicon-chevron-right'; }); $scope.connectbutton = 'Connect'; + $scope.connectbuttonicon = 'glyphicon-chevron-right'; $scope.getBuffers = models.getBuffers.bind(models); @@ -431,6 +425,24 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', })(); }); + settings.addCallback('customCSS', function(css) { + // We need to delete the old tag and add a new one so that the browser + // notices the change. Thus, first remove old custom CSS. + var old_css = document.getElementById('custom-css-tag'); + if (old_css) { + old_css.parentNode.removeChild(old_css); + } + + // Create new CSS tag + var new_css = document.createElement("style"); + new_css.type = "text/css"; + new_css.id = "custom-css-tag"; + new_css.appendChild(document.createTextNode(css)); + // Append it to the tag + var heads = document.getElementsByTagName("head"); + heads[0].appendChild(new_css); + }); + // Update font family when changed settings.addCallback('fontfamily', function(fontfamily) { @@ -532,6 +544,17 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', return connection.fetchMoreLines(numLines); }; + $scope.infiniteScroll = function() { + // Check if we are already fetching + if ($rootScope.loadingLines) { + return; + } + var buffer = models.getActiveBuffer(); + if (!buffer.allLinesFetched) { + $scope.fetchMoreLines(); + } + }; + $rootScope.updateBufferBottom = function(bottom) { var eob = document.getElementById("end-of-buffer"); var bl = document.getElementById('bufferlines'); @@ -580,11 +603,13 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', $rootScope.securityError = false; $rootScope.errorMessage = false; $rootScope.bufferBottom = true; - $scope.connectbutton = 'Connecting ...'; + $scope.connectbutton = 'Connecting'; + $scope.connectbuttonicon = 'glyphicon-refresh glyphicon-spin'; connection.connect(settings.host, settings.port, $scope.password, settings.ssl); }; $scope.disconnect = function() { $scope.connectbutton = 'Connect'; + $scope.connectbuttonicon = 'glyphicon-chevron-right'; connection.disconnect(); }; $scope.reconnect = function() { @@ -725,6 +750,18 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', settings.nonicklist = !settings.nonicklist; }; + $rootScope.switchToAdjacentBuffer = function(direction) { + // direction is +1 for next buffer, -1 for previous buffer + var sortedBuffers = _.sortBy($scope.getBuffers(), $rootScope.predicate); + var activeBuffer = models.getActiveBuffer(); + var index = sortedBuffers.indexOf(activeBuffer); + if (index >= 0) { + var newBuffer = sortedBuffers[index + direction]; + if (newBuffer) { + $scope.setActiveBuffer(newBuffer.id); + } + } + }; $scope.handleSearchBoxKey = function($event) { // Support different browser quirks @@ -743,6 +780,23 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', } }; + $rootScope.supports_formatting_date = (function() { + // function toLocaleDateStringSupportsLocales taken from MDN: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString#Checking_for_support_for_locales_and_options_arguments + try { + new Date().toLocaleDateString('i'); + } catch (e) { + if (e.name !== 'RangeError') { + $log.info("Browser does not support toLocaleDateString()," + + " falling back to en-US"); + } + return e.name === 'RangeError'; + } + $log.info("Browser does not support toLocaleDateString()," + + " falling back to en-US"); + return false; + })(); + // Prevent user from accidentally leaving the page window.onbeforeunload = function(event) { @@ -774,7 +828,8 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', $rootScope.securityError = false; $rootScope.errorMessage = false; $rootScope.bufferBottom = true; - $scope.connectbutton = 'Connecting ...'; + $scope.connectbutton = 'Connecting'; + $scope.connectbuttonicon = 'glyphicon-chevron-right'; connection.connect(host, port, password, ssl); } }; diff --git a/js/handlers.js b/js/handlers.js index 98f088c..c1b3228 100644 --- a/js/handlers.js +++ b/js/handlers.js @@ -13,18 +13,142 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific models.version = version.split(".").map(function(c) { return parseInt(c); }); }; + var handleConfValue = function(message) { + var infolist = message.objects[0].content; + for (var i = 0; i < infolist.length ; i++) { + var key, val; + var item = infolist[i]; + for (var j = 0; j < item.length ; j++) { + var confitem = item[j]; + if (confitem.full_name) { + key = confitem.full_name; + } + if (confitem.value) { + val = confitem.value; + } + } + if (key && val) { + $log.debug('Setting wconfig "' + key + '" to value "' + val + '"'); + models.wconfig[key] = val; + } + } + }; + var handleBufferClosing = function(message) { var bufferMessage = message.objects[0].content[0]; var bufferId = bufferMessage.pointers[0]; models.closeBuffer(bufferId); }; + // inject a fake buffer line for date change if needed + var injectDateChangeMessageIfNeeded = function(buffer, manually, old_date, new_date) { + if (buffer.bufferType === 1) { + // Don't add date change messages to free buffers + return; + } + old_date.setHours(0, 0, 0, 0); + new_date.setHours(0, 0, 0, 0); + // Check if the date changed + if (old_date.valueOf() !== new_date.valueOf()) { + if (manually) { + // if the message that caused this date change to be sent + // would increment buffer.lastSeen, we should increment as + // well. + ++buffer.lastSeen; + } + var old_date_plus_one = old_date; + old_date_plus_one.setDate(old_date.getDate() + 1); + // it's not always true that a date with time 00:00:00 + // plus one day will be time 00:00:00 + old_date_plus_one.setHours(0, 0, 0, 0); + + var content = "\u001943"; // this colour corresponds to chat_day_change + // Add day of the week + if ($rootScope.supports_formatting_date) { + content += new_date.toLocaleDateString(window.navigator.language, + {weekday: "long"}); + } else { + // Gross code that only does English dates ew gross + var dow_to_word = [ + "Sunday", "Monday", "Tuesday", + "Wednesday", "Thursday", "Friday", "Saturday"]; + content += dow_to_word[new_date.getDay()]; + } + // if you're testing different date formats, + // make sure to test different locales such as "en-US", + // "en-US-u-ca-persian" (which has different weekdays, year 0, and an ERA) + // "ja-JP-u-ca-persian-n-thai" (above, diff numbering, diff text) + var extra_date_format = { + day: "numeric", + month: "long" + }; + if (new_date.getYear() !== old_date.getYear()) { + extra_date_format.year = "numeric"; + } + content += " ("; + if ($rootScope.supports_formatting_date) { + content += new_date.toLocaleDateString(window.navigator.language, + extra_date_format); + } else { + // ew ew not more gross code + var month_to_word = [ + "January", "February", "March", "April", + "May", "June", "July", "August", + "September", "October", "November", "December"]; + content += month_to_word[new_date.getMonth()] + " " + new_date.getDate().toString(); + if (extra_date_format.year === "numeric") { + content += ", " + new_date.getFullYear().toString(); + } + } + // Result should be something like + // Friday (November 27) + // or if the year is different, + // Friday (November 27, 2015) + + // Comparing dates in javascript is beyond tedious + if (old_date_plus_one.valueOf() !== new_date.valueOf()) { + var date_diff = Math.round((new_date - old_date)/(24*60*60*1000)) + 1; + if (date_diff < 0) { + date_diff = -1*(date_diff); + if (date_diff === 1) { + content += ", 1 day before"; + } else { + content += ", " + date_diff + " days before"; + } + } else { + content += ", " + date_diff + " days later"; + } + // Result: Friday (November 27, 5 days later) + } + content += ")"; + + var line = { + buffer: buffer.id, + date: new_date, + prefix: '\u001943\u2500', + tags_array: [], + displayed: true, + highlight: 0, + message: content + }; + var new_message = new models.BufferLine(line); + buffer.addLine(new_message); + } + }; + var handleLine = function(line, manually) { var message = new models.BufferLine(line); var buffer = models.getBuffer(message.buffer); buffer.requestedLines++; // Only react to line if its displayed if (message.displayed) { + // Check for date change + if (buffer.lines.length > 0) { + var old_date = new Date(buffer.lines[buffer.lines.length - 1].date), + new_date = new Date(message.date); + injectDateChangeMessageIfNeeded(buffer, manually, old_date, new_date); + } + message = plugins.PluginManager.contentForMessage(message); buffer.addLine(message); @@ -171,9 +295,22 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific // Update indentation status old.type = localvars.type; old.indent = (['channel', 'private'].indexOf(localvars.type) >= 0); + // Update serverSortKey and related variables + old.plugin = localvars.plugin; + old.server = localvars.server; + old.serverSortKey = old.plugin + "." + old.server + + (old.type === "server" ? "" : ("." + old.shortName)); } }; + var handleBufferTypeChanged = function(message) { + var obj = message.objects[0].content[0]; + var buffer = obj.pointers[0]; + var old = models.getBuffer(buffer); + // 0 = formatted (normal); 1 = free + buffer.bufferType = obj.type; + }; + /* * Handle answers to (lineinfo) messages * @@ -187,6 +324,16 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific lines.forEach(function(l) { handleLine(l, manually); }); + if (message.objects[0].content.length > 0) { + // fiddle out the buffer ID and take the last line's date + var last_line = + message.objects[0].content[message.objects[0].content.length-1]; + var buffer = models.getBuffer(last_line.buffer); + if (buffer.lines.length > 0) { + var last_date = new Date(buffer.lines[buffer.lines.length - 1].date); + injectDateChangeMessageIfNeeded(buffer, true, last_date, new Date()); + } + } }; /* @@ -268,6 +415,7 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific _buffer_localvar_changed: handleBufferLocalvarChanged, _buffer_opened: handleBufferOpened, _buffer_title_changed: handleBufferTitleChanged, + _buffer_type_changed: handleBufferTypeChanged, _buffer_renamed: handleBufferRenamed, _buffer_hidden: handleBufferHidden, _buffer_unhidden: handleBufferUnhidden, @@ -291,6 +439,7 @@ weechat.factory('handlers', ['$rootScope', '$log', 'models', 'plugins', 'notific return { handleVersionInfo: handleVersionInfo, + handleConfValue: handleConfValue, handleEvent: handleEvent, handleLineInfo: handleLineInfo, handleHotlistInfo: handleHotlistInfo, diff --git a/js/imgur-drop-directive.js b/js/imgur-drop-directive.js new file mode 100644 index 0000000..7e114d0 --- /dev/null +++ b/js/imgur-drop-directive.js @@ -0,0 +1,49 @@ +(function() { +'use strict'; + +var weechat = angular.module('weechat'); + +weechat.directive('imgurDrop', ['connection','imgur','$rootScope', function(connection, imgur, $rootScope) { + return { + restrict: 'A', + link: function($scope, element, attr) { + var elem = element[0]; + elem.ondragover = function () { this.classList.add('imgur-drop-hover'); return false; }; + elem.ondragend = function () { this.classList.remove('imgur-drop-hover'); return false; }; + elem.ondrop = function(e) { + // Remove hover class + this.classList.remove('imgur-drop-hover'); + + // Get files + var files = e.dataTransfer.files; + + // Stop default behaviour + e.stopPropagation(); + e.preventDefault(); + + // Send image url after upload + var sendImageUrl = function(imageUrl) { + + // Send image + if(imageUrl !== undefined && imageUrl !== '') { + $rootScope.insertAtCaret(String(imageUrl)); + } + + }; + + // Check files + if(typeof files !== "undefined" && files.length > 0) { + + // Loop through files + for (var i = 0; i < files.length; i++) { + // Upload to imgur + imgur.process(files[i], sendImageUrl); + } + + } + }; + } + }; +}]); + +})(); diff --git a/js/imgur.js b/js/imgur.js new file mode 100644 index 0000000..a5a0fd0 --- /dev/null +++ b/js/imgur.js @@ -0,0 +1,128 @@ +(function() { +'use strict'; + +var weechat = angular.module('weechat'); + +weechat.factory('imgur', ['$rootScope', function($rootScope) { + + var process = function(image, callback) { + + // Is it an image? + if (!image || !image.type.match(/image.*/)) return; + + // New file reader + var reader = new FileReader(); + + // When image is read + reader.onload = function (event) { + var image = event.target.result.split(',')[1]; + upload(image, callback); + }; + + // Read image as data url + reader.readAsDataURL(image); + + }; + + // Upload image to imgur from base64 + var upload = function( base64img, callback ) { + // Set client ID (Glowing Bear) + var clientId = "164efef8979cd4b"; + + // Progress bars container + var progressBars = document.getElementById("imgur-upload-progress"), + currentProgressBar = document.createElement("div"); + + // Set progress bar attributes + currentProgressBar.className='imgur-progress-bar'; + currentProgressBar.style.width = '0'; + + // Append progress bar + progressBars.appendChild(currentProgressBar); + + // Create new form data + var fd = new FormData(); + fd.append("image", base64img); // Append the file + fd.append("type", "base64"); // Set image type to base64 + + // Create new XMLHttpRequest + var xhttp = new XMLHttpRequest(); + + // Post request to imgur api + xhttp.open("POST", "https://api.imgur.com/3/image", true); + + // Set headers + xhttp.setRequestHeader("Authorization", "Client-ID " + clientId); + xhttp.setRequestHeader("Accept", "application/json"); + + // Handler for response + xhttp.onload = function() { + + // Remove progress bar + currentProgressBar.parentNode.removeChild(currentProgressBar); + + // Check state and response status + if(xhttp.status === 200) { + + // Get response text + var response = JSON.parse(xhttp.responseText); + + // Send link as message + if( response.data && response.data.link ) { + + if (callback && typeof(callback) === "function") { + callback(response.data.link); + } + + } else { + showErrorMsg(); + } + + } else { + showErrorMsg(); + } + + }; + + if( "upload" in xhttp ) { + + // Set progress + xhttp.upload.onprogress = function (event) { + + // Check if we can compute progress + if (event.lengthComputable) { + // Complete in percent + var complete = (event.loaded / event.total * 100 | 0); + + // Set progress bar width + currentProgressBar.style.width = complete + '%'; + } + }; + + } + + // Send request with form data + xhttp.send(fd); + + }; + + var showErrorMsg = function() { + // Show error msg + $rootScope.uploadError = true; + $rootScope.$apply(); + + // Hide after 5 seconds + setTimeout(function(){ + // Hide error msg + $rootScope.uploadError = false; + $rootScope.$apply(); + }, 5000); + }; + + return { + process: process + }; + +}]); + +})(); diff --git a/js/inputbar.js b/js/inputbar.js index e57144a..2cd24c7 100644 --- a/js/inputbar.js +++ b/js/inputbar.js @@ -14,11 +14,12 @@ weechat.directive('inputBar', function() { command: '=command' }, - controller: ['$rootScope', '$scope', '$element', '$log', 'connection', 'models', 'IrcUtils', 'settings', function($rootScope, + controller: ['$rootScope', '$scope', '$element', '$log', 'connection', 'imgur', 'models', 'IrcUtils', 'settings', function($rootScope, $scope, $element, //XXX do we need this? don't seem to be using it $log, connection, //XXX we should eliminate this dependency and use signals instead + imgur, models, IrcUtils, settings) { @@ -69,6 +70,49 @@ weechat.directive('inputBar', function() { }, 0); }; + $rootScope.insertAtCaret = function(toInsert) { + // caret position in the input bar + var inputNode = $scope.getInputNode(), + caretPos = inputNode.selectionStart; + + var prefix = $scope.command.substring(0, caretPos), + suffix = $scope.command.substring(caretPos, $scope.command.length); + // Add spaces if missing + if (prefix.length > 0 && prefix[prefix.length - 1] !== ' ') { + prefix += ' '; + } + if (suffix.length > 0 && suffix[0] !== ' ') { + suffix = ' '.concat(suffix); + } + $scope.command = prefix + toInsert + suffix; + + setTimeout(function() { + inputNode.focus(); + var pos = $scope.command.length - suffix.length; + inputNode.setSelectionRange(pos, pos); + // force refresh? + $scope.$apply(); + }, 0); + }; + + $scope.uploadImage = function($event, files) { + // Send image url after upload + var sendImageUrl = function(imageUrl) { + // Send image + if(imageUrl !== undefined && imageUrl !== '') { + $rootScope.insertAtCaret(String(imageUrl)); + } + }; + + if(typeof files !== "undefined" && files.length > 0) { + // Loop through files + for (var i = 0; i < files.length; i++) { + // Process image + imgur.process(files[i], sendImageUrl); + } + + } + }; // Send the message to the websocket $scope.sendMessage = function() { @@ -250,6 +294,14 @@ weechat.directive('inputBar', function() { return true; } + // Alt+Arrow up/down -> switch to prev/next adjacent buffer + if ($event.altKey && !$event.ctrlKey && (code === 38 || code === 40)) { + $event.preventDefault(); + var direction = code - 39; + $rootScope.switchToAdjacentBuffer(direction); + return true; + } + // Alt+L -> focus on input bar if ($event.altKey && (code === 76 || code === 108)) { $event.preventDefault(); diff --git a/js/models.js b/js/models.js index baa1aec..f6d7f63 100644 --- a/js/models.js +++ b/js/models.js @@ -11,6 +11,9 @@ models.service('models', ['$rootScope', '$filter', function($rootScope, $filter) // WeeChat version this.version = null; + // WeeChat configuration values + this.wconfig = {}; + // Save outgoing queries this.outgoingQueries = []; @@ -84,10 +87,22 @@ models.service('models', ['$rootScope', '$filter', function($rootScope, $filter) var notification = 0; var unread = 0; var lastSeen = -1; - var serverSortKey = fullName.replace(/^irc\.server\.(\w+)/, "irc.$1"); + // There are two kinds of types: bufferType (free vs formatted) and + // the kind of type that distinguishes queries from channels etc + var bufferType = message.type; var type = message.local_variables.type; var indent = (['channel', 'private'].indexOf(type) >= 0); + var plugin = message.local_variables.plugin; + var server = message.local_variables.server; + // Server buffers have this "irc.server.freenode" naming schema, which + // messes the sorting up. We need it to be "irc.freenode" instead. + var serverSortKey = plugin + "." + server + + (type === "server" ? "" : ("." + shortName)); + // Lowercase it so alt+up/down traverses buffers in the same order + // angular's sortBy directive puts them in + serverSortKey = serverSortKey.toLowerCase(); + // Buffer opened message does not include notify level if (message.notify !== undefined) { notify = message.notify; @@ -311,7 +326,10 @@ models.service('models', ['$rootScope', '$filter', function($rootScope, $filter) getNicklistByTime: getNicklistByTime, serverSortKey: serverSortKey, indent: indent, + bufferType: bufferType, type: type, + plugin: plugin, + server: server, history: history, addToHistory: addToHistory, getHistoryUp: getHistoryUp, diff --git a/js/notifications.js b/js/notifications.js index 2caca39..0f79a15 100644 --- a/js/notifications.js +++ b/js/notifications.js @@ -1,8 +1,9 @@ var weechat = angular.module('weechat'); weechat.factory('notifications', ['$rootScope', '$log', 'models', 'settings', function($rootScope, $log, models, settings) { - // Ask for permission to display desktop notifications + var serviceworker = false; var notifications = []; + // Ask for permission to display desktop notifications var requestNotificationPermission = function() { // Firefox if (window.Notification) { @@ -22,6 +23,81 @@ weechat.factory('notifications', ['$rootScope', '$log', 'models', 'settings', fu window.webkitNotifications.requestPermission(); } } + + if ('serviceWorker' in navigator) { + $log.info('Service Worker is supported'); + navigator.serviceWorker.register('serviceworker.js').then(function(reg) { + $log.info('Service Worker install:', reg); + serviceworker = true; + }).catch(function(err) { + $log.info('Service Worker err:', err); + }); + } + }; + + var showNotification = function(buffer, title, body) { + if (serviceworker) { + navigator.serviceWorker.ready.then(function(registration) { + registration.showNotification(title, { + body: body, + icon: 'assets/img/glowing_bear_128x128.png', + vibrate: [200, 100], + tag: 'gb-highlight-vib' + }); + }); + } else if (typeof Windows !== 'undefined' && typeof Windows.UI !== 'undefined' && typeof Windows.UI.Notifications !== 'undefined') { + + var winNotifications = Windows.UI.Notifications; + var toastNotifier = winNotifications.ToastNotificationManager.createToastNotifier(); + var template = winNotifications.ToastTemplateType.toastText02; + var toastXml = winNotifications.ToastNotificationManager.getTemplateContent(template); + var toastTextElements = toastXml.getElementsByTagName("text"); + + toastTextElements[0].appendChild(toastXml.createTextNode(title)); + toastTextElements[1].appendChild(toastXml.createTextNode(body)); + + var toast = new winNotifications.ToastNotification(toastXml); + + toast.onactivated = function() { + models.setActiveBuffer(buffer.id); + window.focus(); + }; + + toastNotifier.show(toast); + + } else { + + var notification = new Notification(title, { + body: body, + icon: 'assets/img/favicon.png' + }); + + // Save notification, so we can close all outstanding ones when disconnecting + notification.id = notifications.length; + notifications.push(notification); + + // Cancel notification automatically + var timeout = 15*1000; + notification.onshow = function() { + setTimeout(function() { + notification.close(); + }, timeout); + }; + + // Click takes the user to the buffer + notification.onclick = function() { + models.setActiveBuffer(buffer.id); + window.focus(); + notification.close(); + }; + + // Remove from list of active notifications + notification.onclose = function() { + delete notifications[this.id]; + }; + + } + }; @@ -83,7 +159,7 @@ weechat.factory('notifications', ['$rootScope', '$log', 'models', 'settings', fu var body = ''; var numNotifications = buffer.notification; - if (['#', '&', '+', '!'].indexOf(buffer.shortName.charAt(0)) < 0) { + if (buffer.type === "private") { if (numNotifications > 1) { title = numNotifications.toString() + ' private messages from '; } else { @@ -102,37 +178,9 @@ weechat.factory('notifications', ['$rootScope', '$log', 'models', 'settings', fu } body = '<' + prefix + '> ' + message.text; } - title += buffer.shortName; - title += buffer.fullName.replace(/irc.([^\.]+)\..+/, " ($1)"); - - var notification = new Notification(title, { - body: body, - icon: 'assets/img/favicon.png' - }); - - // Save notification, so we can close all outstanding ones when disconnecting - notification.id = notifications.length; - notifications.push(notification); - - // Cancel notification automatically - var timeout = 15*1000; - notification.onshow = function() { - setTimeout(function() { - notification.close(); - }, timeout); - }; - - // Click takes the user to the buffer - notification.onclick = function() { - models.setActiveBuffer(buffer.id); - window.focus(); - notification.close(); - }; - - // Remove from list of active notifications - notification.onclose = function() { - delete notifications[this.id]; - }; + title += buffer.shortName + " (" + buffer.server + ")"; + + showNotification(buffer, title, body); if (settings.soundnotification) { // TODO fill in a sound file diff --git a/js/plugins.js b/js/plugins.js index f659012..7ba506d 100644 --- a/js/plugins.js +++ b/js/plugins.js @@ -23,7 +23,7 @@ var Plugin = function(name, contentForMessage) { // Regular expression that detects URLs for UrlPlugin -var urlRegexp = /(?:ftp|https?):\/\/\S*[^\s.;,(){}<>]/g; +var urlRegexp = /(?:(?:https?|ftp):\/\/|www\.|ftp\.)\S*[^\s.;,(){}<>]/g; /* * Definition of a user provided plugin that consumes URLs * @@ -280,10 +280,25 @@ plugins.factory('userPlugins', function() { } else if (url.match(/^http:\/\/(i\.)?imgur\.com\//i)) { // remove protocol specification to load over https if used by g-b url = url.replace(/http:/, ""); - } else if (url.match(/^https:\/\/www\.dropbox\.com\/s\/[a-z0-9]+\/[^?]+$/i)) { + } else if (url.match(/^https:\/\/www\.dropbox\.com\/s\/[a-z0-9]+\//i)) { // Dropbox requires a get parameter, dl=1 - // TODO strip an existing dl=0 parameter - url = url + "?dl=1"; + var dbox_url = document.createElement("a"); + dbox_url.href = url; + var base_url = dbox_url.protocol + '//' + dbox_url.host + dbox_url.pathname + '?'; + var dbox_params = dbox_url.search.substring(1).split('&'); + var dl_added = false; + for (var i = 0; i < dbox_params.length; i++) { + if (dbox_params[i].split('=')[0] === "dl") { + dbox_params[i] = "dl=1"; + dl_added = true; + // we continue looking at the other parameters in case + // it's specified twice or something + } + } + if (!dl_added) { + dbox_params.push("dl=1"); + } + url = base_url + dbox_params.join('&'); } return function() { var element = this.getElement(); @@ -298,14 +313,36 @@ plugins.factory('userPlugins', function() { } }); + /* + * audio Preview + */ + var audioPlugin = new UrlPlugin('audio', function(url) { + if (url.match(/\.(mp3|ogg|wav)\b/i)) { + return function() { + var element = this.getElement(); + var aelement = angular.element('') + .addClass('embed') + .attr('width', '560') + .append(angular.element('') + .attr('src', url)); + element.innerHTML = aelement.prop('outerHTML'); + }; + } + }); + + /* * mp4 video Preview */ var videoPlugin = new UrlPlugin('video', function(url) { - if (url.match(/\.(mp4|webm|ogv)\b/i)) { + if (url.match(/\.(mp4|webm|ogv|gifv)\b/i)) { + if (url.match(/^http:\/\/(i\.)?imgur\.com\//i)) { + // remove protocol specification to load over https if used by g-b + url = url.replace(/\.(gifv)\b/i, ".webm"); + } return function() { var element = this.getElement(); - var velement = angular.element('') + var velement = angular.element('') .addClass('embed') .attr('width', '560') .append(angular.element('') @@ -314,6 +351,7 @@ plugins.factory('userPlugins', function() { }; } }); + /* * Cloud Music Embedded Players @@ -484,7 +522,7 @@ plugins.factory('userPlugins', function() { }); return { - plugins: [youtubePlugin, dailymotionPlugin, allocinePlugin, imagePlugin, videoPlugin, spotifyPlugin, cloudmusicPlugin, googlemapPlugin, asciinemaPlugin, yrPlugin, gistPlugin, giphyPlugin, tweetPlugin, vinePlugin] + plugins: [youtubePlugin, dailymotionPlugin, allocinePlugin, imagePlugin, videoPlugin, audioPlugin, spotifyPlugin, cloudmusicPlugin, googlemapPlugin, asciinemaPlugin, yrPlugin, gistPlugin, giphyPlugin, tweetPlugin, vinePlugin] }; diff --git a/js/weechat.js b/js/weechat.js index 126eda6..640ccbd 100644 --- a/js/weechat.js +++ b/js/weechat.js @@ -23,9 +23,7 @@ 'buf': this._getString, 'arr': this._getArray, 'htb': this._getHashTable, - 'inl': function() { - this._warnUnimplemented('infolist'); - } + 'inl': this._getInfolist, }; // string value for some object types @@ -290,7 +288,7 @@ var ret = {}; var optionCode = parseInt(m[1]); - if (optionCode > 43) { + if (optionCode >= WeeChatProtocol._colorsOptionsNames.length) { // should never happen return { fgColor: null, @@ -699,6 +697,37 @@ return WeeChatProtocol._formatCmd(params.id, 'info', parts); }; + /** + * Formats an infolist command. + * + * @param params Parameters: + * id: command ID (optional) + * name: infolist name (mandatory) + * pointer: optional + * arguments: optional + * @return Formatted infolist command string + */ + WeeChatProtocol.formatInfolist = function(params) { + var defaultParams = { + id: null, + pointer: null, + args: null + + }; + var parts = []; + + params = WeeChatProtocol._mergeParams(defaultParams, params); + parts.push(params.name); + if (params.pointer !== null) { + parts.push(params.pointer); + } + if (params.pointer !== null) { + parts.push(params.args); + } + + return WeeChatProtocol._formatCmd(params.id, 'infolist', parts); + }; + /** * Formats a nicklist command. * @@ -1143,6 +1172,35 @@ return values; }, + /** + * Reads an infolist object from the current set of data + * + * @return Array + */ + _getInfolist: function() { + var self = this; + var name; + var count; + var values; + + name = this._getString(); + count = this._getInt(); + values = []; + + for (var i = 0; i < count; i++) { + var itemcount = self._getInt(); + var litem = []; + for (var j = 0; j < itemcount; j++) { + var item = {}; + item[self._getString()] = self._runType(self._getType()); + litem.push(item); + } + values.push(litem); + } + + return values; + }, + /** * Reads a specified number of bytes from current set data. * diff --git a/js/whenscrolled-directive.js b/js/whenscrolled-directive.js new file mode 100644 index 0000000..39a43e5 --- /dev/null +++ b/js/whenscrolled-directive.js @@ -0,0 +1,21 @@ +(function() { +'use strict'; + +var weechat = angular.module('weechat'); +weechat.directive('whenScrolled', function() { + return function(scope, elm, attr) { + var raw = elm[0]; + + var fun = function() { + if (raw.scrollTop === 0) { + scope.$apply(attr.whenScrolled); + } + }; + + elm.bind('scroll', function() { + _.debounce(fun, 200)(); + }); + }; +}); + +})(); diff --git a/manifest.json b/manifest.json index 9ddf643..437ce9d 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "Glowing Bear", "description": "WeeChat Web frontend", - "version": "0.5.2", + "version": "0.6.0", "manifest_version": 2, "icons": { "32": "assets/img/favicon.png", diff --git a/manifest.webapp b/manifest.webapp index ace1264..eb8cdcd 100644 --- a/manifest.webapp +++ b/manifest.webapp @@ -25,5 +25,5 @@ "desktop-notification":{} }, "default_locale": "en", - "version": "0.5.2" + "version": "0.6.0" } diff --git a/min.js b/min.js index 6953134..38d5872 100644 --- a/min.js +++ b/min.js @@ -1,3 +1,4 @@ -!function(){"use strict";var e=angular.module("localStorage",[]);e.factory("$store",["$parse",function(e){var t="undefined"==typeof window.localStorage?void 0:window.localStorage,n=!("undefined"==typeof t||"undefined"==typeof window.JSON);n||console.log("Warning: localStorage is not supported");var i={parseValue:function(e){var t;try{t=JSON.parse(e),void 0===t&&(t=e),"true"===t&&(t=!0),"false"===t&&(t=!1),parseFloat(t)!=t||angular.isObject(t)||(t=parseFloat(t))}catch(n){t=e}return t}},r={set:function(e,r){n||console.log("Local Storage not supported");var o=JSON.stringify(r);return t.setItem(e,o),i.parseValue(o)},get:function(e){if(!n)return null;var r=t.getItem(e);return i.parseValue(r)},remove:function(e){return n?(t.removeItem(e),!0):!1},enumerateKeys:function(){for(var e=[],n=0,i=t.length;i>n;++n)e.push(t.key(n));return e},bind:function(t,n,i){return void 0===i&&(i=""),(void 0===r.get(n)||null===r.get(n))&&r.set(n,i),e(n).assign(t,r.get(n)),t.$watch(n,function(e){r.set(n,e)},!0),r.get(n)}};return r}])}(),function(e){"use strict";!function(){var t=function(){this._types={chr:this._getChar,int:this._getInt,str:this._getString,inf:this._getInfo,hda:this._getHdata,ptr:this._getPointer,lon:this._getStrNumber,tim:this._getTime,buf:this._getString,arr:this._getArray,htb:this._getHashTable,inl:function(){this._warnUnimplemented("infolist")}},this._typesStr={chr:this._strDirect,str:this._strDirect,int:this._strToString,tim:this._strToString,ptr:this._strDirect}};t._weeChatColorsNames=["default","black","darkgray","red","lightred","green","lightgreen","brown","yellow","blue","lightblue","magenta","lightmagenta","cyan","lightcyan","gray","white"],t._colorsOptionsNames=["separator","chat","chat_time","chat_time_delimiters","chat_prefix_error","chat_prefix_network","chat_prefix_action","chat_prefix_join","chat_prefix_quit","chat_prefix_more","chat_prefix_suffix","chat_buffer","chat_server","chat_channel","chat_nick","chat_nick_self","chat_nick_other","invalid","invalid","invalid","invalid","invalid","invalid","invalid","invalid","invalid","invalid","chat_host","chat_delimiters","chat_highlight","chat_read_marker","chat_text_found","chat_value","chat_prefix_buffer","chat_tags","chat_inactive_window","chat_inactive_buffer","chat_prefix_buffer_inactive_buffer","chat_nick_offline","chat_nick_offline_highlight","chat_nick_prefix","chat_nick_suffix","emphasis","chat_day_change"],t._getDefaultColor=function(){return{type:"weechat",name:"default"}},t._getDefaultAttributes=function(){return{name:null,override:{bold:!1,reverse:!1,italic:!1,underline:!1}}},t._getDefaultStyle=function(){return{fgColor:t._getDefaultColor(),bgColor:t._getDefaultColor(),attrs:t._getDefaultAttributes()}},t._cloneColor=function(e){var t={};for(var n in e)t[n]=e[n];return t},t._cloneAttrs=function(e){var t={};t.name=e.name,t.override={};for(var n in e.override)t.override[n]=e.override[n];return t},t._attrNameFromChar=function(e){var t={"*":"b","!":"r","/":"i",_:"u","":"b","":"r","":"i","":"u"};return e in t?t[e]:null},t._attrsFromStr=function(e){for(var n=t._getDefaultAttributes(),i=0;i16?t._getDefaultColor():{type:"weechat",name:t._weeChatColorsNames[n]}}var i=e.substring(1);return{type:"ext",name:parseInt(i).toString()}},t._getStyle=function(e){var n=[{regex:/^(\d{2})/,fn:function(e){var n={},i=parseInt(e[1]);if(i>43)return{fgColor:null,bgColor:null,attrs:null};var r=t._colorsOptionsNames[i];return n.fgColor={type:"option",name:r},n.bgColor=t._cloneColor(n.fgColor),n.attrs={name:r,override:{}},n}},{regex:/^@(\d{5})/,fn:function(){return{fgColor:null,bgColor:null,attrs:null}}},{regex:/^F(?:([*!\/_|]*)(\d{2})|@([\x01\x02\x03\x04*!\/_|]*)(\d{5}))/,fn:function(e){var n={bgColor:null};return e[2]?(n.attrs=t._attrsFromStr(e[1]),n.fgColor=t._getColorObj(e[2])):(n.attrs=t._attrsFromStr(e[3]),n.fgColor=t._getColorObj(e[4])),n}},{regex:/^B(\d{2}|@\d{5})/,fn:function(e){return{fgColor:null,bgColor:t._getColorObj(e[1]),attrs:null}}},{regex:/^\*(?:([\x01\x02\x03\x04*!\/_|]*)(\d{2})|@([\x01\x02\x03\x04*!\/_|]*)(\d{5})),(\d{2}|@\d{5})/,fn:function(e){var n={};return e[2]?(n.attrs=t._attrsFromStr(e[1]),n.fgColor=t._getColorObj(e[2])):(n.attrs=t._attrsFromStr(e[3]),n.fgColor=t._getColorObj(e[4])),n.bgColor=t._getColorObj(e[5]),n}},{regex:/^\*([\x01\x02\x03\x04*!\/_|]*)(\d{2}|@\d{5})/,fn:function(e){return{fgColor:t._getColorObj(e[2]),bgColor:null,attrs:t._attrsFromStr(e[1])}}},{regex:/^E/,fn:function(){var e={};return e.fgColor={type:"option",name:"emphasis"},e.bgColor=t._cloneColor(e.fgColor),e.attrs={name:"emphasis",override:{}},e}}],i={fgColor:null,bgColor:null,attrs:null,text:e};return n.some(function(t){var n=e.match(t.regex);return n?(i=t.fn(n),i.text=e.substring(n[0].length),!0):!1}),i},t.rawText2Rich=function(e){var n=e.split(/(\x19|\x1a|\x1b|\x1c)/);if(1===n.length)return[{attrs:t._getDefaultAttributes(),fgColor:t._getDefaultColor(),bgColor:t._getDefaultColor(),text:n[0]}];var i=t._getDefaultColor(),r=t._getDefaultColor(),o=t._getDefaultAttributes(),a=null,c=!0;return n.map(function(e){if(0===e.length)return null;var n=e.charCodeAt(0),s=e.charAt(0);if(n>=25&&28>=n)return 28===n&&(i=t._getDefaultColor(),r=t._getDefaultColor(),25!==a&&(o=t._getDefaultAttributes())),a=n,null;var u=e;if(25===a){var l=t._getStyle(e);null!==l.fgColor&&(i=l.fgColor),null!==l.bgColor&&(r=l.bgColor),null!==l.attrs&&(o=l.attrs),u=l.text}else if(26===a||27===a){var f=26===a;if("|"!==s){var d=t._attrNameFromChar(s);d&&(o.override[d]=f,u=e.substring(1))}}if(a=null,0===u.length)return null;if(c&&null===o.name){var m=!0;for(var h in o.override)if(o.override[h]){m=!1;break}m?o.override={}:c=!1}return{fgColor:t._cloneColor(i),bgColor:t._cloneColor(r),attrs:t._cloneAttrs(o),text:u}}).filter(function(e){return null!==e})},t._uia2s=function(e){if(!e.length||0===e[0])return"";try{var t=String.fromCharCode.apply(null,e),n=decodeURIComponent(escape(t));return n}catch(t){for(var i="",r=0,o=e.length;o>r;r++)i+=e[r]<128?String.fromCharCode(e[r]):"?";return i}},t._mergeParams=function(e,t){for(var n in t)e[n]=t[n];return e},t._formatCmd=function(e,t,n){var i,r;return i=null!==e?"("+e+") ":"",i+=t,n.unshift(i),r=n.join(" "),r+="\n",r.replace(/[\r\n]+$/g,"").split("\n"),r},t.formatInit=function(e){var n={password:null,compression:"zlib"},i=[],r=[];return e=t._mergeParams(n,e),i.push("compression="+e.compression),null!==e.password&&i.push("password="+e.password),r.push(i.join(",")),t._formatCmd(null,"init",r)},t.formatHdata=function(e){var n={id:null,keys:null},i=[];return e=t._mergeParams(n,e),i.push(e.path),null!==e.keys&&i.push(e.keys.join(",")),t._formatCmd(e.id,"hdata",i)},t.formatInfo=function(e){var n={id:null},i=[];return e=t._mergeParams(n,e),i.push(e.name),t._formatCmd(e.id,"info",i)},t.formatNicklist=function(e){var n={id:null,buffer:null},i=[];return e=t._mergeParams(n,e),null!==e.buffer&&i.push(e.buffer),t._formatCmd(e.id,"nicklist",i)},t.formatInput=function(e){var n={id:null},i=[];return e=t._mergeParams(n,e),i.push(e.buffer),i.push(e.data),t._formatCmd(e.id,"input",i)},t._formatSyncDesync=function(e,n){var i={id:null,buffers:null,options:null},r=[];return n=t._mergeParams(i,n),null!==n.buffers&&(r.push(n.buffers.join(",")),null!==n.options&&r.push(n.options.join(","))),t._formatCmd(n.id,e,r)},t.formatSync=function(e){return t._formatSyncDesync("sync",e)},t.formatDesync=function(e){return t._formatSyncDesync("desync",e)},t.formatTest=function(e){var n={id:null},i=[];return e=t._mergeParams(n,e),t._formatCmd(e.id,"test",i)},t.formatQuit=function(){return t._formatCmd(null,"quit",[])},t.formatPing=function(e){var n={id:null,args:null},i=[];return e=t._mergeParams(n,e),null!==e.args&&i.push(e.args.join(" ")),t._formatCmd(e.id,"ping",i)},t.prototype={_warnUnimplemented:function(e){console.log("Warning: "+e+" message parsing is not implemented")},_getType:function(){var e=this._getSlice(3);return e?t._uia2s(new Uint8Array(e)):null},_runType:function(e){var t=this._types[e],n=t.bind(this);return n()},_getStrNumber:function(){var e=this._getByte(),n=this._getSlice(e);return t._uia2s(new Uint8Array(n))},_strDirect:function(e){return e},_strToString:function(e){return e.toString()},_objToString:function(e,t){var n=this._typesStr[t],i=n.bind(this);return i(e)},_getInfo:function(){var e={};return e.key=this._getString(),e.value=this._getString(),e},_getHdata:function(){function e(){var e={};e.pointers=t.map(function(){return i._getPointer()}),a.forEach(function(t){e[t[0]]=i._runType(t[1])}),r.push(e)}var t,n,i=this,r=[],o=this._getString(),a=this._getString().split(",");t=o.split("/"),n=this._getInt(),a=a.map(function(e){return e.split(":")});for(var c=0;n>c;c++)e();return r},_getPointer:function(){return this._getStrNumber()},_getTime:function(){var e=this._getStrNumber();return new Date(1e3*parseInt(e,10))},_getInt:function(){var e=new Uint8Array(this._getSlice(4));return(255&e[0])<<24|(255&e[1])<<16|(255&e[2])<<8|255&e[3]},_getByte:function(){var e=new Uint8Array(this._getSlice(1));return e[0]},_getChar:function(){return this._getByte()},_getString:function(){var e=this._getInt();if(e>0){var n=this._getSlice(e),i=new Uint8Array(n);return t._uia2s(i)}return""},_getHeader:function(){var e=this._getInt(),t=this._getByte();return{length:e,compression:t}},_getId:function(){return this._getString()},_getObject:function(){var e=this,t=this._getType();return t?{type:t,content:e._runType(t)}:void 0},_getHashTable:function(){var e,t,n,i=this,r={};e=this._getType(),t=this._getType(),n=this._getInt();for(var o=0;n>o;++o){var a=i._runType(e),c=i._objToString(a,e),s=i._runType(t);r[c]=s}return r},_getArray:function(){var e,t,n,i=this;e=this._getType(),t=this._getInt(),n=[];for(var r=0;t>r;r++)n.push(i._runType(e));return n},_getSlice:function(e){if(this.dataAt+e>this._data.byteLength)return null;var t=this._data.slice(this._dataAt,this._dataAt+e);return this._dataAt+=e,t},_setData:function(e){this._data=e},setId:function(e,t){return"("+e+") "+t},parse:function(e){var t=this;this._setData(e),this._dataAt=0;var n=this._getHeader();if(n.compression){var i=new Uint8Array(e,5),r=new Zlib.Inflate(i),o=r.decompress();this._setData(o.buffer),this._dataAt=0}for(var a=this._getId(),c=[],s=this._getObject();s;)c.push(s),s=t._getObject();var u={header:n,id:a,objects:c};return u}},e.Protocol=t}()}("undefined"==typeof exports?this.weeChat={}:exports),function(){"use strict";var e=angular.module("IrcUtils",[]);e.service("IrcUtils",[function(){var e=function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},t=function(e){var t=_(e).sortBy(function(e){return-e.spokeAt});return t=_(t).pluck("name")},n=function(e,t){var n=null;return t.some(function(t){return 0===t.toLowerCase().search(e.toLowerCase())?(n=t,!0):!1}),n},i=function(t,n,i){for(var r=[],o=null,a=t.toLowerCase(),c=n.toLowerCase(),s=0;s0;)e=n.pop(),e.$$watchers&&(i+=e.$$watchers.length),e.$$childHead&&n.push(e.$$childHead),e.$$nextSibling&&n.push(e.$$nextSibling);o.debug(i)},n.isinstalled=function(){return void 0===navigator.mozApps?!1:void(navigator.mozApps.getSelf().onsuccess=function(e){var t=e.target.result;return t?!0:!1})}(),function(){"undefined"!=typeof document.hidden?(n.documentHidden="hidden",n.documentVisibilityChange="visibilitychange"):"undefined"!=typeof document.webkitHidden?(n.documentHidden="webkitHidden",n.documentVisibilityChange="webkitvisibilitychange"):"undefined"!=typeof document.mozHidden?(n.documentHidden="mozHidden",n.documentVisibilityChange="mozvisibilitychange"):"undefined"!=typeof document.msHidden&&(n.documentHidden="msHidden",n.documentVisibilityChange="msvisibilitychange")}(),function(){window.location.search.substring(1).split("&").forEach(function(e){var n=e.split("=");"debug"===n[0]&&-1!=["true","1"].indexOf(n[1])&&(t.debugMode=!0)}),t.debugMode&&!e.compileProvider.debugInfoEnabled()&&angular.reloadWithDebugInfo()}(),t.isWindowFocused=function(){if("undefined"==typeof n.documentHidden)return!0;var e=document[n.documentHidden];return!e},"undefined"!=typeof n.documentVisibilityChange&&document.addEventListener(n.documentVisibilityChange,function(){if(!document[n.documentHidden]){var e=a.getActiveBuffer();null!==e&&(e.unread=0,e.notification=0,t.$emit("notificationChanged")),t.$apply()}},!1),t.$on("activeBufferChanged",function(e,i){var o=a.getActiveBuffer(),f=o.lines.length-i+5,d=o.lines.length-(2*n.lines_per_screen+10),m=Math.min(f,d);if(m>0&&(o.lines.splice(0,m),o.requestedLines-=m,o.lastSeen-=m,o.allLinesFetched=!1),n.bufferlines=o.lines,n.nicklist=o.nicklist,o.nicklistRequested()?n.showNicklist=n.updateShowNicklist():c.requestNicklist(o.fullName,function(){n.showNicklist=n.updateShowNicklist(),t.scrollWithBuffer(!0)}),o.requestedLinesh&&(h=Math.min(4*h,i)),n.fetchMoreLines(h).then(function(){r(function(){var e=document.getElementById("bufferlines"),n=e.scrollHeight,i=function(){if(e){var r=e.scrollHeight;r!==n&&(t.updateBufferBottom(t.bufferBottom),n=r),setTimeout(i,500)}};t.updateBufferBottom(!0),t.scrollWithBuffer(!0),e.onscroll=_.debounce(function(){t.updateBufferBottom()},80),setTimeout(i,500)})})}s.updateTitle(o),n.notifications=s.unreadCount("notification"),n.unread=s.unreadCount("unread"),r(function(){t.scrollWithBuffer(!0)}),n.search="",u.isMobileUi()||setTimeout(function(){document.getElementById("sendMessage").focus()},0),l.hotlistsync&&o.fullName&&c.sendHotlistClear()}),t.favico=new Favico({animation:"none"}),n.notifications=s.unreadCount("notification"),n.unread=s.unreadCount("unread"),t.$on("notificationChanged",function(){s.updateTitle(),n.notifications=s.unreadCount("notification"),n.unread=s.unreadCount("unread"),l.useFavico&&t.favico&&s.updateFavico()}),t.$on("relayDisconnect",function(){t.pageTitle="",t.notificationStatus="",s.cancelAll(),a.reinitialize(),t.$emit("notificationChanged"),n.connectbutton="Connect"}),n.connectbutton="Connect",n.getBuffers=a.getBuffers.bind(a),n.bufferlines={},n.nicklist={},n.activeBuffer=a.getActiveBuffer,t.connected=!1,t.waseverconnected=!1,t.userdisconnect=!1,t.reconnecting=!1,t.models=a,t.iterCandidate=null,l.savepassword?(n.$watch("password",function(){l.password=n.password}),l.addCallback("password",function(e){n.password=e}),n.password=l.password):l.password="",l.addCallback("savepassword",function(){l.savepassword&&(l.setDefaults({password:n.password}),l.password=n.password)}),t.wasMobileUi=!1,u.isMobileUi()&&(t.wasMobileUi=!0),l.fontfamily||(l.fontfamily=u.isMobileUi()?"sans-serif":"Inconsolata, Consolas, Monaco, Ubuntu Mono, monospace"),n.isSidebarVisible=function(){return"visible"===document.getElementById("content").getAttribute("sidebar-state")},n.showSidebar=function(){document.getElementById("sidebar").setAttribute("data-state","visible"),document.getElementById("content").setAttribute("sidebar-state","visible"),u.isMobileUi()&&_.each(document.getElementsByTagName("textarea"),function(e){r(function(){e.blur()})})},t.hideSidebar=function(){u.isMobileUi()&&(document.getElementById("sidebar").setAttribute("data-state","hidden"),document.getElementById("content").setAttribute("sidebar-state","hidden"))},l.addCallback("autoconnect",function(e){!e||t.connected||t.sslError||t.securityError||t.errorMessage||n.connect()}),n.toggleSidebar=function(){u.isMobileUi()&&(n.isSidebarVisible()?n.hideSidebar():n.showSidebar())},n.openNick=function(){u.isMobileUi()&&l.nonicklist&&(l.nonicklist=!1)},n.closeNick=function(){u.isMobileUi()&&(l.nonicklist||(l.nonicklist=!0))},l.addCallback("orderbyserver",function(e){t.predicate=e?"serverSortKey":"number"}),l.addCallback("useFavico",function(e){t.connected&&(e?s.updateFavico():t.favico.reset())}),l.addCallback("enableMathjax",function(e){e&&!t.mathjax_init&&(t.mathjax_init=!0,function(){var e,t=document.getElementsByTagName("head")[0];e=document.createElement("script"),e.type="text/x-mathjax-config",e[window.opera?"innerHTML":"text"]="MathJax.Hub.Config({\n tex2jax: { inlineMath: [['$$','$$'], ['\\\\(','\\\\)']], displayMath: [['\\\\[','\\\\]']] },\n});",t.appendChild(e),e=document.createElement("script"),e.type="text/javascript",e.src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",t.appendChild(e)}())}),l.addCallback("theme",function(e){var t=document.getElementById("themeCSS");t&&t.parentNode.removeChild(t),function(){var t=document.createElement("link");t.rel="stylesheet",t.href="css/themes/"+e+".css",t.media="screen",t.id="themeCSS",document.getElementsByTagName("head")[0].appendChild(t)}()}),l.addCallback("fontfamily",function(e){u.changeClassStyle("favorite-font","fontFamily",e)}),l.addCallback("fontsize",function(e){u.changeClassStyle("favorite-font","fontSize",e)}),n.setActiveBuffer=function(e,t){return u.isMobileUi()&&n.hideSidebar(),a.version[0]>=1&&c.sendHotlistClear(),a.setActiveBuffer(e,t)},n.openBuffer=function(e){var t=a.getActiveBuffer().fullName;if(t=t.substring(0,t.lastIndexOf(".")+1)+e,!n.setActiveBuffer(t,"fullName")){var i="join -noswitch";["#","&","+","!"].indexOf(e.charAt(0))<0&&(i="query",(1==a.version[0]&&a.version[1]>=2||a.version[1]>1)&&(i+=" -noswitch")),c.sendMessage("/"+i+" "+e)}},n.calculateNumLines=function(){for(var e=document.querySelectorAll(".bufferline"),t=0,i=0;0===t&&ir||Math.abs(r-o)<3){var a=document.querySelector(".readmarker");if(e&&a)i.scrollTop=a.offsetTop-a.parentElement.scrollHeight+a.scrollHeight;else if(n)i.scrollTop=i.scrollHeight-i.clientHeight-o;else{var c=document.getElementById("end-of-buffer");c.scrollIntoView()}t.updateBufferBottom()}};r(a),window.requestAnimationFrame(a)},n.connect=function(){s.requestNotificationPermission(),t.sslError=!1,t.securityError=!1,t.errorMessage=!1,t.bufferBottom=!0,n.connectbutton="Connecting ...",c.connect(l.host,l.port,n.password,l.ssl)},n.disconnect=function(){n.connectbutton="Connect",c.disconnect()},n.reconnect=function(){var e=a.getActiveBuffer().id;c.attemptReconnect(e,3e3)},n.install=function(){if(void 0!==navigator.mozApps){var e=location.protocol+"//"+location.host+location.pathname.replace(/\/(index\.html)?$/,""),t=navigator.mozApps.install(e+"/manifest.webapp");t.onsuccess=function(){n.isinstalled=!0;var e=this.result;e.launch(),alert("Installation successful!")},t.onerror=function(){alert("Install failed, error: "+this.error.name)}}else alert("Sorry. Only supported in Firefox v26+")},n.showModal=function(e){document.getElementById(e).setAttribute("data-state","visible")},n.closeModal=function(e){function t(e,t){for(var n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector;e;){if(n.call(e,t))return e;e=e.parentElement}}t(e.target,".gb-modal").setAttribute("data-state","hidden")},n.toggleAccordion=function(e){e.stopPropagation(),e.preventDefault();var t=e.target.parentNode.parentNode.parentNode;t.setAttribute("data-state","active"===t.getAttribute("data-state")?"collapsed":"active");var n=t.parentNode.children;for(var i in n){var r=n[i];1===r.nodeType&&r!==t&&r.setAttribute("data-state","collapsed")}},n.hasUnread=function(e){return n.search&&""!==n.search?!0:l.onlyUnread?a.getActiveBuffer()===e?!0:"core.weechat"===e.fullName||l.orderbyserver&&"server"===e.type?!0:(e.unread>0||e.notification>0)&&!e.hidden:!e.hidden},l.addCallback("nonicklist",function(){n.showNicklist=n.updateShowNicklist(),t.connected&&t.bufferBottom&&r(function(){t.updateBufferBottom(!0)},500)}),n.showNicklist=!1,n.updateShowNicklist=function(){var e=a.getActiveBuffer();return e?l.nonicklist?!1:e.isNicklistEmpty()?!1:!0:!1},t.switchToActivityBuffer=function(){var e,t,i=_.sortBy(n.getBuffers(),"number");for(e in i)if(t=i[e],t.notification>0)return void n.setActiveBuffer(t.id);for(e in i)if(t=i[e],t.unread>0)return void n.setActiveBuffer(t.id)},t.toggleNicklist=function(){l.nonicklist=!l.nonicklist},n.handleSearchBoxKey=function(e){var t=e.keyCode?e.keyCode:e.charCode;27===t?(e.preventDefault(),n.search=""):13===t&&(e.preventDefault(),n.filteredBuffers.length>0&&n.setActiveBuffer(n.filteredBuffers[0].id),n.search="")},window.onbeforeunload=function(e){null!==n.command&&""!==n.command?(e.preventDefault(),e.returnValue="Any unsent input will be lost. Are you sure that you want to quit?"):(t.connected&&n.disconnect(),n.favico.reset())},n.init=function(){if(window.location.hash){var e=atob(window.location.hash.substring(1));window.location.hash="";var i=e.split(":"),r=i[0],o=parseInt(i[1]),a=i[2],u=i.length>3;s.requestNotificationPermission(),t.sslError=!1,t.securityError=!1,t.errorMessage=!1,t.bufferBottom=!0,n.connectbutton="Connecting ...",c.connect(r,o,a,u)}}}]),e.config(["$routeProvider",function(e){e.when("/",{templateUrl:"index.html",controller:"WeechatCtrl"})}])}(),function(){"use strict";var e=angular.module("weechat");e.factory("settings",["$store","$rootScope",function(e,t){var n=this;this.callbacks={},this.cache={};var i=function(i){Object.defineProperty(n,i,{enumerable:!0,key:i,get:function(){return i in this.cache||(this.cache[i]=e.get(i)),this.cache[i]},set:function(r){this.cache[i]=r,e.set(i,r);for(var o=n.callbacks[i],a=0;void 0!==o&&a0?"("+t+") ":"";var i=n.getActiveBuffer();i&&(e.pageTitle=i.shortName+" | "+i.rtitle)},s=function(){var t=a("notification");if(t>0)e.favico.badge(t,{bgColor:"#d00",textColor:"#fff"});else{var n=a("unread");0===n?e.favico.reset():e.favico.badge(n,{bgColor:"#5CB85C",textColor:"#ff0"})}},u=function(e,t){var o="",a="",c=e.notification;if(["#","&","+","!"].indexOf(e.shortName.charAt(0))<0)o=c>1?c.toString()+" private messages from ":"Private message from ",a=t.text;else{o=c>1?c.toString()+" highlights in ":"Highlight in ";for(var s="",u=0;u "+t.text}o+=e.shortName,o+=e.fullName.replace(/irc.([^\.]+)\..+/," ($1)");var l=new Notification(o,{body:a,icon:"assets/img/favicon.png"});l.id=r.length,r.push(l);var f=15e3;if(l.onshow=function(){setTimeout(function(){l.close()},f)},l.onclick=function(){n.setActiveBuffer(e.id),window.focus(),l.close()},l.onclose=function(){delete r[this.id]},i.soundnotification){var d="assets/audio/sonar",m='';document.getElementById("soundNotification").innerHTML=m}},l=function(){for(;r.length>0;){var e=r.pop();void 0!==e&&e.close()}};return{requestNotificationPermission:o,updateTitle:c,updateFavico:s,createHighlight:u,cancelAll:l,unreadCount:a}}]),function(){"use strict";var e=angular.module("weechat");e.filter("toArray",function(){return function(e,t){return e instanceof Object?Object.keys(e).map(t?function(t,n){return Object.defineProperties(e[t],{$key:{value:t},$idx:{value:n,configurable:!0}})}:function(t){return Object.defineProperty(e[t],"$key",{value:t})}):e}}),e.filter("irclinky",function(){return function(e){if(!e)return e;var t=/(^|[\s,.:;?!"'()+@-\~%])(#+[^\x00\x07\r\n\s,:]*[a-z][^\x00\x07\r\n\s,:]*)/gim,n='$1$2';return e.replace(t,n)}}),e.filter("inlinecolour",function(){return function(e){if(!e)return e;var t=/(^|[^&])(\#[0-9a-f]{6};?)(?!\w)/gim,n=/(.?)(rgba?\((?:\s*\d+\s*,){2}\s*\d+\s*(?:,\s*[\d.]+\s*)?\);?)/gim,i='$1$2
      ';return e=e.replace(t,i),e=e.replace(n,i)}}),e.filter("DOMfilter",["$filter","$sce",function(e,t){return function(n,i){if(!n||!i)return n;var r=function(e){var t={"<":"<",">":">",'"':""","'":"'","&":"&","/":"/"};return e.replace(/[<>"'&\/]/g,function(e){return t[e]})},o=arguments.length>2?arguments[2]:null,a=arguments.length>3?arguments[3]:null,c=e(i),s=document.createElement("div");s.innerHTML=n;var u=function(e){if(3===e.nodeType){var t=r(e.nodeValue),n=c(t,o,a);if(n!==t){var i=document.createElement("span");i.innerHTML=n;var s=e.parentNode,l=e.nextSibling;return s.removeChild(e),l?s.insertBefore(i,l):s.appendChild(i),i}}if(void 0!==e&&null!==e)for(e=e.firstChild;e;){var f=u(e);e=(f?f:e).nextSibling}};return u(s),t.trustAsHtml(s.innerHTML)}}]),e.filter("getBufferQuickKeys",function(){return function(e,t){return t?(void 0!==t.search&&t.search.length||t.onlyUnread?e.forEach(function(e,t){e.$quickKey=10>t?(t+1)%10:""}):_.map(e,function(e,t){return[e.number,e.$idx,t]}).sort(function(e,t){return e[0]-t[0]||e[1]-t[1]}).forEach(function(t,n){e[t[2]].$quickKey=10>n?(n+1)%10:""}),e):e}}),e.filter("emojify",function(){return function(e,t){return t===!0&&void 0!==window.emojione?emojione.unicodeToImage(e):e}}),e.filter("mathjax",function(){return function(e,t,n){if(!n||"undefined"==typeof MathJax)return e;if(-1!=e.indexOf("$$")||-1!=e.indexOf("\\[")||-1!=e.indexOf("\\(")){var i=document.querySelector(t);MathJax.Hub.Queue(["Typeset",MathJax.Hub,i])}return e}}),e.filter("prefixlimit",function(){return function(e,t){return isNaN(t)?e:0>=t?"":e&&e.length>t?(e=e.substring(0,t),e+"+"):e}})}(),function(){"use strict";var e=angular.module("weechat");e.factory("handlers",["$rootScope","$log","models","plugins","notifications",function(e,t,n,i,r){var o=function(e){var t=e.objects[0].content,i=t.value;n.version=i.split(".").map(function(e){return parseInt(e)})},a=function(e){var t=e.objects[0].content[0],i=t.pointers[0];n.closeBuffer(i)},c=function(t,o){var a=new n.BufferLine(t),c=n.getBuffer(a.buffer);c.requestedLines++,a.displayed&&(a=i.PluginManager.contentForMessage(a),c.addLine(a),o&&c.lastSeen++,c.active&&!o&&e.scrollWithBuffer(),o||c.active&&e.isWindowFocused()||(c.notify>1&&_.contains(a.tags,"notify_message")&&!_.contains(a.tags,"notify_none")&&(c.unread++,e.$emit("notificationChanged")),(0!==c.notify&&a.highlight||_.contains(a.tags,"notify_private"))&&(c.notification++,r.createHighlight(c,a),e.$emit("notificationChanged"))))},s=function(e){for(var t=e.objects[0].content,i=0;i=0),void 0!==t.notify&&(e.notify=t.notify))},l=function(e){e.objects[0].content.forEach(function(e){c(e,!1)})},f=function(e){var t=e.objects[0].content[0],i=new n.Buffer(t);n.addBuffer(i)},d=function(e){var t=e.objects[0].content[0],i=t.pointers[0],r=n.getBuffer(i);r.fullName=t.full_name,r.title=n.parseRichText(t.title),r.number=t.number,r.rtitle="";for(var o=0;o=0?t.short_name.charAt(0):"";var o=n.outgoingQueries.indexOf(r.shortName);o>=0&&(n.outgoingQueries.splice(o,1),n.setActiveBuffer(r.id))},h=function(e){var t=e.objects[0].content[0],i=t.pointers[0],r=n.getBuffer(i);r.hidden=!0},g=function(e){var t=e.objects[0].content[0],i=t.pointers[0],r=n.getBuffer(i);r.hidden=!1},p=function(e){var t=e.objects[0].content[0],i=t.pointers[0],r=n.getBuffer(i),o=t.local_variables; -void 0!==r&&void 0!==o&&(r.type=o.type,r.indent=["channel","private"].indexOf(o.type)>=0)},v=function(e,t){var n=e.objects[0].content.reverse();void 0===t&&(t=!0),n.forEach(function(e){c(e,t)})},b=function(e){if(0!==e.objects.length){var t=e.objects[0].content;t.forEach(function(e){var t=n.getBuffer(e.buffer);t.unread+=e.count[1],t.notification+=e.count[2],t.notification+=e.count[3];var i=_.reduce(e.count,function(e,t){return e+t},0);t.lastSeen=t.lines.length-1-i})}},y=function(e){var t=e.objects[0].content,i="root";t.forEach(function(e){var t=n.getBuffer(e.pointers[0]);if(1===e.group){var r=new n.NickGroup(e);i=r.name,t.nicklist[i]=r}else{var o=new n.Nick(e);t.addNick(i,o)}})},w=function(e){var t,i=e.objects[0].content;i.forEach(function(e){var i=n.getBuffer(e.pointers[0]),r=e._diff;if(1===e.group){if(t=e.name,void 0===t){var o=new n.NickGroup(e);i.nicklist[t]=o,t=o.name}}else{var a=new n.Nick(e);43===r?i.addNick(t,a):45===r?i.delNick(t,a):42===r&&i.updateNick(t,a)}})},C={_buffer_closing:a,_buffer_line_added:l,_buffer_localvar_added:p,_buffer_localvar_removed:p,_buffer_localvar_changed:p,_buffer_opened:f,_buffer_title_changed:d,_buffer_renamed:m,_buffer_hidden:h,_buffer_unhidden:g,_nicklist:y,_nicklist_diff:w};e.$on("onMessage",function(e,n){_.has(C,n.id)?C[n.id](n):t.debug("Unhandled event received: "+n.id)});var k=function(e){_.has(C,e.id)&&C[e.id](e)};return{handleVersionInfo:o,handleEvent:k,handleLineInfo:v,handleHotlistInfo:b,handleNicklist:y,handleBufferInfo:s}}])}(),function(){"use strict";var e=angular.module("weechat");e.factory("connection",["$rootScope","$log","handlers","models","ngWebsockets",function(e,t,n,i,r){var o,a=new weeChat.Protocol,c=[],s=function(i,o,s,u,f,d,m){c=[i,o,s,u,f];var h=u?"wss":"ws";-1!==i.indexOf(":")&&(i="["+i+"]");var g=h+"://"+i+":"+o+"/weechat";t.debug("Connecting to URL: ",g);var p=function(){var i=function(e){return r.send(weeChat.Protocol.formatInit({password:e,compression:f?"off":"zlib"})),r.send(weeChat.Protocol.formatInfo({name:"version"}))},o=function(){return r.send(weeChat.Protocol.formatHdata({path:"hotlist:gui_hotlist(*)",keys:[]}))},a=function(){return r.send(weeChat.Protocol.formatHdata({path:"buffer:gui_buffers(*)",keys:["local_variables,notify,number,full_name,short_name,title,hidden"]}))},c=function(){return r.send(weeChat.Protocol.formatSync({}))};i(s).then(function(i){n.handleVersionInfo(i),a().then(function(e){n.handleBufferInfo(e)}),o().then(function(e){n.handleHotlistInfo(e),d&&d()}),c(),t.info("Connected to relay"),e.connected=!0},function(){e.waseverconnected||(e.passwordError=!0)})},v=function(){e.waseverconnected=!0},b=function(n){t.info("Disconnected from relay"),e.userdisconnect||!e.waseverconnected?(y(n),e.userdisconnect=!1):l(n)},y=function(t){u&&t&&1006===t.code&&"undefined"!=typeof e.lastError&&Date.now()-e.lastError<1e3&&(e.sslError=!0,e.$apply())},_=function(n){t.error("Relay error",n),e.lastError=Date.now(),"error"===n.type&&1!==this.readyState&&(r.failCallbacks("error"),e.errorMessage=!0)};try{r.connect(g,a,{binaryType:"arraybuffer",onopen:p,onclose:b,onmessage:v,onerror:_})}catch(n){t.debug("Websocket caught DOMException:",n),e.lastError=Date.now(),e.errorMessage=!0,e.securityError=!0,e.$emit("relayDisconnect"),m&&m()}},u=function(n,r){t.info("Attempting to reconnect...");var a=c;s(a[0],a[1],a[2],a[3],a[4],function(){e.reconnecting=!1,i.setActiveBuffer(n),t.info("Sucessfully reconnected to relay")},function(){r>=6e5?(t.info("Failed to reconnect, giving up"),handleClose()):(t.info("Failed to reconnect, scheduling next attempt in",r/1e3,"seconds"),void 0!==o&&clearTimeout(o),o=setTimeout(function(){u(n,1.5*r)},r))})},l=function(){if(c.length<5)return void t.error("Cannot reconnect, connection information is missing");i.reinitialize(),e.reconnecting=!0,e.$apply();var n=i.getActiveBuffer().id,r=3e3;o=setTimeout(function(){u(n,r)},r)},f=function(){t.info("Disconnecting from relay"),e.userdisconnect=!0,r.send(weeChat.Protocol.formatQuit());setTimeout(function(){r.disconnect(),r.failCallbacks("disconnection"),e.connected=!1,e.$emit("relayDisconnect"),e.$apply()})},d=function(e){r.send(weeChat.Protocol.formatInput({buffer:i.getActiveBufferReference(),data:e}))},m=function(e){r.send(weeChat.Protocol.formatInput({buffer:"core.weechat",data:e}))},h=function(){i.version[0]>=1?(d("/buffer set hotlist -1"),d("/input set_unread_current_buffer")):m("/buffer "+i.getActiveBuffer().fullName)},g=function(e,t){e=e||null,r.send(weeChat.Protocol.formatNicklist({buffer:e})).then(function(e){n.handleNicklist(e),void 0!==t&&t()})},p=function(o){t.debug("Fetching ",o," lines");var a=i.getActiveBuffer();return void 0===o&&(o=0),o=Math.max(o,2*a.requestedLines),e.loadingLines=!0,r.send(weeChat.Protocol.formatHdata({path:"buffer:0x"+a.id+"/own_lines/last_line(-"+o+")/data",keys:[]})).then(function(t){var i=a.lines.length,r=a.lastSeen>=0;a.lines.length=0,a.requestedLines=0;var c=t.objects[0].content.length;n.handleLineInfo(t,!0),a.lastSeen-=i,o>c&&(a.allLinesFetched=!0),e.loadingLines=!1;var s=!r&&a.lastSeen>=0;e.scrollWithBuffer(s,!0)})};return{connect:s,disconnect:f,sendMessage:d,sendCoreCommand:m,sendHotlistClear:h,fetchMoreLines:p,requestNicklist:g,attemptReconnect:u}}])}(),function(){"use strict";var e=angular.module("weechat");e.directive("inputBar",function(){return{templateUrl:"directives/input.html",scope:{inputId:"@inputId",command:"=command"},controller:["$rootScope","$scope","$element","$log","connection","models","IrcUtils","settings",function(e,t,n,i,r,o,a,c){t.inputChanged=function(){t.command=emojione.shortnameToUnicode(t.command)},t.getInputNode=function(){return document.querySelector("textarea#"+t.inputId)},t.hideSidebar=function(){e.hideSidebar()},t.completeNick=function(){var e=t.getInputNode(),n=e.selectionStart,i=o.getActiveBuffer(),r=t.command||"",c=a.completeNick(r,n,t.iterCandidate,i.getNicklistByTime(),":");t.iterCandidate=c.iterCandidate,t.command=c.text,setTimeout(function(){e.focus(),e.setSelectionRange(c.caretPos,c.caretPos)},0)},t.sendMessage=function(){var e=o.getActiveBuffer();if(void 0!==t.command&&""!==t.command){e.addToHistory(t.command),_.each(t.command.split(/\r?\n/),function(e){("/quit"!==e&&0!==e.indexOf("/quit ")||window.confirm("Are you sure you want to quit WeeChat? This will prevent you from connecting with Glowing Bear until you restart WeeChat on the command line!"))&&r.sendMessage(e)}),("/buffer clear"===t.command||"/c"===t.command)&&(i.debug("Clearing lines"),e.clear());var n=["/query","/join","/j","/q"],a=t.command.indexOf(" "),c=t.command.substr(0,a),s=n.indexOf(c);if(s>=0){var u=t.command.substring(a+1);o.outgoingQueries.push(u)}t.command=""}o.version[0]>=1&&r.sendHotlistClear(),t.getInputNode().focus()},e.addMention=function(e){var n=e[e.length-1].text,i=t.command||"",r=0===i.length;if(i.length>0){var a=i.trim();if(":"===a.charAt(a.length-1)){var c=a.lastIndexOf(" ")+1,s=a.slice(c,a.length-1),u=o.getActiveBuffer().getNicklistByTime();for(var l in u)if(u[l].name===s){i=i.slice(0,i.lastIndexOf(":"))+" ",r=!0;break}}" "!==i.charAt(i.length-1)&&(i+=" ")}i+=n,r&&(i+=": "),t.command=i,t.getInputNode().focus()},e.handleKeyPress=function(n){if(!e.connected)return!0;var i=t.getInputNode(),a=n.keyCode?n.keyCode:n.charCode,s=n.getModifierState?n.getModifierState("AltGraph"):!1;if(s)return!1;e.showQuickKeys=!1;var u=t.iterCandidate;if(t.iterCandidate=null,n.altKey&&!n.ctrlKey&&a>47&&58>a){48===a&&(a=58);var l,f=a-48-1;if((t.$parent.search.length||t.$parent.onlyUnread)&&t.$parent.filteredBuffers.length){var d=t.$parent.filteredBuffers[f];void 0!==d&&(l=[d.number,d.id])}else{var m=_.map(o.getBuffers(),function(e){return[e.number,e.id]}).sort(function(e,t){return e[0]-t[0]});l=m[f]}l&&(t.$parent.setActiveBuffer(l[1]),n.preventDefault())}if(9===a&&!n.altKey&&!n.ctrlKey)return n.preventDefault(),t.iterCandidate=u,t.completeNick(),!0;if(n.altKey&&!n.ctrlKey&&78===a)return n.preventDefault(),e.toggleNicklist(),!0;if(n.altKey&&(97===a||65===a))return n.preventDefault(),e.switchToActivityBuffer(),!0;if(n.altKey&&(76===a||108===a))return n.preventDefault(),i.focus(),i.setSelectionRange(t.command.length,t.command.length),!0;if(n.altKey&&(60===a||226===a)){var h=o.getPreviousBuffer();if(h)return o.setActiveBuffer(h.id),n.preventDefault(),!0}if(27===a){n.preventDefault();for(var g=document.querySelectorAll(".gb-modal"),p=0;p=0;y--)if(b[y].offsetTop-w.scrollTopw.clientHeight/2){b[y].scrollIntoView(!0);break}return!0}if(c.readlineBindings&&n.ctrlKey&&!n.altKey&&!n.shiftKey&&document.activeElement===i){if(v=i.selectionStart,65==a)i.setSelectionRange(0,0);else if(69==a)i.setSelectionRange(t.command.length,t.command.length);else if(85==a)t.command=t.command.slice(v),setTimeout(function(){i.setSelectionRange(0,0)});else if(75==a)t.command=t.command.slice(0,v),setTimeout(function(){i.setSelectionRange(t.command.length,t.command.length)});else{if(87!=a)return!1;var C=t.command.slice(0,v),k=C.lastIndexOf(" ")+1;t.command=t.command.slice(0,k)+t.command.slice(v,t.command.length),setTimeout(function(){i.setSelectionRange(k,k)})}return n.preventDefault(),!0}"keydown"!==n.type||18!==a||n.ctrlKey||n.shiftKey||(e.showQuickKeys=!0)},e.handleKeyRelease=function(t){return 18===t.keyCode?(void 0!==e.quickKeysTimer&&clearTimeout(e.quickKeysTimer),e.quickKeysTimer=setTimeout(function(){e.showQuickKeys&&(e.showQuickKeys=!1,e.$apply()),delete e.quickKeysTimer},1e3),!0):void 0}}]}})}(),function(){"use strict";var e=angular.module("weechat");e.directive("plugin",["$rootScope","settings",function(e,t){return{templateUrl:"directives/plugin.html",scope:{plugin:"=data"},controller:["$scope",function(n){n.displayedContent="",n.plugin.visible=!t.noembed&&!n.plugin.nsfw,n.plugin.className="embed_"+n.plugin.$$hashKey.replace(":","_"),n.plugin.getElement=function(){return document.querySelector("."+n.plugin.className)},n.hideContent=function(){n.plugin.visible=!1},n.showContent=function(t){var i=n.plugin.getElement();n.plugin.content instanceof Function?i&&""!==i.innerHTML||setTimeout(function(){n.plugin.content()}):n.displayedContent=n.plugin.content,n.plugin.visible=!0;var r;if(t){var o=e.bufferBottom;r=function(){e.updateBufferBottom(o)}}else r=function(){i&&void 0!==i.scrollIntoViewIfNeeded&&(i.scrollIntoViewIfNeeded(),e.updateBufferBottom())};setTimeout(r,500)},n.plugin.visible&&n.showContent(!0)}]}}])}(),function(){"use strict";var e=angular.module("ngWebsockets",[]);e.factory("ngWebsockets",["$rootScope","$q",function(e,t){var n=null,i=null,r={},o=0,a=function(e){for(var t in r)r[t].cb.reject(e)},c=function(){return o+=1,o>1e3&&(o=0),o},s=function(e){var t=u(e);return e=n.setId(t.id,e),i.send(e),t.promise},u=function(){var e=t.defer(),n=c();return r[n]={time:new Date,cb:e},e.id=n,e},l=function(e){var n=[];for(var i in e){var r=s(e[i]);n.push(r)}return t.all(n)},f=function(t){var i=n.parse(t.data);if(_.has(r,i.id)){var o=r[i.id];o.cb.resolve(i),delete r[i.id]}else e.$emit("onMessage",i);e.$apply()},d=function(e,t,r){i=new WebSocket(e),n=t;for(var o in r)i[o]=r[o];i.onmessage="onmessage"in r?function(e){r.onmessage(e),f(e)}:f},m=function(){i.close()};return{send:s,sendAll:l,connect:d,disconnect:m,failCallbacks:a}}])}(),function(){"use strict";var e=angular.module("weechatModels",[]);e.service("models",["$rootScope","$filter",function(e,t){function n(e,t){if(t in e&&e[t]&&e[t].length>0){var n=e[t];if(n.match(/^weechat/)){var i=n.match(/[a-zA-Z0-9_]+$/)[0];return["cof-"+i,"cob-"+i,"coa-"+i]}if(n.match(/^[a-zA-Z]+$/))return["cwf-"+n];if(n.match(/^[0-9]+$/))return["cef-"+n]}return["cwf-default"]}function i(e){return{name:n(e,"color"),prefix:n(e,"prefix_color")}}this.version=null,this.outgoingQueries=[];var r=function(e){var t=weeChat.Protocol.rawText2Rich(e),n={option:"cof-",weechat:"cwf-",ext:"cef-"},i={option:"cob-",weechat:"cwb-",ext:"ceb-"};return t.forEach(function(e){e.classes=[];var t=n[e.fgColor.type];e.classes.push(t+e.fgColor.name),t=i[e.bgColor.type],e.classes.push(t+e.bgColor.name),null!==e.attrs.name&&e.classes.push("coa-"+e.attrs.name);var r,o;for(r in e.attrs.override)o=e.attrs.override[r],e.classes.push(o?"a-"+r:"a-no-"+r)}),t};this.parseRichText=r,this.Buffer=function(e){var t=e.full_name,n=e.short_name,i=e.hidden,o=n.replace(/^[#&+]/,"")||(n?" ":null),a=["#","&","+"].indexOf(n.charAt(0))>=0?n.charAt(0):"",c=r(e.title),s=e.number,u=e.pointers[0],l=3,f=[],d=0,m={},h=[],g=0,p=0,v=0,b=-1,y=t.replace(/^irc\.server\.(\w+)/,"irc.$1"),w=e.local_variables.type,C=["channel","private"].indexOf(w)>=0;void 0!==e.notify&&(l=e.notify);for(var k="",x=0;x=h.length&&h.push(e),0>=g||g>=h.length)return e;g--;var t=h[g];return t},E=function(e){return g===h.length?(void 0!==e&&""!==e&&(h.push(e),g++),""):0>g||g>h.length?e:(g++,h.length>0&&g==h.length-1?h.pop():h[g])},H=function(){for(var e in m)if("root"!==e)return!1;return!0},j=function(){return m.hasOwnProperty("root")},D=function(){for(;f.length>0;)f.pop();d=0};return{id:u,fullName:t,shortName:n,hidden:i,trimmedName:o,prefix:a,number:s,title:c,rtitle:k,lines:f,clear:D,requestedLines:d,addLine:B,lastSeen:b,unread:v,notification:p,notify:l,nicklist:m,addNick:S,delNick:A,updateNick:N,getNicklistByTime:M,serverSortKey:y,indent:C,type:w,history:h,addToHistory:$,getHistoryUp:I,getHistoryDown:E,isNicklistEmpty:H,nicklistRequested:j}},this.BufferLine=function(e){var n=e.buffer,i=e.date,o=t("date")(i,"HH:mm"),a=r(e.prefix),c=e.tags_array,s=e.displayed,u=e.highlight,l=r(e.message);u&&a.forEach(function(e){e.classes.push("highlight")});for(var f="",d=0;d=1?"0x"+o.id:o.fullName},this.getPreviousBuffer=function(){return a},this.setActiveBuffer=function(t,n){if(void 0===n&&(n="id"),a=this.getActiveBuffer(),o="id"===n?this.model.buffers[t]:_.find(this.model.buffers,function(e){return e[n]===t?e:void 0}),void 0===o)return o=a,!1;a&&(a.active=!1,a.lastSeen=a.lines.length-1);var i=o.unread+o.notification;return o.active=!0,o.unread=0,o.notification=0,e.$emit("activeBufferChanged",i),e.$emit("notificationChanged"),!0},this.getBuffers=function(){return this.model.buffers},this.reinitialize=function(){this.model.buffers={}},this.getBuffer=function(e){return this.model.buffers[e]},this.closeBuffer=function(e){var t=this.getBuffer(e);if(void 0!==t){if(t.active){var n=_.keys(this.model.buffers)[0];this.setActiveBuffer(n)}delete this.model.buffers[e]}}}])}(),function(){"use strict";var e=angular.module("plugins",[]),t=function(e,t){return{contentForMessage:t,exclusive:!1,name:e}},n=/(?:ftp|https?):\/\/\S*[^\s.;,(){}<>]/g,i=function(e,t){return{contentForMessage:function(e){for(var i=e.match(n),r=[],o=0;i&&o=0;s--){var u=1==c.length?void 0:s+1;r(c[s],e[o].name,u)}else r(c,e[o].name);if(e[o].exclusive)break}}return n};return{registerPlugins:n,contentForMessage:r}};this.PluginManager=new n,this.PluginManager.registerPlugins(e.plugins)}]),e.factory("userPlugins",function(){var e=function(e,t){var n="jsonp_callback_"+Math.round(1e5*Math.random());window[n]=function(e){delete window[n],document.body.removeChild(i),t(e)};var i=document.createElement("script");i.src=e+(e.indexOf("?")>=0?"&":"?")+"callback="+n,document.body.appendChild(i)},n=new t("Spotify track",function(e){var t=[],n=function(e){for(var n=0;e&&n").attr("src","//embed.spotify.com/?uri=spotify:track:"+i).attr("width","300").attr("height","80").attr("frameborder","0").attr("allowtransparency","true");t.push(r.prop("outerHTML"))}};return n(e.match(/spotify:track:([a-zA-Z-0-9]{22})/g)),n(e.match(/open.spotify.com\/track\/([a-zA-Z-0-9]{22})/g)),t}),r=new i("YouTube video",function(e){var t=/(?:youtube.com|youtu.be)\/(?:v\/|embed\/|watch(?:\?v=|\/))?([a-zA-Z0-9-]+)/i,n=e.match(t);if(n){var i=n[1],r="https://www.youtube.com/embed/"+i+"?html5=1&iv_load_policy=3&modestbranding=1&rel=0&showinfo=0",o=angular.element("").attr("src",r).attr("width","560").attr("height","315").attr("frameborder","0").attr("allowfullscreen","true");return o.prop("outerHTML")}}),o=new t("Dailymotion video",function(e){var t=/dailymotion.com\/.*video\/([^_?# ]+)/,n=/dailymotion.com\/.*#video=([^_& ]+)/,i=/dai.ly\/([^_?# ]+)/,r=e.match(t)||e.match(n)||e.match(i);if(r){var o=r[1],a="https://www.dailymotion.com/embed/video/"+o+"?html&controls=html&startscreen=html&info=0&logo=0&related=0",c=angular.element("").attr("src",a).attr("width","480").attr("height","270").attr("frameborder","0");return c.prop("outerHTML")}return null}),a=new t("AlloCine video",function(e){var t=/allocine.fr\/videokast\/video-(\d+)/,n=/allocine.fr\/.*cmedia=(\d+)/,i=e.match(t)||e.match(n);if(i){var r=i[1],o="http://www.allocine.fr/_video/iblogvision.aspx?cmedia="+r,a=angular.element("").attr("src",o).attr("width","480").attr("height","270").attr("frameborder","0");return a.prop("outerHTML")}return null}),c=new i("image",function(e){return e.match(/\.(png|gif|jpg|jpeg)(:(small|medium|large))?\b/i)?(-1!=e.indexOf("^https?://fukung.net/v/")?e=e.replace(/.*\//,"http://media.fukung.net/imgs/"):e.match(/^http:\/\/(i\.)?imgur\.com\//i)?e=e.replace(/http:/,""):e.match(/^https:\/\/www\.dropbox\.com\/s\/[a-z0-9]+\/[^?]+$/i)&&(e+="?dl=1"),function(){var t=this.getElement(),n=angular.element("").attr("target","_blank").attr("href",e).append(angular.element("").addClass("embed").attr("src",e));t.innerHTML=n.prop("outerHTML")}):void 0}),s=new i("video",function(e){return e.match(/\.(mp4|webm|ogv)\b/i)?function(){var t=this.getElement(),n=angular.element("").addClass("embed").attr("width","560").append(angular.element("").attr("src",e));t.innerHTML=n.prop("outerHTML")}:void 0}),u=new i("cloud music",function(e){var t;return e.match(/^https?:\/\/soundcloud.com\//)?(t=angular.element("").attr("width","100%").attr("height","120").attr("scrolling","no").attr("frameborder","no").attr("src","https://w.soundcloud.com/player/?url="+e+"&color=ff6600&auto_play=false&show_artwork=true"),t.prop("outerHTML")):e.match(/^https?:\/\/([a-z]+\.)?mixcloud.com\//)?(t=angular.element("").attr("width","480").attr("height","60").attr("frameborder","0").attr("src","//www.mixcloud.com/widget/iframe/?feed="+e+"&mini=1&stylecolor=&hide_artwork=&embed_type=widget_standard&hide_tracklist=1&hide_cover="),t.prop("outerHTML")):void 0}),l=new i("Google Map",function(e){if(e.match(/^https?:\/\/maps\.google\./i)||e.match(/^https?:\/\/(?:[\w]+\.)?google\.[\w]+\/maps/i)){var t=angular.element("").attr("width","450").attr("height","350").attr("frameborder","0").attr("scrolling","no").attr("marginheight","0").attr("src",e+"&output=embed");return t.prop("outerHTML")}}),f=new i("ascii cast",function(e){var t=/^https?:\/\/(?:www\.)?asciinema.org\/a\/(\d+)/i,n=e.match(t);if(n){var i=n[1];return function(){var e=this.getElement(),t=document.createElement("script");t.src="https://asciinema.org/a/"+i+".js",t.id="asciicast-"+i,t.async=!0,e.appendChild(t)}}}),d=new i("meteogram",function(e){var t=/^https?:\/\/(?:www\.)?yr\.no\/(place|stad|sted|sadji|paikka)\/(([^\s.;,(){}<>\/]+\/){3,})/,n=e.match(t);return n?function(){var t=this.getElement(),i=n[1],r=n[2],o=n[n.length-1].slice(0,-1);e="http://www.yr.no/"+i+"/"+r+"avansert_meteogram.png";var a=angular.element("").attr("src",e).attr("alt","Meteogram for "+o);t.innerHTML=a.prop("outerHTML")}:void 0}),m=new i("Gist",function(t){var n=/^https:\/\/gist\.github.com\/[^.?]+/i,i=t.match(n);return i?(t=i[0]+".json",function(){var n=this.getElement();e(t,function(e){if(document.querySelectorAll('link[rel=stylesheet][href="'+e.stylesheet+'"]').length<1){var t='';document.getElementsByTagName("head")[0].innerHTML+=t}n.innerHTML='
      '+e.div+"
      "})}):void 0}),h=new i("Giphy",function(e){var t=/^https?:\/\/giphy.com\/gifs\/.*-(.*)\/?/i,n=e.match(t);if(n){var i="https://media.giphy.com/media/"+n[1]+"/giphy.gif";return function(){var t=this.getElement(),n=angular.element("").attr("target","_blank").attr("href",e).append(angular.element("").addClass("embed").attr("src",i));t.innerHTML=n.prop("outerHTML")}}}),g=new i("Tweet",function(t){var n=/^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)/i,i=t.match(n);return i?(t="https://api.twitter.com/1/statuses/oembed.json?id="+i[2],function(){var n=this.getElement();e(t,function(e){var t=e.html.indexOf("'}});return{plugins:[r,o,a,c,s,n,u,l,f,d,m,h,g,p]}})}(); +!function(){"use strict";var e=angular.module("localStorage",[]);e.factory("$store",["$parse",function(e){var t="undefined"==typeof window.localStorage?void 0:window.localStorage,n=!("undefined"==typeof t||"undefined"==typeof window.JSON);n||console.log("Warning: localStorage is not supported");var r={parseValue:function(e){var t;try{t=JSON.parse(e),void 0===t&&(t=e),"true"===t&&(t=!0),"false"===t&&(t=!1),parseFloat(t)!=t||angular.isObject(t)||(t=parseFloat(t))}catch(n){t=e}return t}},i={set:function(e,i){n||console.log("Local Storage not supported");var o=JSON.stringify(i);return t.setItem(e,o),r.parseValue(o)},get:function(e){if(!n)return null;var i=t.getItem(e);return r.parseValue(i)},remove:function(e){return n?(t.removeItem(e),!0):!1},enumerateKeys:function(){for(var e=[],n=0,r=t.length;r>n;++n)e.push(t.key(n));return e},bind:function(t,n,r){return void 0===r&&(r=""),void 0!==i.get(n)&&null!==i.get(n)||i.set(n,r),e(n).assign(t,i.get(n)),t.$watch(n,function(e){i.set(n,e)},!0),i.get(n)}};return i}])}(),function(e){"use strict";!function(){var t=function(){this._types={chr:this._getChar,int:this._getInt,str:this._getString,inf:this._getInfo,hda:this._getHdata,ptr:this._getPointer,lon:this._getStrNumber,tim:this._getTime,buf:this._getString,arr:this._getArray,htb:this._getHashTable,inl:this._getInfolist},this._typesStr={chr:this._strDirect,str:this._strDirect,int:this._strToString,tim:this._strToString,ptr:this._strDirect}};t._weeChatColorsNames=["default","black","darkgray","red","lightred","green","lightgreen","brown","yellow","blue","lightblue","magenta","lightmagenta","cyan","lightcyan","gray","white"],t._colorsOptionsNames=["separator","chat","chat_time","chat_time_delimiters","chat_prefix_error","chat_prefix_network","chat_prefix_action","chat_prefix_join","chat_prefix_quit","chat_prefix_more","chat_prefix_suffix","chat_buffer","chat_server","chat_channel","chat_nick","chat_nick_self","chat_nick_other","invalid","invalid","invalid","invalid","invalid","invalid","invalid","invalid","invalid","invalid","chat_host","chat_delimiters","chat_highlight","chat_read_marker","chat_text_found","chat_value","chat_prefix_buffer","chat_tags","chat_inactive_window","chat_inactive_buffer","chat_prefix_buffer_inactive_buffer","chat_nick_offline","chat_nick_offline_highlight","chat_nick_prefix","chat_nick_suffix","emphasis","chat_day_change"],t._getDefaultColor=function(){return{type:"weechat",name:"default"}},t._getDefaultAttributes=function(){return{name:null,override:{bold:!1,reverse:!1,italic:!1,underline:!1}}},t._getDefaultStyle=function(){return{fgColor:t._getDefaultColor(),bgColor:t._getDefaultColor(),attrs:t._getDefaultAttributes()}},t._cloneColor=function(e){var t={};for(var n in e)t[n]=e[n];return t},t._cloneAttrs=function(e){var t={};t.name=e.name,t.override={};for(var n in e.override)t.override[n]=e.override[n];return t},t._attrNameFromChar=function(e){var t={"*":"b","!":"r","/":"i",_:"u","":"b","":"r","":"i","":"u"};return e in t?t[e]:null},t._attrsFromStr=function(e){for(var n=t._getDefaultAttributes(),r=0;r16?t._getDefaultColor():{type:"weechat",name:t._weeChatColorsNames[n]}}var r=e.substring(1);return{type:"ext",name:parseInt(r).toString()}},t._getStyle=function(e){var n=[{regex:/^(\d{2})/,fn:function(e){var n={},r=parseInt(e[1]);if(r>=t._colorsOptionsNames.length)return{fgColor:null,bgColor:null,attrs:null};var i=t._colorsOptionsNames[r];return n.fgColor={type:"option",name:i},n.bgColor=t._cloneColor(n.fgColor),n.attrs={name:i,override:{}},n}},{regex:/^@(\d{5})/,fn:function(e){return{fgColor:null,bgColor:null,attrs:null}}},{regex:/^F(?:([*!\/_|]*)(\d{2})|@([\x01\x02\x03\x04*!\/_|]*)(\d{5}))/,fn:function(e){var n={bgColor:null};return e[2]?(n.attrs=t._attrsFromStr(e[1]),n.fgColor=t._getColorObj(e[2])):(n.attrs=t._attrsFromStr(e[3]),n.fgColor=t._getColorObj(e[4])),n}},{regex:/^B(\d{2}|@\d{5})/,fn:function(e){return{fgColor:null,bgColor:t._getColorObj(e[1]),attrs:null}}},{regex:/^\*(?:([\x01\x02\x03\x04*!\/_|]*)(\d{2})|@([\x01\x02\x03\x04*!\/_|]*)(\d{5})),(\d{2}|@\d{5})/,fn:function(e){var n={};return e[2]?(n.attrs=t._attrsFromStr(e[1]),n.fgColor=t._getColorObj(e[2])):(n.attrs=t._attrsFromStr(e[3]),n.fgColor=t._getColorObj(e[4])),n.bgColor=t._getColorObj(e[5]),n}},{regex:/^\*([\x01\x02\x03\x04*!\/_|]*)(\d{2}|@\d{5})/,fn:function(e){return{fgColor:t._getColorObj(e[2]),bgColor:null,attrs:t._attrsFromStr(e[1])}}},{regex:/^E/,fn:function(e){var n={};return n.fgColor={type:"option",name:"emphasis"},n.bgColor=t._cloneColor(n.fgColor),n.attrs={name:"emphasis",override:{}},n}}],r={fgColor:null,bgColor:null,attrs:null,text:e};return n.some(function(t){var n=e.match(t.regex);return n?(r=t.fn(n),r.text=e.substring(n[0].length),!0):!1}),r},t.rawText2Rich=function(e){var n=e.split(/(\x19|\x1a|\x1b|\x1c)/);if(1===n.length)return[{attrs:t._getDefaultAttributes(),fgColor:t._getDefaultColor(),bgColor:t._getDefaultColor(),text:n[0]}];var r=t._getDefaultColor(),i=t._getDefaultColor(),o=t._getDefaultAttributes(),a=null,c=!0;return n.map(function(e){if(0===e.length)return null;var n=e.charCodeAt(0),s=e.charAt(0);if(n>=25&&28>=n)return 28===n&&(r=t._getDefaultColor(),i=t._getDefaultColor(),25!==a&&(o=t._getDefaultAttributes())),a=n,null;var u=e;if(25===a){var l=t._getStyle(e);null!==l.fgColor&&(r=l.fgColor),null!==l.bgColor&&(i=l.bgColor),null!==l.attrs&&(o=l.attrs),u=l.text}else if(26===a||27===a){var f=26===a;if("|"!==s){var d=t._attrNameFromChar(s);d&&(o.override[d]=f,u=e.substring(1))}}if(a=null,0===u.length)return null;if(c&&null===o.name){var m=!0;for(var h in o.override)if(o.override[h]){m=!1;break}m?o.override={}:c=!1}return{fgColor:t._cloneColor(r),bgColor:t._cloneColor(i),attrs:t._cloneAttrs(o),text:u}}).filter(function(e){return null!==e})},t._uia2s=function(e){if(!e.length||0===e[0])return"";try{var t=String.fromCharCode.apply(null,e),n=decodeURIComponent(escape(t));return n}catch(t){for(var r="",i=0,o=e.length;o>i;i++)r+=e[i]<128?String.fromCharCode(e[i]):"?";return r}},t._mergeParams=function(e,t){for(var n in t)e[n]=t[n];return e},t._formatCmd=function(e,t,n){var r,i;return r=null!==e?"("+e+") ":"",r+=t,n.unshift(r),i=n.join(" "),i+="\n",i.replace(/[\r\n]+$/g,"").split("\n"),i},t.formatInit=function(e){var n={password:null,compression:"zlib"},r=[],i=[];return e=t._mergeParams(n,e),r.push("compression="+e.compression),null!==e.password&&r.push("password="+e.password),i.push(r.join(",")),t._formatCmd(null,"init",i)},t.formatHdata=function(e){var n={id:null,keys:null},r=[];return e=t._mergeParams(n,e),r.push(e.path),null!==e.keys&&r.push(e.keys.join(",")),t._formatCmd(e.id,"hdata",r)},t.formatInfo=function(e){var n={id:null},r=[];return e=t._mergeParams(n,e),r.push(e.name),t._formatCmd(e.id,"info",r)},t.formatInfolist=function(e){var n={id:null,pointer:null,args:null},r=[];return e=t._mergeParams(n,e),r.push(e.name),null!==e.pointer&&r.push(e.pointer),null!==e.pointer&&r.push(e.args),t._formatCmd(e.id,"infolist",r)},t.formatNicklist=function(e){var n={id:null,buffer:null},r=[];return e=t._mergeParams(n,e),null!==e.buffer&&r.push(e.buffer),t._formatCmd(e.id,"nicklist",r)},t.formatInput=function(e){var n={id:null},r=[];return e=t._mergeParams(n,e),r.push(e.buffer),r.push(e.data),t._formatCmd(e.id,"input",r)},t._formatSyncDesync=function(e,n){var r={id:null,buffers:null,options:null},i=[];return n=t._mergeParams(r,n),null!==n.buffers&&(i.push(n.buffers.join(",")),null!==n.options&&i.push(n.options.join(","))),t._formatCmd(n.id,e,i)},t.formatSync=function(e){return t._formatSyncDesync("sync",e)},t.formatDesync=function(e){return t._formatSyncDesync("desync",e)},t.formatTest=function(e){var n={id:null},r=[];return e=t._mergeParams(n,e),t._formatCmd(e.id,"test",r)},t.formatQuit=function(){return t._formatCmd(null,"quit",[])},t.formatPing=function(e){var n={id:null,args:null},r=[];return e=t._mergeParams(n,e),null!==e.args&&r.push(e.args.join(" ")),t._formatCmd(e.id,"ping",r)},t.prototype={_warnUnimplemented:function(e){console.log("Warning: "+e+" message parsing is not implemented")},_getType:function(){var e=this._getSlice(3);return e?t._uia2s(new Uint8Array(e)):null},_runType:function(e){var t=this._types[e],n=t.bind(this);return n()},_getStrNumber:function(){var e=this._getByte(),n=this._getSlice(e);return t._uia2s(new Uint8Array(n))},_strDirect:function(e){return e},_strToString:function(e){return e.toString()},_objToString:function(e,t){var n=this._typesStr[t],r=n.bind(this);return r(e)},_getInfo:function(){var e={};return e.key=this._getString(),e.value=this._getString(),e},_getHdata:function(){function e(){var e={};e.pointers=t.map(function(e){return r._getPointer()}),a.forEach(function(t){e[t[0]]=r._runType(t[1])}),i.push(e)}var t,n,r=this,i=[],o=this._getString(),a=this._getString().split(",");t=o.split("/"),n=this._getInt(),a=a.map(function(e){return e.split(":")});for(var c=0;n>c;c++)e();return i},_getPointer:function(){return this._getStrNumber()},_getTime:function(){var e=this._getStrNumber();return new Date(1e3*parseInt(e,10))},_getInt:function(){var e=new Uint8Array(this._getSlice(4));return(255&e[0])<<24|(255&e[1])<<16|(255&e[2])<<8|255&e[3]},_getByte:function(){var e=new Uint8Array(this._getSlice(1));return e[0]},_getChar:function(){return this._getByte()},_getString:function(){var e=this._getInt();if(e>0){var n=this._getSlice(e),r=new Uint8Array(n);return t._uia2s(r)}return""},_getHeader:function(){var e=this._getInt(),t=this._getByte();return{length:e,compression:t}},_getId:function(){return this._getString()},_getObject:function(){var e=this,t=this._getType();return t?{type:t,content:e._runType(t)}:void 0},_getHashTable:function(){var e,t,n,r=this,i={};e=this._getType(),t=this._getType(),n=this._getInt();for(var o=0;n>o;++o){var a=r._runType(e),c=r._objToString(a,e),s=r._runType(t);i[c]=s}return i},_getArray:function(){var e,t,n,r=this;e=this._getType(),t=this._getInt(),n=[];for(var i=0;t>i;i++)n.push(r._runType(e));return n},_getInfolist:function(){var e,t,n,r=this;e=this._getString(),t=this._getInt(),n=[];for(var i=0;t>i;i++){for(var o=r._getInt(),a=[],c=0;o>c;c++){var s={};s[r._getString()]=r._runType(r._getType()),a.push(s)}n.push(a)}return n},_getSlice:function(e){if(this.dataAt+e>this._data.byteLength)return null;var t=this._data.slice(this._dataAt,this._dataAt+e);return this._dataAt+=e,t},_setData:function(e){this._data=e},setId:function(e,t){return"("+e+") "+t},parse:function(e,t){var n=this;this._setData(e),this._dataAt=0;var r=this._getHeader();if(r.compression){var i=new Uint8Array(e,5),o=new Zlib.Inflate(i),a=o.decompress();this._setData(a.buffer),this._dataAt=0}for(var c=this._getId(),s=[],u=this._getObject();u;)s.push(u),u=n._getObject();var l={header:r,id:c,objects:s};return l}},e.Protocol=t}()}("undefined"==typeof exports?this.weeChat={}:exports),function(){"use strict";var e=angular.module("IrcUtils",[]);e.service("IrcUtils",[function(){var e=function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},t=function(e){var t=_(e).sortBy(function(e){return-e.spokeAt});return t=_(t).pluck("name")},n=function(e,t){var n=null;return t.some(function(t){return 0===t.toLowerCase().search(e.toLowerCase())?(n=t,!0):!1}),n},r=function(t,n,r){for(var i=[],o=null,a=t.toLowerCase(),c=n.toLowerCase(),s=0;s0&&(o.lines.splice(0,m),o.requestedLines-=m,o.lastSeen-=m,o.allLinesFetched=!1),n.bufferlines=o.lines,n.nicklist=o.nicklist,o.nicklistRequested()?n.showNicklist=n.updateShowNicklist():c.requestNicklist(o.id,function(){n.showNicklist=n.updateShowNicklist(),t.scrollWithBuffer(!0)}),o.requestedLinesh&&(h=Math.min(4*h,r)),n.fetchMoreLines(h).then(function(){i(function(){var e=document.getElementById("bufferlines"),n=e.scrollHeight,r=function(){if(e){var i=e.scrollHeight;i!==n&&(t.updateBufferBottom(t.bufferBottom),n=i),setTimeout(r,500)}};t.updateBufferBottom(!0),t.scrollWithBuffer(!0),e.onscroll=_.debounce(function(){t.updateBufferBottom()},80),setTimeout(r,500)})})}s.updateTitle(o),setTimeout(function(){n.notifications=s.unreadCount("notification"),n.unread=s.unreadCount("unread")}),i(function(){t.scrollWithBuffer(!0)}),n.search="",u.isMobileUi()||setTimeout(function(){document.getElementById("sendMessage").focus()},0),l.hotlistsync&&o.fullName&&c.sendHotlistClear()}),t.favico=new Favico({animation:"none"}),n.notifications=s.unreadCount("notification"),n.unread=s.unreadCount("unread"),t.$on("notificationChanged",function(){s.updateTitle(),n.notifications=s.unreadCount("notification"),n.unread=s.unreadCount("unread"),l.useFavico&&t.favico&&s.updateFavico()}),t.$on("relayDisconnect",function(){t.pageTitle="",t.notificationStatus="",s.cancelAll(),a.reinitialize(),t.$emit("notificationChanged"),n.connectbutton="Connect",n.connectbuttonicon="glyphicon-chevron-right"}),n.connectbutton="Connect",n.connectbuttonicon="glyphicon-chevron-right",n.getBuffers=a.getBuffers.bind(a),n.bufferlines={},n.nicklist={},n.activeBuffer=a.getActiveBuffer,t.connected=!1,t.waseverconnected=!1,t.userdisconnect=!1,t.reconnecting=!1,t.models=a,t.iterCandidate=null,l.savepassword?(n.$watch("password",function(){l.password=n.password}),l.addCallback("password",function(e){n.password=e}),n.password=l.password):l.password="",l.addCallback("savepassword",function(e){l.savepassword&&(l.setDefaults({password:n.password}),l.password=n.password)}),t.wasMobileUi=!1,u.isMobileUi()&&(t.wasMobileUi=!0),l.fontfamily||(u.isMobileUi()?l.fontfamily="sans-serif":l.fontfamily="Inconsolata, Consolas, Monaco, Ubuntu Mono, monospace"),n.isSidebarVisible=function(){return"visible"===document.getElementById("content").getAttribute("sidebar-state")},n.showSidebar=function(){document.getElementById("sidebar").setAttribute("data-state","visible"),document.getElementById("content").setAttribute("sidebar-state","visible"),u.isMobileUi()&&_.each(document.getElementsByTagName("textarea"),function(e){i(function(){e.blur()})})},t.hideSidebar=function(){u.isMobileUi()&&(document.getElementById("sidebar").setAttribute("data-state","hidden"),document.getElementById("content").setAttribute("sidebar-state","hidden"))},l.addCallback("autoconnect",function(e){!e||t.connected||t.sslError||t.securityError||t.errorMessage||n.connect()}),n.toggleSidebar=function(){u.isMobileUi()&&(n.isSidebarVisible()?n.hideSidebar():n.showSidebar())},n.openNick=function(){u.isMobileUi()&&l.nonicklist&&(l.nonicklist=!1)},n.closeNick=function(){u.isMobileUi()&&(l.nonicklist||(l.nonicklist=!0))},l.addCallback("orderbyserver",function(e){t.predicate=e?"serverSortKey":"number"}),l.addCallback("useFavico",function(e){t.connected&&(e?s.updateFavico():t.favico.reset())}),l.addCallback("enableMathjax",function(e){e&&!t.mathjax_init&&(t.mathjax_init=!0,function(){var e,t=document.getElementsByTagName("head")[0];e=document.createElement("script"),e.type="text/x-mathjax-config",e[window.opera?"innerHTML":"text"]="MathJax.Hub.Config({\n tex2jax: { inlineMath: [['$$','$$'], ['\\\\(','\\\\)']], displayMath: [['\\\\[','\\\\]']] },\n});",t.appendChild(e),e=document.createElement("script"),e.type="text/javascript",e.src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",t.appendChild(e)}())}),l.addCallback("theme",function(e){var t=document.getElementById("themeCSS");t&&t.parentNode.removeChild(t),function(){var t=document.createElement("link");t.rel="stylesheet",t.href="css/themes/"+e+".css",t.media="screen",t.id="themeCSS",document.getElementsByTagName("head")[0].appendChild(t)}()}),l.addCallback("customCSS",function(e){var t=document.getElementById("custom-css-tag");t&&t.parentNode.removeChild(t);var n=document.createElement("style");n.type="text/css",n.id="custom-css-tag",n.appendChild(document.createTextNode(e));var r=document.getElementsByTagName("head");r[0].appendChild(n)}),l.addCallback("fontfamily",function(e){u.changeClassStyle("favorite-font","fontFamily",e)}),l.addCallback("fontsize",function(e){u.changeClassStyle("favorite-font","fontSize",e)}),n.setActiveBuffer=function(e,t){return u.isMobileUi()&&n.hideSidebar(),a.version[0]>=1&&c.sendHotlistClear(),a.setActiveBuffer(e,t)},n.openBuffer=function(e){var t=a.getActiveBuffer().fullName;if(t=t.substring(0,t.lastIndexOf(".")+1)+e,!n.setActiveBuffer(t,"fullName")){var r="join -noswitch";["#","&","+","!"].indexOf(e.charAt(0))<0&&(r="query",(1==a.version[0]&&a.version[1]>=2||a.version[1]>1)&&(r+=" -noswitch")),c.sendMessage("/"+r+" "+e)}},n.calculateNumLines=function(){for(var e=document.querySelectorAll(".bufferline"),t=0,r=0;0===t&&ri||Math.abs(i-o)<3){var a=document.querySelector(".readmarker");if(e&&a)r.scrollTop=a.offsetTop-a.parentElement.scrollHeight+a.scrollHeight;else if(n)r.scrollTop=r.scrollHeight-r.clientHeight-o;else{var c=document.getElementById("end-of-buffer");c.scrollIntoView()}t.updateBufferBottom()}};i(a),window.requestAnimationFrame(a)},n.connect=function(){s.requestNotificationPermission(),t.sslError=!1,t.securityError=!1,t.errorMessage=!1,t.bufferBottom=!0,n.connectbutton="Connecting",n.connectbuttonicon="glyphicon-refresh glyphicon-spin",c.connect(l.host,l.port,n.password,l.ssl)},n.disconnect=function(){n.connectbutton="Connect",n.connectbuttonicon="glyphicon-chevron-right",c.disconnect()},n.reconnect=function(){var e=a.getActiveBuffer().id;c.attemptReconnect(e,3e3)},n.install=function(){if(void 0!==navigator.mozApps){var e=location.protocol+"//"+location.host+location.pathname.replace(/\/(index\.html)?$/,""),t=navigator.mozApps.install(e+"/manifest.webapp");t.onsuccess=function(){n.isinstalled=!0;var e=this.result;e.launch(),alert("Installation successful!")},t.onerror=function(){alert("Install failed, error: "+this.error.name)}}else alert("Sorry. Only supported in Firefox v26+")},n.showModal=function(e){document.getElementById(e).setAttribute("data-state","visible")},n.closeModal=function(e){function t(e,t){for(var n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector;e;){if(n.call(e,t))return e;e=e.parentElement}}t(e.target,".gb-modal").setAttribute("data-state","hidden")},n.toggleAccordion=function(e){e.stopPropagation(),e.preventDefault();var t=e.target.parentNode.parentNode.parentNode;t.setAttribute("data-state","active"===t.getAttribute("data-state")?"collapsed":"active");var n=t.parentNode.children;for(var r in n){var i=n[r];1===i.nodeType&&i!==t&&i.setAttribute("data-state","collapsed")}},n.hasUnread=function(e){return n.search&&""!==n.search?!0:l.onlyUnread?a.getActiveBuffer()===e?!0:"core.weechat"===e.fullName||l.orderbyserver&&"server"===e.type?!0:(e.unread>0||e.notification>0)&&!e.hidden:!e.hidden},l.addCallback("nonicklist",function(){n.showNicklist=n.updateShowNicklist(),t.connected&&t.bufferBottom&&i(function(){t.updateBufferBottom(!0)},500)}),n.showNicklist=!1,n.updateShowNicklist=function(){var e=a.getActiveBuffer();return e?l.nonicklist?!1:!e.isNicklistEmpty():!1},t.switchToActivityBuffer=function(){var e,t,r=_.sortBy(n.getBuffers(),"number");for(e in r)if(t=r[e],t.notification>0)return void n.setActiveBuffer(t.id);for(e in r)if(t=r[e],t.unread>0)return void n.setActiveBuffer(t.id)},t.toggleNicklist=function(){l.nonicklist=!l.nonicklist},t.switchToAdjacentBuffer=function(e){var r=_.sortBy(n.getBuffers(),t.predicate),i=a.getActiveBuffer(),o=r.indexOf(i);if(o>=0){var c=r[o+e];c&&n.setActiveBuffer(c.id)}},n.handleSearchBoxKey=function(e){var t=e.keyCode?e.keyCode:e.charCode;27===t?(e.preventDefault(),n.search=""):13===t&&(e.preventDefault(),n.filteredBuffers.length>0&&n.setActiveBuffer(n.filteredBuffers[0].id),n.search="")},t.supports_formatting_date=function(){try{(new Date).toLocaleDateString("i")}catch(e){return"RangeError"!==e.name&&o.info("Browser does not support toLocaleDateString(), falling back to en-US"),"RangeError"===e.name}return o.info("Browser does not support toLocaleDateString(), falling back to en-US"),!1}(),window.onbeforeunload=function(e){null!==n.command&&""!==n.command?(e.preventDefault(),e.returnValue="Any unsent input will be lost. Are you sure that you want to quit?"):(t.connected&&n.disconnect(),n.favico.reset())},n.init=function(){if(window.location.hash){var e=atob(window.location.hash.substring(1));window.location.hash="";var r=e.split(":"),i=r[0],o=parseInt(r[1]),a=r[2],u=r.length>3;s.requestNotificationPermission(),t.sslError=!1,t.securityError=!1,t.errorMessage=!1,t.bufferBottom=!0,n.connectbutton="Connecting",n.connectbuttonicon="glyphicon-chevron-right",c.connect(i,o,a,u)}}}]),e.config(["$routeProvider",function(e){e.when("/",{templateUrl:"index.html",controller:"WeechatCtrl"})}])}(),function(){"use strict";var e=angular.module("weechat");e.factory("settings",["$store","$rootScope",function(e,t){var n=this;this.callbacks={},this.cache={};var r=function(r){Object.defineProperty(n,r,{enumerable:!0,key:r,get:function(){return r in this.cache||(this.cache[r]=e.get(r)),this.cache[r]},set:function(i){this.cache[r]=i,e.set(r,i);for(var o=n.callbacks[r],a=0;void 0!==o&&a0?e.notificationStatus="("+t+") ":e.notificationStatus="";var r=n.getActiveBuffer();r&&(e.pageTitle=r.shortName+" | "+r.rtitle)},l=function(){var t=s("notification");if(t>0)e.favico.badge(t,{bgColor:"#d00",textColor:"#fff"});else{var n=s("unread");0===n?e.favico.reset():e.favico.badge(n,{bgColor:"#5CB85C",textColor:"#ff0"})}},f=function(e,t){var n="",i="",o=e.notification;if("private"===e.type)n=o>1?o.toString()+" private messages from ":"Private message from ",i=t.text;else{n=o>1?o.toString()+" highlights in ":"Highlight in ";for(var a="",s=0;s "+t.text}if(n+=e.shortName+" ("+e.server+")",c(e,n,i),r.soundnotification){var u="assets/audio/sonar",l='';document.getElementById("soundNotification").innerHTML=l}},d=function(){for(;o.length>0;){var e=o.pop();void 0!==e&&e.close()}};return{requestNotificationPermission:a,updateTitle:u,updateFavico:l,createHighlight:f,cancelAll:d,unreadCount:s}}]),function(){"use strict";var e=angular.module("weechat");e.filter("toArray",function(){return function(e,t){return e instanceof Object?t?Object.keys(e).map(function(t,n){return Object.defineProperties(e[t],{$key:{value:t},$idx:{value:n,configurable:!0}})}):Object.keys(e).map(function(t){return Object.defineProperty(e[t],"$key",{value:t})}):e}}),e.filter("irclinky",function(){return function(e){if(!e)return e;var t=/(^|[\s,.:;?!"'()+@-\~%])(#+[^\x00\x07\r\n\s,:]*[a-z][^\x00\x07\r\n\s,:]*)/gim,n='$1$2';return e.replace(t,n)}}),e.filter("inlinecolour",function(){return function(e){if(!e)return e;var t=/(^|[^&])(\#[0-9a-f]{6};?)(?!\w)/gim,n=/(.?)(rgba?\((?:\s*\d+\s*,){2}\s*\d+\s*(?:,\s*[\d.]+\s*)?\);?)/gim,r='$1$2
      ';return e=e.replace(t,r),e=e.replace(n,r)}}),e.filter("DOMfilter",["$filter","$sce",function(e,t){var n=["irclinky"];return function(r,i){if(!r||!i)return r;var o=n.indexOf(i)>-1,a=function(e){var t={"<":"<",">":">",'"':""","'":"'","&":"&","/":"/"};return e.replace(/[<>"'&\/]/g,function(e){return t[e]})},c=arguments.length>2?arguments[2]:null,s=arguments.length>3?arguments[3]:null,u=e(i),l=document.createElement("div");l.innerHTML=r;var f=function(e){if(3===e.nodeType){var t=a(e.nodeValue),n=u(t,c,s);if(n!==t){var r=document.createElement("span");r.innerHTML=n;var i=e.parentNode,l=e.nextSibling;return i.removeChild(e),l?i.insertBefore(r,l):i.appendChild(r),r}}if(void 0!==e&&null!==e)for(e=e.firstChild;e;){var d=null;o&&"A"===e.tagName||(d=f(e)),e=(d?d:e).nextSibling}};return f(l),t.trustAsHtml(l.innerHTML)}}]),e.filter("getBufferQuickKeys",function(){return function(e,t){return t?(void 0!==t.search&&t.search.length||t.onlyUnread?e.forEach(function(e,t){e.$quickKey=10>t?(t+1)%10:""}):_.map(e,function(e,t){return[e.number,e.$idx,t]}).sort(function(e,t){return e[0]-t[0]||e[1]-t[1]}).forEach(function(t,n){e[t[2]].$quickKey=10>n?(n+1)%10:""}),e):e}}),e.filter("emojify",function(){return function(e,t){if(t===!0&&void 0!==window.emojione){var n=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return n.test(e)?emojione.unicodeToImage(e):e}return e}}),e.filter("mathjax",function(){return function(e,t,n){if(!n||"undefined"==typeof MathJax)return e;if(-1!=e.indexOf("$$")||-1!=e.indexOf("\\[")||-1!=e.indexOf("\\(")){var r=document.querySelector(t);MathJax.Hub.Queue(["Typeset",MathJax.Hub,r])}return e}}),e.filter("prefixlimit",function(){return function(e,t){ +return isNaN(t)?e:0>=t?"":e&&e.length>t?(e=e.substring(0,t),e+"+"):e}})}(),function(){"use strict";var e=angular.module("weechat");e.factory("handlers",["$rootScope","$log","models","plugins","notifications",function(e,t,n,r,i){var o=function(e){var t=e.objects[0].content,r=t.value;n.version=r.split(".").map(function(e){return parseInt(e)})},a=function(e){for(var r=e.objects[0].content,i=0;if?(f=-1*f,c+=1===f?", 1 day before":", "+f+" days before"):c+=", "+f+" days later"}c+=")";var d={buffer:t.id,date:o,prefix:"43─",tags_array:[],displayed:!0,highlight:0,message:c},m=new n.BufferLine(d);t.addLine(m)}},u=function(t,o){var a=new n.BufferLine(t),c=n.getBuffer(a.buffer);if(c.requestedLines++,a.displayed){if(c.lines.length>0){var u=new Date(c.lines[c.lines.length-1].date),l=new Date(a.date);s(c,o,u,l)}a=r.PluginManager.contentForMessage(a),c.addLine(a),o&&c.lastSeen++,c.active&&!o&&e.scrollWithBuffer(),o||c.active&&e.isWindowFocused()||(c.notify>1&&_.contains(a.tags,"notify_message")&&!_.contains(a.tags,"notify_none")&&(c.unread++,e.$emit("notificationChanged")),(0!==c.notify&&a.highlight||_.contains(a.tags,"notify_private"))&&(c.notification++,i.createHighlight(c,a),e.$emit("notificationChanged")))}},l=function(e){for(var t=e.objects[0].content,r=0;r=0),void 0!==t.notify&&(e.notify=t.notify))},d=function(e){e.objects[0].content.forEach(function(e){u(e,!1)})},m=function(e){var t=e.objects[0].content[0],r=new n.Buffer(t);n.addBuffer(r)},h=function(e){var t=e.objects[0].content[0],r=t.pointers[0],i=n.getBuffer(r);i.fullName=t.full_name,i.title=n.parseRichText(t.title),i.number=t.number,i.rtitle="";for(var o=0;o=0?t.short_name.charAt(0):"";var o=n.outgoingQueries.indexOf(i.shortName);o>=0&&(n.outgoingQueries.splice(o,1),n.setActiveBuffer(i.id))},p=function(e){var t=e.objects[0].content[0],r=t.pointers[0],i=n.getBuffer(r);i.hidden=!0},v=function(e){var t=e.objects[0].content[0],r=t.pointers[0],i=n.getBuffer(r);i.hidden=!1},b=function(e){var t=e.objects[0].content[0],r=t.pointers[0],i=n.getBuffer(r),o=t.local_variables;void 0!==i&&void 0!==o&&(i.type=o.type,i.indent=["channel","private"].indexOf(o.type)>=0,i.plugin=o.plugin,i.server=o.server,i.serverSortKey=i.plugin+"."+i.server+("server"===i.type?"":"."+i.shortName))},y=function(e){var t=e.objects[0].content[0],r=t.pointers[0];n.getBuffer(r);r.bufferType=t.type},w=function(e,t){var r=e.objects[0].content.reverse();if(void 0===t&&(t=!0),r.forEach(function(e){u(e,t)}),e.objects[0].content.length>0){var i=e.objects[0].content[e.objects[0].content.length-1],o=n.getBuffer(i.buffer);if(o.lines.length>0){var a=new Date(o.lines[o.lines.length-1].date);s(o,!0,a,new Date)}}},C=function(e){if(0!==e.objects.length){var t=e.objects[0].content;t.forEach(function(e){var t=n.getBuffer(e.buffer);t.unread+=e.count[1],t.notification+=e.count[2],t.notification+=e.count[3];var r=_.reduce(e.count,function(e,t){return e+t},0);t.lastSeen=t.lines.length-1-r})}},k=function(e){var t=e.objects[0].content,r="root";t.forEach(function(e){var t=n.getBuffer(e.pointers[0]);if(1===e.group){var i=new n.NickGroup(e);r=i.name,t.nicklist[r]=i}else{var o=new n.Nick(e);t.addNick(r,o)}})},S=function(e){var t,r=e.objects[0].content;r.forEach(function(e){var r=n.getBuffer(e.pointers[0]),i=e._diff;if(1===e.group){if(t=e.name,void 0===t){var o=new n.NickGroup(e);r.nicklist[t]=o,t=o.name}}else{var a=new n.Nick(e);43===i?r.addNick(t,a):45===i?r.delNick(t,a):42===i&&r.updateNick(t,a)}})},x={_buffer_closing:c,_buffer_line_added:d,_buffer_localvar_added:b,_buffer_localvar_removed:b,_buffer_localvar_changed:b,_buffer_opened:m,_buffer_title_changed:h,_buffer_type_changed:y,_buffer_renamed:g,_buffer_hidden:p,_buffer_unhidden:v,_nicklist:k,_nicklist_diff:S};e.$on("onMessage",function(e,n){_.has(x,n.id)?x[n.id](n):t.debug("Unhandled event received: "+n.id)});var B=function(e){_.has(x,e.id)&&x[e.id](e)};return{handleVersionInfo:o,handleConfValue:a,handleEvent:B,handleLineInfo:w,handleHotlistInfo:C,handleNicklist:k,handleBufferInfo:l}}])}(),function(){"use strict";var e=angular.module("weechat");e.factory("connection",["$rootScope","$log","handlers","models","ngWebsockets",function(e,t,n,r,i){var o,a=new weeChat.Protocol,c=[],s=function(r,o,s,u,f,d,m){e.passwordError=!1,c=[r,o,s,u,f];var h=u?"wss":"ws";-1!==r.indexOf(":")&&"["!==r[0]&&"]"!==r[r.length-1]&&(r="["+r+"]");var g=h+"://"+r+":"+o+"/weechat";t.debug("Connecting to URL: ",g);var p=function(){var r=function(e){return i.send(weeChat.Protocol.formatInit({password:e,compression:f?"off":"zlib"})),i.send(weeChat.Protocol.formatInfo({name:"version"}))},o=function(){return i.send(weeChat.Protocol.formatHdata({path:"hotlist:gui_hotlist(*)",keys:[]}))},a=function(){return i.send(weeChat.Protocol.formatHdata({path:"buffer:gui_buffers(*)",keys:["local_variables,notify,number,full_name,short_name,title,hidden,type"]}))},c=function(){return i.send(weeChat.Protocol.formatSync({}))};r(s).then(function(r){n.handleVersionInfo(r),a().then(function(e){n.handleBufferInfo(e)}),o().then(function(e){n.handleHotlistInfo(e),d&&d()}),c(),t.info("Connected to relay"),e.connected=!0},function(){_()})},v=function(){e.waseverconnected=!0},b=function(n){t.info("Disconnected from relay"),e.$emit("relayDisconnect"),e.userdisconnect||!e.waseverconnected?(y(n),e.userdisconnect=!1):l(n),_()},y=function(t){u&&t&&1006===t.code&&"undefined"!=typeof e.lastError&&Date.now()-e.lastError<1e3&&(e.sslError=!0,e.$apply())},_=function(){e.waseverconnected||e.errorMessage||(e.passwordError=!0,e.$apply())},w=function(n){t.error("Relay error",n),e.lastError=Date.now(),"error"===n.type&&1!==this.readyState&&(i.failCallbacks("error"),e.errorMessage=!0)};try{i.connect(g,a,{binaryType:"arraybuffer",onopen:p,onclose:b,onmessage:v,onerror:w})}catch(n){t.debug("Websocket caught DOMException:",n),e.lastError=Date.now(),e.errorMessage=!0,e.securityError=!0,e.$emit("relayDisconnect"),m&&m()}},u=function(n,i){t.info("Attempting to reconnect...");var a=c;s(a[0],a[1],a[2],a[3],a[4],function(){e.reconnecting=!1,r.setActiveBuffer(n),t.info("Sucessfully reconnected to relay")},function(){i>=6e5?(t.info("Failed to reconnect, giving up"),handleClose()):(t.info("Failed to reconnect, scheduling next attempt in",i/1e3,"seconds"),void 0!==o&&clearTimeout(o),o=setTimeout(function(){u(n,1.5*i)},i))})},l=function(n){if(c.length<5)return void t.error("Cannot reconnect, connection information is missing");r.reinitialize(),e.reconnecting=!0,e.$apply();var i=r.getActiveBuffer().id,a=3e3;o=setTimeout(function(){u(i,a)},a)},f=function(){t.info("Disconnecting from relay"),e.userdisconnect=!0,i.send(weeChat.Protocol.formatQuit());setTimeout(function(){i.disconnect(),i.failCallbacks("disconnection"),e.connected=!1,e.$emit("relayDisconnect"),e.$apply()})},d=function(e){i.send(weeChat.Protocol.formatInput({buffer:r.getActiveBufferReference(),data:e}))},m=function(e){i.send(weeChat.Protocol.formatInput({buffer:"core.weechat",data:e}))},h=function(){r.version[0]>=1?(d("/buffer set hotlist -1"),d("/input set_unread_current_buffer")):m("/buffer "+r.getActiveBuffer().fullName)},g=function(e,t){e&&i.send(weeChat.Protocol.formatNicklist({buffer:"0x"+e})).then(function(e){n.handleNicklist(e),void 0!==t&&t()})},p=function(o){t.debug("Fetching ",o," lines");var a=r.getActiveBuffer();return void 0===o&&(o=0),o=Math.max(o,2*a.requestedLines),e.loadingLines=!0,i.send(weeChat.Protocol.formatHdata({path:"buffer:0x"+a.id+"/own_lines/last_line(-"+o+")/data",keys:[]})).then(function(t){var r=a.lines.length,i=a.lastSeen>=0;a.lines.length=0,a.requestedLines=0;var c=t.objects[0].content.length;n.handleLineInfo(t,!0),a.lastSeen-=r,o>c&&(a.allLinesFetched=!0),e.loadingLines=!1;var s=!i&&a.lastSeen>=0;e.scrollWithBuffer(s,!0)})};return{connect:s,disconnect:f,sendMessage:d,sendCoreCommand:m,sendHotlistClear:h,fetchMoreLines:p,requestNicklist:g,attemptReconnect:u}}])}(),function(){"use strict";var e=angular.module("weechat");e.directive("fileChange",["$parse",function(e){return{restrict:"A",link:function(t,n,r){var i=e(r.fileChange),o=function(e){t.$apply(function(){i(t,{$event:e,files:e.target.files})})};n[0].addEventListener("change",o,!1)}}}])}(),function(){"use strict";var e=angular.module("weechat");e.directive("imgurDrop",["connection","imgur","$rootScope",function(e,t,n){return{restrict:"A",link:function(e,r,i){var o=r[0];o.ondragover=function(){return this.classList.add("imgur-drop-hover"),!1},o.ondragend=function(){return this.classList.remove("imgur-drop-hover"),!1},o.ondrop=function(e){this.classList.remove("imgur-drop-hover");var r=e.dataTransfer.files;e.stopPropagation(),e.preventDefault();var i=function(e){void 0!==e&&""!==e&&n.insertAtCaret(String(e))};if("undefined"!=typeof r&&r.length>0)for(var o=0;o0&&" "!==i[i.length-1]&&(i+=" "),o.length>0&&" "!==o[0]&&(o=" ".concat(o)),t.command=i+e+o,setTimeout(function(){n.focus();var e=t.command.length-o.length;n.setSelectionRange(e,e),t.$apply()},0)},t.uploadImage=function(t,n){var r=function(t){void 0!==t&&""!==t&&e.insertAtCaret(String(t))};if("undefined"!=typeof n&&n.length>0)for(var i=0;i=0){var u=t.command.substring(o+1);a.outgoingQueries.push(u)}t.command=""}a.version[0]>=1&&i.sendHotlistClear(),t.getInputNode().focus()},e.addMention=function(e){var n=e[e.length-1].text,r=t.command||"",i=0===r.length;if(r.length>0){var o=r.trim();if(":"===o.charAt(o.length-1)){var c=o.lastIndexOf(" ")+1,s=o.slice(c,o.length-1),u=a.getActiveBuffer().getNicklistByTime();for(var l in u)if(u[l].name===s){r=r.slice(0,r.lastIndexOf(":"))+" ",i=!0;break}}" "!==r.charAt(r.length-1)&&(r+=" ")}r+=n,i&&(r+=": "),t.command=r,t.getInputNode().focus()},e.handleKeyPress=function(n){if(!e.connected)return!0;var r=t.getInputNode(),o=n.keyCode?n.keyCode:n.charCode,c=n.getModifierState?n.getModifierState("AltGraph"):!1;if(c)return!1;e.showQuickKeys=!1;var u=t.iterCandidate;if(t.iterCandidate=null,n.altKey&&!n.ctrlKey&&o>47&&58>o){48===o&&(o=58);var l,f=o-48-1;if((t.$parent.search.length||t.$parent.onlyUnread)&&t.$parent.filteredBuffers.length){var d=t.$parent.filteredBuffers[f];void 0!==d&&(l=[d.number,d.id])}else{var m=_.map(a.getBuffers(),function(e){return[e.number,e.id]}).sort(function(e,t){return e[0]-t[0]});l=m[f]}l&&(t.$parent.setActiveBuffer(l[1]),n.preventDefault())}if(9===o&&!n.altKey&&!n.ctrlKey)return n.preventDefault(),t.iterCandidate=u,t.completeNick(),!0;if(n.altKey&&!n.ctrlKey&&78===o)return n.preventDefault(),e.toggleNicklist(),!0;if(n.altKey&&(97===o||65===o))return n.preventDefault(),e.switchToActivityBuffer(),!0;if(n.altKey&&!n.ctrlKey&&(38===o||40===o)){n.preventDefault();var h=o-39;return e.switchToAdjacentBuffer(h),!0}if(n.altKey&&(76===o||108===o))return n.preventDefault(),r.focus(),r.setSelectionRange(t.command.length,t.command.length),!0;if(n.altKey&&(60===o||226===o)){var g=a.getPreviousBuffer();if(g)return a.setActiveBuffer(g.id),n.preventDefault(),!0}if(27===o){n.preventDefault();for(var p=document.querySelectorAll(".gb-modal"),v=0;v=0;w--)if(y[w].offsetTop-C.scrollTopC.clientHeight/2){y[w].scrollIntoView(!0);break}return!0}if(s.readlineBindings&&n.ctrlKey&&!n.altKey&&!n.shiftKey&&document.activeElement===r){if(b=r.selectionStart,65==o)r.setSelectionRange(0,0);else if(69==o)r.setSelectionRange(t.command.length,t.command.length);else if(85==o)t.command=t.command.slice(b),setTimeout(function(){r.setSelectionRange(0,0)});else if(75==o)t.command=t.command.slice(0,b),setTimeout(function(){r.setSelectionRange(t.command.length,t.command.length)});else{if(87!=o)return!1;var k=t.command.slice(0,b),S=k.lastIndexOf(" ")+1;t.command=t.command.slice(0,S)+t.command.slice(b,t.command.length),setTimeout(function(){r.setSelectionRange(S,S)})}return n.preventDefault(),!0}"keydown"!==n.type||18!==o||n.ctrlKey||n.shiftKey||(e.showQuickKeys=!0)},e.handleKeyRelease=function(t){return 18===t.keyCode?(void 0!==e.quickKeysTimer&&clearTimeout(e.quickKeysTimer),e.quickKeysTimer=setTimeout(function(){e.showQuickKeys&&(e.showQuickKeys=!1,e.$apply()),delete e.quickKeysTimer},1e3),!0):void 0}}]}})}(),function(){"use strict";var e=angular.module("weechat");e.directive("plugin",["$rootScope","settings",function(e,t){return{templateUrl:"directives/plugin.html",scope:{plugin:"=data"},controller:["$scope",function(n){n.displayedContent="",n.plugin.visible=!t.noembed&&!n.plugin.nsfw,n.plugin.className="embed_"+n.plugin.$$hashKey.replace(":","_"),n.plugin.getElement=function(){return document.querySelector("."+n.plugin.className)},n.hideContent=function(){n.plugin.visible=!1},n.showContent=function(t){var r=n.plugin.getElement();n.plugin.content instanceof Function?r&&""!==r.innerHTML||setTimeout(function(){n.plugin.content()}):n.displayedContent=n.plugin.content,n.plugin.visible=!0;var i;if(t){var o=e.bufferBottom;i=function(){e.updateBufferBottom(o)}}else i=function(){r&&void 0!==r.scrollIntoViewIfNeeded&&(r.scrollIntoViewIfNeeded(),e.updateBufferBottom())};setTimeout(i,500)},n.plugin.visible&&n.showContent(!0)}]}}])}(),function(){"use strict";var e=angular.module("ngWebsockets",[]);e.factory("ngWebsockets",["$rootScope","$q",function(e,t){var n=null,r=null,i={},o=0,a=function(e){for(var t in i)i[t].cb.reject(e)},c=function(){return o+=1,o>1e3&&(o=0),o},s=function(e){var t=u(e);return e=n.setId(t.id,e),r.send(e),t.promise},u=function(){var e=t.defer(),n=c();return i[n]={time:new Date,cb:e},e.id=n,e},l=function(e){var n=[];for(var r in e){var i=s(e[r]);n.push(i)}return t.all(n)},f=function(t){var r=n.parse(t.data);if(_.has(i,r.id)){var o=i[r.id];o.cb.resolve(r),delete i[r.id]}else e.$emit("onMessage",r);e.$apply()},d=function(e,t,i){r=new WebSocket(e),n=t;for(var o in i)r[o]=i[o];"onmessage"in i?r.onmessage=function(e){i.onmessage(e),f(e)}:r.onmessage=f},m=function(){r.close()};return{send:s,sendAll:l,connect:d,disconnect:m,failCallbacks:a}}])}(),function(){"use strict";var e=angular.module("weechatModels",[]);e.service("models",["$rootScope","$filter",function(e,t){function n(e,t){if(t in e&&e[t]&&e[t].length>0){var n=e[t];if(n.match(/^weechat/)){var r=n.match(/[a-zA-Z0-9_]+$/)[0];return["cof-"+r,"cob-"+r,"coa-"+r]}if(n.match(/^[a-zA-Z]+$/))return["cwf-"+n];if(n.match(/^[0-9]+$/))return["cef-"+n]}return["cwf-default"]}function r(e){return{name:n(e,"color"),prefix:n(e,"prefix_color")}}this.version=null,this.wconfig={},this.outgoingQueries=[];var i=function(e){var t=weeChat.Protocol.rawText2Rich(e),n={option:"cof-",weechat:"cwf-",ext:"cef-"},r={option:"cob-",weechat:"cwb-",ext:"ceb-"};return t.forEach(function(e){e.classes=[];var t=n[e.fgColor.type];e.classes.push(t+e.fgColor.name),t=r[e.bgColor.type],e.classes.push(t+e.bgColor.name),null!==e.attrs.name&&e.classes.push("coa-"+e.attrs.name);var i,o;for(i in e.attrs.override)o=e.attrs.override[i],o?e.classes.push("a-"+i):e.classes.push("a-no-"+i)}),t};this.parseRichText=i,this.Buffer=function(e){var t=e.full_name,n=e.short_name,r=e.hidden,o=n.replace(/^[#&+]/,"")||(n?" ":null),a=["#","&","+"].indexOf(n.charAt(0))>=0?n.charAt(0):"",c=i(e.title),s=e.number,u=e.pointers[0],l=3,f=[],d=0,m={},h=[],g=0,p=0,v=0,b=-1,y=e.type,w=e.local_variables.type,C=["channel","private"].indexOf(w)>=0,k=e.local_variables.plugin,S=e.local_variables.server,x=k+"."+S+("server"===w?"":"."+n);x=x.toLowerCase(),void 0!==e.notify&&(l=e.notify);for(var B="",T=0;T=h.length&&h.push(e),0>=g||g>=h.length)return e;g--;var t=h[g];return t},j=function(e){return g===h.length?(void 0!==e&&""!==e&&(h.push(e),g++),""):0>g||g>h.length?e:(g++,h.length>0&&g==h.length-1?h.pop():h[g])},L=function(){for(var e in m)if("root"!==e)return!1;return!0},P=function(){return m.hasOwnProperty("root")},O=function(){for(;f.length>0;)f.pop();d=0};return{id:u,fullName:t,shortName:n,hidden:r,trimmedName:o,prefix:a,number:s,title:c,rtitle:B,lines:f,clear:O,requestedLines:d,addLine:A,lastSeen:b,unread:v,notification:p,notify:l,nicklist:m,addNick:N,delNick:M,updateNick:$,getNicklistByTime:I,serverSortKey:x,indent:C,bufferType:y,type:w,plugin:k,server:S,history:h,addToHistory:H,getHistoryUp:D,getHistoryDown:j,isNicklistEmpty:L,nicklistRequested:P}},this.BufferLine=function(e){var n=e.buffer,r=e.date,o=t("date")(r,"HH:mm"),a=i(e.prefix),c=e.tags_array,s=e.displayed,u=e.highlight,l=i(e.message);u&&a.forEach(function(e){e.classes.push("highlight")});for(var f="",d=0;d=1?"0x"+o.id:o.fullName},this.getPreviousBuffer=function(){return a},this.setActiveBuffer=function(t,n){if(void 0===n&&(n="id"),a=this.getActiveBuffer(),o="id"===n?this.model.buffers[t]:_.find(this.model.buffers,function(e){return e[n]===t?e:void 0}),void 0===o)return o=a,!1;a&&(a.active=!1,a.lastSeen=a.lines.length-1);var r=o.unread+o.notification;return o.active=!0,o.unread=0,o.notification=0,e.$emit("activeBufferChanged",r),e.$emit("notificationChanged"),!0},this.getBuffers=function(){return this.model.buffers},this.reinitialize=function(){this.model.buffers={}},this.getBuffer=function(e){return this.model.buffers[e]},this.closeBuffer=function(e){var t=this.getBuffer(e);if(void 0!==t){if(t.active){var n=_.keys(this.model.buffers)[0];this.setActiveBuffer(n)}delete this.model.buffers[e]}}}])}(),function(){"use strict";var e=angular.module("plugins",[]),t=function(e,t){return{contentForMessage:t,exclusive:!1,name:e}},n=/(?:(?:https?|ftp):\/\/|www\.|ftp\.)\S*[^\s.;,(){}<>]/g,r=function(e,t){return{contentForMessage:function(e){for(var r=e.match(n),i=[],o=0;r&&o=0;s--){var u=1==c.length?void 0:s+1;i(c[s],e[o].name,u)}else i(c,e[o].name);if(e[o].exclusive)break}}return n};return{registerPlugins:n,contentForMessage:i}};this.PluginManager=new n,this.PluginManager.registerPlugins(e.plugins)}]),e.factory("userPlugins",function(){var e=function(e,t){var n="jsonp_callback_"+Math.round(1e5*Math.random());window[n]=function(e){delete window[n],document.body.removeChild(r),t(e)};var r=document.createElement("script");r.src=e+(e.indexOf("?")>=0?"&":"?")+"callback="+n,document.body.appendChild(r)},n=new t("Spotify track",function(e){var t=[],n=function(e){for(var n=0;e&&n").attr("src","//embed.spotify.com/?uri=spotify:track:"+r).attr("width","300").attr("height","80").attr("frameborder","0").attr("allowtransparency","true");t.push(i.prop("outerHTML"))}};return n(e.match(/spotify:track:([a-zA-Z-0-9]{22})/g)),n(e.match(/open.spotify.com\/track\/([a-zA-Z-0-9]{22})/g)),t}),i=new r("YouTube video",function(e){var t=/(?:youtube.com|youtu.be)\/(?:v\/|embed\/|watch(?:\?v=|\/))?([a-zA-Z0-9-]+)/i,n=e.match(t);if(n){var r=n[1],i="https://www.youtube.com/embed/"+r+"?html5=1&iv_load_policy=3&modestbranding=1&rel=0&showinfo=0",o=angular.element("").attr("src",i).attr("width","560").attr("height","315").attr("frameborder","0").attr("allowfullscreen","true");return o.prop("outerHTML")}}),o=new t("Dailymotion video",function(e){var t=/dailymotion.com\/.*video\/([^_?# ]+)/,n=/dailymotion.com\/.*#video=([^_& ]+)/,r=/dai.ly\/([^_?# ]+)/,i=e.match(t)||e.match(n)||e.match(r);if(i){var o=i[1],a="https://www.dailymotion.com/embed/video/"+o+"?html&controls=html&startscreen=html&info=0&logo=0&related=0",c=angular.element("").attr("src",a).attr("width","480").attr("height","270").attr("frameborder","0");return c.prop("outerHTML")}return null}),a=new t("AlloCine video",function(e){var t=/allocine.fr\/videokast\/video-(\d+)/,n=/allocine.fr\/.*cmedia=(\d+)/,r=e.match(t)||e.match(n);if(r){var i=r[1],o="http://www.allocine.fr/_video/iblogvision.aspx?cmedia="+i,a=angular.element("").attr("src",o).attr("width","480").attr("height","270").attr("frameborder","0");return a.prop("outerHTML")}return null}),c=new r("image",function(e){if(e.match(/\.(png|gif|jpg|jpeg)(:(small|medium|large))?\b/i)){if(-1!=e.indexOf("^https?://fukung.net/v/"))e=e.replace(/.*\//,"http://media.fukung.net/imgs/");else if(e.match(/^http:\/\/(i\.)?imgur\.com\//i))e=e.replace(/http:/,"");else if(e.match(/^https:\/\/www\.dropbox\.com\/s\/[a-z0-9]+\//i)){var t=document.createElement("a");t.href=e;for(var n=t.protocol+"//"+t.host+t.pathname+"?",r=t.search.substring(1).split("&"),i=!1,o=0;o").attr("target","_blank").attr("href",e).append(angular.element("").addClass("embed").attr("src",e));t.innerHTML=n.prop("outerHTML")}}}),s=new r("audio",function(e){return e.match(/\.(mp3|ogg|wav)\b/i)?function(){var t=this.getElement(),n=angular.element("").addClass("embed").attr("width","560").append(angular.element("").attr("src",e));t.innerHTML=n.prop("outerHTML")}:void 0}),u=new r("video",function(e){return e.match(/\.(mp4|webm|ogv|gifv)\b/i)?(e.match(/^http:\/\/(i\.)?imgur\.com\//i)&&(e=e.replace(/\.(gifv)\b/i,".webm")),function(){var t=this.getElement(),n=angular.element("").addClass("embed").attr("width","560").append(angular.element("").attr("src",e));t.innerHTML=n.prop("outerHTML")}):void 0}),l=new r("cloud music",function(e){var t;return e.match(/^https?:\/\/soundcloud.com\//)?(t=angular.element("").attr("width","100%").attr("height","120").attr("scrolling","no").attr("frameborder","no").attr("src","https://w.soundcloud.com/player/?url="+e+"&color=ff6600&auto_play=false&show_artwork=true"),t.prop("outerHTML")):e.match(/^https?:\/\/([a-z]+\.)?mixcloud.com\//)?(t=angular.element("").attr("width","480").attr("height","60").attr("frameborder","0").attr("src","//www.mixcloud.com/widget/iframe/?feed="+e+"&mini=1&stylecolor=&hide_artwork=&embed_type=widget_standard&hide_tracklist=1&hide_cover="),t.prop("outerHTML")):void 0}),f=new r("Google Map",function(e){if(e.match(/^https?:\/\/maps\.google\./i)||e.match(/^https?:\/\/(?:[\w]+\.)?google\.[\w]+\/maps/i)){var t=angular.element("").attr("width","450").attr("height","350").attr("frameborder","0").attr("scrolling","no").attr("marginheight","0").attr("src",e+"&output=embed");return t.prop("outerHTML")}}),d=new r("ascii cast",function(e){var t=/^https?:\/\/(?:www\.)?asciinema.org\/a\/(\d+)/i,n=e.match(t);if(n){var r=n[1];return function(){var e=this.getElement(),t=document.createElement("script");t.src="https://asciinema.org/a/"+r+".js",t.id="asciicast-"+r,t.async=!0,e.appendChild(t)}}}),m=new r("meteogram",function(e){var t=/^https?:\/\/(?:www\.)?yr\.no\/(place|stad|sted|sadji|paikka)\/(([^\s.;,(){}<>\/]+\/){3,})/,n=e.match(t);return n?function(){var t=this.getElement(),r=n[1],i=n[2],o=n[n.length-1].slice(0,-1);e="http://www.yr.no/"+r+"/"+i+"avansert_meteogram.png";var a=angular.element("").attr("src",e).attr("alt","Meteogram for "+o);t.innerHTML=a.prop("outerHTML")}:void 0}),h=new r("Gist",function(t){var n=/^https:\/\/gist\.github.com\/[^.?]+/i,r=t.match(n);return r?(t=r[0]+".json",function(){var n=this.getElement();e(t,function(e){if(document.querySelectorAll('link[rel=stylesheet][href="'+e.stylesheet+'"]').length<1){var t='';document.getElementsByTagName("head")[0].innerHTML+=t}n.innerHTML='
      '+e.div+"
      "})}):void 0}),g=new r("Giphy",function(e){var t=/^https?:\/\/giphy.com\/gifs\/.*-(.*)\/?/i,n=e.match(t);if(n){var r="https://media.giphy.com/media/"+n[1]+"/giphy.gif";return function(){var t=this.getElement(),n=angular.element("").attr("target","_blank").attr("href",e).append(angular.element("").addClass("embed").attr("src",r));t.innerHTML=n.prop("outerHTML")}}}),p=new r("Tweet",function(t){var n=/^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)/i,r=t.match(n);return r?(t="https://api.twitter.com/1/statuses/oembed.json?id="+r[2],function(){var n=this.getElement();e(t,function(e){var t=e.html.indexOf("'}});return{plugins:[i,o,a,c,u,s,n,l,f,d,m,h,g,p,v]}})}(),function(){"use strict";var e=angular.module("weechat");e.factory("imgur",["$rootScope",function(e){var t=function(e,t){if(e&&e.type.match(/image.*/)){var r=new FileReader;r.onload=function(e){var r=e.target.result.split(",")[1];n(r,t)},r.readAsDataURL(e)}},n=function(e,t){var n="164efef8979cd4b",i=document.getElementById("imgur-upload-progress"),o=document.createElement("div"); +o.className="imgur-progress-bar",o.style.width="0",i.appendChild(o);var a=new FormData;a.append("image",e),a.append("type","base64");var c=new XMLHttpRequest;c.open("POST","https://api.imgur.com/3/image",!0),c.setRequestHeader("Authorization","Client-ID "+n),c.setRequestHeader("Accept","application/json"),c.onload=function(){if(o.parentNode.removeChild(o),200===c.status){var e=JSON.parse(c.responseText);e.data&&e.data.link?t&&"function"==typeof t&&t(e.data.link):r()}else r()},"upload"in c&&(c.upload.onprogress=function(e){if(e.lengthComputable){var t=e.loaded/e.total*100|0;o.style.width=t+"%"}}),c.send(a)},r=function(){e.uploadError=!0,e.$apply(),setTimeout(function(){e.uploadError=!1,e.$apply()},5e3)};return{process:t}}])}(); //# sourceMappingURL=min.map \ No newline at end of file diff --git a/min.map b/min.map index 084b40a..f811189 100644 --- a/min.map +++ b/min.map @@ -1 +1 @@ -{"version":3,"file":"min.js","sources":["js/localstorage.js","js/weechat.js","js/irc-utils.js","js/glowingbear.js","js/settings.js","js/utils.js","js/notifications.js","js/filters.js","js/handlers.js","js/connection.js","js/inputbar.js","js/plugin-directive.js","js/websockets.js","js/models.js","js/plugins.js"],"names":["ls","angular","module","factory","$parse","storage","window","localStorage","undefined","supported","JSON","console","log","privateMethods","parseValue","res","val","parse","parseFloat","isObject","e","publicMethods","set","key","value","saver","stringify","setItem","get","item","getItem","remove","removeItem","enumerateKeys","keys","i","len","length","push","bind","$scope","def","assign","$watch","exports","WeeChatProtocol","this","_types","chr","_getChar","int","_getInt","str","_getString","inf","_getInfo","hda","_getHdata","ptr","_getPointer","lon","_getStrNumber","tim","_getTime","buf","arr","_getArray","htb","_getHashTable","inl","_warnUnimplemented","_typesStr","_strDirect","_strToString","_weeChatColorsNames","_colorsOptionsNames","_getDefaultColor","type","name","_getDefaultAttributes","override","bold","reverse","italic","underline","_getDefaultStyle","fgColor","bgColor","attrs","_cloneColor","color","clone","_cloneAttrs","attr","_attrNameFromChar","ch","chars","*","!","/","_","\u0001","\u0002","\u0003","\u0004","_attrsFromStr","charAt","attrName","_getColorObj","code","parseInt","codeStr","substring","toString","_getStyle","txt","matchers","regex","fn","m","ret","optionCode","optionName","text","some","matcher","match","rawText2Rich","rawText","parts","split","curFgColor","curBgColor","curAttrs","curSpecialToken","curAttrsOnlyFalseOverrides","map","p","firstCharCode","charCodeAt","firstChar","style","orideVal","orideName","allReset","filter","_uia2s","uia","encodedString","String","fromCharCode","apply","decodedString","decodeURIComponent","escape","exception","s","n","_mergeParams","defaults","v","_formatCmd","id","cmdIdName","cmd","unshift","join","replace","formatInit","params","defaultParams","password","compression","formatHdata","path","formatInfo","formatNicklist","buffer","formatInput","data","_formatSyncDesync","cmdName","buffers","options","formatSync","formatDesync","formatTest","formatQuit","formatPing","args","prototype","_getType","t","_getSlice","Uint8Array","_runType","cb","boundCb","_getByte","obj","_objToString","info","runType","tmp","pointers","paths","self","forEach","objs","count","hpath","Date","parsedData","l","_getHeader","comp","_getId","_getObject","content","typeKeys","typeValues","dict","keyStr","values","dataAt","_data","byteLength","slice","_dataAt","_setData","setId","command","header","raw","inflate","Zlib","Inflate","plain","decompress","objects","object","msg","Protocol","weeChat","IrcUtils","service","escapeRegExp","_ciNickList","nickList","newList","sortBy","nickObj","spokeAt","pluck","_completeSingleNick","candidate","foundNick","nick","toLowerCase","search","_nextNick","iterCandidate","currentNick","matchingNicks","at","lcIterCandidate","lcCurrentNick","lcNick","completeNick","caretPos","suf","doIterate","searchNickList","beforeCaret","afterCaret","RegExp","newNick","weechat","$compileProvider","compileProvider","config","debugInfoEnabled","controller","$rootScope","$store","$timeout","$log","models","connection","notifications","utils","settings","openBuffer","channel","$apply","themes","setDefaults","theme","host","port","ssl","location","protocol","savepassword","autoconnect","nonicklist","isMobileUi","noembed","onlyUnread","hotlistsync","orderbyserver","useFavico","showtimestamp","showtimestampSeconds","fontsize","fontfamily","readlineBindings","enableJSEmoji","enableMathjax","countWatchers","scope","q","watchers","pop","$$watchers","$$childHead","$$nextSibling","debug","isinstalled","navigator","mozApps","getSelf","onsuccess","evt","app","target","result","document","hidden","documentHidden","documentVisibilityChange","webkitHidden","mozHidden","msHidden","f","segs","indexOf","debugMode","reloadWithDebugInfo","isWindowFocused","isHidden","addEventListener","getActiveBuffer","unread","notification","$emit","$on","event","unreadSum","ab","minRetainUnread","lines","surplusLines","lines_per_screen","linesToRemove","Math","min","splice","requestedLines","lastSeen","allLinesFetched","bufferlines","nicklist","nicklistRequested","showNicklist","updateShowNicklist","requestNicklist","fullName","scrollWithBuffer","numLines","fetchMoreLines","then","bl","getElementById","lastScrollHeight","scrollHeight","scrollHeightObserver","newScrollHeight","updateBufferBottom","bufferBottom","setTimeout","onscroll","debounce","updateTitle","unreadCount","focus","sendHotlistClear","favico","Favico","animation","updateFavico","pageTitle","notificationStatus","cancelAll","reinitialize","connectbutton","getBuffers","activeBuffer","connected","waseverconnected","userdisconnect","reconnecting","addCallback","wasMobileUi","isSidebarVisible","getAttribute","showSidebar","setAttribute","each","getElementsByTagName","elem","blur","hideSidebar","sslError","securityError","errorMessage","connect","toggleSidebar","openNick","closeNick","predicate","reset","enabled","mathjax_init","script","head","createElement","opera","appendChild","src","oldThemeCSS","parentNode","removeChild","rel","href","media","changeClassStyle","setActiveBuffer","bufferId","version","bufferName","lastIndexOf","sendMessage","calculateNumLines","bufferlineElements","querySelectorAll","lineHeight","idx","clientHeight","areaHeight","querySelector","ceil","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","rescroll","loadingLines","bottom","eob","scrollIntoView","offsetTop","scrollTop","scrollToReadmarker","moreLines","sVal","scroll","sTop","abs","readmarker","parentElement","requestNotificationPermission","disconnect","reconnect","attemptReconnect","install","base_url","pathname","request","appRecord","launch","alert","onerror","error","showModal","elementId","closeModal","$event","closest","selector","matchesSelector","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","call","toggleAccordion","stopPropagation","preventDefault","siblings","children","childId","child","nodeType","hasUnread","isNicklistEmpty","switchToActivityBuffer","sortedBuffers","toggleNicklist","handleSearchBoxKey","keyCode","charCode","filteredBuffers","onbeforeunload","returnValue","init","hash","rawStr","atob","spl","$routeProvider","when","templateUrl","that","callbacks","cache","defineProperty","Object","enumerable","newVal","keyIdx","callback","classSelector","getElementsByClassName","getClassStyle","mobile_cutoff","body","clientWidth","Notification","requestPermission","status","permission","webkitNotifications","havePermission","checkPermission","model","shortName","rtitle","badge","textColor","createHighlight","message","title","numNotifications","prefix","icon","timeout","onshow","close","onclick","onclose","soundnotification","audioFile","soundHTML","innerHTML","storeIdx","defineProperties","$key","$idx","configurable","channelRegex","substitute","hexColourRegex","rgbColourRegex","$filter","$sce","escape_html","entities","<",">","\"","'","&","char","extraArgument","arguments","thirdArgument","filterFunction","el","process","node","input","nodeValue","newNode","parent","sibling","nextSibling","insertBefore","firstChild","nextNode","trustAsHtml","$quickKey","number","sort","left","right","enable_JS_Emoji","emojione","unicodeToImage","math","MathJax","Hub","Queue","isNaN","plugins","handleVersionInfo","c","handleBufferClosing","bufferMessage","closeBuffer","handleLine","line","manually","BufferLine","getBuffer","displayed","PluginManager","contentForMessage","addLine","active","notify","contains","tags","highlight","handleBufferInfo","bufferInfos","handleBufferUpdate","Buffer","addBuffer","short_name","trimmedName","local_variables","indent","handleBufferLineAdded","handleBufferOpened","handleBufferTitleChanged","old","full_name","parseRichText","handleBufferRenamed","position","outgoingQueries","handleBufferHidden","handleBufferUnhidden","handleBufferLocalvarChanged","localvars","handleLineInfo","handleHotlistInfo","hotlist","reduce","memo","num","handleNicklist","group","g","NickGroup","Nick","addNick","handleNicklistDiff","d","_diff","delNick","updateNick","eventHandlers","_buffer_closing","_buffer_line_added","_buffer_localvar_added","_buffer_localvar_removed","_buffer_localvar_changed","_buffer_opened","_buffer_title_changed","_buffer_renamed","_buffer_hidden","_buffer_unhidden","_nicklist","_nicklist_diff","has","handleEvent","handlers","ngWebsockets","reconnectTimer","connectionData","passwd","noCompression","successCallback","failCallback","proto","url","onopen","_initializeConnection","send","_requestHotlist","_requestBufferInfos","_requestSync","bufinfo","passwordError","onmessage","handleClose","lastError","now","readyState","failCallbacks","binaryType","clearTimeout","getActiveBufferReference","sendCoreCommand","max","lineinfo","oldLength","hadAllUnreadLines","linesReceivedCount","directive","inputId","$element","inputChanged","shortnameToUnicode","getInputNode","inputNode","selectionStart","nickComp","getNicklistByTime","setSelectionRange","addToHistory","confirm","clear","opencommands","spacepos","firstword","substr","index","queryName","addMention","newValue","addColon","trimmedValue","trim","lastSpace","lastWord","handleKeyPress","altg","getModifierState","showQuickKeys","tmpIterCandidate","altKey","ctrlKey","activeBufferId","bufferNumber","$parent","filteredBufferNum","previousBuffer","getPreviousBuffer","modals","modalId","lastEscape","activeElement","getHistoryUp","getHistoryDown","shiftKey","handleKeyRelease","quickKeysTimer","plugin","displayedContent","visible","nsfw","className","$$hashKey","getElement","hideContent","showContent","automated","embed","Function","wasBottom","scrollIntoViewIfNeeded","websockets","$q","ws","currentCallBackId","reason","reject","getCurrentCallBackId","createCallback","promise","defer","cbId","time","sendAll","messages","promises","all","resolve","protocol_","properties","WebSocket","property","nickGetColorClasses","nickMsg","propName","colorName","nickGetClasses","textElements","typeToClassPrefixFg","option","ext","typeToClassPrefixBg","textEl","classes","pointer","history","historyPos","serverSortKey","updateNickSpeak","nicks","nickGroup","newlist","a","b","currentLine","hasOwnProperty","date","shortTime","tags_array","rtext","colorClasses","prefixClasses","nameClasses","find","firstBuffer","Plugin","exclusive","urlRegexp","UrlPlugin","urlCallback","urls","userPlugins","PluginManagerObject","registerPlugins","nsfwRegexp","metadata","addPluginContent","pluginName","pluginContent","Array","j","jsonp","callbackName","round","random","spotifyPlugin","addMatch","element","prop","youtubePlugin","token","embedurl","dailymotionPlugin","rPath","rAnchor","rShorten","allocinePlugin","rVideokast","rCmedia","imagePlugin","imgElem","append","addClass","videoPlugin","velement","cloudmusicPlugin","googlemapPlugin","asciinemaPlugin","regexp","scriptElem","async","yrPlugin","language","city","ielement","gistPlugin","stylesheet","div","giphyPlugin","gelement","tweetPlugin","scriptIndex","html","vinePlugin"],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["js/localstorage.js","js/weechat.js","js/irc-utils.js","js/glowingbear.js","js/settings.js","js/utils.js","js/notifications.js","js/filters.js","js/handlers.js","js/connection.js","js/file-change.js","js/imgur-drop-directive.js","js/whenscrolled-directive.js","js/inputbar.js","js/plugin-directive.js","js/websockets.js","js/models.js","js/plugins.js","js/imgur.js"],"names":["ls","angular","module","factory","$parse","storage","window","localStorage","undefined","supported","JSON","console","log","privateMethods","parseValue","res","val","parse","parseFloat","isObject","e","publicMethods","set","key","value","saver","stringify","setItem","get","item","getItem","remove","removeItem","enumerateKeys","keys","i","len","length","push","bind","$scope","def","assign","$watch","exports","WeeChatProtocol","this","_types","chr","_getChar","int","_getInt","str","_getString","inf","_getInfo","hda","_getHdata","ptr","_getPointer","lon","_getStrNumber","tim","_getTime","buf","arr","_getArray","htb","_getHashTable","inl","_getInfolist","_typesStr","_strDirect","_strToString","_weeChatColorsNames","_colorsOptionsNames","_getDefaultColor","type","name","_getDefaultAttributes","override","bold","reverse","italic","underline","_getDefaultStyle","fgColor","bgColor","attrs","_cloneColor","color","clone","_cloneAttrs","attr","_attrNameFromChar","ch","chars","*","!","/","_","\u0001","\u0002","\u0003","\u0004","_attrsFromStr","charAt","attrName","_getColorObj","code","parseInt","codeStr","substring","toString","_getStyle","txt","matchers","regex","fn","m","ret","optionCode","optionName","text","some","matcher","match","rawText2Rich","rawText","parts","split","curFgColor","curBgColor","curAttrs","curSpecialToken","curAttrsOnlyFalseOverrides","map","p","firstCharCode","charCodeAt","firstChar","style","orideVal","orideName","allReset","filter","_uia2s","uia","encodedString","String","fromCharCode","apply","decodedString","decodeURIComponent","escape","exception","s","n","_mergeParams","defaults","v","_formatCmd","id","cmdIdName","cmd","unshift","join","replace","formatInit","params","defaultParams","password","compression","formatHdata","path","formatInfo","formatInfolist","pointer","args","formatNicklist","buffer","formatInput","data","_formatSyncDesync","cmdName","buffers","options","formatSync","formatDesync","formatTest","formatQuit","formatPing","prototype","_warnUnimplemented","_getType","t","_getSlice","Uint8Array","_runType","cb","boundCb","_getByte","obj","_objToString","info","runType","tmp","pointers","paths","self","forEach","objs","count","hpath","Date","parsedData","l","_getHeader","comp","_getId","_getObject","content","typeKeys","typeValues","dict","keyStr","values","itemcount","litem","j","dataAt","_data","byteLength","slice","_dataAt","_setData","setId","command","optionsValues","header","raw","inflate","Zlib","Inflate","plain","decompress","objects","object","msg","Protocol","weeChat","IrcUtils","service","escapeRegExp","_ciNickList","nickList","newList","sortBy","nickObj","spokeAt","pluck","_completeSingleNick","candidate","foundNick","nick","toLowerCase","search","_nextNick","iterCandidate","currentNick","matchingNicks","at","lcIterCandidate","lcCurrentNick","lcNick","completeNick","caretPos","suf","doIterate","searchNickList","beforeCaret","afterCaret","RegExp","newNick","weechat","$compileProvider","compileProvider","config","debugInfoEnabled","controller","$rootScope","$store","$timeout","$log","models","connection","notifications","utils","settings","openBuffer","channel","$apply","themes","setDefaults","theme","host","port","ssl","location","protocol","savepassword","autoconnect","nonicklist","isMobileUi","noembed","onlyUnread","hotlistsync","orderbyserver","useFavico","showtimestamp","showtimestampSeconds","soundnotification","fontsize","fontfamily","readlineBindings","enableJSEmoji","enableMathjax","customCSS","countWatchers","debug","$$watchersCount","isinstalled","navigator","mozApps","getSelf","onsuccess","evt","app","target","result","document","hidden","documentHidden","documentVisibilityChange","webkitHidden","mozHidden","msHidden","f","segs","indexOf","debugMode","reloadWithDebugInfo","isWindowFocused","isHidden","addEventListener","getActiveBuffer","unread","notification","$emit","$on","event","unreadSum","ab","minRetainUnread","lines","surplusLines","lines_per_screen","linesToRemove","Math","min","splice","requestedLines","lastSeen","allLinesFetched","bufferlines","nicklist","nicklistRequested","showNicklist","updateShowNicklist","requestNicklist","scrollWithBuffer","numLines","fetchMoreLines","then","bl","getElementById","lastScrollHeight","scrollHeight","scrollHeightObserver","newScrollHeight","updateBufferBottom","bufferBottom","setTimeout","onscroll","debounce","updateTitle","unreadCount","focus","fullName","sendHotlistClear","favico","Favico","animation","updateFavico","pageTitle","notificationStatus","cancelAll","reinitialize","connectbutton","connectbuttonicon","getBuffers","activeBuffer","connected","waseverconnected","userdisconnect","reconnecting","addCallback","newvalue","wasMobileUi","isSidebarVisible","getAttribute","showSidebar","setAttribute","each","getElementsByTagName","elem","blur","hideSidebar","sslError","securityError","errorMessage","connect","toggleSidebar","openNick","closeNick","predicate","reset","enabled","mathjax_init","script","head","createElement","opera","appendChild","src","oldThemeCSS","parentNode","removeChild","rel","href","media","css","old_css","new_css","createTextNode","heads","changeClassStyle","setActiveBuffer","bufferId","version","bufferName","lastIndexOf","sendMessage","calculateNumLines","bufferlineElements","querySelectorAll","lineHeight","idx","clientHeight","areaHeight","querySelector","ceil","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","rescroll","loadingLines","infiniteScroll","bottom","eob","scrollIntoView","offsetTop","scrollTop","scrollToReadmarker","moreLines","sVal","scroll","sTop","abs","readmarker","parentElement","requestNotificationPermission","disconnect","reconnect","attemptReconnect","install","base_url","pathname","request","appRecord","launch","alert","onerror","error","showModal","elementId","closeModal","$event","closest","selector","matchesSelector","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","call","toggleAccordion","stopPropagation","preventDefault","siblings","children","childId","child","nodeType","hasUnread","isNicklistEmpty","switchToActivityBuffer","sortedBuffers","toggleNicklist","switchToAdjacentBuffer","direction","index","newBuffer","handleSearchBoxKey","keyCode","charCode","filteredBuffers","supports_formatting_date","toLocaleDateString","onbeforeunload","returnValue","init","hash","rawStr","atob","spl","$routeProvider","when","templateUrl","that","callbacks","cache","defineProperty","Object","enumerable","newVal","keyIdx","callback","callNow","classSelector","getElementsByClassName","getClassStyle","mobile_cutoff","body","clientWidth","serviceworker","Notification","requestPermission","status","permission","webkitNotifications","havePermission","checkPermission","serviceWorker","register","reg","catch","err","showNotification","title","ready","registration","icon","vibrate","tag","Windows","UI","Notifications","winNotifications","toastNotifier","ToastNotificationManager","createToastNotifier","template","ToastTemplateType","toastText02","toastXml","getTemplateContent","toastTextElements","toast","ToastNotification","onactivated","show","timeout","onshow","close","onclick","onclose","model","shortName","rtitle","badge","textColor","createHighlight","message","numNotifications","prefix","server","audioFile","soundHTML","innerHTML","pop","storeIdx","defineProperties","$key","$idx","configurable","channelRegex","substitute","hexColourRegex","rgbColourRegex","$filter","$sce","filtersThatCreateAnchors","createsAnchor","escape_html","entities","<",">","\"","'","&","char","extraArgument","arguments","thirdArgument","filterFunction","el","process","node","input","nodeValue","newNode","parent","sibling","nextSibling","insertBefore","firstChild","nextNode","tagName","trustAsHtml","$quickKey","number","sort","left","right","enable_JS_Emoji","emojione","emojiRegex","test","unicodeToImage","math","MathJax","Hub","Queue","isNaN","plugins","handleVersionInfo","c","handleConfValue","infolist","confitem","full_name","wconfig","handleBufferClosing","bufferMessage","closeBuffer","injectDateChangeMessageIfNeeded","manually","old_date","new_date","bufferType","setHours","valueOf","old_date_plus_one","setDate","getDate","language","weekday","dow_to_word","getDay","extra_date_format","day","month","getYear","year","month_to_word","getMonth","getFullYear","date_diff","round","line","date","tags_array","displayed","highlight","new_message","BufferLine","addLine","handleLine","getBuffer","PluginManager","contentForMessage","active","notify","contains","tags","handleBufferInfo","bufferInfos","handleBufferUpdate","Buffer","addBuffer","short_name","trimmedName","local_variables","indent","handleBufferLineAdded","handleBufferOpened","handleBufferTitleChanged","old","parseRichText","handleBufferRenamed","position","outgoingQueries","handleBufferHidden","handleBufferUnhidden","handleBufferLocalvarChanged","localvars","plugin","serverSortKey","handleBufferTypeChanged","handleLineInfo","last_line","last_date","handleHotlistInfo","hotlist","reduce","memo","num","handleNicklist","group","g","NickGroup","Nick","addNick","handleNicklistDiff","d","_diff","delNick","updateNick","eventHandlers","_buffer_closing","_buffer_line_added","_buffer_localvar_added","_buffer_localvar_removed","_buffer_localvar_changed","_buffer_opened","_buffer_title_changed","_buffer_type_changed","_buffer_renamed","_buffer_hidden","_buffer_unhidden","_nicklist","_nicklist_diff","has","handleEvent","handlers","ngWebsockets","reconnectTimer","connectionData","passwd","noCompression","successCallback","failCallback","passwordError","proto","url","onopen","_initializeConnection","send","_requestHotlist","_requestBufferInfos","_requestSync","bufinfo","handleWrongPassword","onmessage","handleClose","lastError","now","readyState","failCallbacks","binaryType","clearTimeout","getActiveBufferReference","sendCoreCommand","max","lineinfo","oldLength","hadAllUnreadLines","linesReceivedCount","directive","restrict","link","element","attrHandler","fileChange","handler","files","imgur","ondragover","classList","add","ondragend","ondrop","dataTransfer","sendImageUrl","imageUrl","insertAtCaret","scope","elm","fun","whenScrolled","inputId","$element","inputChanged","shortnameToUnicode","getInputNode","inputNode","selectionStart","nickComp","getNicklistByTime","setSelectionRange","toInsert","suffix","concat","pos","uploadImage","addToHistory","confirm","clear","opencommands","spacepos","firstword","substr","queryName","addMention","newValue","addColon","trimmedValue","trim","lastSpace","lastWord","handleKeyPress","altg","getModifierState","showQuickKeys","tmpIterCandidate","altKey","ctrlKey","activeBufferId","bufferNumber","$parent","filteredBufferNum","previousBuffer","getPreviousBuffer","modals","modalId","lastEscape","activeElement","getHistoryUp","getHistoryDown","shiftKey","handleKeyRelease","quickKeysTimer","displayedContent","visible","nsfw","className","$$hashKey","getElement","hideContent","showContent","automated","embed","Function","wasBottom","scrollIntoViewIfNeeded","websockets","$q","ws","currentCallBackId","reason","reject","getCurrentCallBackId","createCallback","promise","defer","cbId","time","sendAll","messages","promises","all","resolve","protocol_","properties","WebSocket","property","nickGetColorClasses","nickMsg","propName","colorName","nickGetClasses","textElements","typeToClassPrefixFg","option","ext","typeToClassPrefixBg","textEl","classes","history","historyPos","updateNickSpeak","nicks","nickGroup","newlist","a","b","currentLine","hasOwnProperty","shortTime","rtext","colorClasses","prefixClasses","nameClasses","find","firstBuffer","Plugin","exclusive","urlRegexp","UrlPlugin","urlCallback","urls","userPlugins","PluginManagerObject","registerPlugins","nsfwRegexp","metadata","addPluginContent","pluginName","pluginContent","Array","jsonp","callbackName","random","spotifyPlugin","addMatch","prop","youtubePlugin","token","embedurl","dailymotionPlugin","rPath","rAnchor","rShorten","allocinePlugin","rVideokast","rCmedia","imagePlugin","dbox_url","dbox_params","dl_added","imgElem","append","addClass","audioPlugin","aelement","videoPlugin","velement","cloudmusicPlugin","googlemapPlugin","asciinemaPlugin","regexp","scriptElem","async","yrPlugin","city","ielement","gistPlugin","stylesheet","div","giphyPlugin","gelement","tweetPlugin","scriptIndex","html","vinePlugin","image","reader","FileReader","onload","upload","readAsDataURL","base64img","clientId","progressBars","currentProgressBar","width","fd","FormData","xhttp","XMLHttpRequest","open","setRequestHeader","response","responseText","showErrorMsg","onprogress","lengthComputable","complete","loaded","total","uploadError"],"mappings":"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","file":"min.js"} \ No newline at end of file diff --git a/package.json b/package.json index d7658a2..4c8bea2 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,36 @@ { "name": "glowing-bear", "private": true, - "version": "0.5.2", + "version": "0.6.0", "description": "A web client for Weechat", "repository": "https://github.com/glowing-bear/glowing-bear", "license": "GPLv3", "devDependencies": { - "karma": "~0.10", - "protractor": "~0.20.1", - "http-server": "^0.6.1", "bower": "^1.3.1", - "shelljs": "^0.2.6", + "http-server": "^0.6.1", + "jasmine-core": "^2.4.1", "jshint": "^2.5.2", + "karma": "~0.13", + "karma-jasmine": "^0.3.6", "karma-junit-reporter": "^0.2.2", + "karma-phantomjs-launcher": "^0.2.1", + "phantomjs": "^1.9.19", + "protractor": "~0.20.1", + "shelljs": "^0.2.6", "uglify-js": "^2.4" }, "scripts": { "postinstall": "bower install", - - "minify": " uglifyjs js/localstorage.js js/weechat.js js/irc-utils.js js/glowingbear.js js/settings.js js/utils.js js/notifications.js js/filters.js js/handlers.js js/connection.js js/inputbar.js js/plugin-directive.js js/websockets.js js/models.js js/plugins.js -c -m --screw-ie8 -o min.js --source-map min.map", - + "minify": " uglifyjs js/localstorage.js js/weechat.js js/irc-utils.js js/glowingbear.js js/settings.js js/utils.js js/notifications.js js/filters.js js/handlers.js js/connection.js js/file-change.js js/imgur-drop-directive.js js/whenscrolled-directive.js js/inputbar.js js/plugin-directive.js js/websockets.js js/models.js js/plugins.js js/imgur.js -c -m --screw-ie8 -o min.js --source-map min.map", "prestart": "npm install", "start": "http-server -a localhost -p 8000", - "pretest": "npm install", "test": "karma start test/karma.conf.js", "test-single-run": "karma start test/karma.conf.js --single-run", - "preupdate-webdriver": "npm install", "update-webdriver": "webdriver-manager update", - "preprotractor": "npm run update-webdriver", "protractor": "protractor test/protractor-conf.js", - "update-index-async": "node -e \"require('shelljs/global'); sed('-i', /\\/\\/@@NG_LOADER_START@@[\\s\\S]*\\/\\/@@NG_LOADER_END@@/, '//@@NG_LOADER_START@@\\n' + cat('app/bower_components/angular-loader/angular-loader.min.js') + '\\n//@@NG_LOADER_END@@', 'app/index-async.html');\"" } } diff --git a/serviceworker.js b/serviceworker.js new file mode 100644 index 0000000..7a549b6 --- /dev/null +++ b/serviceworker.js @@ -0,0 +1,46 @@ +// File needs to be stored in the root of the app. + +this.addEventListener('install', function(event) { + event.waitUntil( + caches.open('v1').then(function(cache) { + return cache.addAll([ + 'assets/img/glowing_bear_128x128.png', + ]); + }) + ); +}); + +this.addEventListener('push', function(event) { + // TODO, support GCM here + var title = 'Push message'; + event.waitUntil( + self.registration.showNotification(title, { + body: 'The Message', + icon: 'assets/img/favicon.png', + tag: 'my-tag' + })); +}); + +this.onnotificationclick = function(event) { + // Android doesn't close the notification when you click on it + // See: http://crbug.com/463146 + event.notification.close(); + + // This looks to see if the current is already open and + // focuses if it is + event.waitUntil(clients.matchAll({ + type: "window" + }).then(function(clientList) { + for (var i = 0; i < clientList.length; i++) { + var client = clientList[i]; + if ('focus' in client) { + return client.focus(); + } + } + /* + if (clients.openWindow) { + return clients.openWindow('/glowing-bear/'); + } + */ + })); +}; diff --git a/test/unit/filters.js b/test/unit/filters.js index ca1228e..2b1358f 100644 --- a/test/unit/filters.js +++ b/test/unit/filters.js @@ -22,6 +22,13 @@ describe('Filters', function() { it('should not mess up IRC channels surrounded by HTML entities', inject(function(irclinkyFilter) { expect(irclinkyFilter('<"#foo">')).toEqual('<"\');">#foo">'); })); + + it('should not touch links created by `linky`', inject(function(linkyFilter, DOMfilterFilter) { + var url = 'http://foo.bar/#baz', + link = linkyFilter(url, '_blank'), + result = DOMfilterFilter(link, 'irclinky').$$unwrapTrustedValue(); + expect(result).toEqual(link); + })); }); describe('inlinecolour', function() { @@ -62,4 +69,27 @@ describe('Filters', function() { })); }); + describe('DOMfilter', function() { + it('should run a filter on all text nodes', 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) { + 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(linkyFilter, DOMfilterFilter) { + var msg = '#crash http://google.com', + linked = linkyFilter(msg), + irclinked = DOMfilterFilter(linked, 'irclinky'); + // With the bug, the DOMfilterFilter call ends up in an infinite loop. + // I.e. if we ever got this far, the bug is fixed. + })); + }); }); diff --git a/webapp.manifest.json b/webapp.manifest.json new file mode 100644 index 0000000..8367491 --- /dev/null +++ b/webapp.manifest.json @@ -0,0 +1,33 @@ +{ + "lang": "en-US", + "name": "Glowing Bear", + "short_name": "Glowing Bear", + "icons": [{ + "src": "assets/img/glowing_bear_60x60.png", + "sizes": "60x60", + "type": "image/webapp" + }, { + "src": "assets/img/glowing_bear_90x90.png", + "sizes": "90x90" + }, { + "src": "assets/img/glowing_bear_128x128.png", + "sizes": "128x128" + }], + "splash_screens": [{ + "src": "assets/img/glowing_bear_128x128.png", + "sizes": "128x128" + }], + "scope": "/glowing-bear/", + "start_url": "/glowing-bear/index.html", + "display": "standalone", + "orientation": "portrait-primary", + "theme_color": "#181818", + "background_color": "#333", + "prefer_related_applications": "false", + "chrome_related_applications": [{ + "platform": "web" + }, { + "platform": "android", + "location": "https://play.google.com/store/apps/details?id=com.glowing_bear" + }] +}