diff --git a/olap.php b/olap.php index a136250..342575a 100644 --- a/olap.php +++ b/olap.php @@ -222,6 +222,14 @@ class OLAP // Описание показателя foreach(array('field', 'func', 'aggr') as $x) $this->cell[$x] = $request["cell_$x"]; + $this->cell['field_name'] = $this->current_src['fielddescs'][$this->cell['field']]['name']; + $this->cell['func_name'] = self::$functions[$this->cell['func']]['name']; + $this->cell['aggr_name'] = self::$aggregates[$this->cell['aggr']]['name']; + $this->cell['value_desc'] = $this->cell['field_name']; + if ($this->cell['func_name']) + $this->cell['value_desc'] = $this->cell['func_name'].'('.$this->cell['value_desc'].')'; + if ($this->cell['aggr_name']) + $this->cell['value_desc'] = $this->cell['aggr_name'].': '.$this->cell['value_desc']; // Запрос на построение? $this->build = !empty($request['build']); @@ -528,6 +536,7 @@ class OLAP 'data' => array(), 'max' => NULL, 'min' => NULL, + 'numeric' => true, ); foreach ($keys as $k) { @@ -542,7 +551,10 @@ class OLAP $v = -1-log(-$v); } $ov = str_replace('.00', '', sprintf("%.2f", $ov)); - $gr['data'][] = array($this->field_format($my['field'], '', '', $k), $ov, $v, 0); + $fv = $this->field_format($my['field'], '', '', $k); + if (!is_numeric($fv)) + $gr['numeric'] = false; + $gr['data'][] = array($fv, $ov, $v, 0); if ($gr['max'] === NULL || $gr['max'] < $v) $gr['max'] = $v; if ($gr['min'] === NULL || $gr['min'] > $v) @@ -1030,9 +1042,11 @@ class OLAP 'full_desc' => $a, 'changed_desc' => $b, 'graphs' => array(), + 'numeric' => true, ); } $group['graphs'][] = $graph; + $group['numeric'] = $group['numeric'] && $graph['numeric']; } else { diff --git a/templates/default/admin_olap.tpl b/templates/default/admin_olap.tpl index ba1a929..711c1f5 100644 --- a/templates/default/admin_olap.tpl +++ b/templates/default/admin_olap.tpl @@ -3,7 +3,14 @@ - + + + + + + + + @@ -25,51 +32,51 @@

Показатель:

- - - + + +

Группировка:     количество полей:

  1. - -

    - -

    -

    - + + + - - - -

    + + +

    +

    + + +

@@ -77,25 +84,25 @@ - +
{s f.name} - = - - - - - - - или ≥ - и ≤ - - (YYYY-MM-DD HH:MM:SS) - {f.comment} -
+ = + + + + + + + или ≥ + и ≤ + + (YYYY-MM-DD HH:MM:SS) + {f.comment} +

@@ -106,147 +113,160 @@

Нет данных для показа.

- -
- -

- - -

- + +]; +var yLabel = '{cell.value_desc}'; +var plots = []; +$.jqplot.config.enablePlugins = true; +$(document).ready(function(){ + doPlot($('#graph_log').attr('checked')); +}); +function doPlot(logarithmic) +{ + for (var i = 0; i < g.length; i++) + { + if (plots[i]) + plots[i].destroy(); + plots[i] = $.jqplot(g[i].id, g[i].data, { + seriesDefaults: {}, + title: g[i].desc, + highlighter: { + showTooltip: true, + bringSeriesToFront: true + }, + cursor: { + show: false, + }, + legend: { + show: true, + renderer: $.jqplot.EnhancedLegendRenderer, + location: 'ne', + placement: 'outsideGrid', + labels: g[i].titles + }, + axesDefaults: { + tickRenderer: $.jqplot.CanvasAxisTickRenderer, + tickOptions: { + fontSize: '10pt', + } + }, + axes: { + xaxis: { + label: g[i].x, + labelRenderer: $.jqplot.CanvasAxisLabelRenderer, + renderer: g[i].numeric ? $.jqplot.LinearAxisRenderer : $.jqplot.CategoryAxisRenderer, + sortMergedLabels: true, + useStringSort: true, + tickOptions: { + angle: -30 + } + }, + yaxis: { + label: yLabel, + renderer: logarithmic ? $.jqplot.LogAxisRenderer : $.jqplot.LinearAxisRenderer, + labelRenderer: $.jqplot.CanvasAxisLabelRenderer, + tickOptions: { + labelPosition: 'end' + } + } + } + }); + } +} + - - - - - - - -

{d.field} ({lc d.func}): {d.value}

+ + + + + + + +

{d.field} ({lc d.func}): {d.value}

+ + +
- -
- - - - - - - - - - - - - - - - - -
- {graph.field} ({lc graph.func}) +
{s g.0}: {s g.1}
{graph.field} ({lc graph.func})
{s g.0}: {s g.1}
- -
- - - - - - - - - -

{d.field} ({lc d.func}): {d.value}

- - -
- - - - - - - colspan="{c.colspan}" rowspan="{c.rowspan}" class="{c.class}">{c.text} +
+ + + + + + + + + - + + + + + +
- {graph.field} ({lc graph.func}) +
{s g.0}: {s g.1}
{c}
{graph.field} ({lc graph.func})
{s g.0}: {s g.1}
+ +
- - - - + + + + + + + +

{d.field} ({lc d.func}): {d.value}

+ + +
+ + + + + + + colspan="{c.colspan}" rowspan="{c.rowspan}" class="{c.class}">{c.text} + + + + + + +
{c}
+
- +

Отчёт занял {time_elapsed} сек. Использовано {memory} памяти для работы.

diff --git a/tpldata/jqplot.canvasAxisLabelRenderer.min.js b/tpldata/jqplot.canvasAxisLabelRenderer.min.js new file mode 100644 index 0000000..5c72b7e --- /dev/null +++ b/tpldata/jqplot.canvasAxisLabelRenderer.min.js @@ -0,0 +1 @@ +(function(a){a.jqplot.CanvasAxisLabelRenderer=function(b){this.angle=0;this.axis;this.show=true;this.showLabel=true;this.label="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="11pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);if(b.angle==null&&this.axis!="xaxis"&&this.axis!="x2axis"){this.angle=-90}var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisLabelRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisLabelRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisLabelRenderer.prototype.draw=function(c,f){if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css({position:"absolute"});this._elem.addClass("jqplot-"+this.axis+"-label");e=null;return this._elem};a.jqplot.CanvasAxisLabelRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery); \ No newline at end of file diff --git a/tpldata/jqplot.canvasAxisTickRenderer.min.js b/tpldata/jqplot.canvasAxisTickRenderer.min.js new file mode 100644 index 0000000..39e645a --- /dev/null +++ b/tpldata/jqplot.canvasAxisTickRenderer.min.js @@ -0,0 +1 @@ +(function(a){a.jqplot.CanvasAxisTickRenderer=function(b){this.mark="outside";this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.angle=0;this.markSize=4;this.show=true;this.showLabel=true;this.labelPosition="auto";this.label="";this.value=null;this._styles={};this.formatter=a.jqplot.DefaultTickFormatter;this.formatString="";this.prefix="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="10pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisTickRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisTickRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisTickRenderer.prototype.setTick=function(b,d,c){this.value=b;if(c){this.isMinorTick=true}return this};a.jqplot.CanvasAxisTickRenderer.prototype.draw=function(c,f){if(!this.label){this.label=this.prefix+this.formatter(this.formatString,this.value)}if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.textAlign="left";e.style.position="absolute";e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css(this._styles);this._elem.addClass("jqplot-"+this.axis+"-tick");e=null;return this._elem};a.jqplot.CanvasAxisTickRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery); \ No newline at end of file diff --git a/tpldata/jqplot.canvasTextRenderer.min.js b/tpldata/jqplot.canvasTextRenderer.min.js new file mode 100644 index 0000000..c87b14d --- /dev/null +++ b/tpldata/jqplot.canvasTextRenderer.min.js @@ -0,0 +1 @@ +(function(a){a.jqplot.CanvasTextRenderer=function(b){this.fontStyle="normal";this.fontVariant="normal";this.fontWeight="normal";this.fontSize="10px";this.fontFamily="sans-serif";this.fontStretch=1;this.fillStyle="#666666";this.angle=0;this.textAlign="start";this.textBaseline="alphabetic";this.text;this.width;this.height;this.pt2px=1.28;a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.init=function(b){a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.normalizeFontSize=function(b){b=String(b);var c=parseFloat(b);if(b.indexOf("px")>-1){return c/this.pt2px}else{if(b.indexOf("pt")>-1){return c}else{if(b.indexOf("em")>-1){return c*12}else{if(b.indexOf("%")>-1){return c*12/100}else{return c/this.pt2px}}}}};a.jqplot.CanvasTextRenderer.prototype.fontWeight2Float=function(b){if(Number(b)){return b/400}else{switch(b){case"normal":return 1;break;case"bold":return 1.75;break;case"bolder":return 2.25;break;case"lighter":return 0.75;break;default:return 1;break}}};a.jqplot.CanvasTextRenderer.prototype.getText=function(){return this.text};a.jqplot.CanvasTextRenderer.prototype.setText=function(c,b){this.text=c;this.setWidth(b);return this};a.jqplot.CanvasTextRenderer.prototype.getWidth=function(b){return this.width};a.jqplot.CanvasTextRenderer.prototype.setWidth=function(c,b){if(!b){this.width=this.measure(c,this.text)}else{this.width=b}return this};a.jqplot.CanvasTextRenderer.prototype.getHeight=function(b){return this.height};a.jqplot.CanvasTextRenderer.prototype.setHeight=function(b){if(!b){this.height=this.normalizedFontSize*this.pt2px}else{this.height=b}return this};a.jqplot.CanvasTextRenderer.prototype.letter=function(b){return this.letters[b]};a.jqplot.CanvasTextRenderer.prototype.ascent=function(){return this.normalizedFontSize};a.jqplot.CanvasTextRenderer.prototype.descent=function(){return 7*this.normalizedFontSize/25};a.jqplot.CanvasTextRenderer.prototype.measure=function(d,g){var f=0;var b=g.length;for(var e=0;e30)?2:2+(30-this.normalizedFontSize)/20;s.lineWidth=t*h*this.fontWeight2Float(this.fontWeight);for(var f=0;f":{width:24,points:[[4,18],[20,9],[4,0]]},"?":{width:18,points:[[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]]},"@":{width:27,points:[[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]]},A:{width:18,points:[[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]]},B:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]]},C:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]]},D:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]]},E:{width:19,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]]},F:{width:18,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]]},G:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]]},H:{width:22,points:[[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]]},I:{width:8,points:[[4,21],[4,0]]},J:{width:16,points:[[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]]},K:{width:21,points:[[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]]},L:{width:17,points:[[4,21],[4,0],[-1,-1],[4,0],[16,0]]},M:{width:24,points:[[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]]},N:{width:22,points:[[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]]},O:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]]},P:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]]},Q:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]]},R:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]]},S:{width:20,points:[[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},T:{width:16,points:[[8,21],[8,0],[-1,-1],[1,21],[15,21]]},U:{width:22,points:[[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]]},V:{width:18,points:[[1,21],[9,0],[-1,-1],[17,21],[9,0]]},W:{width:24,points:[[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]]},X:{width:20,points:[[3,21],[17,0],[-1,-1],[17,21],[3,0]]},Y:{width:18,points:[[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]]},Z:{width:20,points:[[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]]},"[":{width:14,points:[[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]]},"\\":{width:14,points:[[0,21],[14,-3]]},"]":{width:14,points:[[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]]},"^":{width:16,points:[[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]]},_:{width:16,points:[[0,-2],[16,-2]]},"`":{width:10,points:[[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]]},a:{width:19,points:[[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},b:{width:19,points:[[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},c:{width:18,points:[[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},d:{width:19,points:[[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},e:{width:18,points:[[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},f:{width:12,points:[[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]]},g:{width:19,points:[[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},h:{width:19,points:[[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},i:{width:8,points:[[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]]},j:{width:10,points:[[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]]},k:{width:17,points:[[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]]},l:{width:8,points:[[4,21],[4,0]]},m:{width:30,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]]},n:{width:19,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},o:{width:19,points:[[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]]},p:{width:19,points:[[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},q:{width:19,points:[[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},r:{width:13,points:[[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]]},s:{width:17,points:[[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]]},t:{width:12,points:[[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]]},u:{width:19,points:[[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]]},v:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0]]},w:{width:22,points:[[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]]},x:{width:17,points:[[3,14],[14,0],[-1,-1],[14,14],[3,0]]},y:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]]},z:{width:17,points:[[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]]},"{":{width:14,points:[[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]]},"|":{width:8,points:[[4,25],[4,-7]]},"}":{width:14,points:[[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]]},"~":{width:24,points:[[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]]}};a.jqplot.CanvasFontRenderer=function(b){b=b||{};if(!b.pt2px){b.pt2px=1.5}a.jqplot.CanvasTextRenderer.call(this,b)};a.jqplot.CanvasFontRenderer.prototype=new a.jqplot.CanvasTextRenderer({});a.jqplot.CanvasFontRenderer.prototype.constructor=a.jqplot.CanvasFontRenderer;a.jqplot.CanvasFontRenderer.prototype.measure=function(c,e){var d=this.fontSize+" "+this.fontFamily;c.save();c.font=d;var b=c.measureText(e).width;c.restore();return b};a.jqplot.CanvasFontRenderer.prototype.draw=function(e,g){var c=0;var h=this.height*0.72;e.save();var d,b;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){d=0;b=-Math.sin(this.angle)*this.width}else{if((0b.max||b.max==null){b.max=h[c][0]}}else{if(h[c][1]b.max||b.max==null){b.max=h[c][1]}}}}if(this.groupLabels.length){this.groups=this.groupLabels.length}};a.jqplot.CategoryAxisRenderer.prototype.createTicks=function(){var C=this._ticks;var B=this.ticks;var F=this.name;var D=this._dataBounds;var x,A;var v,z;var f,d;var b,y;if(B.length){if(this.groups>1&&!this._grouped){var u=B.length;var r=parseInt(u/this.groups,10);var g=0;for(var y=r;y1&&!this._grouped){var u=q.length;var r=parseInt(u/this.groups,10);var g=0;for(var y=r;y0&&p
');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var g=this._label.draw(b,j);g.appendTo(this._elem)}var f=this._ticks;for(var e=0;e');g.html(this.groupLabels[e]);this._groupLabels.push(g);g.appendTo(this._elem)}}return this._elem};a.jqplot.CategoryAxisRenderer.prototype.set=function(){var g=0;var m;var k=0;var f=0;var c=(this._label==null)?false:this._label.show;if(this.show){var n=this._ticks;for(var d=0;dg){g=m}}}var j=0;for(var d=0;dj){j=m}}if(c){k=this._label._elem.outerWidth(true);f=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){g+=j+f;this._elem.css({height:g+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){g+=j+f;this._elem.css({height:g+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){g+=j+k;this._elem.css({width:g+"px",left:"0px",top:"0px"});if(c&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}else{g+=j+k;this._elem.css({width:g+"px",right:"0px",top:"0px"});if(c&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}}}}};a.jqplot.CategoryAxisRenderer.prototype.pack=function(l,g){var C=this._ticks;var y=this.max;var s=this.min;var b=g.max;var d=g.min;var q=(this._label==null)?false:this._label.show;var x;for(var r in l){this._elem.css(r,l[r])}this._offsets=g;var f=b-d;var e=y-s;this.p2u=function(h){return(h-d)*e/f+s};this.u2p=function(h){return(h-s)*f/e+d};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(h-s)*f/e};this.series_p2u=function(h){return h*e/f+s}}else{this.series_u2p=function(h){return(h-y)*f/e};this.series_p2u=function(h){return h*e/f+y}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(x=0;x0){c=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{c=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"middle":c=-o.getHeight()/2;break;default:c=-o.getHeight()/2;break}}else{c=-o.getHeight()/2}var D=this.u2p(o.value)+c+"px";o._elem.css("top",D);o.pack()}}var u=["left",0];if(q){var z=this._label._elem.outerHeight(true);this._label._elem.css("top",b-f/2-z/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px");u=["left",this._label._elem.outerWidth(true)]}else{this._label._elem.css("right","0px");u=["right",this._label._elem.outerWidth(true)]}this._label.pack()}var k=parseInt(this._ticks.length/this.groups,10);for(x=0;xD.max)||D.max==null){D.max=z[r][0]}if(r>0){o=Math.abs(z[r][0]-z[r-1][0]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}x+=o}else{z[r][1]=new e.jsDate(z[r][1]).getTime();A[r][1]=new e.jsDate(z[r][1]).getTime();y[r][1]=new e.jsDate(z[r][1]).getTime();if((z[r][1]!=null&&z[r][1]D.max)||D.max==null){D.max=z[r][1]}if(r>0){o=Math.abs(z[r][1]-z[r-1][1]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}}x+=o}if(E.renderer.bands){if(E.renderer.bands.hiData.length){var w=E.renderer.bands.hiData;for(var r=0,q=w.length;rD.max)||D.max==null){D.max=w[r][0]}}else{w[r][1]=new e.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]>D.max)||D.max==null){D.max=w[r][1]}}}}if(E.renderer.bands.lowData.length){var w=E.renderer.bands.lowData;for(var r=0,q=w.length;r6){B=6}}var z=new e.jsDate(ad).setDate(1).setHours(0,0,0,0);var ab=new e.jsDate(G);var w=new e.jsDate(G).setDate(1).setHours(0,0,0,0);if(ab.getTime()!==w.getTime()){w=w.add(1,"month")}var Q=w.diff(z,"month");Y=Math.ceil(Q/B)+1;this.min=z.getTime();this.max=z.clone().add((Y-1)*B,"month").getTime();this.numberTicks=Y;for(var W=0;W200){this.numberTicks=parseInt(3+(n-200)/100,10)}else{this.numberTicks=2}}}F=y/(this.numberTicks-1)/1000;if(this.daTickInterval==null){this.daTickInterval=[F,"seconds"]}for(var W=0;W');if(this.seriesToggle){this._elem.css("z-index","3")}var C=false,q=false,d,o;if(this.numberRows){d=this.numberRows;if(!this.numberColumns){o=Math.ceil(g.length/d)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;d=Math.ceil(g.length/this.numberColumns)}else{d=g.length;o=1}}var B,y,e,l,k,n,p,t,h,f;var v=0;for(B=g.length-1;B>=0;B--){if(o==1&&g[B]._stack||g[B].renderer.constructor==c.jqplot.BezierCurveRenderer){q=true}}for(B=0;B0){C=true}else{C=false}}else{if(B==d-1){C=false}else{C=true}}p=(C)?this.rowSpacing:"0";l=c(document.createElement("td"));l.addClass("jqplot-table-legend jqplot-table-legend-swatch");l.css({textAlign:"center",paddingTop:p});h=c(document.createElement("div"));h.addClass("jqplot-table-legend-swatch-outline");f=c(document.createElement("div"));f.addClass("jqplot-table-legend-swatch");f.css({backgroundColor:x,borderColor:x});l.append(h.append(f));k=c(document.createElement("td"));k.addClass("jqplot-table-legend jqplot-table-legend-label");k.css("paddingTop",p);if(this.escapeHtml){k.text(n)}else{k.html(n)}if(q){if(this.showLabels){k.prependTo(e)}if(this.showSwatches){l.prependTo(e)}}else{if(this.showSwatches){l.appendTo(e)}if(this.showLabels){k.appendTo(e)}}if(this.seriesToggle){var A;if(typeof(this.seriesToggle)==="string"||typeof(this.seriesToggle)==="number"){if(!c.jqplot.use_excanvas||!this.disableIEFading){A=this.seriesToggle}}if(this.showSwatches){l.bind("click",{series:u,speed:A,plot:z,replot:this.seriesToggleReplot},a);l.addClass("jqplot-seriesToggle")}if(this.showLabels){k.bind("click",{series:u,speed:A,plot:z,replot:this.seriesToggleReplot},a);k.addClass("jqplot-seriesToggle")}if(!u.show&&u.showLabel){l.addClass("jqplot-series-hidden");k.addClass("jqplot-series-hidden")}}C=true}}v++}l=k=h=f=null}}return this._elem};var a=function(j){var i=j.data,m=i.series,l=i.replot,h=i.plot,f=i.speed,k=m.index,g=false;if(m.canvas._elem.is(":hidden")||!m.show){g=true}var e=function(){if(l){var n={};if(c.isPlainObject(l)){c.extend(true,n,l)}h.replot(n);if(g&&f){var d=h.series[k];if(d.shadowCanvas._elem){d.shadowCanvas._elem.hide().fadeIn(f)}d.canvas._elem.hide().fadeIn(f);d.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+d.index).hide().fadeIn(f)}}else{var d=h.series[k];if(d.canvas._elem.is(":hidden")||!d.show){if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(k*2).addClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((k*2)+1).addClass("jqplot-series-hidden")}}else{if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(k*2).removeClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((k*2)+1).removeClass("jqplot-series-hidden")}}}};m.toggleDisplay(j,e)};var b=function(){if(this.legend.renderer.constructor==c.jqplot.EnhancedLegendRenderer&&this.legend.seriesToggle){var d=this.legend._elem.detach();this.eventCanvas._elem.after(d)}}})(jQuery); \ No newline at end of file diff --git a/tpldata/jqplot.highlighter.min.js b/tpldata/jqplot.highlighter.min.js new file mode 100644 index 0000000..3ec43bf --- /dev/null +++ b/tpldata/jqplot.highlighter.min.js @@ -0,0 +1 @@ +(function(d){d.jqplot.eventListenerHooks.push(["jqplotMouseMove",g]);d.jqplot.Highlighter=function(h){this.show=d.jqplot.config.enablePlugins;this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation="nw";this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes="both";this.tooltipSeparator=", ";this.tooltipContentEditor=null;this.useAxesFormatters=true;this.tooltipFormatString="%.5P";this.formatString=null;this.yvalues=1;this.bringSeriesToFront=false;this._tooltipElem;this.isHighlighting=false;this.currentNeighbor=null;d.extend(true,this,h)};var c=["nw","n","ne","e","se","s","sw","w"];var f={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var b=["se","s","sw","w","nw","n","ne","e"];d.jqplot.Highlighter.init=function(k,j,i){var h=i||{};this.plugins.highlighter=new d.jqplot.Highlighter(h.highlighter)};d.jqplot.Highlighter.parseOptions=function(i,h){this.showHighlight=true};d.jqplot.Highlighter.postPlotDraw=function(){if(this.plugins.highlighter&&this.plugins.highlighter.highlightCanvas){this.plugins.highlighter.highlightCanvas.resetCanvas();this.plugins.highlighter.highlightCanvas=null}if(this.plugins.highlighter&&this.plugins.highlighter._tooltipElem){this.plugins.highlighter._tooltipElem.emptyForce();this.plugins.highlighter._tooltipElem=null}this.plugins.highlighter.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,"jqplot-highlight-canvas",this._plotDimensions,this));this.plugins.highlighter.highlightCanvas.setContext();var h=document.createElement("div");this.plugins.highlighter._tooltipElem=d(h);h=null;this.plugins.highlighter._tooltipElem.addClass("jqplot-highlighter-tooltip");this.plugins.highlighter._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem)};d.jqplot.preInitHooks.push(d.jqplot.Highlighter.init);d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Highlighter.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Highlighter.postPlotDraw);function a(n,o){var h=n.plugins.highlighter;var p=n.series[o.seriesIndex];var k=p.markerRenderer;var i=h.markerRenderer;i.style=k.style;i.lineWidth=k.lineWidth+h.lineWidthAdjust;i.size=k.size+h.sizeAdjust;var m=d.jqplot.getColorComponents(k.color);var j=[m[0],m[1],m[2]];var l=(m[3]>=0.6)?m[3]*0.6:m[3]*(2-m[3]);i.color="rgba("+j[0]+","+j[1]+","+j[2]+","+l+")";i.init();i.draw(p.gridData[o.pointIndex][0],p.gridData[o.pointIndex][1],h.highlightCanvas._ctx)}function e(A,l,n){var k=A.plugins.highlighter;var D=k._tooltipElem;var r=l.highlighter||{};var s=d.extend(true,{},k,r);if(s.useAxesFormatters){var z=l._xaxis._ticks[0].formatter;var h=l._yaxis._ticks[0].formatter;var E=l._xaxis._ticks[0].formatString;var t=l._yaxis._ticks[0].formatString;var w;var u=z(E,n.data[0]);var m=[];for(var B=1;B140){f=Math.round(Math.log(this.max/this.min)/Math.log(this.base)+1);if(f<2){f=2}if(z===0){var l=b/(f-1);if(l<100){z=0}else{if(l<190){z=1}else{if(l<250){z=3}else{if(l<600){z=4}else{z=9}}}}}}else{f=2;if(z===0){z=1}z=0}}else{f=this.numberTicks}if(B>=0&&z!==3){this._autoFormatString="%d"}else{if(B<=0&&z===3){var l=-(B-1);this._autoFormatString="%."+Math.abs(B-1)+"f"}else{if(B<0){var l=-B;this._autoFormatString="%."+Math.abs(B)+"f"}else{this._autoFormatString="%d"}}}var O,E,w,m,F,h;for(var I=0;I=0;G--){w=m-h*(G+1);E=new this.tickRenderer(this.tickOptions);if(this._overrideFormatString&&this._autoFormatString!=""){E.formatString=this._autoFormatString}if(!this.showTicks){E.showLabel=false;E.showMark=false}else{if(!this.showTickMarks){E.showMark=false}}E.setTick(w,this.name);this._ticks.push(E)}}}}else{if(this.min!=null&&this.max!=null){var v=a.extend(true,{},this.tickOptions,{name:this.name,value:null});var H,e;if(this.numberTicks==null&&this.tickInterval==null){var A=Math.max(b,K+1);var J=Math.ceil((A-K)/35+1);var y=a.jqplot.LinearTickGenerator.bestConstrainedInterval(this.min,this.max,J);this._autoFormatString=y[3];H=y[2];e=y[4];for(var I=0;I0){d=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{d=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"middle":d=-n.getHeight()/2;break;default:d=-n.getHeight()/2;break}}else{d=-n.getHeight()/2}var z=this.u2p(n.value)+d+"px";n._elem.css("top",z);n.pack()}}if(o){var x=this._label._elem.outerHeight(true);this._label._elem.css("top",c-j/2-x/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery); \ No newline at end of file