aboutsummaryrefslogtreecommitdiffstats
path: root/alias-angular/app/js/controllers.js
diff options
context:
space:
mode:
authorZaran <zaran.krleza@gmail.com>2012-04-24 01:22:27 -0700
committerZaran <zaran.krleza@gmail.com>2012-04-24 01:22:27 -0700
commit3fdb17a79de4507e8a4f3fbe47f6c078bdedda46 (patch)
treed3ef09b18bad72c2d42f4ade3bc6569dd90ccc64 /alias-angular/app/js/controllers.js
parent58bd41bf1d15e9a8d70c9c9d88ccb39b81fdf8cb (diff)
downloadalias-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/controllers.js')
-rw-r--r--alias-angular/app/js/controllers.js31
1 files changed, 21 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'];