forked from vergnet/site-accueil-insa
140 lines
No EOL
5.6 KiB
JavaScript
140 lines
No EOL
5.6 KiB
JavaScript
/**
|
|
* jqPlot
|
|
* Pure JavaScript plotting plugin using jQuery
|
|
*
|
|
* Version: @VERSION
|
|
* Revision: @REVISION
|
|
*
|
|
* Copyright (c) 2009-2013 Chris Leonello
|
|
* jqPlot is currently available for use in all personal or commercial projects
|
|
* under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
|
|
* version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
|
|
* choose the license that best suits your project and use it accordingly.
|
|
*
|
|
* Although not required, the author would appreciate an email letting him
|
|
* know of any substantial use of jqPlot. You can reach the author at:
|
|
* chris at jqplot dot com or see http://www.jqplot.com/info.php .
|
|
*
|
|
* If you are feeling kind and generous, consider supporting the project by
|
|
* making a donation at: http://www.jqplot.com/donate.php .
|
|
*
|
|
* sprintf functions contained in jqplot.sprintf.js by Ash Searle:
|
|
*
|
|
* version 2007.04.27
|
|
* author Ash Searle
|
|
* http://hexmen.com/blog/2007/03/printf-sprintf/
|
|
* http://hexmen.com/js/sprintf.js
|
|
* The author (Ash Searle) has placed this code in the public domain:
|
|
* "This code is unrestricted: you are free to use it however you like."
|
|
*
|
|
*/
|
|
(function($) {
|
|
// class: $.jqplot.shadowRenderer
|
|
// The default jqPlot shadow renderer, rendering shadows behind shapes.
|
|
$.jqplot.ShadowRenderer = function(options){
|
|
// Group: Properties
|
|
|
|
// prop: angle
|
|
// Angle of the shadow in degrees. Measured counter-clockwise from the x axis.
|
|
this.angle = 45;
|
|
// prop: offset
|
|
// Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
|
|
this.offset = 1;
|
|
// prop: alpha
|
|
// alpha transparency of shadow stroke.
|
|
this.alpha = 0.07;
|
|
// prop: lineWidth
|
|
// width of the shadow line stroke.
|
|
this.lineWidth = 1.5;
|
|
// prop: lineJoin
|
|
// How line segments of the shadow are joined.
|
|
this.lineJoin = 'miter';
|
|
// prop: lineCap
|
|
// how ends of the shadow line are rendered.
|
|
this.lineCap = 'round';
|
|
// prop; closePath
|
|
// whether line path segment is closed upon itself.
|
|
this.closePath = false;
|
|
// prop: fill
|
|
// whether to fill the shape.
|
|
this.fill = false;
|
|
// prop: depth
|
|
// how many times the shadow is stroked. Each stroke will be offset by offset at angle degrees.
|
|
this.depth = 3;
|
|
this.strokeStyle = 'rgba(0,0,0,0.1)';
|
|
// prop: isarc
|
|
// whether the shadow is an arc or not.
|
|
this.isarc = false;
|
|
|
|
$.extend(true, this, options);
|
|
};
|
|
|
|
$.jqplot.ShadowRenderer.prototype.init = function(options) {
|
|
$.extend(true, this, options);
|
|
};
|
|
|
|
// function: draw
|
|
// draws an transparent black (i.e. gray) shadow.
|
|
//
|
|
// ctx - canvas drawing context
|
|
// points - array of points or [x, y, radius, start angle (rad), end angle (rad)]
|
|
$.jqplot.ShadowRenderer.prototype.draw = function(ctx, points, options) {
|
|
ctx.save();
|
|
var opts = (options != null) ? options : {};
|
|
var fill = (opts.fill != null) ? opts.fill : this.fill;
|
|
var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect;
|
|
var closePath = (opts.closePath != null) ? opts.closePath : this.closePath;
|
|
var offset = (opts.offset != null) ? opts.offset : this.offset;
|
|
var alpha = (opts.alpha != null) ? opts.alpha : this.alpha;
|
|
var depth = (opts.depth != null) ? opts.depth : this.depth;
|
|
var isarc = (opts.isarc != null) ? opts.isarc : this.isarc;
|
|
var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern;
|
|
ctx.lineWidth = (opts.lineWidth != null) ? opts.lineWidth : this.lineWidth;
|
|
ctx.lineJoin = (opts.lineJoin != null) ? opts.lineJoin : this.lineJoin;
|
|
ctx.lineCap = (opts.lineCap != null) ? opts.lineCap : this.lineCap;
|
|
ctx.strokeStyle = opts.strokeStyle || this.strokeStyle || 'rgba(0,0,0,'+alpha+')';
|
|
ctx.fillStyle = opts.fillStyle || this.fillStyle || 'rgba(0,0,0,'+alpha+')';
|
|
for (var j=0; j<depth; j++) {
|
|
var ctxPattern = $.jqplot.LinePattern(ctx, linePattern);
|
|
ctx.translate(Math.cos(this.angle*Math.PI/180)*offset, Math.sin(this.angle*Math.PI/180)*offset);
|
|
ctxPattern.beginPath();
|
|
if (isarc) {
|
|
ctx.arc(points[0], points[1], points[2], points[3], points[4], true);
|
|
}
|
|
else if (fillRect) {
|
|
if (fillRect) {
|
|
ctx.fillRect(points[0], points[1], points[2], points[3]);
|
|
}
|
|
}
|
|
else if (points && points.length){
|
|
var move = true;
|
|
for (var i=0; i<points.length; i++) {
|
|
// skip to the first non-null point and move to it.
|
|
if (points[i][0] != null && points[i][1] != null) {
|
|
if (move) {
|
|
ctxPattern.moveTo(points[i][0], points[i][1]);
|
|
move = false;
|
|
}
|
|
else {
|
|
ctxPattern.lineTo(points[i][0], points[i][1]);
|
|
}
|
|
}
|
|
else {
|
|
move = true;
|
|
}
|
|
}
|
|
|
|
}
|
|
if (closePath) {
|
|
ctxPattern.closePath();
|
|
}
|
|
if (fill) {
|
|
ctx.fill();
|
|
}
|
|
else {
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
ctx.restore();
|
|
};
|
|
})(jQuery);
|