summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsostler <sbostler@gmail.com>2010-02-16 01:40:34 -0500
committersostler <sbostler@gmail.com>2010-02-16 01:40:34 -0500
commit99e9cbe532166b154314b6107ce269162359f660 (patch)
tree7aa1dae92ae7a3d9f85f94d6289e89970cce49c0
parent099809e854c9f19ce8301b9cff12b9291619755b (diff)
Add stats-tracking
-rwxr-xr-xstatic/js/stats.js79
-rwxr-xr-xtemplate/chat.st56
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()$