forked from vergnet/site-accueil-insa
166 lines
No EOL
6.2 KiB
JavaScript
166 lines
No EOL
6.2 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.shapeRenderer
|
|
// The default jqPlot shape renderer. Given a set of points will
|
|
// plot them and either stroke a line (fill = false) or fill them (fill = true).
|
|
// If a filled shape is desired, closePath = true must also be set to close
|
|
// the shape.
|
|
$.jqplot.ShapeRenderer = function(options){
|
|
|
|
this.lineWidth = 1.5;
|
|
// prop: linePattern
|
|
// line pattern 'dashed', 'dotted', 'solid', some combination
|
|
// of '-' and '.' characters such as '.-.' or a numerical array like
|
|
// [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line,
|
|
// [1, 10, 20, 10] to draw a dot-dash line, and so on.
|
|
this.linePattern = 'solid';
|
|
// 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: isarc
|
|
// whether the shadow is an arc or not.
|
|
this.isarc = false;
|
|
// prop: fillRect
|
|
// true to draw shape as a filled rectangle.
|
|
this.fillRect = false;
|
|
// prop: strokeRect
|
|
// true to draw shape as a stroked rectangle.
|
|
this.strokeRect = false;
|
|
// prop: clearRect
|
|
// true to cear a rectangle.
|
|
this.clearRect = false;
|
|
// prop: strokeStyle
|
|
// css color spec for the stoke style
|
|
this.strokeStyle = '#999999';
|
|
// prop: fillStyle
|
|
// css color spec for the fill style.
|
|
this.fillStyle = '#999999';
|
|
|
|
$.extend(true, this, options);
|
|
};
|
|
|
|
$.jqplot.ShapeRenderer.prototype.init = function(options) {
|
|
$.extend(true, this, options);
|
|
};
|
|
|
|
// function: draw
|
|
// draws the shape.
|
|
//
|
|
// ctx - canvas drawing context
|
|
// points - array of points for shapes or
|
|
// [x, y, width, height] for rectangles or
|
|
// [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs.
|
|
$.jqplot.ShapeRenderer.prototype.draw = function(ctx, points, options) {
|
|
ctx.save();
|
|
var opts = (options != null) ? options : {};
|
|
var fill = (opts.fill != null) ? opts.fill : this.fill;
|
|
var closePath = (opts.closePath != null) ? opts.closePath : this.closePath;
|
|
var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect;
|
|
var strokeRect = (opts.strokeRect != null) ? opts.strokeRect : this.strokeRect;
|
|
var clearRect = (opts.clearRect != null) ? opts.clearRect : this.clearRect;
|
|
var isarc = (opts.isarc != null) ? opts.isarc : this.isarc;
|
|
var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern;
|
|
var ctxPattern = $.jqplot.LinePattern(ctx, linePattern);
|
|
ctx.lineWidth = opts.lineWidth || this.lineWidth;
|
|
ctx.lineJoin = opts.lineJoin || this.lineJoin;
|
|
ctx.lineCap = opts.lineCap || this.lineCap;
|
|
ctx.strokeStyle = (opts.strokeStyle || opts.color) || this.strokeStyle;
|
|
ctx.fillStyle = opts.fillStyle || this.fillStyle;
|
|
ctx.beginPath();
|
|
if (isarc) {
|
|
ctx.arc(points[0], points[1], points[2], points[3], points[4], true);
|
|
if (closePath) {
|
|
ctx.closePath();
|
|
}
|
|
if (fill) {
|
|
ctx.fill();
|
|
}
|
|
else {
|
|
ctx.stroke();
|
|
}
|
|
ctx.restore();
|
|
return;
|
|
}
|
|
else if (clearRect) {
|
|
ctx.clearRect(points[0], points[1], points[2], points[3]);
|
|
ctx.restore();
|
|
return;
|
|
}
|
|
else if (fillRect || strokeRect) {
|
|
if (fillRect) {
|
|
ctx.fillRect(points[0], points[1], points[2], points[3]);
|
|
}
|
|
if (strokeRect) {
|
|
ctx.strokeRect(points[0], points[1], points[2], points[3]);
|
|
ctx.restore();
|
|
return;
|
|
}
|
|
}
|
|
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);
|