diff --git a/menuExtras/users.js b/menuExtras/users.js new file mode 100644 index 0000000..a089661 --- /dev/null +++ b/menuExtras/users.js @@ -0,0 +1,98 @@ +(function() { + + var css = { + width: '12px', + height: '12px', + margin: '2px', + borderRadius: '3px' + }, + reload = pandora.$ui.appPanel.reload, + timeout, + $users = $('
'), + $icon = $('') + .attr({src: Ox.getFlagByGeoname('', 16)}) + .css(css) + .bind({click: start}) + .appendTo($users); + + load(); + + function getUsers() { + Ox.Request.clearCache('findUsers'); + pandora.api.findUsers({ + keys: ['firstseen', 'lastseen', 'location'], + query: { + conditions: [{key: 'level', operator: '!=', value: 'robot'}], + operator: '&' + }, + range: [0, 2400], + sort: [{key: 'lastseen', operator: '-'}] + }, function(result) { + var time = new Date(), + newUsers = result.data.items.filter(function(user) { + return time - new Date(user.firstseen) < 86400000; + }).length, + allUsers = result.data.items.filter(function(user) { + return time - new Date(user.lastseen) < 86400000; + }).length; + $users.empty(); + result.data.items.slice(0, 16).forEach(function(user) { + $users.prepend( + Ox.Element({ + element: '', + tooltip: '
' + + (user.location || 'Unknown') + + '
' + + Ox.formatDate(user.lastseen, '%T') + + '
' + }) + .attr({src: Ox.getFlagByGeoname(user.location, 16)}) + .css(css) + .bindEvent({anyclick: stop}) + ); + }); + $users.prepend( + Ox.Element({ + tooltip: Ox.formatNumber(newUsers) + '/' + + Ox.formatNumber(allUsers) + + ' (new/total) users in the last 24 hours' + }) + .addClass('OxLight') + .css({float: 'left', margin: '2px', fontSize: '10px'}) + .html( + Ox.formatNumber(newUsers) + '/' + + Ox.formatNumber(allUsers) + ) + .bindEvent({anyclick: stop}) + ); + }); + timeout = setTimeout(getUsers, 60000); + } + + function load() { + pandora.$ui.mainMenu.find('.OxExtras').prepend($users); + patchReload(); + } + + function patchReload() { + pandora.$ui.appPanel.reload = function() { + reload(); + load(); + timeout ? start() : stop(); + } + } + + function start() { + clearTimeout(timeout); + timeout = void 0; + getUsers(); + } + + function stop() { + clearTimeout(timeout); + timeout = void 0; + $('.OxTooltip').hide(); + $users.empty().append($icon.bind({click: start})); + } + +}()); \ No newline at end of file