Плагины отдельно, чуть покрасивее сделал, пробелы расставил как надо (по 2)

master
vitalif 2012-03-04 21:58:18 +00:00
parent 62a5c76d06
commit 3bb4c6adde
10 changed files with 228 additions and 186 deletions

View File

@ -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
{

View File

@ -3,7 +3,14 @@
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jquery.min.js"></script>
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.all.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.plugins.all.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.canvasTextRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.canvasAxisLabelRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.canvasAxisTickRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.categoryAxisRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.dateAxisRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.enhancedLegendRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.highlighter.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.logAxisRenderer.min.js"></script>
<link rel="stylesheet" type="text/css" href="{DOMAIN}/tpldata/jquery.jqplot.css" />
<!-- END -->
<!-- INCLUDE admin_header.tpl -->
@ -33,7 +40,7 @@
<select style="width:100px" name="cell_field">
<option value="">---</option>
<!-- FOR f = fielddescs -->
<option value="{s f.id}"<!-- IF eq(cell.field, f.id) --> selected="selected"<!-- SET cell.fname = f.name --><!-- END -->>{s f.name}</option>
<option value="{s f.id}"<!-- IF eq(cell.field, f.id) --> selected="selected"<!-- END -->>{s f.name}</option>
<!-- END -->
</select>
<select style="width:100px" name="cell_func">
@ -107,24 +114,25 @@
<p>Нет данных для показа.</p>
<!-- ELSIF groups -->
<!-- FOR group = groups -->
<div style="width: 600px; height: 300px; margin-top: 20px" id="group{group#}"></div>
<div style="width: 900px; height: 400px; margin-top: 20px" id="group{group#}"></div>
<!-- END -->
<p>
<input type="checkbox" name="graph_log" id="graph_log" value="1"
onclick="doPlot(this.checked)" />
<label for="graph_log">Логарифмическая шкала графиков</label>
</p>
<script language="javascript" type="text/javascript">
var g = [
<script language="javascript" type="text/javascript">
var g = [
<!-- FOR group = groups -->{yesno(group#,',','')}
{
id: "group{group#}",
desc: "{q join(', ',group.full_desc)}",
numeric: {yesno(group.numeric,'true','false')},
data: [
<!-- FOR graph = group.graphs -->{yesno(graph#,',','')}
[
<!-- FOR g = graph.data -->
[ '{g.0}', {g.1} ],
[ {yesno(group.numeric,g.0,concat("'",q(g.0),"'"))}, {g.1} ],
<!-- END -->
]
<!-- END -->
@ -137,11 +145,15 @@
]
}
<!-- END -->
];
var yLabel = '{cell.fname}';
var plots = [];
function doPlot(logarithmic)
{
];
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])
@ -149,10 +161,18 @@
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: {
@ -165,8 +185,9 @@
xaxis: {
label: g[i].x,
labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
renderer: $.jqplot.CategoryAxisRenderer,
renderer: g[i].numeric ? $.jqplot.LinearAxisRenderer : $.jqplot.CategoryAxisRenderer,
sortMergedLabels: true,
useStringSort: true,
tickOptions: {
angle: -30
}
@ -182,9 +203,8 @@
}
});
}
}
doPlot(false);
</script>
}
</script>
<!-- ELSIF graphs -->
<!-- FOR graph = graphs -->
<!-- IF graph.desc -->
@ -219,7 +239,7 @@
</div>
<!-- END -->
<!-- END -->
<!-- ELSE -->
<!-- ELSE --> <!--# Таблицы! -->
<!-- FOR table = tables -->
<!-- IF table.desc -->
<!-- SET o = 0 -->

View File

@ -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);

View File

@ -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);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(function(c){c.jqplot.EnhancedLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.EnhancedLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.EnhancedLegendRenderer.prototype.constructor=c.jqplot.EnhancedLegendRenderer;c.jqplot.EnhancedLegendRenderer.prototype.init=function(d){this.numberRows=null;this.numberColumns=null;this.seriesToggle="normal";this.seriesToggleReplot=false;this.disableIEFading=true;c.extend(true,this,d);if(this.seriesToggle){c.jqplot.postDrawHooks.push(b)}};c.jqplot.EnhancedLegendRenderer.prototype.draw=function(m,z){var r=this;if(this.show){var g=this._series;var u;var w="position:absolute;";w+=(this.background)?"background:"+this.background+";":"";w+=(this.border)?"border:"+this.border+";":"";w+=(this.fontSize)?"font-size:"+this.fontSize+";":"";w+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";w+=(this.textColor)?"color:"+this.textColor+";":"";w+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";w+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";w+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";w+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+w+'"></table>');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;B<d;B++){e=c(document.createElement("tr"));e.addClass("jqplot-table-legend");if(q){e.prependTo(this._elem)}else{e.appendTo(this._elem)}for(y=0;y<o;y++){if(v<g.length&&(g[v].show||g[v].showLabel)){u=g[v];n=this.labels[v]||u.label.toString();if(n){var x=u.color;if(!q){if(B>0){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);

1
tpldata/jqplot.highlighter.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
tpldata/jqplot.logAxisRenderer.min.js vendored Normal file

File diff suppressed because one or more lines are too long