From f505b260e2bfe3d05ae93a09255c9a4f8a61081c Mon Sep 17 00:00:00 2001 From: Christine Ho Date: Fri, 24 Oct 2014 00:09:51 +0200 Subject: [PATCH] - beginning of angular version of the roster - added angular-filter "plugin"...not sure it will stay - added ng-app in html tag of page.tpl - replaced classical roster by angular version in main.tpl - deactivated events listening in classical roster --- app/views/main.tpl | 5 +- app/views/page.tpl | 6 +- app/widgets/Roster/Roster.php | 10 +- app/widgets/RosterAngular/RosterAngular.php | 340 +++++++++++++++++ app/widgets/RosterAngular/_roster_contact.tpl | 50 +++ app/widgets/RosterAngular/_roster_list.tpl | 16 + app/widgets/RosterAngular/angular-filters.js | 6 + app/widgets/RosterAngular/angular.js | 216 +++++++++++ app/widgets/RosterAngular/img/background.png | Bin 0 -> 16871 bytes app/widgets/RosterAngular/img/bubbles.svg | 6 + app/widgets/RosterAngular/img/call.svg | 65 ++++ .../RosterAngular/img/clients/adium.png | Bin 0 -> 1762 bytes .../RosterAngular/img/clients/empathy.png | Bin 0 -> 1222 bytes .../RosterAngular/img/clients/gajim.png | Bin 0 -> 870 bytes .../RosterAngular/img/clients/gtalk.png | Bin 0 -> 1304 bytes .../RosterAngular/img/clients/ichat.png | Bin 0 -> 1095 bytes .../RosterAngular/img/clients/miranda.png | Bin 0 -> 1277 bytes .../RosterAngular/img/clients/pidgin.png | Bin 0 -> 1660 bytes app/widgets/RosterAngular/img/clients/psi.png | Bin 0 -> 1437 bytes app/widgets/RosterAngular/img/clients/qip.png | Bin 0 -> 1401 bytes .../RosterAngular/img/clients/xabber.png | Bin 0 -> 1436 bytes app/widgets/RosterAngular/img/earth.svg | 6 + app/widgets/RosterAngular/img/microphone.svg | 7 + app/widgets/RosterAngular/img/mobile.svg | 6 + app/widgets/RosterAngular/img/music.svg | 6 + app/widgets/RosterAngular/img/robot.png | Bin 0 -> 364 bytes app/widgets/RosterAngular/img/search.png | Bin 0 -> 337 bytes app/widgets/RosterAngular/locales.ini | 12 + app/widgets/RosterAngular/roster.css | 310 ++++++++++++++++ app/widgets/RosterAngular/roster.js | 351 ++++++++++++++++++ app/widgets/RosterAngular/rosterangular.tpl | 80 ++++ 31 files changed, 1489 insertions(+), 9 deletions(-) create mode 100644 app/widgets/RosterAngular/RosterAngular.php create mode 100644 app/widgets/RosterAngular/_roster_contact.tpl create mode 100644 app/widgets/RosterAngular/_roster_list.tpl create mode 100644 app/widgets/RosterAngular/angular-filters.js create mode 100644 app/widgets/RosterAngular/angular.js create mode 100644 app/widgets/RosterAngular/img/background.png create mode 100644 app/widgets/RosterAngular/img/bubbles.svg create mode 100644 app/widgets/RosterAngular/img/call.svg create mode 100644 app/widgets/RosterAngular/img/clients/adium.png create mode 100644 app/widgets/RosterAngular/img/clients/empathy.png create mode 100644 app/widgets/RosterAngular/img/clients/gajim.png create mode 100644 app/widgets/RosterAngular/img/clients/gtalk.png create mode 100644 app/widgets/RosterAngular/img/clients/ichat.png create mode 100644 app/widgets/RosterAngular/img/clients/miranda.png create mode 100644 app/widgets/RosterAngular/img/clients/pidgin.png create mode 100644 app/widgets/RosterAngular/img/clients/psi.png create mode 100644 app/widgets/RosterAngular/img/clients/qip.png create mode 100644 app/widgets/RosterAngular/img/clients/xabber.png create mode 100644 app/widgets/RosterAngular/img/earth.svg create mode 100644 app/widgets/RosterAngular/img/microphone.svg create mode 100644 app/widgets/RosterAngular/img/mobile.svg create mode 100644 app/widgets/RosterAngular/img/music.svg create mode 100644 app/widgets/RosterAngular/img/robot.png create mode 100644 app/widgets/RosterAngular/img/search.png create mode 100644 app/widgets/RosterAngular/locales.ini create mode 100644 app/widgets/RosterAngular/roster.css create mode 100644 app/widgets/RosterAngular/roster.js create mode 100644 app/widgets/RosterAngular/rosterangular.tpl diff --git a/app/views/main.tpl b/app/views/main.tpl index d2b04fd6a..bd9a3d4cf 100644 --- a/app/views/main.tpl +++ b/app/views/main.tpl @@ -21,5 +21,8 @@ diff --git a/app/views/page.tpl b/app/views/page.tpl index 22583447e..619af5564 100644 --- a/app/views/page.tpl +++ b/app/views/page.tpl @@ -2,7 +2,7 @@ $cd = new \Modl\ConfigDAO(); $config = $cd->get(); ?> - + <?php $this->title();?> @@ -10,8 +10,8 @@ - - + + diff --git a/app/widgets/Roster/Roster.php b/app/widgets/Roster/Roster.php index 06679b30e..b0d52ef0d 100644 --- a/app/widgets/Roster/Roster.php +++ b/app/widgets/Roster/Roster.php @@ -28,11 +28,11 @@ class Roster extends WidgetBase { $this->addcss('roster.css'); $this->addjs('roster.js'); - $this->registerEvent('roster', 'onRoster'); - $this->registerEvent('rosterupdateditem', 'onRoster'); - $this->registerEvent('contactadd', 'onRoster'); - $this->registerEvent('contactremove', 'onRoster'); - $this->registerEvent('presence', 'onPresence'); + //$this->registerEvent('roster', 'onRoster'); + //$this->registerEvent('rosterupdateditem', 'onRoster'); + //$this->registerEvent('contactadd', 'onRoster'); + //$this->registerEvent('contactremove', 'onRoster'); + //$this->registerEvent('presence', 'onPresence'); } function display() diff --git a/app/widgets/RosterAngular/RosterAngular.php b/app/widgets/RosterAngular/RosterAngular.php new file mode 100644 index 000000000..247e03462 --- /dev/null +++ b/app/widgets/RosterAngular/RosterAngular.php @@ -0,0 +1,340 @@ + + * + * @version 1.0 + * @date 30 August 2010 + * + * Copyright (C)2010 MOVIM project + * + * See COPYING for licensing information. + */ + +use Moxl\Xec\Action\Roster\GetList; + +class RosterAngular extends WidgetBase +{ + private $grouphtml; + + function load() + { + $this->addcss('roster.css'); + $this->addjs('angular.js'); + $this->addjs('angular-filters.js'); + $this->addjs('roster.js'); + $this->registerEvent('roster', 'onRoster'); + /*$this->registerEvent('rosterupdateditem', 'onRoster'); + $this->registerEvent('contactadd', 'onRoster'); + $this->registerEvent('contactremove', 'onRoster'); + $this->registerEvent('presence', 'onPresence');*/ + } + + function display() + { + /*$this->view->assign('offline_shown', ''); + $offline_state = Cache::c('offlineshown'); + + $bool = Cache::c('rostershow'); + if($bool) + $this->view->assign('roster_show', 'hide'); + else + $this->view->assign('roster_show', ''); + + if($offline_state == true) + $this->view->assign('offline_shown', 'offlineshown'); + + $this->view->assign('toggle_cache', $this->genCallAjax('ajaxToggleCache', "'offlineshown'")); + $this->view->assign('search_contact', $this->genCallAjax('ajaxSearchContact','this.value')); + + $this->view->assign('rosterlist', $this->prepareRoster());*/ + } + + function onPresence($packet) + { + $c = $packet->content; + + if($c != null) { + $html = $this->prepareContact($c, $this->getCaps()); + + if($c[0]->groupname == null) + $group = t('Ungrouped'); + else + $group = $c[0]->groupname; + + RPC::call( + 'movim_delete', + $c[0]->jid, + $html /* this second parameter is just to bypass the RPC filter */); + + RPC::call('movim_append', 'group'.$group, $html); + RPC::call('sortRoster'); + } + } + + function onRoster($jid) + { + //$html = $this->prepareRoster(); + $contactsArray = $this->prepareRosterAngular(); + //RPC::call('movim_fill', 'rosterlist', $html); + //RPC::call('sortRoster'); + RPC::call('getContacts', $contactsArray); + } + + /** + * @brief Force the roster refresh + * @returns + */ + function ajaxRefreshRoster() + { + $r = new GetList; + $r->request(); + } + + /** + * @brief Generate the HTML for a roster contact + * @param $contact + * @returns + */ + function prepareContact($contact, $caps) + { + $arr = array(); + $jid = false; + + // The global presence + $presence = false; + $name = false; + + $presencestxt = getPresencesTxt(); + + foreach($contact as $c) { + // We add some basic information + $arr[$c->ressource] = $c->toArray(); + $arr[$c->ressource]['avatar'] = $c->getPhoto('s'); + $arr[$c->ressource]['name'] = $c->getTrueName(); + + // Some data relative to the presence + if($c->last != null && $c->last > 60) + $arr[$c->ressource]['inactive'] = 'inactive'; + else + $arr[$c->ressource]['inactive'] = ''; + + if($c->value && $c->value < 5) { + $arr[$c->ressource]['presencetxt'] = $presencestxt[$c->value]; + } elseif($c->value == 6) + $arr[$c->ressource]['presencetxt'] = 'server_error'; + else + $arr[$c->ressource]['presencetxt'] = 'offline'; + + if($presence == false) { + $presence = $arr[$c->ressource]['presencetxt']; + $name = strtolower($arr[$c->ressource]['name']); + } + + // An action to open the chat widget + $arr[$c->ressource]['openchat'] + = $this->genCallWidget("Chat","ajaxOpenTalk", "'".$c->jid."'"); + + $jid = $c->jid; + + $arr[$c->ressource]['type'] = ''; + $arr[$c->ressource]['client'] = ''; + $arr[$c->ressource]['jingle'] = false; + + // About the entity capability + if($caps && isset($caps[$c->node.'#'.$c->ver])) { + $cap = $caps[$c->node.'#'.$c->ver]; + $arr[$c->ressource]['type'] = $cap->type; + + $client = $cap->name; + $client = explode(' ',$client); + $arr[$c->ressource]['client'] = strtolower(preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', reset($client))); + + // Jingle support + $features = $cap->features; + $features = unserialize($features); + if(array_search('urn:xmpp:jingle:1', $features) !== null + && array_search('urn:xmpp:jingle:apps:rtp:audio', $features) !== null + && array_search('urn:xmpp:jingle:apps:rtp:video', $features) !== null + && ( array_search('urn:xmpp:jingle:transports:ice-udp:0', $features) + || array_search('urn:xmpp:jingle:transports:ice-udp:1', $features)) + ){ + $arr[$c->ressource]['jingle'] = true; + } + } + + // Tune + $arr[$c->ressource]['tune'] = false; + + if(($c->tuneartist != null && $c->tuneartist != '') || + ($c->tunetitle != null && $c->tunetitle != '')) + $arr[$c->ressource]['tune'] = true;; + } + + $contactview = $this->tpl(); + $contactview->assign('jid', $jid); + $contactview->assign('name', $name); + $contactview->assign('presence', $presence); + $contactview->assign('contact', $arr); + + return $contactview->draw('_roster_contact', true); + } + + private function getCaps() { + $capsdao = new \Modl\CapsDAO(); + $caps = $capsdao->getAll(); + + $capsarr = array(); + foreach($caps as $c) { + $capsarr[$c->node] = $c; + } + + return $capsarr; + } + + /** + * @brief Here we generate the roster + * @returns + * + */ + function prepareRoster() + { + + $contactdao = new \Modl\ContactDAO(); + $contacts = $contactdao->getRoster(); + $capsarr = $this->getCaps(); + + $roster = array(); + + $currentjid = false; + $currentarr = array(); + + if(isset($contacts)) { + foreach($contacts as $c) { + if($c->groupname == '') + $c->groupname = $this->__('roster.ungrouped'); + + if(!isset($roster[$c->groupname])) { + /*create new group in roster*/ + $roster[$c->groupname] = new stdClass; + $roster[$c->groupname]->contacts = array(); + $roster[$c->groupname]->html = ''; + + $roster[$c->groupname]->name = $c->groupname; + + $roster[$c->groupname]->shown = ''; + // get the current showing state of the group and the offline contacts + $state = Cache::c('group'.$c->groupname); + + if($state == false) + $roster[$c->groupname]->shown = 'groupshown'; + else + $roster[$c->groupname]->shown = ''; + + $roster[$c->groupname]->toggle = + $this->genCallAjax('ajaxToggleCache', "'group".$c->groupname."'"); + } + + if($c->jid == $currentjid) { + array_push($currentarr, $c); + $currenthtml = $this->prepareContact($currentarr, $capsarr); + } else { + $currentarr = array(); + $currenthtml = ''; + array_push($currentarr, $c); + $currenthtml = $this->prepareContact($currentarr, $capsarr); + $roster[$c->groupname]->html .= $currenthtml; + } + + $currentjid = $c->jid; + } + } + + $listview = $this->tpl(); + $listview->assign('refresh', $this->genCallAjax('ajaxRefreshRoster')); + $listview->assign('roster', $roster); + + return $listview->draw('_roster_list', true); + } + + /** + * @brief Toggling boolean variables in the Cache + * @param $param + * @returns + */ + function ajaxToggleCache($param){ + //$bool = !currentValue + $bool = (Cache::c($param) == true) ? false : true; + //toggling value in cache + Cache::c($param, $bool); + //$offline = new value of wether offline are shown or not + $offline = Cache::c('offlineshown'); + + if($param == 'offlineshown') { + if($bool) + Notification::appendNotification($this->__('roster.show_disconnected'), 'success'); + else + Notification::appendNotification($this->__('roster.hide_disconnected'), 'success'); + RPC::call('showRoster', $bool); + } else { + if($bool) + Notification::appendNotification($this->__('roster.hide_group',substr($param, 5)), 'success'); + else + Notification::appendNotification($this->__('roster.show_group',substr($param, 5)), 'success'); + RPC::call('rosterToggleGroup', $param, $bool, $offline); + + } + + RPC::call('focusContact'); + RPC::commit(); + } + + /** + * @brief Show/Hide the Roster + */ + function ajaxShowHideRoster() { + $bool = (Cache::c('rostershow') == true) ? false : true; + Cache::c('rostershow', $bool); + RPC::call('showHideRoster', $bool); + RPC::commit(); + } + + /** + * @brief Search for a contact to add + */ + function ajaxSearchContact($jid) { + if(filter_var($jid, FILTER_VALIDATE_EMAIL)) { + RPC::call('movim_redirect', Route::urlize('friend', $jid)); + RPC::commit(); + } else + Notification::appendNotification($this->__('roster.jid_error'), 'info'); + } + + + +/*=========*/ + function prepareRosterAngular(){ + $contactdao = new \Modl\ContactDAO(); + $contacts = $contactdao->getRoster(); + $groups = array(); + + foreach($contacts as &$contact){ + $contact = $contact->toArray(); + if($contact['groupname']) + movim_log($contact['groupname']); + } + + return json_encode($contacts); + } + +} + + +?> diff --git a/app/widgets/RosterAngular/_roster_contact.tpl b/app/widgets/RosterAngular/_roster_contact.tpl new file mode 100644 index 000000000..ff0985dc1 --- /dev/null +++ b/app/widgets/RosterAngular/_roster_contact.tpl @@ -0,0 +1,50 @@ +
  • + +
  • diff --git a/app/widgets/RosterAngular/_roster_list.tpl b/app/widgets/RosterAngular/_roster_list.tpl new file mode 100644 index 000000000..24be4dabb --- /dev/null +++ b/app/widgets/RosterAngular/_roster_list.tpl @@ -0,0 +1,16 @@ +{if="empty($roster)"} + + + {$c->__('roster.no_contacts')} +
    +
    + {$c->__('page.explore')} +
    +{else} + {loop="$roster"} +
    +

    {$key}

    + {$value->html} +
    + {/loop} +{/if} diff --git a/app/widgets/RosterAngular/angular-filters.js b/app/widgets/RosterAngular/angular-filters.js new file mode 100644 index 000000000..82ad4cda8 --- /dev/null +++ b/app/widgets/RosterAngular/angular-filters.js @@ -0,0 +1,6 @@ +/** + * Bunch of useful filters for angularJS(with no external dependencies!) + * @version v0.4.9 - 2014-10-14 * @link https://github.com/a8m/angular-filter + * @author Ariel Mashraki + * @license MIT License, http://www.opensource.org/licenses/MIT + */!function(a,b,c){"use strict";function d(a){return D(a)?a:Object.keys(a).map(function(b){return a[b]})}function e(a){return null===a}function f(a,b){var c=Object.keys(a);return-1==c.map(function(c){return!(!b[c]||b[c]!=a[c])}).indexOf(!1)}function g(a,b){if(""===b)return a;var c=a.indexOf(b.charAt(0));return-1===c?!1:g(a.substr(c+1),b.substr(1))}function h(a,b,c){var d=0;return a.filter(function(a){var e=x(c)?b>d&&c(a):b>d;return d=e?d+1:d,e})}function i(a,b,c){return c.round(a*c.pow(10,b))/c.pow(10,b)}function j(a,b,c){b=b||[];var d=Object.keys(a);return d.forEach(function(d){if(C(a[d])&&!D(a[d])){var e=c?c+"."+d:c;j(a[d],b,e||d)}else{var f=c?c+"."+d:d;b.push(f)}}),b}function k(){return function(a,b){return a>b}}function l(){return function(a,b){return a>=b}}function m(){return function(a,b){return b>a}}function n(){return function(a,b){return b>=a}}function o(){return function(a,b){return a==b}}function p(){return function(a,b){return a!=b}}function q(){return function(a,b){return a===b}}function r(){return function(a,b){return a!==b}}function s(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?!0:b.some(function(b){return C(b)||z(c)?a(c)(b):b===c})}}function t(a,b){return b=b||0,b>=a.length?a:D(a[b])?t(a.slice(0,b).concat(a[b],a.slice(b+1)),b):t(a,b+1)}function u(a){var b=[];return a.forEach(function(c,d){b.push(a[a.length-d-1])}),b}function v(a){return function(b,c){function e(a,b){return y(b)?!1:a.some(function(a){return H(a,b)})}if(b=C(b)?d(b):b,!D(b))return b;var f=[],g=a(c);return b.filter(y(c)?function(a,b,c){return c.indexOf(a)===b}:function(a){var b=g(a);return e(f,b)?!1:(f.push(b),!0)})}}function w(a,b,c){return b?a+c+w(a,--b,c):a}var x=b.isDefined,y=b.isUndefined,z=b.isFunction,A=b.isString,B=b.isNumber,C=b.isObject,D=b.isArray,E=b.forEach,F=b.extend,G=b.copy,H=b.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),b.module("a8m.angular",[]).filter("isUndefined",function(){return function(a){return b.isUndefined(a)}}).filter("isDefined",function(){return function(a){return b.isDefined(a)}}).filter("isFunction",function(){return function(a){return b.isFunction(a)}}).filter("isString",function(){return function(a){return b.isString(a)}}).filter("isNumber",function(){return function(a){return b.isNumber(a)}}).filter("isArray",function(){return function(a){return b.isArray(a)}}).filter("isObject",function(){return function(a){return b.isObject(a)}}).filter("isEqual",function(){return function(a,c){return b.equals(a,c)}}),b.module("a8m.conditions",[]).filter({isGreaterThan:k,">":k,isGreaterThanOrEqualTo:l,">=":l,isLessThan:m,"<":m,isLessThanOrEqualTo:n,"<=":n,isEqualTo:o,"==":o,isNotEqualTo:p,"!=":p,isIdenticalTo:q,"===":q,isNotIdenticalTo:r,"!==":r}),b.module("a8m.is-null",[]).filter("isNull",function(){return function(a){return e(a)}}),b.module("a8m.after-where",[]).filter("afterWhere",function(){return function(a,b){if(a=C(a)?d(a):a,!D(a)||y(b))return a;var c=a.map(function(a){return f(b,a)}).indexOf(!0);return a.slice(-1===c?0:c)}}),b.module("a8m.after",[]).filter("after",function(){return function(a,b){return a=C(a)?d(a):a,D(a)?a.slice(b):a}}),b.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(a,b){if(a=C(a)?d(a):a,!D(a)||y(b))return a;var c=a.map(function(a){return f(b,a)}).indexOf(!0);return a.slice(0,-1===c?a.length:++c)}}),b.module("a8m.before",[]).filter("before",function(){return function(a,b){return a=C(a)?d(a):a,D(a)?a.slice(0,b?--b:b):a}}),b.module("a8m.concat",[]).filter("concat",[function(){return function(a,b){if(y(b))return a;if(D(a))return a.concat(C(b)?d(b):b);if(C(a)){var c=d(a);return c.concat(C(b)?d(b):b)}return a}}]),b.module("a8m.contains",[]).filter({contains:["$parse",s],some:["$parse",s]}),b.module("a8m.count-by",[]).filter("countBy",["$parse",function(a){return function(b,c){var e,f={},g=a(c);return b=C(b)?d(b):b,!D(b)||y(c)?b:(b.forEach(function(a){e=g(a),f[e]||(f[e]=0),f[e]++}),f)}}]),b.module("a8m.defaults",[]).filter("defaults",["$parse",function(a){return function(b,c){if(b=C(b)?d(b):b,!D(b)||!C(c))return b;var e=j(c);return b.forEach(function(b){e.forEach(function(d){var e=a(d),f=e.assign;y(e(b))&&f(b,e(c))})}),b}}]),b.module("a8m.every",[]).filter("every",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?!0:b.every(function(b){return C(b)||z(c)?a(c)(b):b===c})}}]),b.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(a){return function(b,e,f){var g;return f=A(f)||B(f)?String(f).toLowerCase():c,b=C(b)?d(b):b,!D(b)||y(f)?b:b.filter(function(b){return e.some(function(c){if(~c.indexOf("+")){var d=c.replace(new RegExp("\\s","g"),"").split("+");g=d.reduce(function(c,d,e){return 1===e?a(c)(b)+" "+a(d)(b):c+" "+a(d)(b)})}else g=a(c)(b);return A(g)||B(g)?String(g).toLowerCase().contains(f):!1})})}}]),b.module("a8m.first",[]).filter("first",["$parse",function(a){return function(b){var e,f,g;return b=C(b)?d(b):b,D(b)?(g=Array.prototype.slice.call(arguments,1),e=B(g[0])?g[0]:1,f=B(g[0])?B(g[1])?c:g[1]:g[0],g.length?h(b,e,f?a(f):f):b[0]):b}}]),b.module("a8m.flatten",[]).filter("flatten",function(){return function(a,b){return b=b||!1,a=C(a)?d(a):a,D(a)?b?[].concat.apply([],a):t(a,0):a}}),b.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(a){return function(b,c,e,f){var h,i,j=f||!1;return b=C(b)?d(b):b,!D(b)||y(c)||y(e)?b:(i=a(c),b.filter(function(a){return h=i(a),A(h)?(h=j?h:h.toLowerCase(),e=j?e:e.toLowerCase(),g(h,e)!==!1):!1}))}}]),b.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(a,b,c){function e(a,b){var c,d,e=Object.keys(a);return 0=0&&B(b)&&isFinite(b)?1024>b?i(b,c,a)+" B":1048576>b?i(b/1024,c,a)+" KB":1073741824>b?i(b/1048576,c,a)+" MB":i(b/1073741824,c,a)+" GB":"NaN"}}]),b.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(a){return function(b,c){if(B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)){var d=180*b/a.PI;return a.round(d*a.pow(10,c))/a.pow(10,c)}return"NaN"}}]),b.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(a){return function(b,c){return B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)?1024>b?i(b,c,a)+" KB":1048576>b?i(b/1024,c,a)+" MB":i(b/1048576,c,a)+" GB":"NaN"}}]),b.module("a8m.math",[]).factory("$math",["$window",function(a){return a.Math}]),b.module("a8m.math.max",["a8m.math"]).filter("max",["$math",function(a){return function(b){return D(b)?a.max.apply(a,b):b}}]),b.module("a8m.math.min",["a8m.math"]).filter("min",["$math",function(a){return function(b){return D(b)?a.min.apply(a,b):b}}]),b.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(a,b){return function(c,d,e){var f=A(c)?b.Number(c):c;return d=d||100,e=e||!1,!B(f)||b.isNaN(f)?c:e?a.round(f/d*100):f/d*100}}]),b.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(a){return function(b,c){if(B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)){var d=3.14159265359*b/180;return a.round(d*a.pow(10,c))/a.pow(10,c)}return"NaN"}}]),b.module("a8m.math.radix",[]).filter("radix",function(){return function(a,b){var c=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return B(a)&&c.test(b)?a.toString(b).toUpperCase():a}}),b.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(a){return function(b,c){return B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)?1e3>b?b:1e6>b?i(b/1e3,c,a)+" K":1e9>b?i(b/1e6,c,a)+" M":i(b/1e9,c,a)+" B":"NaN"}}]),b.module("a8m.math.sum",[]).filter("sum",function(){return function(a,b){return D(a)?a.reduce(function(a,b){return a+b},b||0):a}}),b.module("a8m.ends-with",[]).filter("endsWith",function(){return function(a,b,c){var d,e=c||!1;return!A(a)||y(b)?a:(a=e?a:a.toLowerCase(),d=a.length-b.length,-1!==a.indexOf(e?b:b.toLowerCase(),d))}}),b.module("a8m.ltrim",[]).filter("ltrim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp("^"+c+"+"),""):a}}),b.module("a8m.repeat",[]).filter("repeat",[function(){return function(a,b,c){var d=~~b;return A(a)&&d?w(a,--b,c||""):a}}]),b.module("a8m.rtrim",[]).filter("rtrim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp(c+"+$"),""):a}}),b.module("a8m.slugify",[]).filter("slugify",[function(){return function(a,b){var c=b||"-";return A(a)?a.toLowerCase().replace(/\s+/g,c):a}}]),b.module("a8m.starts-with",[]).filter("startsWith",function(){return function(a,b,c){var d=c||!1;return!A(a)||y(b)?a:(a=d?a:a.toLowerCase(),!a.indexOf(d?b:b.toLowerCase()))}}),b.module("a8m.stringular",[]).filter("stringular",function(){return function(a){var b=Array.prototype.slice.call(arguments,1);return a.replace(/{(\d+)}/g,function(a,c){return y(b[c])?a:b[c]})}}),b.module("a8m.strip-tags",[]).filter("stripTags",function(){return function(a){return A(a)?a.replace(/<\S[^><]*>/g,""):a}}),b.module("a8m.trim",[]).filter("trim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp("^"+c+"+|"+c+"+$","g"),""):a}}),b.module("a8m.truncate",[]).filter("truncate",function(){return function(a,b,c,d){return b=y(b)?a.length:b,d=d||!1,c=c||"",!A(a)||a.length<=b?a:a.substring(0,d?-1===a.indexOf(" ",b)?a.length:a.indexOf(" ",b):b)+c}}),b.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(a){return b.isString(a)?a.split(" ").map(function(a){return a.charAt(0).toUpperCase()+a.substring(1)}).join(" "):a}}]),b.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(a){return function(b){return A(b)?a.encodeURI(b):b}}]),b.module("a8m.wrap",[]).filter("wrap",function(){return function(a,b,c){return!A(a)||y(b)?a:[b,a,c||b].join("")}}),b.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){var a="_$$";this.setPrefix=function(b){return a=b,this},this.$get=["$window",function(b){function c(b){return a+b}function d(a,b){return x(b[a])}function e(a,b){var e=c(a);return d(e,b)||Object.defineProperty(b,e,{enumerable:!1,configurable:!0,value:{}}),b[e]}function f(a,b){return g(function(){delete b[c(a)]})}var g=b.setTimeout;return{$watch:e,$destroy:f}}]}),b.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.slugify","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular); diff --git a/app/widgets/RosterAngular/angular.js b/app/widgets/RosterAngular/angular.js new file mode 100644 index 000000000..b9f64f462 --- /dev/null +++ b/app/widgets/RosterAngular/angular.js @@ -0,0 +1,216 @@ +/* + AngularJS v1.2.26 + (c) 2010-2014 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(W,X,t){'use strict';function C(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.26/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?K(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+K(b)})}catch(d){return K(c)}}function dc(b){try{return decodeURIComponent(b)}catch(a){}}function ec(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=dc(c[0]),y(d)&&(b=y(c[1])?dc(c[1]):!0,kb.call(a,d)?J(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Cb(b){var a= +[];r(b,function(b,d){J(b)?r(b,function(b){a.push(Ca(d,!0)+(!0===b?"":"="+Ca(b,!0)))}):a.push(Ca(d,!0)+(!0===b?"":"="+Ca(b,!0)))});return a.length?a.join("&"):""}function lb(b){return Ca(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ca(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Xc(b,a){function c(a){a&&d.push(a)}var d=[b],e,f,g=["ng:app","ng-app","x-ng-app", +"data-ng-app"],k=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;r(g,function(a){g[a]=!0;c(X.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(r(b.querySelectorAll("."+a),c),r(b.querySelectorAll("."+a+"\\:"),c),r(b.querySelectorAll("["+a+"]"),c))});r(d,function(a){if(!e){var b=k.exec(" "+a.className+" ");b?(e=a,f=(b[2]||"").replace(/\s+/g,",")):r(a.attributes,function(b){!e&&g[b.name]&&(e=a,f=b.value)})}});e&&a(e,f?[f]:[])}function fc(b,a){var c=function(){b=w(b);if(b.injector()){var c=b[0]===X? +"document":ia(b);throw Ta("btstrpd",c.replace(//,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=gc(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(W&&!d.test(W.name))return c();W.name=W.name.replace(d,"");Va.resumeBootstrap=function(b){r(b,function(b){a.push(b)});c()}}function mb(b,a){a= +a||"_";return b.replace(Yc,function(b,d){return(d?a:"")+b.toLowerCase()})}function Db(b,a,c){if(!b)throw Ta("areq",a||"?",c||"required");return b}function Wa(b,a,c){c&&J(b)&&(b=b[b.length-1]);Db(P(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Da(b,a){if("hasOwnProperty"===b)throw Ta("badname",a);}function hc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g "+e[1]+a.replace(me,"<$1>")+e[2];d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a=Q?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ka(b,a){var c=typeof b,d;"function"==c||"object"==c&&null!==b?"function"==typeof(d= +b.$$hashKey)?d=b.$$hashKey():d===t&&(d=b.$$hashKey=(a||hb)()):d=b;return c+":"+d}function bb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function sc(b){var a,c;"function"===typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(pe,""),c=c.match(qe),r(c[1].split(re),function(b){b.replace(se,function(b,c,d){a.push(d)})})),b.$inject=a):J(b)?(c=b.length-1,Wa(b[c],"fn"),a=b.slice(0,c)):Wa(b,"fn",!0);return a}function gc(b){function a(a){return function(b,c){if(T(b))r(b, +$b(a));else return a(b,c)}}function c(a,b){Da(a,"service");if(P(b)||J(b))b=n.instantiate(b);if(!b.$get)throw cb("pget",a);return l[a+k]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,f,k;r(a,function(a){if(!h.get(a)){h.put(a,!0);try{if(v(a))for(c=Ya(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,f=0,k=d.length;f 4096 bytes)!"));else{if(m.cookie!== +da)for(da=m.cookie,d=da.split("; "),O={},f=0;fh&&this.remove(p.key),b},get:function(a){if(h").parent()[0])});var f=L(a,b,a,c,d,e);ca(a,"ng-scope");return function(b,c,d,e){Db(b,"scope");var g=c?La.clone.call(a):a;r(d,function(a,b){g.data("$"+b+"Controller",a)});d=0;for(var m=g.length;darguments.length&& +(b=a,a=t);K&&(c=da);return p(a,b,c)}var u,M,z,O,I,B,da={},rb;u=c===f?d:ha(d,new Ob(w(f),d.$attr));M=u.$$element;if(L){var Na=/^\s*([@=&])(\??)\s*(\w*)\s*$/;B=e.$new(!0);!H||H!==L&&H!==L.$$originalDirective?M.data("$isolateScopeNoTemplate",B):M.data("$isolateScope",B);ca(M,"ng-isolate-scope");r(L.scope,function(a,c){var d=a.match(Na)||[],f=d[3]||c,g="?"==d[2],d=d[1],m,l,n,p;B.$$isolateBindings[c]=d+f;switch(d){case "@":u.$observe(f,function(a){B[c]=a});u.$$observers[f].$$scope=e;u[f]&&(B[c]=b(u[f])(e)); +break;case "=":if(g&&!u[f])break;l=q(u[f]);p=l.literal?Aa:function(a,b){return a===b||a!==a&&b!==b};n=l.assign||function(){m=B[c]=l(e);throw ja("nonassign",u[f],L.name);};m=B[c]=l(e);B.$watch(function(){var a=l(e);p(a,B[c])||(p(a,m)?n(e,a=B[c]):B[c]=a);return m=a},null,l.literal);break;case "&":l=q(u[f]);B[c]=function(a){return l(e,a)};break;default:throw ja("iscp",L.name,c,a);}})}rb=p&&F;R&&r(R,function(a){var b={$scope:a===L||a.$$isolateScope?B:e,$element:M,$attrs:u,$transclude:rb},c;I=a.controller; +"@"==I&&(I=u[a.name]);c=s(I,b);da[a.name]=c;K||M.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});g=0;for(z=m.length;gG.priority)break;if(V=G.scope)O=O||G,G.templateUrl||(db("new/isolated scope",L,G,Z),T(V)&&(L=G));C=G.name;!G.templateUrl&&G.controller&&(V=G.controller,R=R||{},db("'"+C+"' controller",R[C],G,Z),R[C]=G);if(V=G.transclude)x=!0,G.$$tlb|| +(db("transclusion",fa,G,Z),fa=G),"element"==V?(K=!0,u=G.priority,V=Z,Z=d.$$element=w(X.createComment(" "+C+": "+d[C]+" ")),c=Z[0],Na(f,Ba.call(V,0),c),S=z(V,e,u,g&&g.name,{nonTlbTranscludeDirective:fa})):(V=w(Kb(c)).contents(),Z.empty(),S=z(V,e));if(G.template)if(D=!0,db("template",H,G,Z),H=G,V=P(G.template)?G.template(Z,d):G.template,V=W(V),G.replace){g=G;V=Ib.test(V)?w(aa(V)):[];c=V[0];if(1!=V.length||1!==c.nodeType)throw ja("tplrt",C,"");Na(f,Z,c);qa={$attr:{}};V=da(c,[],qa);var $=a.splice(Fa+ +1,a.length-(Fa+1));L&&y(V);a=a.concat(V).concat($);E(d,qa);qa=a.length}else Z.html(V);if(G.templateUrl)D=!0,db("template",H,G,Z),H=G,G.replace&&(g=G),N=ue(a.splice(Fa,a.length-Fa),Z,d,f,x&&S,m,n,{controllerDirectives:R,newIsolateScopeDirective:L,templateDirective:H,nonTlbTranscludeDirective:fa}),qa=a.length;else if(G.compile)try{Q=G.compile(Z,d,S),P(Q)?F(null,Q,U,Y):Q&&F(Q.pre,Q.post,U,Y)}catch(ve){l(ve,ia(Z))}G.terminal&&(N.terminal=!0,u=Math.max(u,G.priority))}N.scope=O&&!0===O.scope;N.transcludeOnThisElement= +x;N.templateOnThisElement=D;N.transclude=S;p.hasElementTranscludeDirective=K;return N}function y(a){for(var b=0,c=a.length;bp.priority)&&-1!=p.restrict.indexOf(f)&&(q&&(p=bc(p,{$$start:q,$$end:n})),b.push(p),h=p)}catch(F){l(F)}}return h}function E(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!= +e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(ca(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function ue(a,b,c,d,e,f,g,h){var m=[],l,q,s=b[0],u=a.shift(),F=D({},u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),N=P(u.templateUrl)?u.templateUrl(b,c):u.templateUrl; +b.empty();n.get(A.getTrustedResourceUrl(N),{cache:p}).success(function(n){var p,A;n=W(n);if(u.replace){n=Ib.test(n)?w(aa(n)):[];p=n[0];if(1!=n.length||1!==p.nodeType)throw ja("tplrt",u.name,N);n={$attr:{}};Na(d,b,p);var z=da(p,[],n);T(u.scope)&&y(z);a=z.concat(a);E(c,n)}else p=s,b.html(n);a.unshift(F);l=H(a,p,c,e,b,u,f,g,h);r(d,function(a,c){a==p&&(d[c]=b[0])});for(q=L(b[0].childNodes,e);m.length;){n=m.shift();A=m.shift();var R=m.shift(),I=m.shift(),z=b[0];if(A!==s){var B=A.className;h.hasElementTranscludeDirective&& +u.replace||(z=Kb(p));Na(R,w(A),z);ca(w(z),B)}A=l.transcludeOnThisElement?O(n,l.transclude,I):I;l(q,n,z,d,A)}m=null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){a=e;m?(m.push(b),m.push(c),m.push(d),m.push(a)):(l.transcludeOnThisElement&&(a=O(b,l.transclude,e)),l(q,b,c,d,a))}}function x(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?d:n.reject(d)}var c={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},d=function(a){var b=e.headers,c=D({},a.headers),d,f,b=D({},b.common,b[K(a.method)]); +a:for(d in b){a=K(d);for(f in c)if(K(f)===a)continue a;c[d]=b[d]}(function(a){var b;r(a,function(c,d){P(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(c);return c}(a);D(c,a);c.headers=d;c.method=Ia(c.method);var f=[function(a){d=a.headers;var c=xc(a.data,wc(d),a.transformRequest);x(c)&&r(d,function(a,b){"content-type"===K(b)&&delete d[b]});x(a.withCredentials)&&!x(e.withCredentials)&&(a.withCredentials=e.withCredentials);return s(a,c,d).then(b,b)},t],g=n.when(c);for(r(A,function(a){(a.request||a.requestError)&& +f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var m=f.shift(),g=g.then(a,m)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,c)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,c)});return g};return g}function s(c,f,g){function h(a,b,c,e){I&&(200<=a&&300>a?I.put(w,[a,b,vc(c),e]):I.remove(w));p(b,a,c,e);d.$$phase||d.$apply()}function p(a,b,d,e){b=Math.max(b,0);(200<= +b&&300>b?A.resolve:A.reject)({data:a,status:b,headers:wc(d),config:c,statusText:e})}function s(){var a=Ra(q.pendingRequests,c);-1!==a&&q.pendingRequests.splice(a,1)}var A=n.defer(),r=A.promise,I,H,w=F(c.url,c.params);q.pendingRequests.push(c);r.then(s,s);!c.cache&&!e.cache||(!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method)||(I=T(c.cache)?c.cache:T(e.cache)?e.cache:u);if(I)if(H=I.get(w),y(H)){if(H&&P(H.then))return H.then(s,s),H;J(H)?p(H[1],H[0],ha(H[2]),H[3]):p(H,200,{},"OK")}else I.put(w,r);x(H)&& +((H=Pb(c.url)?b.cookies()[c.xsrfCookieName||e.xsrfCookieName]:t)&&(g[c.xsrfHeaderName||e.xsrfHeaderName]=H),a(c.method,w,f,h,g,c.timeout,c.withCredentials,c.responseType));return r}function F(a,b){if(!b)return a;var c=[];Tc(b,function(a,b){null===a||x(a)||(J(a)||(a=[a]),r(a,function(a){T(a)&&(a=ta(a)?a.toISOString():na(a));c.push(Ca(b)+"="+Ca(a))}))});0=Q&&(!b.match(/^(get|post|head|put|delete|options)$/i)|| +!W.XMLHttpRequest))return new W.ActiveXObject("Microsoft.XMLHTTP");if(W.XMLHttpRequest)return new W.XMLHttpRequest;throw C("$httpBackend")("noxhr");}function Vd(){this.$get=["$browser","$window","$document",function(b,a,c){return ye(b,xe,b.defer,a.angular.callbacks,c[0])}]}function ye(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),g=null;f.type="text/javascript";f.src=a;f.async=!0;g=function(a){$a(f,"load",g);$a(f,"error",g);e.body.removeChild(f);f=null;var k=-1,s="unknown";a&&("load"!== +a.type||d[b].called||(a={type:"error"}),s=a.type,k="error"===a.type?404:200);c&&c(k,s)};sb(f,"load",g);sb(f,"error",g);8>=Q&&(f.onreadystatechange=function(){v(f.readyState)&&/loaded|complete/.test(f.readyState)&&(f.onreadystatechange=null,g({type:"load"}))});e.body.appendChild(f);return g}var g=-1;return function(e,m,h,l,n,p,q,s){function F(){A=g;R&&R();z&&z.abort()}function u(a,d,e,f,g){L&&c.cancel(L);R=z=null;0===d&&(d=e?200:"file"==ua(m).protocol?404:0);a(1223===d?204:d,e,f,g||"");b.$$completeOutstandingRequest(E)} +var A;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==K(e)){var N="_"+(d.counter++).toString(36);d[N]=function(a){d[N].data=a;d[N].called=!0};var R=f(m.replace("JSON_CALLBACK","angular.callbacks."+N),N,function(a,b){u(l,a,d[N].data,"",b);d[N]=E})}else{var z=a(e);z.open(e,m,!0);r(n,function(a,b){y(a)&&z.setRequestHeader(b,a)});z.onreadystatechange=function(){if(z&&4==z.readyState){var a=null,b=null,c="";A!==g&&(a=z.getAllResponseHeaders(),b="response"in z?z.response:z.responseText);A===g&& +10>Q||(c=z.statusText);u(l,A||z.status,b,a,c)}};q&&(z.withCredentials=!0);if(s)try{z.responseType=s}catch(ca){if("json"!==s)throw ca;}z.send(h||null)}if(0=k&&(n.resolve(q),l(p.$$intervalId),delete e[p.$$intervalId]);s||b.$apply()},g);e[p.$$intervalId]=n;return p}var e={};d.cancel= +function(b){return b&&b.$$intervalId in e?(e[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete e[b.$$intervalId],!0):!1};return d}]}function bd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "), +SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function Qb(b){b=b.split("/");for(var a=b.length;a--;)b[a]= +lb(b[a]);return b.join("/")}function zc(b,a,c){b=ua(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=U(b.port)||ze[b.protocol]||null}function Ac(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ua(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=ec(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ra(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function eb(b){var a= +b.indexOf("#");return-1==a?b:b.substr(0,a)}function Rb(b){return b.substr(0,eb(b).lastIndexOf("/")+1)}function Bc(b,a){this.$$html5=!0;a=a||"";var c=Rb(b);zc(b,this,b);this.$$parse=function(a){var e=ra(c,a);if(!v(e))throw Sb("ipthprfx",a,c);Ac(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Cb(this.$$search),b=this.$$hash?"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e; +if((e=ra(b,d))!==t)return d=e,(e=ra(a,e))!==t?c+(ra("/",e)||e):b+d;if((e=ra(c,d))!==t)return c+e;if(c==d+"/")return c}}function Tb(b,a){var c=Rb(b);zc(b,this,b);this.$$parse=function(d){var e=ra(b,d)||ra(c,d),e="#"==e.charAt(0)?ra(a,e):this.$$html5?e:"";if(!v(e))throw Sb("ihshprfx",d,a);Ac(e,this,b);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Cb(this.$$search),e=this.$$hash? +"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(eb(b)==eb(a))return a}}function Ub(b,a){this.$$html5=!0;Tb.apply(this,arguments);var c=Rb(b);this.$$rewrite=function(d){var e;if(b==eb(d))return d;if(e=ra(c,d))return b+a+e;if(c===d+"/")return c};this.$$compose=function(){var c=Cb(this.$$search),e=this.$$hash?"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function tb(b){return function(){return this[b]}} +function Cc(b,a){return function(c){if(x(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Wd(){var b="",a=!1;this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return y(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a){c.$broadcast("$locationChangeSuccess",k.absUrl(),a)}var k,m,h=d.baseHref(),l=d.url(),n;a?(n=l.substring(0,l.indexOf("/",l.indexOf("//")+2))+(h||"/"),m=e.history?Bc:Ub):(n= +eb(l),m=Tb);k=new m(n,"#"+b);k.$$parse(k.$$rewrite(l));var p=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var e=w(a.target);"a"!==K(e[0].nodeName);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href");T(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=ua(g.animVal).href);if(!p.test(g)){if(m===Ub){var h=e.attr("href")||e.attr("xlink:href");if(h&&0>h.indexOf("://"))if(g="#"+b,"/"==h[0])g=n+g+h;else if("#"==h[0])g=n+g+(k.path()||"/")+h; +else{var l=k.path().split("/"),h=h.split("/");2!==l.length||l[1]||(l.length=1);for(var q=0;qe?Dc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,f){var g=0,k;do k=Dc(d[g++],d[g++],d[g++],d[g++],d[g++],c,a)(b,f),f=t,b=k;while(ga)for(b in h++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(r--,delete e[b])}else e!==d&&(e=d,h++);return h},function(){n?(n=!1,b(d,d,c)):b(d,g,c);if(k)if(T(d))if(Pa(d)){g=Array(d.length);for(var a=0;at&&(w=4-t,O[w]||(O[w]=[]),B=P(d.exp)?"fn: "+(d.exp.name||d.exp.toString()): +d.exp,B+="; newVal: "+na(f)+"; oldVal: "+na(k),O[w].push(B));else if(d===c){z=!1;break a}}catch(y){p.$$phase=null,e(y)}if(!(h=L.$$childHead||L!==this&&L.$$nextSibling))for(;L!==this&&!(h=L.$$nextSibling);)L=L.$parent}while(L=h);if((z||l.length)&&!t--)throw p.$$phase=null,a("infdig",b,na(O));}while(z||l.length);for(p.$$phase=null;r.length;)try{r.shift()()}catch(v){e(v)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(r(this.$$listenerCount, +Bb(null,l,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy=this.$digest=this.$apply=E,this.$on= +this.$watch=function(){return E})}},$eval:function(a,b){return f(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length||g.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]= +c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[Ra(c,b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,k={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){k.defaultPrevented=!0},defaultPrevented:!1},h=[k].concat(Ba.call(arguments,1)),l,m;do{d=f.$$listeners[a]||c;k.currentScope=f;l=0;for(m=d.length;lc.msieDocumentMode)throw xa("iequirks");var e=ha(ga);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b}, +e.valueOf=Qa);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var f=e.parseAs,g=e.getTrusted,k=e.trustAs;r(ga,function(a,b){var c=K(b);e[Za("parse_as_"+c)]=function(b){return f(a,b)};e[Za("get_trusted_"+c)]=function(b){return g(a,b)};e[Za("trust_as_"+c)]=function(b){return k(a,b)}});return e}]}function ce(){this.$get=["$window","$document",function(b,a){var c={},d=U((/android (\d+)/.exec(K((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator|| +{}).userAgent),f=a[0]||{},g=f.documentMode,k,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,h=f.body&&f.body.style,l=!1,n=!1;if(h){for(var p in h)if(l=m.exec(p)){k=l[0];k=k.substr(0,1).toUpperCase()+k.substr(1);break}k||(k="WebkitOpacity"in h&&"webkit");l=!!("transition"in h||k+"Transition"in h);n=!!("animation"in h||k+"Animation"in h);!d||l&&n||(l=v(f.body.style.webkitTransition),n=v(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!g||7< +g),hasEvent:function(a){if("input"==a&&9==Q)return!1;if(x(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:Xa(),vendorPrefix:k,transitions:l,animations:n,android:d,msie:Q,msieDocumentMode:g}}]}function ee(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,k,m){var h=c.defer(),l=h.promise,n=y(m)&&!m;k=a.defer(function(){try{h.resolve(e())}catch(a){h.reject(a),d(a)}finally{delete f[l.$$timeoutId]}n||b.$apply()},k);l.$$timeoutId=k;f[k]=h; +return l}var f={};e.cancel=function(b){return b&&b.$$timeoutId in f?(f[b.$$timeoutId].reject("canceled"),delete f[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return e}]}function ua(b,a){var c=b;Q&&(Y.setAttribute("href",c),c=Y.href);Y.setAttribute("href",c);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname: +"/"+Y.pathname}}function Pb(b){b=v(b)?ua(b):b;return b.protocol===Hc.protocol&&b.host===Hc.host}function fe(){this.$get=ba(W)}function mc(b){function a(d,e){if(T(d)){var f={};r(d,function(b,c){f[c]=a(c,b)});return f}return b.factory(d+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Ic);a("date",Jc);a("filter",Ce);a("json",De);a("limitTo",Ee);a("lowercase",Fe);a("number",Kc);a("orderBy",Lc);a("uppercase",Ge)}function Ce(){return function(b, +a,c){if(!J(b))return b;var d=typeof c,e=[];e.check=function(a){for(var b=0;bb;b=Math.abs(b);var g=b+"",k="",m=[],h=!1;if(-1!==g.indexOf("e")){var l=g.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&& +l[3]>e+1?(g="0",b=0):(k=g,h=!0)}if(h)0b)&&(k=b.toFixed(e));else{g=(g.split(Nc)[1]||"").length;x(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);0===b&&(f=!1);b=(""+b).split(Nc);g=b[0];b=b[1]||"";var l=0,n=a.lgSize,p=a.gSize;if(g.length>=n+p)for(l=g.length-n,h=0;hb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Xb(e,a,d)}}function vb(b,a){return function(c,d){var e=c["get"+b](),f=Ia(a?"SHORT"+b:b);return d[f][e]}}function Jc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,k=b[8]? +a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=U(b[9]+b[10]),g=U(b[9]+b[11]));k.call(a,U(b[1]),U(b[2])-1,U(b[3]));f=U(b[4]||0)-f;g=U(b[5]||0)-g;k=U(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,f,g,k,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var f="",g=[],k,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;v(c)&&(c=He.test(c)?U(c):a(c));ib(c)&&(c=new Date(c)); +if(!ta(c))return c;for(;e;)(m=Ie.exec(e))?(g=g.concat(Ba.call(m,1)),e=g.pop()):(g.push(e),e=null);r(g,function(a){k=Je[a];f+=k?k(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return f}}function De(){return function(b){return na(b,!0)}}function Ee(){return function(b,a){if(!J(b)&&!v(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):U(a);if(v(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||q()});if(e.hasEvent("paste"))a.on("paste cut",q)}a.on("change",n);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var s=c.ngPattern;s&&((e=s.match(/^\/(.*)\/([gim]*)$/))?(s=RegExp(e[1],e[2]),e=function(a){return sa(d, +"pattern",d.$isEmpty(a)||s.test(a),a)}):e=function(c){var e=b.$eval(s);if(!e||!e.test)throw C("ngPattern")("noregexp",s,e,ia(a));return sa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var r=U(c.ngMinlength);e=function(a){return sa(d,"minlength",d.$isEmpty(a)||a.length>=r,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var u=U(c.ngMaxlength);e=function(a){return sa(d,"maxlength",d.$isEmpty(a)||a.length<=u,a)};d.$parsers.push(e); +d.$formatters.push(e)}}function Yb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;dQ?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ia(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Xa=function(){if(y(Xa.isActive_))return Xa.isActive_;var b=!(!X.querySelector("[ng-csp]")&&!X.querySelector("[data-ng-csp]")); +if(!b)try{new Function("")}catch(a){b=!0}return Xa.isActive_=b},Yc=/[A-Z]/g,ad={full:"1.2.26",major:1,minor:2,dot:26,codeName:"captivating-disinterest"};S.expando="ng339";var ab=S.cache={},ne=1,sb=W.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},$a=W.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};S._data=function(b){return this.cache[b[this.expando]]||{}};var ie=/([\:\-\_]+(.))/g, +je=/^moz([A-Z])/,Hb=C("jqLite"),ke=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Ib=/<|&#?\w+;/,le=/<([\w:]+)/,me=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ea={option:[1,'"],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ea.optgroup=ea.option;ea.tbody=ea.tfoot=ea.colgroup=ea.caption=ea.thead;ea.th= +ea.td;var La=S.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),S(W).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?w(this[b]):w(this[this.length+b])},length:0,push:Me,sort:[].sort,splice:[].splice},qb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){qb[K(b)]=b});var rc={};r("input select option textarea button form details".split(" "), +function(b){rc[Ia(b)]=!0});r({data:Mb,removeData:Lb},function(b,a){S[a]=b});r({data:Mb,inheritedData:pb,scope:function(b){return w.data(b,"$scope")||pb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return w.data(b,"$isolateScope")||w.data(b,"$isolateScopeNoTemplate")},controller:oc,injector:function(b){return pb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Nb,css:function(b,a,c){a=Za(a);if(y(c))b.style[a]=c;else{var d;8>=Q&&(d=b.currentStyle&&b.currentStyle[a], +""===d&&(d="auto"));d=d||b.style[a];8>=Q&&(d=""===d?t:d);return d}},attr:function(b,a,c){var d=K(a);if(qb[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||E).specified?d:t;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(x(d))return e?b[e]:"";b[e]=d}var a=[];9>Q?(a[1]= +"innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(x(a)){if("SELECT"===Ma(b)&&b.multiple){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(x(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Re={n:"\n",f:"\f",r:"\r", +t:"\t",v:"\v","'":"'",'"':'"'},Wb=function(a){this.options=a};Wb.prototype={constructor:Wb,lex:function(a){this.text=a;this.index=0;this.ch=t;this.lastCh=":";for(this.tokens=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+ +this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(fb.ZERO,a.fn, +this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Ec(d,this.options,this.text);return D(function(c,d,k){return e(k||a(c,d))},{assign:function(e,g,k){(k=a(e,k))||a.assign(e,k={});return ub(k,d,g,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return D(function(e,f){var g=a(e,f),k=d(e,f),m;ka(k,c.text);if(!g)return t;(g=va(g[k],c.text))&&(g.then&&c.options.unwrapPromises)&& +(m=g,"$$v"in g||(m.$$v=t,m.then(function(a){m.$$v=a})),g=g.$$v);return g},{assign:function(e,f,g){var k=ka(d(e,g),c.text);(g=va(a(e,g),c.text))||a.assign(e,g={});return g[k]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,g){for(var k=[],m=c?c(f,g):f,h=0;ha.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Xb(Math[0< +a?"floor":"ceil"](a/60),2)+Xb(Math.abs(a%60),2))}},Ie=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,He=/^\-?\d+$/;Jc.$inject=["$locale"];var Fe=ba(K),Ge=ba(Ia);Lc.$inject=["$parse"];var dd=ba({restrict:"E",compile:function(a,c){8>=Q&&(c.href||c.name||c.$set("href",""),a.append(X.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===za.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)|| +a.preventDefault()})}}}),Fb={};r(qb,function(a,c){if("multiple"!=a){var d=pa("ng-"+c);Fb[d]=function(){return{priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});r(["src","srcset","href"],function(a){var c=pa("ng-"+a);Fb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,k=a;"href"===a&&"[object SVGAnimatedString]"===za.call(e.prop("href"))&&(k="xlinkHref",f.$attr[k]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(k,c),Q&&g&&e.prop(g,f[k])):"href"=== +a&&f.$set(k,null)})}}}});var yb={$addControl:E,$removeControl:E,$setValidity:E,$setDirty:E,$setPristine:E};Oc.$inject=["$element","$attrs","$scope","$animate"];var Rc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Oc,compile:function(){return{pre:function(a,e,f,g){if(!f.action){var k=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};sb(e[0],"submit",k);e.on("$destroy",function(){c(function(){$a(e[0],"submit",k)},0,!1)})}var m=e.parent().controller("form"), +h=f.name||f.ngForm;h&&ub(a,h,g,h);if(m)e.on("$destroy",function(){m.$removeControl(g);h&&ub(a,h,t,h);D(g,yb)})}}}}}]},ed=Rc(),rd=Rc(!0),Se=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Te=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Ue=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Sc={text:Ab,number:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Ue.test(a))return e.$setValidity("number", +!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return t});Ke(e,"number",Ve,null,e.$$validityState);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return sa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return sa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return sa(e,"number",e.$isEmpty(a)|| +ib(a),a)})},url:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return sa(e,"url",e.$isEmpty(a)||Se.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return sa(e,"email",e.$isEmpty(a)||Te.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){x(d.name)&&c.attr("name",hb());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue}; +d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,g=d.ngFalseValue;v(f)||(f=!0);v(g)||(g=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a===f});e.$parsers.push(function(a){return a?f:g})},hidden:E,button:E,submit:E,reset:E,file:E},Ve=["badInput"],jc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel", +link:function(d,e,f,g){g&&(Sc[K(f.type)]||Sc.text)(d,e,f,g,c,a)}}}],wb="ng-valid",xb="ng-invalid",Oa="ng-pristine",zb="ng-dirty",We=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,f,g){function k(a,c){c=c?"-"+mb(c,"-"):"";g.removeClass(e,(a?xb:wb)+c);g.addClass(e,(a?wb:xb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name= +d.name;var m=f(d.ngModel),h=m.assign;if(!h)throw C("ngModel")("nonassign",d.ngModel,ia(e));this.$render=E;this.$isEmpty=function(a){return x(a)||""===a||null===a||a!==a};var l=e.inheritedData("$formController")||yb,n=0,p=this.$error={};e.addClass(Oa);k(!0);this.$setValidity=function(a,c){p[a]!==!c&&(c?(p[a]&&n--,n||(k(!0),this.$valid=!0,this.$invalid=!1)):(k(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,k(c,a),l.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine= +!0;g.removeClass(e,zb);g.addClass(e,Oa)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,g.removeClass(e,Oa),g.addClass(e,zb),l.$setDirty());r(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,h(a,d),r(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var q=this;a.$watch(function(){var c=m(a);if(q.$modelValue!==c){var d=q.$formatters,e=d.length;for(q.$modelValue=c;e--;)c=d[e](c);q.$viewValue!==c&&(q.$viewValue= +c,q.$render())}return c})}],Gd=function(){return{require:["ngModel","^?form"],controller:We,link:function(a,c,d,e){var f=e[0],g=e[1]||yb;g.$addControl(f);a.$on("$destroy",function(){g.$removeControl(f)})}}},Id=ba({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),kc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required", +!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},Hd=function(){return{require:"ngModel",link:function(a,c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!x(a)){var c=[];a&&r(a.split(f),function(a){a&&c.push(aa(a))});return c}});e.$formatters.push(function(a){return J(a)?a.join(", "):t});e.$isEmpty=function(a){return!a||!a.length}}}},Xe=/^(true|false|\d+)$/,Jd=function(){return{priority:100, +compile:function(a,c){return Xe.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},jd=ya({compile:function(a){a.addClass("ng-binding");return function(a,d,e){d.data("$binding",e.ngBind);a.$watch(e.ngBind,function(a){d.text(a==t?"":a)})}}}),ld=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}], +kd=["$sce","$parse",function(a,c){return{compile:function(d){d.addClass("ng-binding");return function(d,f,g){f.data("$binding",g.ngBindHtml);var k=c(g.ngBindHtml);d.$watch(function(){return(k(d)||"").toString()},function(c){f.html(a.getTrustedHtml(k(d))||"")})}}}}],md=Yb("",!0),od=Yb("Odd",0),nd=Yb("Even",1),pd=ya({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),qd=[function(){return{scope:!0,controller:"@",priority:500}}],lc={},Ye={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), +function(a){var c=pa("ng-"+a);lc[c]=["$parse","$rootScope",function(d,e){return{compile:function(f,g){var k=d(g[c]);return function(c,d){d.on(a,function(d){var f=function(){k(c,{$event:d})};Ye[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var td=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var k,m,h;c.$watch(e.ngIf,function(f){Ua(f)?m||(m=c.$new(),g(m,function(c){c[c.length++]=X.createComment(" end ngIf: "+e.ngIf+ +" ");k={clone:c};a.enter(c,d.parent(),d)})):(h&&(h.remove(),h=null),m&&(m.$destroy(),m=null),k&&(h=Eb(k.clone),a.leave(h,function(){h=null}),k=null))})}}}],ud=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,f){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Va.noop,compile:function(g,k){var m=k.ngInclude||k.src,h=k.onload||"",l=k.autoscroll;return function(g,k,q,r,F){var u=0,t,w,R,z=function(){w&&(w.remove(),w=null);t&&(t.$destroy(),t=null); +R&&(e.leave(R,function(){w=null}),w=R,R=null)};g.$watch(f.parseAsResourceUrl(m),function(f){var m=function(){!y(l)||l&&!g.$eval(l)||d()},q=++u;f?(a.get(f,{cache:c}).success(function(a){if(q===u){var c=g.$new();r.template=a;a=F(c,function(a){z();e.enter(a,null,k,m)});t=c;R=a;t.$emit("$includeContentLoaded");g.$eval(h)}}).error(function(){q===u&&z()}),g.$emit("$includeContentRequested")):(z(),r.template=null)})}}}}],Kd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude", +link:function(c,d,e,f){d.html(f.template);a(d.contents())(c)}}}],vd=ya({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),wd=ya({terminal:!0,priority:1E3}),xd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,g){var k=g.count,m=g.$attr.when&&f.attr(g.$attr.when),h=g.offset||0,l=e.$eval(m)||{},n={},p=c.startSymbol(),q=c.endSymbol(),s=/^when(Minus)?(.+)$/;r(g,function(a,c){s.test(c)&&(l[K(c.replace("when","").replace("Minus","-"))]= +f.attr(g.$attr[c]))});r(l,function(a,e){n[e]=c(a.replace(d,p+k+"-"+h+q))});e.$watch(function(){var c=parseFloat(e.$eval(k));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-h));return n[c](e,f,!0)},function(a){f.text(a)})}}}],yd=["$parse","$animate",function(a,c){var d=C("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,f,g,k,m){var h=g.ngRepeat,l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,q,s,t,u,A={$id:Ka};if(!l)throw d("iexp", +h);g=l[1];k=l[2];(l=l[3])?(n=a(l),p=function(a,c,d){u&&(A[u]=a);A[t]=c;A.$index=d;return n(e,A)}):(q=function(a,c){return Ka(c)},s=function(a){return a});l=g.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",g);t=l[3]||l[1];u=l[2];var y={};e.$watchCollection(k,function(a){var g,k,l=f[0],n,A={},B,I,H,v,E,C,x,J=[];if(Pa(a))C=a,E=p||q;else{E=p||s;C=[];for(H in a)a.hasOwnProperty(H)&&"$"!=H.charAt(0)&&C.push(H);C.sort()}B=C.length;k=J.length=C.length;for(g=0;gB;)d=t.pop(),p.removeOption(d.label),d.element.remove()}for(;z.length>M;)z.pop()[0].element.remove()}var h;if(!(h=s.match(d)))throw Ze("iexp",s,ia(f));var l=c(h[2]||h[1]),m=h[4]||h[6],n=h[5],r=c(h[3]||""),u=c(h[2]? +h[1]:m),w=c(h[7]),x=h[8]?c(h[8]):null,z=[[{element:f,label:""}]];F&&(a(F)(e),F.removeClass("ng-scope"),F.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=w(e)||[],d={},h,l,p,r,s,v,y;if(q)for(l=[],r=0,v=z.length;r@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}'); +//# sourceMappingURL=angular.min.js.map diff --git a/app/widgets/RosterAngular/img/background.png b/app/widgets/RosterAngular/img/background.png new file mode 100644 index 0000000000000000000000000000000000000000..bf00678d5958f2e0381fb8060730f1f4019640c9 GIT binary patch literal 16871 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 literal 0 HcmV?d00001 diff --git a/app/widgets/RosterAngular/img/bubbles.svg b/app/widgets/RosterAngular/img/bubbles.svg new file mode 100644 index 000000000..609a0ff3c --- /dev/null +++ b/app/widgets/RosterAngular/img/bubbles.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/widgets/RosterAngular/img/call.svg b/app/widgets/RosterAngular/img/call.svg new file mode 100644 index 000000000..c624422dc --- /dev/null +++ b/app/widgets/RosterAngular/img/call.svg @@ -0,0 +1,65 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/app/widgets/RosterAngular/img/clients/adium.png b/app/widgets/RosterAngular/img/clients/adium.png new file mode 100644 index 0000000000000000000000000000000000000000..a3eb72e010174b896c8f1a834c4be2d6ebbf31d9 GIT binary patch literal 1762 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 literal 0 HcmV?d00001 diff --git a/app/widgets/RosterAngular/img/clients/gajim.png b/app/widgets/RosterAngular/img/clients/gajim.png new file mode 100644 index 0000000000000000000000000000000000000000..84816a3053c36fe066e7b675a619d7e51e183e39 GIT binary patch literal 870 zcmV-s1DX7ZP)A zL_t(YiOttLPuoxw2k?WhA2+$!Tpo_2#F3#24A5rCLM0R=#6l;8#DGv1BxXJfUxFPm zGo?!gR3TA`4T8d8M_4gR6BFN9bf{YK$itW7s{b)Qwtw=;J=Y$4e0+reAtLVycXxO4 z;o+gFC`vY;&&!r&fn`~@)6>(}7~|lrkTISoQZAP#yWMW7TrQJ|iHSeIBZMHA%Q0Qo zD}<27TOdNz!cwU;8HVBd{{H?m1OPx7hES{3B-eG2$#N{Zy~lBe6h|$t0naM!Fzl3}S=)i$sF-dOh~=@DS;O z7-NuS*^33@x^A;pt9g#&46UP-LL!m476gHNo3a=GuCrd@DBR#sNN z92^`_!!Z6D@jH}Kn4O)yrj%9()ja#N77B&p=H}+RA^-q9&x1yzG1qRlKSYAWnNFtz zjIq?9SJtE;QrkbFK5>2&%;6vdG%24F;MTCG-d)HLlEgb>KG%%UPjLV_R&qV6$I zqbLd>gql3(423w3)3~|0;f4@GK$0Y`SH_X6CJe)Y`^%t6k^~5$$Zd%P@qNE(+xA-^ zKi(A*1VQ`${+SKEX!&uit?2Q0l@KHQ?J*_`T03< wUDtTI8)q^Zn3cSL79Wo3f ze;UN;bT$nQ4Y_)Id&>fNtJ>OHuv)D?ilY2wgS54^xkg4tn!38Wz66mG&+|}UU;o=+ zF#IaCURB8Ga5x-;gM;4&0RRw*L;%O}9~g$k3uUJAt-ee5{cjs z4-c&+K@dWO#bU9ywY9z48XFry5QNRe#YH6)3KayQC<Wkc7cAdmN~hD1N~LhC)k@Jc9grj`7L7(Jy3c@Znr!)Hz#SD_H%4(?A^nklaX{fUGf|ljYhE9Y|`oJsn_T8Q5c3*8w>`( zaU3uVOQljNU>F8?o|lu!WYO;s1OXU^#fySOqtTqbd@Ga51hH7`|Ba1}CQ%g47K;T( z2o?18cs$(1#DoI?ylZP~Icp?ILRD2&&g^*$B41u!=G6cF{XN{@-`7n|O?ej=7o}t} z*)%;p{d<3Z|M2?yn(OcHmm-l!I2a5P1VOyMx3jYY4-XIa$;nCL>FFt_^l6#~gpiaS zJ8#y!wD*4o1_p{|<||@Z7Hl?KfMr>4wmq+E{C>aR=kpb9USAQ0VZigerqk*224BJQ zt*or{uCA_Xr4HO@BnSeqEPF_jWc=+~K@g9}BTJIBxwN$OZ7}cMNs2Z!kH;f-c6R3SJgSb#=Ab;c$S>X46b2)22?RlK}uaIyy4H31$Do6jI6Qix47so(H?#9_Kjj z72>bx`T4o%Gd@0U-re2(S5;M_l;3weC95WpNDvhj6`<4UQhzNIFZu&eCL?C*d9Kd@ O00005b7@yb4@f+Oq9gLMBhu)_y=fof<-(7pobUt&=>C741+uIv_M(K1~ zI5{~{G))sJr5;(98|*C00wKh}80Qs5$@%^M2P@yTSp`{LT~%E!*U-$&jHoDzr7;Y{ z0LHjXDSZ$GA&D{8e;H(PaWOzC9a~sf5C|cb09r|wWe5g?S8lgE`6-Z#iwiCuk4M+m z)&hfrgTD+=FN6@Ns+uQ+9P>PH{1oKy@Q~Zz-=E#w+_apAPGP?NP6z;iQmF*@_xED4 zSd7-c{}7S!@$uNk#>SVW!%V?o5d41ssl(xT0BDMcs;X)%7VA0$06;dI1zp#_zdzgS zjiFFzY<_;eFgzT`b5U>HWP zfe=DON@>R+XJ==iY1)uge}oXQESsx=XquL}ySwWc~9v>ek6NyCID6=dJ z4u?a3ue(~YK0iO_n}5rCWwTi*6bj$X?9ph{7l}kXHk%F7>2$bKsmyL~ZwsO*w)Dps z1IKZ-7NNGYj*N_qt*opJO-xLfFZm1A-`@|E(nGu5{(p@C0NmW%q|VRJe+z^x%iwmq zuihaVK%SnS^y};ER3ee+Dg;6Z6h+B5_azNy&F=2*)zQ&W+gj-qLRHl~#`w6|_TlvH zRvX}SIw2emXWVZ0X>(K55(MCDyEBGiK$hilZ*Oms5Rx+UYumFAFgG{%=hoI1V2nYMqz8o1Ka|oR-2ix(<(po&^)J4>KwKsAsGI-* N002ovPDHLkV1nJ~^B4dC literal 0 HcmV?d00001 diff --git a/app/widgets/RosterAngular/img/clients/miranda.png b/app/widgets/RosterAngular/img/clients/miranda.png new file mode 100644 index 0000000000000000000000000000000000000000..0e02b7099ab7b060b5257ddc3d39384effe089ec GIT binary patch literal 1277 zcmVJWGihctGa6nz4~$W-3^6mrNz4r6^w4H78VmgaU6y{~y}Zx+ zJn!fEF+Z9t%ff#_j-L%s(=U*-`UP@U-wmQD3bnbpDdh8c{(Is$ztwSmex6@hS&58~ zj|-9{p;#=UTCHjv$E~s~Tm0I1O{d=@3kwT=0RHaoZUlot&FAxF+S=OA1sxn5}`Ms~N zk0(izFPF>0(a}*yQ&W?8a&n@$T(0Aq)8ogF|D2hbaWM>2cZp?Ls8*{)b8~Zx+wD%( z_Fuhv#Y|66|4}NH2HkFVs8A?$IUJ6V!{IofDC!vaJR_ng3fHb(YrlH+YF*%Rxr}5o zDdcjwzcft?0YD%S@b~uiG9HhoVTsG-GBiySbY15Gpr@y&_x0=7qxbIJv*R0vfmABR zsHz&PR;vu~c}9Z4V3#b*4Fdzf{{B7;!;qa$Co?uS#&mRaz~yow6bdOGk7t>tXq}GEgH*emwXMyMWWs)Ry09adFI}k;2g&>I7{8&xxW)(lmXpa!;Q=MSp+4AW4!SNfIo} zV(b|)P1C4Ws{jCw<8XS=!r`zUkH_PSi;J0LGHHX*G@WVG#(X}%{qEg605}IxJ9Bt= zm`NlOAP52g3>!pM)l4FhxNt@Q;Le>pYtNoNQ*yZ+NRk9W5L%;is;U-iXWHA_HIC!z zAWn;>X%GZav_Z1jtewU2@iBB==gvBfj*jXiNvM*w{GO-Q9&@7%)wfZFI@YmoK$9Z{EbS*=!?oEfM|t z_3Pj`?%#`GS(X(fNwR0n1_1z$-Mr`A3f)jjO5}`qrv6TC=mWf2Y&w!Ahki_er_@nd-6>kbq$>5mM%YSft#za6s?{_!0=t z9D)=CLL3GzM2a+n6h;CB85R*kZ~`V#fY>JPxb4L5z2-0jO2Baz{!*Rly;r~bSLszD zLI`X|FJHcN-@ku991e$fh@z;fs%qP|jW(6MN`w&LI1VC_h#rYV7X5y|3;=*O12Qr) z5)B4}zUJm;1!HV53}YaK$YwY3y);dOY&OdwgnX$~N|hw(9S}kqj_cR2Mpug6F(#U(Ej0wG z)oRSESFa$QPIt}C&AEGfdnsMl9g3njR8{ShBq{Fkcpkc3F6C!nOw-h;Mgf8#P_3=4 z>h0UNOS7}H@q-5sHibeV0Qh#{JRd%M7|7*v{feTvw+n(Xwi|+Q97hNtRy-c3EX%4^ zDwQ?!mSsV)SY$JqOxLGRp9U30*}WYQgb*}5nwvLo8VtkqojiHc?eqE8jU$9Wp-`Yz zRoxqp$GtwE@8MQi8agsHH6@7-mb*CQ^LbcaUhdz@6HpgKk|bv|8jW;xbb!m{ zf>fh>~_0@e!qWu6C9*2NVQs3zI^!ti;IguQPghRw#{%joE;w@ zXRlnja_G#NGcECWd~GE{pj0X$UDw+5JD710U-qP z`8-uD7L$aK9-5}9ix)4lJkJBh*v1&wEX%6CdGn^cyu94n+1ZH=!=M?43AVMhfzRjr zgfX@^0x?aKYuH&=1%hQ+ywmAqIgSHD2=F{lNs_eG-QE5C*s){(+`W5OURYT8)^`L! z0G4HQo2k$9ymwO|Uq#b2I2;ax=Xu%TaC~H0Hq+G9BukQHU$}7L)zha>vl9~&rDCxN zE|<%|7;gx2oP9vuDpryLRnrVCpw$ux;DWG>zdn4rrQ& zuC6Xa6vaQr#>PB^kc43vIiJthx_9s1cTG)Aa=kh~I3mk35(L2;3)_zvk<+J7Z|mg+0PuRf zuyg0mtRM&zOG``M=H}+QF09rXNABFY!^Y$BJx7il*){|KK&ey$%d!%ZByn!H`{`zK z);QAM-rjNQ)Tv(v2M4zev04~oXlZFt1A)MEkH<6DDE43Jg31}?e4oYu0000N literal 0 HcmV?d00001 diff --git a/app/widgets/RosterAngular/img/clients/psi.png b/app/widgets/RosterAngular/img/clients/psi.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8bbe5096d5f32de08762c8642ddca25bbedd72 GIT binary patch literal 1437 zcmV;O1!DS%P)S>;^zuCPT^>lICPGuFrkcd1i{u^5=C#!%wbg+@W|;Z?KJ)#}?>DpP z^?LY~Ki75LTeof{#?904i(9EwI#sP!7p`8tI^XSf>9Bc`Uaxm(XN)mw+qMk*4<0-~ zKA-Pov)Rt0M~~)oUC#(1^p77uwk}+_uw2QHyuZr~fJVQs!mwDD1;a1~ zYK55u0J&Ulm@5Dy4r?-*tZAAykUMOgbM$&Wy$@lTrYSwo10e*AF;Ggsk)9AT5@ICC z5C9NRNF<`Kt>+cxw*N& zE?&GyXJ==Np66kDdV1HcrIc0+f)fl>;SlanBX1hH7`-*F%#vu1O1 zv&k4MhW+*Rb@}w^(~{#j@H`KOVIT+s1VPYw_Uzd_r8HA6mrpIfuG%U*krL-oc{N_n`U=RR!_3BkA5{VSo*VhpQ|5s{42sr0pj6n!7 z$Sfg5l`;0+>;6z60Py+qXS%Yo;sQ7czybiJ6dcD1bX{)}LRyTm#<(;c*7p5WG);4R zVPRq8;lqd4*47q)ul0j-zM4oRp2y?y)q_F+KloIGP)7$G`TCe<#>!8Yd~0OshgvctQds9u##V>cWOPfW*Rr#DBn0i9dh= zF)=c}9U+0JSjvKssDMgH?GO>QRI%H{G1Td;Z?FA^*F*`lkca5woz1>qAAfw#@z>Wv zk|g*)ggA)k#EBE-yLazi_dIX*w}P0aX&*g$6k!-jlv4Y*frMe$s@Lm>asO_l1`&Pv z^2K*u7whZm*xcN_Ac|rrilQgWa#$!7{NdqY|33j~x7%T>)dFJ-j4=a%0l)@;jg1Yc zstR4#TZ}PZk|cj3xEY+EC>Q5Ny3JQhhJ!# zHc+(&0s(;S?d_K9y4J|Z2#UobOQlka&z?P#T-VL&x}J3$$0`&G007Q8JkOKT>GU6( zroH^7Ae{4vQVP>FVcT}qG|lSm+qe5PZ{EDg-nnxpd+OAwv$M0aQXI$fp!o-SYXG3x zY_2UYFN0Ew-QC^newuUV&iV86^VL_cUip+#q*AGYhj`$MtgNgopFVxsD3wa(v9U4Z zds;$>tZ5nqL12UCAGjg_u)DjR8?hB6#1^}Vsmp7ilW$= zOa`2D3jipkVGsn+bsf1}&dcR;-Rqw|eTqw$E`@?1Sdt`p0ALt~RV)^}RjSo$2!a5D zAY@CWQWv=U)@*HUd7kH?P$-0s<19@~Of22Me}8FVVF8?TbnKc^8g6WC06;fMZ)lok zS(erNaI&H($mjDoe*E~-#KgqXhYuf?o7va$?d`D<~dQn@}iHwQ{77-JTt)T>k~o#U*gX=@#=VHj!CG+`J9G)?n#UAK$H zA^_mz$&;{c`>%tbe(0>6bGEay)90ppdlSTQ-1p5jmxc3_$&6h*0i?>;|t*7xtasFwL!-&5DI-nG=^RDL*00000NkvXX Hu0mjf?fZ}& literal 0 HcmV?d00001 diff --git a/app/widgets/RosterAngular/img/clients/xabber.png b/app/widgets/RosterAngular/img/clients/xabber.png new file mode 100644 index 0000000000000000000000000000000000000000..0f97556ba3f5f57bfa82a0b6e95dcdbcddcb5fc4 GIT binary patch literal 1436 zcmV;N1!MY&P)IM zG-l0NDl#%MVmFygoui|p6iw45{V)szo6V**Ha4!(G##rXc5S5)ZEbDdv9YoK>FH@{ zVPPQ_jYbP=2qD06T$N>6RTKquU5CxhO_WR~eX=ZfRuaFWinO)0dGFo3*WT6DCC$&z zs|N=M?kiWWAfwR;9LH&2zI=&&|Nh<6-rl~lxw#2Aj_>AjIXoN=gCGdriHV79V`Jme zKLX)--aa@u*nj)>ZP0aH+uz?u1VI3XVE_Qyk7}f?R;$+3)KrvgZf*`wCX@ZQZrw`Q zY_^iebZWEq_V#uT3=GJrREptwzR;KmAz)cn)if<(GMTidrl!QBM~|EU-~<4;c=4iL z6vdd|@0Vs~W|l5rzTAK9+O;G?=%)=_wnyAsNs@nYaq+jVuCC7E;bGNkwPs{l&Kw>d0?+emBofJf{P;1pv9aMQm8&cW$8kbS zOG}Ym*L7f77VqopOMdw9ArcG*&Wp2&;md0-f3g&+v^xc$O~3+ls%4-?^Vcqx@i zbw7FXM7n?f{%R-`@+gYpotc?&n$2ddDv+NEAp{tP?H;!⁣9=Vr$g&Lac-$3@M*CmBe0lxz=g-$kk_3an zZ~y=hkH@Ln+FA=u(+uPgObh>y$ zIF18`VJZNC%jHtvzJ0469v)g68X5{dBuN5I)3U)}kctBQ(5WN-`Sa&1SFc{}W?44l z@py{XRaFH|)9e5M!C(-#SS;P+ + + + + + diff --git a/app/widgets/RosterAngular/img/microphone.svg b/app/widgets/RosterAngular/img/microphone.svg new file mode 100644 index 000000000..66dd599d6 --- /dev/null +++ b/app/widgets/RosterAngular/img/microphone.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/widgets/RosterAngular/img/mobile.svg b/app/widgets/RosterAngular/img/mobile.svg new file mode 100644 index 000000000..18014a066 --- /dev/null +++ b/app/widgets/RosterAngular/img/mobile.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/widgets/RosterAngular/img/music.svg b/app/widgets/RosterAngular/img/music.svg new file mode 100644 index 000000000..ec6892a83 --- /dev/null +++ b/app/widgets/RosterAngular/img/music.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/widgets/RosterAngular/img/robot.png b/app/widgets/RosterAngular/img/robot.png new file mode 100644 index 0000000000000000000000000000000000000000..7290d2341d41cfea235d7c50b18cee7cb3c97e00 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4MCOcUjuS8D9XYds>B*1p`8AB|BJaM870YV|dYZx0)z4*}Q$iB} DI-rNi literal 0 HcmV?d00001 diff --git a/app/widgets/RosterAngular/img/search.png b/app/widgets/RosterAngular/img/search.png new file mode 100644 index 0000000000000000000000000000000000000000..6731832fd7cc2dc7b2983e71ba570c8c51a6fccc GIT binary patch literal 337 zcmV-X0j~auP)M2vBi`z}isZ=G8v3QIvSmAMF2SzrmvMM4lq zDx73l@^63lpYNi`0_cgzHE;`5wib5Qi@E}cfhAA})*TSHKK9=Cfd{*|7LiF=mV>e^ z2f!FunYQ%a_kRJ*VhyZ;(NEnuHw0dRT2+%a`wO5Jkx561Q%f>$6Dt$ div { + height: 3em; + overflow: hidden; +} + +#roster ul#rosterlist > div.groupshown { + height: 100%; +} + +#roster ul#rosterlist div ul.contact li:first-child:not(.offline):not(.server_error) { + display: list-item; +} + +#roster ul#rosterlist.offlineshown div.groupshown li { + display: list-item; +} +/* +#roster ul#rosterlist.offlineshown div.groupshown li:not(:first-child), +#roster ul#rosterlist.offlineshown div li:not(:first-child), +#roster ul#rosterlist div.groupshown li:not(:first-child), +#roster ul#rosterlist div li:not(:first-child) { + display: none; +} +* */ + +/* Show some clients icons, Xabber style */ +#roster ul#rosterlist li.client a { + background-repeat: no-repeat; + background-position: 95% center; +} + +#roster ul#rosterlist li.client.adium a { background-image: url(img/clients/adium.png); } +#roster ul#rosterlist li.client.pidgin a { background-image: url(img/clients/pidgin.png); } +#roster ul#rosterlist li.client.gajim a { background-image: url(img/clients/gajim.png); } +#roster ul#rosterlist li.client.telepathy a { background-image: url(img/clients/empathy.png); } +#roster ul#rosterlist li.client.xabber a { background-image: url(img/clients/xabber.png); } +#roster ul#rosterlist li.client.psi a, +#roster ul#rosterlist li.client.psi+ a { background-image: url(img/clients/psi.png); } + +/* The list */ + +#roster ul#rosterlist h1 { + padding: 1em; + color: #777; + line-height: 1em; + font-size: 1em; + + text-shadow: 0px -0.1em 0px rgba(0, 0, 0, 0.5); +} + +#roster ul#rosterlist h1:before { + cursor: pointer; + content: "+"; + width: 20px; + padding-right: 5px; + display: inline-block; + text-align: center; +} + +#roster ul#rosterlist div.groupshown h1:before { + content: "-"; +} + +#roster ul#rosterlist ul.contact li img { + max-height: 3em; + float: left; + width: 3em; + height: 3em; + margin-right: 0.5em; + margin-top: -0.5em; +} + +#roster ul#rosterlist ul.contact li a { + display: block; + white-space: nowrap; + width: auto; + overflow: hidden; + color: #BBB; + font-size: 1em; + padding-top: 0.5em; + text-overflow: ellipsis; + vertical-align: text-bottom; + text-decoration: none; + + text-shadow: 0px -0.1em 0px rgba(0, 0, 0, 0.5); +} + +#roster ul#rosterlist ul.contact li a span.ressource { + display: block; + font-size: 0.8em; + color: #777; +} + +/* Chat button */ +#roster ul#rosterlist ul.contact li .chat { + width: 0.5em; + height: 3em; + float: right; + background-color: #DDD; + transition: width 0.5s ease; +} + +#roster ul#rosterlist ul.contact li:hover .chat { + width: 3em; + background-image: url(img/bubbles.svg); + background-size: 1.3em 1.3em; + background-repeat: no-repeat; + background-position: center center; +} + +#roster ul#rosterlist ul.contact li .chat.on:hover { + cursor: pointer; +} + +#roster ul#rosterlist ul.contact li.online .chat { + background-color: #6FCC43; +} + +#roster ul#rosterlist ul.contact li.away .chat { + background-color: #FFE433; +} + +#roster ul#rosterlist ul.contact li.dnd .chat { + background-color: #D92727; +} + +#roster ul#rosterlist ul.contact li.xa .chat { + background-color: #442178; +} + +#roster ul#rosterlist ul.contact li.inactive { + opacity: 0.5; +} + +/* Icons */ + +#roster ul#rosterlist ul.contact li .infoicon { + width: 1.4em; + height: 1.4em; + background-size: 1.3em 1.3em; + background-repeat: no-repeat; + float: right; + margin-top: 0.8em; + margin-right: 0.2em; +} + +#roster ul#rosterlist ul.contact li .mobile { + background-image: url('img/mobile.svg'); +} + +#roster ul#rosterlist ul.contact li .web { + background-image: url('img/earth.svg'); +} + +#roster ul#rosterlist ul.contact li .bot { + background-image: url('img/robot.png'); +} + +#roster ul#rosterlist ul.contact li .tune { + background-image: url('img/music.svg'); +} + +#roster ul#rosterlist ul.contact li .jingle { + background-image: url('img/call.svg'); +} + +#roster ul#rosterlist ul.contact li .jingle:hover { + cursor: pointer; +} + +/* Search */ +#roster.search ul#rosterlist.offlineshown div.groupshown > li { + display: none; +} + +#roster.search ul#rosterlist.offlineshown div.groupshown > li.found { + display: list-item; +} + +#rostermenu { + position: fixed; + bottom: 0; + right: 0; + display: block; + background-color: rgba(36, 36, 36, 1); + width: 15rem; + pointer-events: auto; + z-index: 3; +} + + +#rostermenu li:nth-last-child(-n+3) { + float: right; +} + +#rostermenu li.show_hide { + position: relative; + + box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; +} + +#rostermenu li.show_hide:before { + content: ""; + transform:rotate(45deg); + -ms-transform:rotate(45deg); + -webkit-transform:rotate(45deg); + background-color: #0DB8B5; + display: block; + position: absolute; + top: 1.25em; + width: 0.5em; + height: 0.5em; +} + +#rostermenu li.body_roster { + border-right: 0.5em solid #0DB8B5; +} + +#rostermenu li.body_roster:before { + background-color: #0DB8B5; + right: -0.25em; +} + +#rostermenu li.body_infos { + border-left: 0.5em solid #6FCC43; +} + +#rostermenu li.body_infos:before { + background-color: #6FCC43; + left: -0.25em; +} + +#rostermenu div#chattoggle { + display: inline-block; +} + +#rostermenu .message { + color: white; + padding: 0.5em; +} + diff --git a/app/widgets/RosterAngular/roster.js b/app/widgets/RosterAngular/roster.js new file mode 100644 index 000000000..ece26711f --- /dev/null +++ b/app/widgets/RosterAngular/roster.js @@ -0,0 +1,351 @@ +(function(){ + var app = angular.module("rosterAngular", ['angular.filter']); + + app.controller("RosterController", function($scope){ + $scope.contacts = []; + + $scope.getContacts = function(contactsList){ + $scope.contacts = contactsList; + $scope.$apply(); + }; + }); +})(); + +function getContacts(tab){ + angular.element(roster).scope().getContacts(JSON.parse(tab)); +} + +function sortRoster() { + + roster = document.querySelector('#rosterlist'); + contacts = roster.querySelectorAll('li'); + + online = roster.querySelectorAll('.online'); + for(i = 0; i < online.length; i++) { + online.item(i).parentNode.insertBefore(online.item(i), contacts.item(contacts.length)) + } + away = roster.querySelectorAll('.away'); + for(i = 0; i < away.length; i++) { + away.item(i).parentNode.insertBefore(away.item(i), contacts.item(contacts.length)) + } + dnd = roster.querySelectorAll('.dnd'); + for(i = 0; i < dnd.length; i++) { + dnd.item(i).parentNode.insertBefore(dnd.item(i), contacts.item(contacts.length)) + } + xa = roster.querySelectorAll('.xa'); + for(i = 0; i < xa.length; i++) { + xa.item(i).parentNode.insertBefore(xa.item(i), contacts.item(contacts.length)) + } + offline = roster.querySelectorAll('.offline'); + for(i = 0; i < offline.length; i++) { + offline.item(i).parentNode.insertBefore(offline.item(i), contacts.item(contacts.length)) + } + + server_error = roster.querySelectorAll('.server_error'); + for(i = 0; i < server_error.length; i++) { + server_error.item(i).parentNode.insertBefore(server_error.item(i), contacts.item(contacts.length)) + } +} + +function showRoster(boolOffline) { + if(boolOffline == '1') + document.querySelector('ul#rosterlist').className = 'offlineshown'; + else + document.querySelector('ul#rosterlist').className = ''; +} + +function showHideRoster(hide) { + if(hide == '1') + document.querySelector('#roster').className = 'hide'; + else + document.querySelector('#roster').className = ''; +} + +function incomingPresence(val) { + target = document.getElementById('roster'+val[0]); + if(target) { + target.className = val[1]; + } + sortRoster(); +} + +movim_add_onload(function() +{ + var search = document.querySelector('#rostersearch'); + var roster = document.querySelector('#roster'); + var rosterlist = document.querySelector('#rosterlist'); + + var roster_classback = document.querySelector('#roster').className; + var rosterlist_classback = document.querySelector('#rosterlist').className; + + roster.onblur = function() { + roster.className = roster_classback; + rosterlist.className = rosterlist_classback; + }; + search.onkeyup = function(event) { + if(search.value.length > 0) { + roster.className = 'search'; + rosterlist.className = 'offlineshown'; + } else { + roster.className = roster_classback; + rosterlist.className = rosterlist_classback; + } + + // We clear the old search + var selector_clear = '#rosterlist div > li'; + var li = document.querySelectorAll(selector_clear); + + for(i = 0; i < li.length; i++) { + li.item(i).className = ''; + } + + // We select the interesting li + var selector = '#rosterlist div > li[title*=\'' + search.value + '\']'; + var li = document.querySelectorAll(selector); + + for(i = 0; i < li.length; i++) { + li.item(i).className = 'found'; + } + }; +}); +/*ROSTER SEARCH*/ +/* +function focusContact(){ + rosterlist = document.querySelector('#rosterlist'); + focused = rosterlist.querySelector('.focused'); + if( focused != null){ + focused.className = focused.className.split(' ')[0]; + } + + allLi = ""; + //offline are shown + if(rosterlist.className!=""){ + allLi = rosterlist.querySelectorAll("li"); + } + //offline are hidden + else{ + allLi = rosterlist.querySelectorAll("li:not(.offline)"); + } + for(j=0; j