diff options
| author | Zaran <zaran.krleza@gmail.com> | 2012-04-24 01:22:27 -0700 |
|---|---|---|
| committer | Zaran <zaran.krleza@gmail.com> | 2012-04-24 01:22:27 -0700 |
| commit | 3fdb17a79de4507e8a4f3fbe47f6c078bdedda46 (patch) | |
| tree | d3ef09b18bad72c2d42f4ade3bc6569dd90ccc64 /alias-angular/app/js | |
| parent | 58bd41bf1d15e9a8d70c9c9d88ccb39b81fdf8cb (diff) | |
| download | alias-3fdb17a79de4507e8a4f3fbe47f6c078bdedda46.tar.gz | |
User availibility status improvements
* store the status of users as received in the presence stanzas
* new filter to convert a status as defined in rfc3921 to something
readable (could be used to display contacts' status in a tooltip)
* encapsulate bootsrap's dropdown plugin in the dropdown-toggle directive
(adding the dropdown-toggle directive to a tag calls Bootstrap's dropdown
initializer on this tag at compile time
* allow the user to change his status via a dropdown button. This works,
but angular complains that $apply is already in progress when you try
to change your status
Diffstat (limited to 'alias-angular/app/js')
| -rw-r--r-- | alias-angular/app/js/controllers.js | 31 | ||||
| -rw-r--r-- | alias-angular/app/js/directives.js | 8 | ||||
| -rw-r--r-- | alias-angular/app/js/filters.js | 15 |
3 files changed, 44 insertions, 10 deletions
diff --git a/alias-angular/app/js/controllers.js b/alias-angular/app/js/controllers.js index 909754e..33feb0d 100644 --- a/alias-angular/app/js/controllers.js +++ b/alias-angular/app/js/controllers.js @@ -2,7 +2,9 @@ /* App Controllers */ function ConnectCtl($scope, StropheSrv, $log, $rootScope) { - $rootScope.username = $scope.username; + $rootScope.self = {jid: "", + status: 'offline' + }; $rootScope.is_connected = function () { return $rootScope.status == Strophe.Status.CONNECTED; }; @@ -28,6 +30,7 @@ function ConnectCtl($scope, StropheSrv, $log, $rootScope) { }; $scope.login = function () { StropheSrv.login($scope.username, $scope.password, connect_callback); + $rootScope.self["jid"] = $scope.username; }; $scope.disconnect = function() { StropheSrv.disconnect(); @@ -41,6 +44,7 @@ function RosterCtl($scope, StropheSrv, $log, $rootScope) { $scope.get_contacts = function() { return _.toArray($scope.contacts); }; + function onRoster(iq) { var elems = iq.getElementsByTagName('query'); var query = elems[0]; @@ -52,6 +56,7 @@ function RosterCtl($scope, StropheSrv, $log, $rootScope) { }); //make sure the roster is populated before sending presence request StropheSrv.send($pres()); + $rootScope.self["status"] = "chat"; }; function onPresence(presence) { @@ -60,17 +65,16 @@ function RosterCtl($scope, StropheSrv, $log, $rootScope) { var type = $(presence).attr('type'); // if (jid in $scope.contacts) { if(_.has($scope.contacts, jid)){ + var contact = $scope.contacts[jid]; if (type !== 'error') { if (type === 'unavailable') { - $log.log(jid +' is offline'); - $scope.contacts[jid]['status'] = 'offline'; - }else{ - var show = $(presence).find('show').text(); - if (show === '') { - $scope.contacts[jid]['status'] = 'online'; - }else{ - $log.log(jid +' is away'); - $scope.contacts[jid]['status'] = 'away'; + contact['status'] = 'offline'; + } else { + var show = $(presence).find('show'); + if (show.length) { + contact['status'] = show.text(); + } else { + contact['status'] = 'chat'; } } } @@ -90,6 +94,13 @@ function RosterCtl($scope, StropheSrv, $log, $rootScope) { $scope.chatWith = function(contact) { $rootScope.$broadcast('msgrequest', contact.name||contact.jid); }; + + $scope.status = function(status) { + var pres = $pres().c("show",{},status); + StropheSrv.send(pres); + $rootScope.self["status"] = status; + }; + } RosterCtl.$inject = ['$scope','StropheSrv','$log', '$rootScope']; diff --git a/alias-angular/app/js/directives.js b/alias-angular/app/js/directives.js index 3b9b652..cb7e70d 100644 --- a/alias-angular/app/js/directives.js +++ b/alias-angular/app/js/directives.js @@ -28,4 +28,12 @@ angular.module('Alias.directives', []). } }; return directiveDefinition; + }).directive('dropdownToggle', function($log) { + var directiveDefinition = { + restrict: 'A', + link: function(scope, elm, attrs) { + elm.dropdown(); + } + }; + return directiveDefinition; }); diff --git a/alias-angular/app/js/filters.js b/alias-angular/app/js/filters.js index 772e523..70bd074 100644 --- a/alias-angular/app/js/filters.js +++ b/alias-angular/app/js/filters.js @@ -25,4 +25,19 @@ angular.module('Alias.filters', []). }); }; }; + }).filter('formatStatus',function() { + return function(status) { + switch(status) { + case "chat": + return "Online"; + case "away": + return "Away"; + case "xa": + return "Extended Away"; + case "dnd": + return "Do Not Disturb"; + case "offline": + return "Offline"; + } + }; });
\ No newline at end of file |
