reports.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. jQuery(function( $ ) {
  2. function showTooltip( x, y, contents ) {
  3. $( '<div class="chart-tooltip">' + contents + '</div>' ).css( {
  4. top: y - 16,
  5. left: x + 20
  6. }).appendTo( 'body' ).fadeIn( 200 );
  7. }
  8. var prev_data_index = null;
  9. var prev_series_index = null;
  10. $( '.chart-placeholder' ).bind( 'plothover', function ( event, pos, item ) {
  11. if ( item ) {
  12. if ( prev_data_index !== item.dataIndex || prev_series_index !== item.seriesIndex ) {
  13. prev_data_index = item.dataIndex;
  14. prev_series_index = item.seriesIndex;
  15. $( '.chart-tooltip' ).remove();
  16. if ( item.series.points.show || item.series.enable_tooltip ) {
  17. var y = item.series.data[item.dataIndex][1],
  18. tooltip_content = '';
  19. if ( item.series.prepend_label ) {
  20. tooltip_content = tooltip_content + item.series.label + ': ';
  21. }
  22. if ( item.series.prepend_tooltip ) {
  23. tooltip_content = tooltip_content + item.series.prepend_tooltip;
  24. }
  25. tooltip_content = tooltip_content + y;
  26. if ( item.series.append_tooltip ) {
  27. tooltip_content = tooltip_content + item.series.append_tooltip;
  28. }
  29. if ( item.series.pie.show ) {
  30. showTooltip( pos.pageX, pos.pageY, tooltip_content );
  31. } else {
  32. showTooltip( item.pageX, item.pageY, tooltip_content );
  33. }
  34. }
  35. }
  36. } else {
  37. $( '.chart-tooltip' ).remove();
  38. prev_data_index = null;
  39. }
  40. });
  41. $( '.wc_sparkline.bars' ).each( function() {
  42. var chart_data = $( this ).data( 'sparkline' );
  43. var options = {
  44. grid: {
  45. show: false
  46. }
  47. };
  48. // main series
  49. var series = [{
  50. data: chart_data,
  51. color: $( this ).data( 'color' ),
  52. bars: {
  53. fillColor: $( this ).data( 'color' ),
  54. fill: true,
  55. show: true,
  56. lineWidth: 1,
  57. barWidth: $( this ).data( 'barwidth' ),
  58. align: 'center'
  59. },
  60. shadowSize: 0
  61. }];
  62. // draw the sparkline
  63. $.plot( $( this ), series, options );
  64. });
  65. $( '.wc_sparkline.lines' ).each( function() {
  66. var chart_data = $( this ).data( 'sparkline' );
  67. var options = {
  68. grid: {
  69. show: false
  70. }
  71. };
  72. // main series
  73. var series = [{
  74. data: chart_data,
  75. color: $( this ).data( 'color' ),
  76. lines: {
  77. fill: false,
  78. show: true,
  79. lineWidth: 1,
  80. align: 'center'
  81. },
  82. shadowSize: 0
  83. }];
  84. // draw the sparkline
  85. $.plot( $( this ), series, options );
  86. });
  87. var dates = $( '.range_datepicker' ).datepicker({
  88. changeMonth: true,
  89. changeYear: true,
  90. defaultDate: '',
  91. dateFormat: 'yy-mm-dd',
  92. numberOfMonths: 1,
  93. minDate: '-20Y',
  94. maxDate: '+1D',
  95. showButtonPanel: true,
  96. showOn: 'focus',
  97. buttonImageOnly: true,
  98. onSelect: function() {
  99. var option = $( this ).is( '.from' ) ? 'minDate' : 'maxDate',
  100. date = $( this ).datepicker( 'getDate' );
  101. dates.not( this ).datepicker( 'option', option, date );
  102. }
  103. });
  104. var a = document.createElement( 'a' );
  105. if ( typeof a.download === 'undefined' ) {
  106. $( '.export_csv' ).hide();
  107. }
  108. // Export
  109. $( '.export_csv' ).click( function() {
  110. var exclude_series = $( this ).data( 'exclude_series' ) || '';
  111. exclude_series = exclude_series.toString();
  112. exclude_series = exclude_series.split( ',' );
  113. var xaxes_label = $( this ).data( 'xaxes' );
  114. var groupby = $( this ) .data( 'groupby' );
  115. var index_type = $( this ).data( 'index_type' );
  116. var export_format = $( this ).data( 'export' );
  117. var csv_data = 'data:text/csv;charset=utf-8,\uFEFF';
  118. var s, series_data, d;
  119. if ( 'table' === export_format ) {
  120. $( this ).offsetParent().find( 'thead tr,tbody tr' ).each( function() {
  121. $( this ).find( 'th, td' ).each( function() {
  122. var value = $( this ).text();
  123. value = value.replace( '[?]', '' ).replace( '#', '' );
  124. csv_data += '"' + value + '"' + ',';
  125. });
  126. csv_data = csv_data.substring( 0, csv_data.length - 1 );
  127. csv_data += '\n';
  128. });
  129. $( this ).offsetParent().find( 'tfoot tr' ).each( function() {
  130. $( this ).find( 'th, td' ).each( function() {
  131. var value = $( this ).text();
  132. value = value.replace( '[?]', '' ).replace( '#', '' );
  133. csv_data += '"' + value + '"' + ',';
  134. if ( $( this ).attr( 'colspan' ) > 0 ) {
  135. for ( i = 1; i < $(this).attr('colspan'); i++ ) {
  136. csv_data += '"",';
  137. }
  138. }
  139. });
  140. csv_data = csv_data.substring( 0, csv_data.length - 1 );
  141. csv_data += '\n';
  142. });
  143. } else {
  144. if ( ! window.main_chart ) {
  145. return false;
  146. }
  147. var the_series = window.main_chart.getData();
  148. var series = [];
  149. csv_data += '"' + xaxes_label + '",';
  150. $.each( the_series, function( index, value ) {
  151. if ( ! exclude_series || $.inArray( index.toString(), exclude_series ) === -1 ) {
  152. series.push( value );
  153. }
  154. });
  155. // CSV Headers
  156. for ( s = 0; s < series.length; ++s ) {
  157. csv_data += '"' + series[s].label + '",';
  158. }
  159. csv_data = csv_data.substring( 0, csv_data.length - 1 );
  160. csv_data += '\n';
  161. // Get x axis values
  162. var xaxis = {};
  163. for ( s = 0; s < series.length; ++s ) {
  164. series_data = series[s].data;
  165. for ( d = 0; d < series_data.length; ++d ) {
  166. xaxis[series_data[d][0]] = [];
  167. // Zero values to start
  168. for ( var i = 0; i < series.length; ++i ) {
  169. xaxis[series_data[d][0]].push(0);
  170. }
  171. }
  172. }
  173. // Add chart data
  174. for ( s = 0; s < series.length; ++s ) {
  175. series_data = series[s].data;
  176. for ( d = 0; d < series_data.length; ++d ) {
  177. xaxis[series_data[d][0]][s] = series_data[d][1];
  178. }
  179. }
  180. // Loop data and output to csv string
  181. $.each( xaxis, function( index, value ) {
  182. var date = new Date( parseInt( index, 10 ) );
  183. if ( 'none' === index_type ) {
  184. csv_data += '"' + index + '",';
  185. } else {
  186. if ( groupby === 'day' ) {
  187. csv_data += '"' + date.getUTCFullYear() + '-' + parseInt( date.getUTCMonth() + 1, 10 ) + '-' + date.getUTCDate() + '",';
  188. } else {
  189. csv_data += '"' + date.getUTCFullYear() + '-' + parseInt( date.getUTCMonth() + 1, 10 ) + '",';
  190. }
  191. }
  192. for ( var d = 0; d < value.length; ++d ) {
  193. var val = value[d];
  194. if ( Math.round( val ) !== val ) {
  195. val = parseFloat( val );
  196. val = val.toFixed( 2 );
  197. }
  198. csv_data += '"' + val + '",';
  199. }
  200. csv_data = csv_data.substring( 0, csv_data.length - 1 );
  201. csv_data += '\n';
  202. } );
  203. }
  204. // Set data as href and return
  205. $( this ).attr( 'href', encodeURI( csv_data ) );
  206. return true;
  207. });
  208. });