diff options
| author | sostler <sbostler@gmail.com> | 2010-02-16 01:40:34 -0500 |
|---|---|---|
| committer | sostler <sbostler@gmail.com> | 2010-02-16 01:40:34 -0500 |
| commit | 99e9cbe532166b154314b6107ce269162359f660 (patch) | |
| tree | 7aa1dae92ae7a3d9f85f94d6289e89970cce49c0 | |
| parent | 099809e854c9f19ce8301b9cff12b9291619755b (diff) | |
Add stats-tracking
| -rwxr-xr-x | static/js/stats.js | 79 | ||||
| -rwxr-xr-x | template/chat.st | 56 |
2 files changed, 111 insertions, 24 deletions
diff --git a/static/js/stats.js b/static/js/stats.js new file mode 100755 index 0000000..00e00a0 --- /dev/null +++ b/static/js/stats.js @@ -0,0 +1,79 @@ +var CurrentStats = ['msgs', 'today']; + +function refreshStats() { + $('a.statname, a.timescale').addClass('disabled'); + $('#statschart').empty().append('<img src="/static/spinner.gif">'); + + var onSuccess = function(json) { + var dataString = "Date,Count\n"; + $.each(json, function(i, v) { + dataString += v.created_on + "," + v.count + "\n"; + }); + $('#statschart').empty(); + new Dygraph($('#statschart')[0], + dataString, + { showRoller: false} + ); + + $('a.statname, a.timescale').removeClass('disabled'); + }; + + var onError = function(resp, textStatus, errorThrown) { + $('a.statname, a.timescale').removeClass('disabled'); + }; + + $.ajax({ + type: 'GET', + timeout: 5000, + url: '/stats', + data: { 'stat': CurrentStats[0], 'ts': CurrentStats[1] }, + cache: false, + dataType: 'json', + success: onSuccess, + error: onError + }); +} + +function makeStatsWindow() { + var statBox= $('<div class="stats" align="center">'); + var choices = ['msgs', 'new users']; + $(choices).map(function(i, c) { + return link = $('<a>') + .text(c) + .attr('href', '#') + .addClass('statname') + .addClass(i == 0 ? 'active' : 'inactive') + .click(function() { + if ($(this).hasClass('disabled') || + CurrentStats[0] == c) { return }; + $('.statname').removeClass('active'); + $(this).addClass('active'); + CurrentStats[0] = c; + refreshStats(); + }); + }).appendTo(statBox); + $('<div id="statschart" style="width:375px; height:300px;">').appendTo(statBox); + var timescales = ['today', 'all time']; + $(timescales).map(function(i, c) { + return link = $('<a>') + .text(c) + .attr('href', '#') + .addClass('timescale') + .addClass(i == 0 ? 'active' : 'inactive') + .click(function() { + if ($(this).hasClass('disabled') || + CurrentStats[1] == c) { return }; + $('.timescale').removeClass('active'); + $(this).addClass('active'); + CurrentStats[1] = c; + refreshStats(); + }); + })//.appendTo(statBox); + return statBox; +} + +function initStats() { + makeStatsWindow().appendTo('body'); + refreshStats(); +} + diff --git a/template/chat.st b/template/chat.st index 90e2602..4d792ae 100755 --- a/template/chat.st +++ b/template/chat.st @@ -16,36 +16,13 @@ $endif$ </script> <script type="text/javascript"> -<!-- -function MM_swapImgRestore() { //v3.0 - var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; -} -function MM_preloadImages() { //v3.0 - var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); - var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) - if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} -} - -function MM_findObj(n, d) { //v4.01 - var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { - d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} - if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; - for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); - if(!x && d.getElementById) x=d.getElementById(n); return x; -} - -function MM_swapImage() { //v3.0 - var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) - if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} -} -//--> </script> $if(isadminroom)$ <style> iframe { z-index: 50000; position: fixed; - top: 300px; + top: 200px; right: 25px; } </style> @@ -60,6 +37,37 @@ function MM_swapImage() { //v3.0 }); } </script> + $if(isadminroom)$ + <style> + .stats { + background: #FFF; + z-index: 500000; + position: fixed; + top: 450px; + right: 25px; + width: 400px; + border: 1px solid #ccc; + padding: 1em; + } + + .stats a { + margin: 0.75em; + } + + .stats a { color: #666; } + .stats a:hover { color: blue; } + .stats a.active { text-decoration: underline; + color: black; } + + .stats #statschart { position: relative; margin: 1em; } + </style> + <script type="text/javascript" + src="http://cloud.github.com/downloads/danvk/dygraphs/dygraph-combined.js"></script> + <script src="/static/js/stats.js"></script> + <script> + jQuery(document).ready(initStats); + </script> + $endif$ </head> <body onload="MM_preloadImages('/static/thumbs_up_sm.gif')"> $banner()$ |
