/src/baruwa/static/js/reports.listing.js

https://bitbucket.org/datopdog/baruwa · JavaScript · 133 lines · 106 code · 3 blank · 24 comment · 6 complexity · c245096297597a0e14b2d9ac70c1870e MD5 · raw file

  1. //
  2. // Baruwa - Web 2.0 MailScanner front-end.
  3. // Copyright (C) 2010 Andrew Colin Kissa <andrew@topdog.za.net>
  4. //
  5. // This program is free software; you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation; either version 2 of the License, or
  8. // (at your option) any later version.
  9. //
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. // GNU General Public License for more details.
  14. //
  15. // You should have received a copy of the GNU General Public License along
  16. // with this program; if not, write to the Free Software Foundation, Inc.,
  17. // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  18. //
  19. // vim: ai ts=4 sts=4 et sw=4
  20. //
  21. dojo.require("dojox.charting.Chart2D");
  22. dojo.require("dojox.charting.action2d.Highlight");
  23. dojo.require("dojox.charting.action2d.Magnify");
  24. dojo.require("dojox.charting.action2d.Shake");
  25. dojo.require("dojox.charting.action2d.Tooltip");
  26. dojo.require("dojox.charting.widget.Legend");
  27. //functions
  28. function build_rows(build_array){
  29. var rows = [];
  30. var count = 0;
  31. var c = 'LightBlue_div'
  32. dojo.forEach(build_array, function(item, i){
  33. if (c == 'LightBlue_div') {
  34. c = 'LightGray_div';
  35. }else{
  36. c = 'LightBlue_div';
  37. };
  38. rows[count++] = '<div class="'+c+'">';
  39. rows[count++] = '<div class="totals_date">'+item.date+'</div>';
  40. rows[count++] = '<div class="totals_mail">'+item.mail_total+'</div>';
  41. rows[count++] = '<div class="totals_virii">'+item.virus_total+'</div>';
  42. rows[count++] = '<div class="totals_viriip">'+item.virus_percent+'</div>';
  43. rows[count++] = '<div class="totals_spam">'+item.spam_total+'</div>';
  44. rows[count++] = '<div class="totals_spamp">'+item.spam_percent+'</div>';
  45. rows[count++] = '<div class="totals_volume">'+filesizeformat(item.size_total)+'</div>';
  46. rows[count++] = '</div>';
  47. });
  48. return rows.join('');
  49. }
  50. function process_response(data){
  51. var spinner = dojo.byId("my-spinner");
  52. spinner.innerHTML = gettext('Processing...........');
  53. if (data.success == true) {
  54. url = window.location.pathname;
  55. var links = build_filters(data.active_filters);
  56. dojo.empty("fhl");
  57. if (links != "") {
  58. dojo.place(links,"fhl","last");
  59. dojo.removeClass("filterrow","hide");
  60. }else{
  61. dojo.addClass("filterrow","hide");
  62. };
  63. dojo.query("#fhl a").onclick(function(e){
  64. remove_filter(e,this);
  65. });
  66. dojo.xhrGet({
  67. url:url,
  68. handleAs:"json",
  69. load:function(response){
  70. dojo.empty("graphrows");
  71. var rows = build_rows(response.items);
  72. dojo.place(rows,"graphrows","last");
  73. chart.updateSeries("mail", response.pie_data.mail);
  74. chart.updateSeries("spam", response.pie_data.spam);
  75. chart.updateSeries("virii", response.pie_data.virii);
  76. chart.render();
  77. spinner.innerHTML = '';
  78. dojo.style('my-spinner','display','none');
  79. dojo.attr("filter_form_submit", {'value':gettext('Add')});
  80. dojo.removeAttr('filter_form_submit','disabled');
  81. window.scrollTo(0,0);
  82. }
  83. });
  84. }else{
  85. dojo.destroy('filter-error');
  86. dojo.create('div',{'id':"filter-error",'innerHTML':data.errors+'<div id="dismiss"><a href="#">'+gettext('Dismiss')+'</a></div>'},'afform','before');
  87. var timeout = setTimeout(function(){dojo.destroy('filter-error');},15050);
  88. dojo.query("#dismiss a").onclick(function(){clearTimeout(timeout); dojo.destroy('filter-error');});
  89. spinner.innerHTML = '';
  90. dojo.style('my-spinner','display','none');
  91. dojo.attr("filter_form_submit", {'value':gettext('Add')});
  92. dojo.removeAttr('filter_form_submit','disabled');
  93. };
  94. }
  95. dojo.addOnLoad(function(){
  96. init_form();
  97. //bind to form submit
  98. dojo.query("#filter-form").onsubmit(function(e){
  99. e.preventDefault();
  100. dojo.attr("filter_form_submit", {'disabled':'disabled','value':gettext('Loading')});
  101. dojo.style('my-spinner','display','block');
  102. dojo.destroy('filter-error');
  103. dojo.xhrPost({
  104. form:"filter-form",
  105. handleAs:"json",
  106. load:function(data){process_response(data);}
  107. });
  108. });
  109. dojo.query("#fhl a").onclick(function(e){
  110. remove_filter(e,this);
  111. });
  112. //init chart and render
  113. var dc = dojox.charting;
  114. var dur = 450;
  115. chart = new dojox.charting.Chart2D("chart");
  116. chart.addAxis("x",{labels: labels,majorTickStep:15});
  117. chart.addAxis("y",{vertical:true});
  118. chart.addPlot("default",{type: "ClusteredColumns",gap:2});
  119. chart.addSeries("mail", mail_data, {stroke: {color: "black"}, fill: "green"});
  120. chart.addSeries("spam", spam_data, {stroke: {color: "black"}, fill: "pink"});
  121. chart.addSeries("virii", virii_data, {stroke: {color: "black"}, fill: "red"});
  122. var anim6a = new dc.action2d.Highlight(chart, "default", {
  123. duration: dur,
  124. easing: dojo.fx.easing.sineOut
  125. });
  126. //var anim6b = new dc.action2d.Shake(chart, "default");
  127. var anim6c = new dc.action2d.Tooltip(chart, "default");
  128. chart.render();
  129. var mail_legend = new dojox.charting.widget.Legend({chart: chart}, "mail_legend");
  130. });