diff --git a/nodejs.js b/nodejs.js index 715fda9ee5c4b6304d958c89540a9fad775864b3..5b4fdaba565b93bfa43fe92dcba1f74d828b2104 100644 --- a/nodejs.js +++ b/nodejs.js @@ -1,7 +1,7 @@ (function ($) { -Drupal.Nodejs = Drupal.Nodejs || {'callbacks': {}, 'socket': false, 'connectionSetupHandlers': {}}; +Drupal.Nodejs = Drupal.Nodejs || {'presenceCallbacks': {}, 'callbacks': {}, 'socket': false, 'connectionSetupHandlers': {}}; Drupal.behaviors.nodejs = { attach: function (context, settings) { @@ -20,6 +20,16 @@ Drupal.Nodejs.runCallbacks = function (message) { } catch (exception) {} } + else if (message.presenceNotification != undefined) { + $.each(Drupal.Nodejs.presenceCallbacks, function () { + if ($.isFunction(this.callback)) { + try { + this.callback(message); + } + catch (exception) {} + } + }); + } else { $.each(Drupal.Nodejs.callbacks, function () { if ($.isFunction(this.callback)) { diff --git a/nodejs_buddylist/icons/16/available.png b/nodejs_buddylist/icons/16/available.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5eda236bee714d5464e6cee913727cab7baba1 Binary files /dev/null and b/nodejs_buddylist/icons/16/available.png differ diff --git a/nodejs_buddylist/icons/16/away.png b/nodejs_buddylist/icons/16/away.png new file mode 100644 index 0000000000000000000000000000000000000000..331828ba2fd2f71591d4398655395410e13021ed Binary files /dev/null and b/nodejs_buddylist/icons/16/away.png differ diff --git a/nodejs_buddylist/icons/16/busy.png b/nodejs_buddylist/icons/16/busy.png new file mode 100644 index 0000000000000000000000000000000000000000..0472fbe9cb597b5c0cb38a7e3555679da0cf2ef4 Binary files /dev/null and b/nodejs_buddylist/icons/16/busy.png differ diff --git a/nodejs_buddylist/icons/16/chat.png b/nodejs_buddylist/icons/16/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0811806146cf08721f7d9e1e5265d317e1d6d6 Binary files /dev/null and b/nodejs_buddylist/icons/16/chat.png differ diff --git a/nodejs_buddylist/icons/16/extended-away.png b/nodejs_buddylist/icons/16/extended-away.png new file mode 100644 index 0000000000000000000000000000000000000000..018c272eb0eae87af14d6071d8c4d2c25e1825c1 Binary files /dev/null and b/nodejs_buddylist/icons/16/extended-away.png differ diff --git a/nodejs_buddylist/icons/16/invisible.png b/nodejs_buddylist/icons/16/invisible.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab7fcd8c1bb57b6a58c936e8d9de5afee0829a4 Binary files /dev/null and b/nodejs_buddylist/icons/16/invisible.png differ diff --git a/nodejs_buddylist/icons/16/log-in.png b/nodejs_buddylist/icons/16/log-in.png new file mode 100644 index 0000000000000000000000000000000000000000..fd61a0317f516777872ed7e91073c6e46a78236e Binary files /dev/null and b/nodejs_buddylist/icons/16/log-in.png differ diff --git a/nodejs_buddylist/icons/16/log-out.png b/nodejs_buddylist/icons/16/log-out.png new file mode 100644 index 0000000000000000000000000000000000000000..0418e64c411b503856fe9ef1d22c4069ef1f3806 Binary files /dev/null and b/nodejs_buddylist/icons/16/log-out.png differ diff --git a/nodejs_buddylist/icons/16/offline.png b/nodejs_buddylist/icons/16/offline.png new file mode 100644 index 0000000000000000000000000000000000000000..44a0737e8f8b8119d1b0d61d1c565afb9c5af1cd Binary files /dev/null and b/nodejs_buddylist/icons/16/offline.png differ diff --git a/nodejs_buddylist/icons/16/person.png b/nodejs_buddylist/icons/16/person.png new file mode 100644 index 0000000000000000000000000000000000000000..967e2104c17d5bc5e456c710ebe20c1d5e81ebd2 Binary files /dev/null and b/nodejs_buddylist/icons/16/person.png differ diff --git a/nodejs_buddylist/icons/16/rtl/extended-away.png b/nodejs_buddylist/icons/16/rtl/extended-away.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2dad501930ad5dde3ec5aa6a386a031913b793 Binary files /dev/null and b/nodejs_buddylist/icons/16/rtl/extended-away.png differ diff --git a/nodejs_buddylist/icons/16/rtl/log-in.png b/nodejs_buddylist/icons/16/rtl/log-in.png new file mode 100644 index 0000000000000000000000000000000000000000..b106769a1e13c6b4696594f2616da738bf8394f7 Binary files /dev/null and b/nodejs_buddylist/icons/16/rtl/log-in.png differ diff --git a/nodejs_buddylist/icons/16/rtl/log-out.png b/nodejs_buddylist/icons/16/rtl/log-out.png new file mode 100644 index 0000000000000000000000000000000000000000..bd61d6940b376ede43ae03ce75798c92588122a1 Binary files /dev/null and b/nodejs_buddylist/icons/16/rtl/log-out.png differ diff --git a/nodejs_buddylist/icons/32/available.png b/nodejs_buddylist/icons/32/available.png new file mode 100644 index 0000000000000000000000000000000000000000..6d8d72cfe02ddd2c399ff7754dac33f053ad912e Binary files /dev/null and b/nodejs_buddylist/icons/32/available.png differ diff --git a/nodejs_buddylist/icons/32/away.png b/nodejs_buddylist/icons/32/away.png new file mode 100644 index 0000000000000000000000000000000000000000..63a388a4a5853530c9949aac4a8765b2089d3077 Binary files /dev/null and b/nodejs_buddylist/icons/32/away.png differ diff --git a/nodejs_buddylist/icons/32/busy.png b/nodejs_buddylist/icons/32/busy.png new file mode 100644 index 0000000000000000000000000000000000000000..9dccd177403be9541f5874381b1ffc03be19d527 Binary files /dev/null and b/nodejs_buddylist/icons/32/busy.png differ diff --git a/nodejs_buddylist/icons/32/chat.png b/nodejs_buddylist/icons/32/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..537081e05213c231b925c4d989d2feeef19c571b Binary files /dev/null and b/nodejs_buddylist/icons/32/chat.png differ diff --git a/nodejs_buddylist/icons/32/extended-away.png b/nodejs_buddylist/icons/32/extended-away.png new file mode 100644 index 0000000000000000000000000000000000000000..d3cdb827c4894722715768c68bedb3edd4311899 Binary files /dev/null and b/nodejs_buddylist/icons/32/extended-away.png differ diff --git a/nodejs_buddylist/icons/32/invisible.png b/nodejs_buddylist/icons/32/invisible.png new file mode 100644 index 0000000000000000000000000000000000000000..f071fbe11607c3c9aa6640b18583a3bc96e9bc70 Binary files /dev/null and b/nodejs_buddylist/icons/32/invisible.png differ diff --git a/nodejs_buddylist/icons/32/log-in.png b/nodejs_buddylist/icons/32/log-in.png new file mode 100644 index 0000000000000000000000000000000000000000..56994ba191721314759a69fab0ca26fb7e392a20 Binary files /dev/null and b/nodejs_buddylist/icons/32/log-in.png differ diff --git a/nodejs_buddylist/icons/32/log-out.png b/nodejs_buddylist/icons/32/log-out.png new file mode 100644 index 0000000000000000000000000000000000000000..8a9e8aaf1855ee85bcde825444c1b307bc410ce4 Binary files /dev/null and b/nodejs_buddylist/icons/32/log-out.png differ diff --git a/nodejs_buddylist/icons/32/offline.png b/nodejs_buddylist/icons/32/offline.png new file mode 100644 index 0000000000000000000000000000000000000000..176f10b01e7a22c38f5f215beaa87b9747fedd78 Binary files /dev/null and b/nodejs_buddylist/icons/32/offline.png differ diff --git a/nodejs_buddylist/icons/32/person.png b/nodejs_buddylist/icons/32/person.png new file mode 100644 index 0000000000000000000000000000000000000000..6344d913293fc490acdea6a783f54dcb294ae73e Binary files /dev/null and b/nodejs_buddylist/icons/32/person.png differ diff --git a/nodejs_buddylist/icons/32/rtl/extended-away.png b/nodejs_buddylist/icons/32/rtl/extended-away.png new file mode 100644 index 0000000000000000000000000000000000000000..d3cdb827c4894722715768c68bedb3edd4311899 Binary files /dev/null and b/nodejs_buddylist/icons/32/rtl/extended-away.png differ diff --git a/nodejs_buddylist/icons/32/rtl/log-in.png b/nodejs_buddylist/icons/32/rtl/log-in.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b2d082ad3608aa1fbee945a71ad6e03d573d65 Binary files /dev/null and b/nodejs_buddylist/icons/32/rtl/log-in.png differ diff --git a/nodejs_buddylist/icons/32/rtl/log-out.png b/nodejs_buddylist/icons/32/rtl/log-out.png new file mode 100644 index 0000000000000000000000000000000000000000..a91bbfa0170690290eaabb9153eb55d5c4bd5989 Binary files /dev/null and b/nodejs_buddylist/icons/32/rtl/log-out.png differ diff --git a/nodejs_buddylist/icons/48/available.png b/nodejs_buddylist/icons/48/available.png new file mode 100644 index 0000000000000000000000000000000000000000..a751b1e4aabc8f2ff890938b47590645bc1ee119 Binary files /dev/null and b/nodejs_buddylist/icons/48/available.png differ diff --git a/nodejs_buddylist/icons/48/away.png b/nodejs_buddylist/icons/48/away.png new file mode 100644 index 0000000000000000000000000000000000000000..7711762c51762903f2a99f2616c3ed4aac9bcf0d Binary files /dev/null and b/nodejs_buddylist/icons/48/away.png differ diff --git a/nodejs_buddylist/icons/48/busy.png b/nodejs_buddylist/icons/48/busy.png new file mode 100644 index 0000000000000000000000000000000000000000..1aaf614b62b0acbb5cd9c055d010ef4f9bb98a1a Binary files /dev/null and b/nodejs_buddylist/icons/48/busy.png differ diff --git a/nodejs_buddylist/icons/48/chat.png b/nodejs_buddylist/icons/48/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..137429ab8d1366aa8aa9c86d157b12acde259932 Binary files /dev/null and b/nodejs_buddylist/icons/48/chat.png differ diff --git a/nodejs_buddylist/icons/48/extended-away.png b/nodejs_buddylist/icons/48/extended-away.png new file mode 100644 index 0000000000000000000000000000000000000000..66864cdff2ade07186973f96f7d3db9f48602846 Binary files /dev/null and b/nodejs_buddylist/icons/48/extended-away.png differ diff --git a/nodejs_buddylist/icons/48/invisible.png b/nodejs_buddylist/icons/48/invisible.png new file mode 100644 index 0000000000000000000000000000000000000000..6262681031850f9bea68a2214a9a3399237fac44 Binary files /dev/null and b/nodejs_buddylist/icons/48/invisible.png differ diff --git a/nodejs_buddylist/icons/48/log-in.png b/nodejs_buddylist/icons/48/log-in.png new file mode 100644 index 0000000000000000000000000000000000000000..61c103f41df235472199430d972fcb0890bf0ec2 Binary files /dev/null and b/nodejs_buddylist/icons/48/log-in.png differ diff --git a/nodejs_buddylist/icons/48/log-out.png b/nodejs_buddylist/icons/48/log-out.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7947ed17f3b02a2efe318503504b241f771552 Binary files /dev/null and b/nodejs_buddylist/icons/48/log-out.png differ diff --git a/nodejs_buddylist/icons/48/offline.png b/nodejs_buddylist/icons/48/offline.png new file mode 100644 index 0000000000000000000000000000000000000000..dd3083814b15e7b59dc283ef6102baa91abebea4 Binary files /dev/null and b/nodejs_buddylist/icons/48/offline.png differ diff --git a/nodejs_buddylist/icons/48/person.png b/nodejs_buddylist/icons/48/person.png new file mode 100644 index 0000000000000000000000000000000000000000..26b924b1c8d2e703bf3c76125ddd709e87d666f7 Binary files /dev/null and b/nodejs_buddylist/icons/48/person.png differ diff --git a/nodejs_buddylist/nodejs_buddylist.css b/nodejs_buddylist/nodejs_buddylist.css new file mode 100644 index 0000000000000000000000000000000000000000..d4b64b577a8372ef9db882984869dc162a83707a --- /dev/null +++ b/nodejs_buddylist/nodejs_buddylist.css @@ -0,0 +1,9 @@ + +.nodejs-buddylist-offline { + background: url(icons/16/offline.png) no-repeat top right; +} + +.nodejs-buddylist-online { + background: url(icons/16/available.png) no-repeat top right; +} + diff --git a/nodejs_buddylist/nodejs_buddylist.js b/nodejs_buddylist/nodejs_buddylist.js index 5a09a647f21d4c7baf6cdce0db16bd41c938abfa..1ed9886b9c8ea9a0645c3db4922d6f0ce5a782c6 100644 --- a/nodejs_buddylist/nodejs_buddylist.js +++ b/nodejs_buddylist/nodejs_buddylist.js @@ -1,10 +1,19 @@ (function ($) { -Drupal.Nodejs.callbacks.nodejsBuddylist.refreshList = { - callback: function (container_id, data) { - //jquery that refreshes the selector for buddy list, or user list - //Maybe a simple jquery animation? +Drupal.Nodejs.presenceCallbacks.buddyList = { + callback: function (message) { + if (message.presenceNotification.event == 'offline') { + $('#nodejs-buddylist-uid-' + message.presenceNotification.uid).removeClass('nodejs-buddylist-online'); + $('#nodejs-buddylist-uid-' + message.presenceNotification.uid).addClass('nodejs-buddylist-offline'); + } + else { + $('#nodejs-buddylist-uid-' + message.presenceNotification.uid).addClass('nodejs-buddylist-online'); + $('#nodejs-buddylist-uid-' + message.presenceNotification.uid).removeClass('nodejs-buddylist-offline'); + } } }; -})(jQuery); \ No newline at end of file +})(jQuery); + +// vi:ai:expandtab:sw=2 ts=2 + diff --git a/nodejs_buddylist/nodejs_buddylist.module b/nodejs_buddylist/nodejs_buddylist.module index 55051f3772320dc04f129055c4179b1e652fcbe9..faf93dc27ca29bfad11ee7e360670da59a9b9415 100644 --- a/nodejs_buddylist/nodejs_buddylist.module +++ b/nodejs_buddylist/nodejs_buddylist.module @@ -4,7 +4,8 @@ * Implements hook_init(). */ function nodejs_buddylist_init() { - global $user; + drupal_add_css(drupal_get_path('module', 'nodejs_buddylist') . '/nodejs_buddylist.css'); + drupal_add_js(drupal_get_path('module', 'nodejs_buddylist') . '/nodejs_buddylist.js'); } /** @@ -76,7 +77,9 @@ function nodejs_buddylist_block_content($account) { $online_uids = nodejs_buddylist_get_online_uids(array_keys($buddies)); $html = '<ul>'; foreach ($buddies as $buddy) { - $html .= '<li>' . theme('username', array('account' => $buddy)) . '</li>'; + $id = "nodejs-buddylist-uid-$buddy->uid"; + $class = 'nodejs-buddylist-' . (in_array($buddy->uid, $online_uids) ? 'online' : 'offline'); + $html .= '<li id="' . $id . '" class="' . $class . '">' . theme('username', array('account' => $buddy)) . '</li>'; } $html .= '</ul>'; return $html; @@ -90,7 +93,10 @@ function nodejs_buddylist_block_content($account) { * Filter the given list of uids based on who is online. */ function nodejs_buddylist_get_online_uids($uids) { - $online_uids = $uids; - return $uids; + return db_select('nodejs_presence', 'njp') + ->condition('njp.uid', $uids, 'IN') + ->fields('njp', array('uid')) + ->execute() + ->fetchCol(); }