update statistics dialog

This commit is contained in:
rolux 2012-03-25 21:12:13 +00:00
parent f3c08436b1
commit 517b9f9be5

View file

@ -7,6 +7,8 @@ pandora.ui.statisticsDialog = function() {
var colors = {
firstseen: [64, 192, 64],
lastseen: [64, 64, 192],
day: [64, 192, 192],
hour: [64, 192, 192],
continent: [64, 192, 64],
region: [64, 192, 192],
country: [64, 64, 192],
@ -79,7 +81,6 @@ pandora.ui.statisticsDialog = function() {
.bindEvent({
resizeend: function(data) {
dialogWidth = data.width;
Ox.print('WIDTH:::', dialogWidth)
$tabPanel.$element.replaceElement(1,
$tabPanel.options('content')($tabPanel.selected())
);
@ -88,12 +89,14 @@ pandora.ui.statisticsDialog = function() {
$tabPanel;
//Ox.getJSON('/static/json/deleteme.json', function(result) {
Ox.getJSON('/static/json/deleteme.json', function(result) {
/*
pandora.api.findUsers({
keys: ['browser', 'firstseen', 'lastseen', 'level', 'location', 'system'],
range: [0, 1000000],
sort: [{key: 'username', operator: '+'}]
}, function(result) {
*/
var data = {},
flagCountry = {},
@ -104,6 +107,8 @@ pandora.ui.statisticsDialog = function() {
data[mode] = {
year: {},
month: {},
day: {},
hour: {},
continent: {},
region: {},
country: {},
@ -117,13 +122,17 @@ pandora.ui.statisticsDialog = function() {
};
result.data.items.forEach(function(item) {
var city, continent, country, name = {}, region, split;
var city, continent, country, countryData, name = {}, region, split;
if (mode == 'all' || item.level != 'guest') {
['firstseen', 'lastseen'].forEach(function(key, i) {
var year = item[key].substr(0, 4) + '-' + key,
month = item[key].substr(0, 7) + '-' + key;
month = item[key].substr(0, 7) + '-' + key,
day = Ox.formatDate(item[key], '%u'),
hour = item[key].substr(11, 2);
data[mode].year[year] = (data[mode].year[year] || 0) + 1;
data[mode].month[month] = (data[mode].month[month] || 0) + 1;
data[mode].day[day] = (data[mode].day[day] || 0) + 1;
data[mode].hour[hour] = (data[mode].hour[hour] || 0) + 1;
});
if (item.location) {
split = item.location.split(', ')
@ -131,14 +140,19 @@ pandora.ui.statisticsDialog = function() {
country = item.location;
} else {
country = split[1];
city = [split[1], split[0]].join(', ');
city = split[0];
}
countryData = Ox.getCountryByName(country);
continent = countryData.continent;
region = [continent, countryData.region].join(', ');
country = [region, country].join(', ')
city = city ? [country, city].join(', ') : '';
data[mode].continent[continent] = (data[mode].continent[continent] || 0) + 1;
data[mode].region[region] = (data[mode].region[region] || 0) + 1;
data[mode].country[country] = (data[mode].country[country] || 0) + 1;
if (city) {
data[mode].city[city] = (data[mode].city[city] || 0) + 1;
}
data[mode].country[country] = (data[mode].country[country] || 0) + 1;
region = Ox.getCountryByName(country).region;
data[mode].region[region] = (data[mode].region[region] || 0) + 1;
continent = Ox.getCountryByName(country).continent;
data[mode].continent[continent] = (data[mode].continent[continent] || 0) + 1;
}
['system', 'browser'].forEach(function(key) {
var version = item[key];
@ -197,10 +211,12 @@ pandora.ui.statisticsDialog = function() {
['continent', 'region'].forEach(function(key) {
flagCountry[mode][key] = {};
Ox.forEach(data[mode][key], function(regionValue, regionKey) {
regionKey = regionKey.split(', ').pop();
var max = 0;
Ox.forEach(data[mode].country, function(countryValue, countryKey) {
countryKey = countryKey.split(', ').pop();
if (
Ox.getCountryByGeoname(countryKey)[key] == regionKey
Ox.getCountryByName(countryKey)[key] == regionKey
&& countryValue > max
) {
flagCountry[mode][key][regionKey] = countryKey;
@ -212,10 +228,10 @@ pandora.ui.statisticsDialog = function() {
});
data.all.city['Other, Other'] = 0;
data.all.city['Antarctica, Antarctica, Neutral Zone, Other'] = 0;
Ox.forEach(data.all.city, function(value, key) {
if (value < 2) {
data.all.city['Other, Other']++;
data.all.city['Antarctica, Antarctica, Neutral Zone, Other']++;
delete data.all.city[key];
}
});
@ -247,23 +263,34 @@ pandora.ui.statisticsDialog = function() {
: 'rgb(16, 16, 16)'
});
if (id == 'seen') {
['year', 'month'].forEach(function(key) {
['year', 'month', 'day', 'hour'].forEach(function(key) {
var isYearOrMonth = ['year', 'month'].indexOf(key) > -1;
Ox.Chart({
color: function(key) {
return colors[key.split('-').pop()];
},
color: isYearOrMonth
? function(value) {
return colors[value.split('-').pop()];
}
: colors[key],
data: data[mode][key],
formatKey: function(value) {
var split = value.split('-');
return (split.pop() == 'firstseen' ? 'First' : 'Last') + ': '
var ret, split;
if (isYearOrMonth) {
split = value.split('-');
ret = (split.pop() == 'firstseen' ? 'First' : 'Last') + ': '
+ (key == 'year' ? '' : Ox.MONTHS[parseInt(split[1], 10) - 1])
+ ' ' + split[0];
} else {
ret = key == 'day'
? Ox.WEEKDAYS[parseInt(value) - 1]
: value + ':00';
}
return ret;
},
keyAlign: 'right',
keyWidth: 128,
rows: 2,
sort: {key: 'key', operator: '-'},
title: key == 'year' ? 'Years' : 'Months',
rows: isYearOrMonth ? 2 : 1,
sort: {key: 'key', operator: isYearOrMonth ? '-' : '+'},
title: Ox.toTitleCase(key) + 's',
width: chartWidth
})
.css({
@ -280,13 +307,12 @@ pandora.ui.statisticsDialog = function() {
color: colors[key],
data: data[mode][key],
formatKey: function(value) {
var city, country, split;
if (key == 'city' || key == 'country') {
split = value.split(', ');
city = split.length == 2 ? split[1] : ''
country = split[0];
var city, country, split = value.split(', ');
if (key == 'continent' || key == 'region') {
country = flagCountry[mode][key][Ox.last(split)];
} else {
country = flagCountry[mode][key][value];
country = split[2];
city = key == 'city' ? split[3] : ''
}
return $('<div>')
.append(
@ -301,13 +327,32 @@ pandora.ui.statisticsDialog = function() {
textOverflow: 'ellipsis'
})
.html(
key == 'city' ? city
: key == 'country' ? country
: value.replace('ern A', ' A')
Ox.last(split).replace('ern A', ' A')
)
)
.append(
$('<img>')
Ox.Element({
element: '<img>',
tooltip: mode == 'all' && (key == 'continent' || key == 'region')
? Ox.wordwrap(
Ox.map(Ox.COUNTRIES, function(country) {
return country[key] == split[key == 'continent' ? 0 : 1]
&& country.code.length == 2
&& ['EU', 'UK'].indexOf(country.code) == -1
&& !country.disputed
&& !country.dissolved
? country.name : null;
}).sort().join(', '),
64, '<br>', true
).split(', ').map(function(country) {
return Ox.values(Ox.map(data.all.country, function(value, key) {
return key.split(', ').pop()
})).indexOf(country.replace(/<br>/g, '')) > -1
? '<span class="OxBright">' + country + '</span>'
: country
}).join(', ')
: ''
})
.attr({
src: Ox.getFlagByGeoname(country, 16)
})