From 5bf66662a9bdd62c5bccab15e607cd95cfb8fcab Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Mon, 27 Jul 2020 10:05:23 +0200 Subject: Removed wordpress and phpmyadmin, my server doesn't handle it well and it brings shame on my familly --- .../js/vendor/jqplot/plugins/jqplot.barRenderer.js | 801 -------------- .../plugins/jqplot.canvasAxisLabelRenderer.js | 203 ---- .../jqplot/plugins/jqplot.canvasTextRenderer.js | 449 -------- .../jqplot/plugins/jqplot.categoryAxisRenderer.js | 679 ------------ .../js/vendor/jqplot/plugins/jqplot.cursor.js | 1108 -------------------- .../jqplot/plugins/jqplot.dateAxisRenderer.js | 741 ------------- .../plugins/jqplot.enhancedPieLegendRenderer.js | 261 ----- .../js/vendor/jqplot/plugins/jqplot.highlighter.js | 465 -------- .../js/vendor/jqplot/plugins/jqplot.pieRenderer.js | 964 ----------------- .../js/vendor/jqplot/plugins/jqplot.pointLabels.js | 379 ------- 10 files changed, 6050 deletions(-) delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.barRenderer.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.canvasTextRenderer.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.categoryAxisRenderer.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.cursor.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.dateAxisRenderer.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.enhancedPieLegendRenderer.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.highlighter.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.pieRenderer.js delete mode 100644 srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.pointLabels.js (limited to 'srcs/phpmyadmin/js/vendor/jqplot/plugins') diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.barRenderer.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.barRenderer.js deleted file mode 100644 index d56ca19..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.barRenderer.js +++ /dev/null @@ -1,801 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.9 - * Revision: d96a669 - * - * Copyright (c) 2009-2016 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.BarRenderer - // A plugin renderer for jqPlot to draw a bar plot. - // Draws series as a line. - - $.jqplot.BarRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.BarRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.BarRenderer.prototype.constructor = $.jqplot.BarRenderer; - - // called with scope of series. - $.jqplot.BarRenderer.prototype.init = function(options, plot) { - // Group: Properties - // - // prop: barPadding - // Number of pixels between adjacent bars at the same axis value. - this.barPadding = 8; - // prop: barMargin - // Number of pixels between groups of bars at adjacent axis values. - this.barMargin = 10; - // prop: barDirection - // 'vertical' = up and down bars, 'horizontal' = side to side bars - this.barDirection = 'vertical'; - // prop: barWidth - // Width of the bar in pixels (auto by devaul). null = calculated automatically. - this.barWidth = null; - // prop: shadowOffset - // offset of the shadow from the slice and offset of - // each succesive stroke of the shadow from the last. - this.shadowOffset = 2; - // prop: shadowDepth - // number of strokes to apply to the shadow, - // each stroke offset shadowOffset from the last. - this.shadowDepth = 5; - // prop: shadowAlpha - // transparency of the shadow (0 = transparent, 1 = opaque) - this.shadowAlpha = 0.08; - // prop: waterfall - // true to enable waterfall plot. - this.waterfall = false; - // prop: groups - // group bars into this many groups - this.groups = 1; - // prop: varyBarColor - // true to color each bar of a series separately rather than - // have every bar of a given series the same color. - // If used for non-stacked multiple series bar plots, user should - // specify a separate 'seriesColors' array for each series. - // Otherwise, each series will set their bars to the same color array. - // This option has no Effect for stacked bar charts and is disabled. - this.varyBarColor = false; - // prop: highlightMouseOver - // True to highlight slice when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on a slice. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over a slice. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColors - // an array of colors to use when highlighting a bar. - this.highlightColors = []; - // prop: transposedData - // NOT IMPLEMENTED YET. True if this is a horizontal bar plot and - // x and y values are "transposed". Tranposed, or "swapped", data is - // required prior to rev. 894 builds of jqPlot with horizontal bars. - // Allows backward compatability of bar renderer horizontal bars with - // old style data sets. - this.transposedData = true; - this.renderer.animation = { - show: false, - direction: 'down', - speed: 3000, - _supported: true - }; - this._type = 'bar'; - - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (options.highlightMouseDown && options.highlightMouseOver == null) { - options.highlightMouseOver = false; - } - - ////// - // This is probably wrong here. - // After going back and forth on whether renderer should be the thing - // or extend the thing, it seems that it it best if it is a property - // on the thing. This should be something that is commonized - // among series renderers in the future. - ////// - $.extend(true, this, options); - - // really should probably do this - $.extend(true, this.renderer, options); - // fill is still needed to properly draw the legend. - // bars have to be filled. - this.fill = true; - - // if horizontal bar and animating, reset the default direction - if (this.barDirection === 'horizontal' && this.rendererOptions.animation && this.rendererOptions.animation.direction == null) { - this.renderer.animation.direction = 'left'; - } - - if (this.waterfall) { - this.fillToZero = false; - this.disableStack = true; - } - - if (this.barDirection == 'vertical' ) { - this._primaryAxis = '_xaxis'; - this._stackAxis = 'y'; - this.fillAxis = 'y'; - } - else { - this._primaryAxis = '_yaxis'; - this._stackAxis = 'x'; - this.fillAxis = 'x'; - } - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - // total number of values for all bar series, total number of bar series, and position of this series - this._plotSeriesInfo = null; - // Array of actual data colors used for each data point. - this._dataColors = []; - this._barPoints = []; - - // set the shape renderer options - var opts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill}; - this.renderer.shapeRenderer.init(opts); - // set the shadow renderer options - var sopts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill}; - this.renderer.shadowRenderer.init(sopts); - - plot.postInitHooks.addOnce(postInit); - plot.postDrawHooks.addOnce(postPlotDraw); - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); - plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); - plot.eventListenerHooks.addOnce('jqplotClick', handleClick); - plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); - }; - - // called with scope of series - function barPreInit(target, data, seriesDefaults, options) { - if (this.rendererOptions.barDirection == 'horizontal') { - this._stackAxis = 'x'; - this._primaryAxis = '_yaxis'; - } - if (this.rendererOptions.waterfall == true) { - this._data = $.extend(true, [], this.data); - var sum = 0; - var pos = (!this.rendererOptions.barDirection || this.rendererOptions.barDirection === 'vertical' || this.transposedData === false) ? 1 : 0; - for(var i=0; i0) { - this.data[i][pos] += this.data[i-1][pos]; - } - } - this.data[this.data.length] = (pos == 1) ? [this.data.length+1, sum] : [sum, this.data.length+1]; - this._data[this._data.length] = (pos == 1) ? [this._data.length+1, sum] : [sum, this._data.length+1]; - } - if (this.rendererOptions.groups > 1) { - this.breakOnNull = true; - var l = this.data.length; - var skip = parseInt(l/this.rendererOptions.groups, 10); - var count = 0; - for (var i=skip; i 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]); - newrgb[j] = parseInt(newrgb[j], 10); - } - ret.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')'); - } - return ret; - } - - function getStart(sidx, didx, comp, plot, axis) { - // check if sign change - var seriesIndex = sidx, - prevSeriesIndex = sidx - 1, - start, - prevVal, - aidx = (axis === 'x') ? 0 : 1; - - // is this not the first series? - if (seriesIndex > 0) { - prevVal = plot.series[prevSeriesIndex]._plotData[didx][aidx]; - - // is there a sign change - if ((comp * prevVal) < 0) { - start = getStart(prevSeriesIndex, didx, comp, plot, axis); - } - - // no sign change. - else { - start = plot.series[prevSeriesIndex].gridData[didx][aidx]; - } - - } - - // if first series, return value at 0 - else { - - start = (aidx === 0) ? plot.series[seriesIndex]._xaxis.series_u2p(0) : plot.series[seriesIndex]._yaxis.series_u2p(0); - } - - return start; - } - - - $.jqplot.BarRenderer.prototype.draw = function(ctx, gridData, options, plot) { - var i; - // Ughhh, have to make a copy of options b/c it may be modified later. - var opts = $.extend({}, options); - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - var xaxis = this.xaxis; - var yaxis = this.yaxis; - var xp = this._xaxis.series_u2p; - var yp = this._yaxis.series_u2p; - var pointx, pointy; - // clear out data colors. - this._dataColors = []; - this._barPoints = []; - - if (this.barWidth == null || this.rendererOptions.barWidth == null) {//check pull request https://bitbucket.org/cleonello/jqplot/pull-request/61/fix-for-issue-513/diff - this.renderer.setBarWidth.call(this); - } - - var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this); - var nvals = temp[0]; - var nseries = temp[1]; - var pos = temp[2]; - var points = []; - - if (this._stack) { - this._barNudge = 0; - } - else { - this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding); - } - if (showLine) { - var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors); - var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors); - var negativeColor = negativeColors.get(this.index); - if (! this.useNegativeColors) { - negativeColor = opts.fillStyle; - } - var positiveColor = opts.fillStyle; - var base; - var xstart; - var ystart; - - if (this.barDirection == 'vertical') { - for (var i=0; i 0 && i < this.gridData.length-1) { - ystart = this.gridData[i-1][1]; - } - else if (this.waterfall && i == 0 && i < this.gridData.length-1) { - if (this._yaxis.min <= 0 && this._yaxis.max >= 0) { - ystart = this._yaxis.series_u2p(0); - } - else if (this._yaxis.min > 0) { - ystart = ctx.canvas.height; - } - else { - ystart = 0; - } - } - else if (this.waterfall && i == this.gridData.length - 1) { - if (this._yaxis.min <= 0 && this._yaxis.max >= 0) { - ystart = this._yaxis.series_u2p(0); - } - else if (this._yaxis.min > 0) { - ystart = ctx.canvas.height; - } - else { - ystart = 0; - } - } - else { - ystart = ctx.canvas.height; - } - } - if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) { - if (this.varyBarColor && !this._stack) { - if (this.useNegativeColors) { - opts.fillStyle = negativeColors.next(); - } - else { - opts.fillStyle = positiveColors.next(); - } - } - else { - opts.fillStyle = negativeColor; - } - } - else { - if (this.varyBarColor && !this._stack) { - opts.fillStyle = positiveColors.next(); - } - else { - opts.fillStyle = positiveColor; - } - } - - if (!this.fillToZero || this._plotData[i][1] >= 0) { - points.push([base-this.barWidth/2, ystart]); - points.push([base-this.barWidth/2, gridData[i][1]]); - points.push([base+this.barWidth/2, gridData[i][1]]); - points.push([base+this.barWidth/2, ystart]); - } - // for negative bars make sure points are always ordered clockwise - else { - points.push([base-this.barWidth/2, gridData[i][1]]); - points.push([base-this.barWidth/2, ystart]); - points.push([base+this.barWidth/2, ystart]); - points.push([base+this.barWidth/2, gridData[i][1]]); - } - this._barPoints.push(points); - // now draw the shadows if not stacked. - // for stacked plots, they are predrawn by drawShadow - if (shadow && !this._stack) { - var sopts = $.extend(true, {}, opts); - // need to get rid of fillStyle on shadow. - delete sopts.fillStyle; - this.renderer.shadowRenderer.draw(ctx, points, sopts); - } - var clr = opts.fillStyle || this.color; - this._dataColors.push(clr); - this.renderer.shapeRenderer.draw(ctx, points, opts); - } - } - - else if (this.barDirection == 'horizontal'){ - for (var i=0; i 0 && i < this.gridData.length-1) { - xstart = this.gridData[i-1][0]; - } - else if (this.waterfall && i == 0 && i < this.gridData.length-1) { - if (this._xaxis.min <= 0 && this._xaxis.max >= 0) { - xstart = this._xaxis.series_u2p(0); - } - else if (this._xaxis.min > 0) { - xstart = 0; - } - else { - xstart = 0; - } - } - else if (this.waterfall && i == this.gridData.length - 1) { - if (this._xaxis.min <= 0 && this._xaxis.max >= 0) { - xstart = this._xaxis.series_u2p(0); - } - else if (this._xaxis.min > 0) { - xstart = 0; - } - else { - xstart = ctx.canvas.width; - } - } - else { - xstart = 0; - } - } - if ((this.fillToZero && this._plotData[i][0] < 0) || (this.waterfall && this._data[i][0] < 0)) { - if (this.varyBarColor && !this._stack) { - if (this.useNegativeColors) { - opts.fillStyle = negativeColors.next(); - } - else { - opts.fillStyle = positiveColors.next(); - } - } - else { - opts.fillStyle = negativeColor; - } - } - else { - if (this.varyBarColor && !this._stack) { - opts.fillStyle = positiveColors.next(); - } - else { - opts.fillStyle = positiveColor; - } - } - - - if (!this.fillToZero || this._plotData[i][0] >= 0) { - points.push([xstart, base + this.barWidth / 2]); - points.push([xstart, base - this.barWidth / 2]); - points.push([gridData[i][0], base - this.barWidth / 2]); - points.push([gridData[i][0], base + this.barWidth / 2]); - } - else { - points.push([gridData[i][0], base + this.barWidth / 2]); - points.push([gridData[i][0], base - this.barWidth / 2]); - points.push([xstart, base - this.barWidth / 2]); - points.push([xstart, base + this.barWidth / 2]); - } - - this._barPoints.push(points); - // now draw the shadows if not stacked. - // for stacked plots, they are predrawn by drawShadow - if (shadow && !this._stack) { - var sopts = $.extend(true, {}, opts); - delete sopts.fillStyle; - this.renderer.shadowRenderer.draw(ctx, points, sopts); - } - var clr = opts.fillStyle || this.color; - this._dataColors.push(clr); - this.renderer.shapeRenderer.draw(ctx, points, opts); - } - } - } - - if (this.highlightColors.length == 0) { - this.highlightColors = $.jqplot.computeHighlightColors(this._dataColors); - } - - else if (typeof(this.highlightColors) == 'string') { - var temp = this.highlightColors; - this.highlightColors = []; - for (var i=0; i -1) { - return n/this.pt2px; - } - else if (sz.indexOf('pt') > -1) { - return n; - } - else if (sz.indexOf('em') > -1) { - return n*12; - } - else if (sz.indexOf('%') > -1) { - return n*12/100; - } - // default to pixels; - else { - return n/this.pt2px; - } - }; - - - $.jqplot.CanvasTextRenderer.prototype.fontWeight2Float = function(w) { - // w = normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 - // return values adjusted for Hershey font. - if (Number(w)) { - return w/400; - } - else { - switch (w) { - 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; - } - } - }; - - $.jqplot.CanvasTextRenderer.prototype.getText = function() { - return this.text; - }; - - $.jqplot.CanvasTextRenderer.prototype.setText = function(t, ctx) { - this.text = t; - this.setWidth(ctx); - return this; - }; - - $.jqplot.CanvasTextRenderer.prototype.getWidth = function(ctx) { - return this.width; - }; - - $.jqplot.CanvasTextRenderer.prototype.setWidth = function(ctx, w) { - if (!w) { - this.width = this.measure(ctx, this.text); - } - else { - this.width = w; - } - return this; - }; - - // return height in pixels. - $.jqplot.CanvasTextRenderer.prototype.getHeight = function(ctx) { - return this.height; - }; - - // w - height in pt - // set heigh in px - $.jqplot.CanvasTextRenderer.prototype.setHeight = function(w) { - if (!w) { - //height = this.fontSize /0.75; - this.height = this.normalizedFontSize * this.pt2px; - } - else { - this.height = w; - } - return this; - }; - - $.jqplot.CanvasTextRenderer.prototype.letter = function (ch) - { - return this.letters[ch]; - }; - - $.jqplot.CanvasTextRenderer.prototype.ascent = function() - { - return this.normalizedFontSize; - }; - - $.jqplot.CanvasTextRenderer.prototype.descent = function() - { - return 7.0*this.normalizedFontSize/25.0; - }; - - $.jqplot.CanvasTextRenderer.prototype.measure = function(ctx, str) - { - var total = 0; - var len = str.length; - - for (var i = 0; i < len; i++) { - var c = this.letter(str.charAt(i)); - if (c) { - total += c.width * this.normalizedFontSize / 25.0 * this.fontStretch; - } - } - return total; - }; - - $.jqplot.CanvasTextRenderer.prototype.draw = function(ctx,str) - { - var x = 0; - // leave room at bottom for descenders. - var y = this.height*0.72; - var total = 0; - var len = str.length; - var mag = this.normalizedFontSize / 25.0; - - ctx.save(); - var tx, ty; - - // 1st quadrant - if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) { - tx = 0; - ty = -Math.sin(this.angle) * this.width; - } - // 4th quadrant - else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) { - tx = Math.sin(this.angle) * this.height; - ty = 0; - } - // 2nd quadrant - else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) { - tx = -Math.cos(this.angle) * this.width; - ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height; - } - // 3rd quadrant - else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) { - tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width; - ty = -Math.cos(this.angle) * this.height; - } - - ctx.strokeStyle = this.fillStyle; - ctx.fillStyle = this.fillStyle; - ctx.translate(tx, ty); - ctx.rotate(this.angle); - ctx.lineCap = "round"; - // multiplier was 2.0 - var fact = (this.normalizedFontSize > 30) ? 2.0 : 2 + (30 - this.normalizedFontSize)/20; - ctx.lineWidth = fact * mag * this.fontWeight2Float(this.fontWeight); - - for ( var i = 0; i < len; i++) { - var c = this.letter( str.charAt(i)); - if ( !c) { - continue; - } - - ctx.beginPath(); - - var penUp = 1; - var needStroke = 0; - for ( var j = 0; j < c.points.length; j++) { - var a = c.points[j]; - if ( a[0] == -1 && a[1] == -1) { - penUp = 1; - continue; - } - if ( penUp) { - ctx.moveTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag); - penUp = false; - } else { - ctx.lineTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag); - } - } - ctx.stroke(); - x += c.width*mag*this.fontStretch; - } - ctx.restore(); - return total; - }; - - $.jqplot.CanvasTextRenderer.prototype.letters = { - ' ': { width: 16, points: [] }, - '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] }, - '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] }, - '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] }, - '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[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]] }, - '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] }, - '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] }, - '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] }, - '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] }, - ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] }, - '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] }, - '+': { width: 26, points: [[13,18],[13,0],[-1,-1],[4,9],[22,9]] }, - ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] }, - '-': { width: 18, points: [[6,9],[12,9]] }, - '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] }, - '/': { width: 22, points: [[20,25],[2,-7]] }, - '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] }, - '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] }, - '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] }, - '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] }, - '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] }, - '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] }, - '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] }, - '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] }, - '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] }, - '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] }, - ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] }, - ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] }, - '<': { width: 24, points: [[20,18],[4,9],[20,0]] }, - '=': { width: 26, points: [[4,12],[22,12],[-1,-1],[4,6],[22,6]] }, - '>': { 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]] } - }; - - $.jqplot.CanvasFontRenderer = function(options) { - options = options || {}; - if (!options.pt2px) { - options.pt2px = 1.5; - } - $.jqplot.CanvasTextRenderer.call(this, options); - }; - - $.jqplot.CanvasFontRenderer.prototype = new $.jqplot.CanvasTextRenderer({}); - $.jqplot.CanvasFontRenderer.prototype.constructor = $.jqplot.CanvasFontRenderer; - - $.jqplot.CanvasFontRenderer.prototype.measure = function(ctx, str) - { - // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily; - var fstyle = this.fontSize+' '+this.fontFamily; - ctx.save(); - ctx.font = fstyle; - var w = ctx.measureText(str).width; - ctx.restore(); - return w; - }; - - $.jqplot.CanvasFontRenderer.prototype.draw = function(ctx, str) - { - var x = 0; - // leave room at bottom for descenders. - var y = this.height*0.72; - //var y = 12; - - ctx.save(); - var tx, ty; - - // 1st quadrant - if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) { - tx = 0; - ty = -Math.sin(this.angle) * this.width; - } - // 4th quadrant - else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) { - tx = Math.sin(this.angle) * this.height; - ty = 0; - } - // 2nd quadrant - else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) { - tx = -Math.cos(this.angle) * this.width; - ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height; - } - // 3rd quadrant - else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) { - tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width; - ty = -Math.cos(this.angle) * this.height; - } - ctx.strokeStyle = this.fillStyle; - ctx.fillStyle = this.fillStyle; - // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily; - var fstyle = this.fontSize+' '+this.fontFamily; - ctx.font = fstyle; - ctx.translate(tx, ty); - ctx.rotate(this.angle); - ctx.fillText(str, x, y); - // ctx.strokeText(str, x, y); - - ctx.restore(); - }; - -})(jQuery); \ No newline at end of file diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.categoryAxisRenderer.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.categoryAxisRenderer.js deleted file mode 100644 index fad19e6..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.categoryAxisRenderer.js +++ /dev/null @@ -1,679 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.9 - * Revision: d96a669 - * - * Copyright (c) 2009-2016 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.CategoryAxisRenderer - * A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series. - * - * To use this renderer, include the plugin in your source - * > - * - * and supply the appropriate options to your plot - * - * > {axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}} - **/ - $.jqplot.CategoryAxisRenderer = function(options) { - $.jqplot.LinearAxisRenderer.call(this); - // prop: sortMergedLabels - // True to sort tick labels when labels are created by merging - // x axis values from multiple series. That is, say you have - // two series like: - // > line1 = [[2006, 4], [2008, 9], [2009, 16]]; - // > line2 = [[2006, 3], [2007, 7], [2008, 6]]; - // If no label array is specified, tick labels will be collected - // from the x values of the series. With sortMergedLabels - // set to true, tick labels will be: - // > [2006, 2007, 2008, 2009] - // With sortMergedLabels set to false, tick labels will be: - // > [2006, 2008, 2009, 2007] - // - // Note, this property is specified on the renderOptions for the - // axes when creating a plot: - // > axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}} - this.sortMergedLabels = false; - }; - - $.jqplot.CategoryAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.CategoryAxisRenderer.prototype.constructor = $.jqplot.CategoryAxisRenderer; - - $.jqplot.CategoryAxisRenderer.prototype.init = function(options){ - this.groups = 1; - this.groupLabels = []; - this._groupLabels = []; - this._grouped = false; - this._barsPerGroup = null; - this.reverse = false; - // prop: tickRenderer - // A class of a rendering engine for creating the ticks labels displayed on the plot, - // See <$.jqplot.AxisTickRenderer>. - // this.tickRenderer = $.jqplot.AxisTickRenderer; - // this.labelRenderer = $.jqplot.AxisLabelRenderer; - $.extend(true, this, {tickOptions:{formatString:'%d'}}, options); - var db = this._dataBounds; - // Go through all the series attached to this axis and find - // the min/max bounds for this axis. - for (var i=0; i db.max || db.max == null) { - db.max = d[j][0]; - } - } - else { - if (d[j][1] < db.min || db.min == null) { - db.min = d[j][1]; - } - if (d[j][1] > db.max || db.max == null) { - db.max = d[j][1]; - } - } - } - } - - if (this.groupLabels.length) { - this.groups = this.groupLabels.length; - } - }; - - - $.jqplot.CategoryAxisRenderer.prototype.createTicks = function() { - // we're are operating on an axis here - var ticks = this._ticks; - var userTicks = this.ticks; - var name = this.name; - // databounds were set on axis initialization. - var db = this._dataBounds; - var dim, interval; - var min, max; - var pos1, pos2; - var tt, i; - - // if we already have ticks, use them. - if (userTicks.length) { - // adjust with blanks if we have groups - if (this.groups > 1 && !this._grouped) { - var l = userTicks.length; - var skip = parseInt(l/this.groups, 10); - var count = 0; - for (var i=skip; i 1 && !this._grouped) { - var l = labels.length; - var skip = parseInt(l/this.groups, 10); - var count = 0; - for (var i=skip; i0 && track'); - - if (this.name == 'xaxis' || this.name == 'x2axis') { - this._elem.width(this._plotDimensions.width); - } - else { - this._elem.height(this._plotDimensions.height); - } - - // create a _label object. - this.labelOptions.axis = this.name; - this._label = new this.labelRenderer(this.labelOptions); - if (this._label.show) { - var elem = this._label.draw(ctx, plot); - elem.appendTo(this._elem); - } - - var t = this._ticks; - for (var i=0; i'); - elem.html(this.groupLabels[i]); - this._groupLabels.push(elem); - elem.appendTo(this._elem); - } - } - return this._elem; - }; - - // called with scope of axis - $.jqplot.CategoryAxisRenderer.prototype.set = function() { - var dim = 0; - var temp; - var w = 0; - var h = 0; - var lshow = (this._label == null) ? false : this._label.show; - if (this.show) { - var t = this._ticks; - for (var i=0; i dim) { - dim = temp; - } - } - } - - var dim2 = 0; - for (var i=0; i dim2) { - dim2 = temp; - } - } - - if (lshow) { - w = this._label._elem.outerWidth(true); - h = this._label._elem.outerHeight(true); - } - if (this.name == 'xaxis') { - dim += dim2 + h; - this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'}); - } - else if (this.name == 'x2axis') { - dim += dim2 + h; - this._elem.css({'height':dim+'px', left:'0px', top:'0px'}); - } - else if (this.name == 'yaxis') { - dim += dim2 + w; - this._elem.css({'width':dim+'px', left:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - else { - dim += dim2 + w; - this._elem.css({'width':dim+'px', right:'0px', top:'0px'}); - if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { - this._label._elem.css('width', w+'px'); - } - } - } - }; - - // called with scope of axis - $.jqplot.CategoryAxisRenderer.prototype.pack = function(pos, offsets) { - var ticks = this._ticks; - var max = this.max; - var min = this.min; - var offmax = offsets.max; - var offmin = offsets.min; - var lshow = (this._label == null) ? false : this._label.show; - var i; - - for (var p in pos) { - this._elem.css(p, pos[p]); - } - - this._offsets = offsets; - // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left. - var pixellength = offmax - offmin; - var unitlength = max - min; - - if (!this.reverse) { - // point to unit and unit to point conversions references to Plot DOM element top left corner. - - this.u2p = function(u){ - return (u - min) * pixellength / unitlength + offmin; - }; - - this.p2u = function(p){ - return (p - offmin) * unitlength / pixellength + min; - }; - - if (this.name == 'xaxis' || this.name == 'x2axis'){ - this.series_u2p = function(u){ - return (u - min) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - - else { - this.series_u2p = function(u){ - return (u - max) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + max; - }; - } - } - - else { - // point to unit and unit to point conversions references to Plot DOM element top left corner. - - this.u2p = function(u){ - return offmin + (max - u) * pixellength / unitlength; - }; - - this.p2u = function(p){ - return min + (p - offmin) * unitlength / pixellength; - }; - - if (this.name == 'xaxis' || this.name == 'x2axis'){ - this.series_u2p = function(u){ - return (max - u) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + max; - }; - } - - else { - this.series_u2p = function(u){ - return (min - u) * pixellength / unitlength; - }; - this.series_p2u = function(p){ - return p * unitlength / pixellength + min; - }; - } - - } - - - if (this.show) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - for (i=0; i= this._ticks.length-1) continue; // the last tick does not exist as there is no other group in order to have an empty one. - if (this._ticks[j]._elem && this._ticks[j].label != " ") { - var t = this._ticks[j]._elem; - var p = t.position(); - mid += p.left + t.outerWidth(true)/2; - count++; - } - } - mid = mid/count; - this._groupLabels[i].css({'left':(mid - this._groupLabels[i].outerWidth(true)/2)}); - this._groupLabels[i].css(labeledge[0], labeledge[1]); - } - } - else { - for (i=0; i 0) { - shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; - } - else { - shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; - } - break; - case 'middle': - // if (t.angle > 0) { - // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - // } - // else { - // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - // } - shim = -t.getHeight()/2; - break; - default: - shim = -t.getHeight()/2; - break; - } - } - else { - shim = -t.getHeight()/2; - } - - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('top', val); - t.pack(); - } - } - - var labeledge=['left', 0]; - if (lshow) { - var h = this._label._elem.outerHeight(true); - this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px'); - if (this.name == 'yaxis') { - this._label._elem.css('left', '0px'); - labeledge = ['left', this._label._elem.outerWidth(true)]; - } - else { - this._label._elem.css('right', '0px'); - labeledge = ['right', this._label._elem.outerWidth(true)]; - } - this._label.pack(); - } - - // draw the group labels, position top here, do left after label position. - var step = parseInt(this._ticks.length/this.groups, 10) + 1; // step is one more than before as we don't want to have overlaps in loops - for (i=0; i= this._ticks.length-1) continue; // the last tick does not exist as there is no other group in order to have an empty one. - if (this._ticks[j]._elem && this._ticks[j].label != " ") { - var t = this._ticks[j]._elem; - var p = t.position(); - mid += p.top + t.outerHeight()/2; - count++; - } - } - mid = mid/count; - this._groupLabels[i].css({'top':mid - this._groupLabels[i].outerHeight()/2}); - this._groupLabels[i].css(labeledge[0], labeledge[1]); - - } - } - } - }; - - -})(jQuery); diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.cursor.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.cursor.js deleted file mode 100644 index 0b5571b..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.cursor.js +++ /dev/null @@ -1,1108 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.9 - * Revision: d96a669 - * - * Copyright (c) 2009-2016 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.Cursor - * Plugin class representing the cursor as displayed on the plot. - */ - $.jqplot.Cursor = function(options) { - // Group: Properties - // - // prop: style - // CSS spec for cursor style - this.style = 'crosshair'; - this.previousCursor = 'auto'; - // prop: show - // whether to show the cursor or not. - this.show = $.jqplot.config.enablePlugins; - // prop: showTooltip - // show a cursor position tooltip. Location of the tooltip - // will be controlled by followMouse and tooltipLocation. - this.showTooltip = true; - // prop: followMouse - // Tooltip follows the mouse, it is not at a fixed location. - // Tooltip will show on the grid at the location given by - // tooltipLocation, offset from the grid edge by tooltipOffset. - this.followMouse = false; - // prop: tooltipLocation - // Where to position tooltip. If followMouse is true, this is - // relative to the cursor, otherwise, it is relative to the grid. - // One of 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' - this.tooltipLocation = 'se'; - // prop: tooltipOffset - // Pixel offset of tooltip from the grid boudaries or cursor center. - this.tooltipOffset = 6; - // prop: showTooltipGridPosition - // show the grid pixel coordinates of the mouse. - this.showTooltipGridPosition = false; - // prop: showTooltipUnitPosition - // show the unit (data) coordinates of the mouse. - this.showTooltipUnitPosition = true; - // prop: showTooltipDataPosition - // Used with showVerticalLine to show intersecting data points in the tooltip. - this.showTooltipDataPosition = false; - // prop: tooltipFormatString - // sprintf format string for the tooltip. - // Uses Ash Searle's javascript sprintf implementation - // found here: http://hexmen.com/blog/2007/03/printf-sprintf/ - // See http://perldoc.perl.org/functions/sprintf.html for reference - // Note, if showTooltipDataPosition is true, the default tooltipFormatString - // will be set to the cursorLegendFormatString, not the default given here. - this.tooltipFormatString = '%.4P, %.4P'; - // prop: useAxesFormatters - // Use the x and y axes formatters to format the text in the tooltip. - this.useAxesFormatters = true; - // prop: tooltipAxisGroups - // Show position for the specified axes. - // This is an array like [['xaxis', 'yaxis'], ['xaxis', 'y2axis']] - // Default is to compute automatically for all visible axes. - this.tooltipAxisGroups = []; - // prop: zoom - // Enable plot zooming. - this.zoom = false; - // zoomProxy and zoomTarget properties are not directly set by user. - // They Will be set through call to zoomProxy method. - this.zoomProxy = false; - this.zoomTarget = false; - // prop: looseZoom - // Will expand zoom range to provide more rounded tick values. - // Works only with linear, log and date axes. - this.looseZoom = true; - // prop: clickReset - // Will reset plot zoom if single click on plot without drag. - this.clickReset = false; - // prop: dblClickReset - // Will reset plot zoom if double click on plot without drag. - this.dblClickReset = true; - // prop: showVerticalLine - // draw a vertical line across the plot which follows the cursor. - // When the line is near a data point, a special legend and/or tooltip can - // be updated with the data values. - this.showVerticalLine = false; - // prop: showHorizontalLine - // draw a horizontal line across the plot which follows the cursor. - this.showHorizontalLine = false; - // prop: constrainZoomTo - // 'none', 'x' or 'y' - this.constrainZoomTo = 'none'; - // // prop: autoscaleConstraint - // // when a constrained axis is specified, true will - // // auatoscale the adjacent axis. - // this.autoscaleConstraint = true; - this.shapeRenderer = new $.jqplot.ShapeRenderer(); - this._zoom = {start:[], end:[], started: false, zooming:false, isZoomed:false, axes:{start:{}, end:{}}, gridpos:{}, datapos:{}}; - this._tooltipElem; - this.zoomCanvas; - this.cursorCanvas; - // prop: intersectionThreshold - // pixel distance from data point or marker to consider cursor lines intersecting with point. - // If data point markers are not shown, this should be >= 1 or will often miss point intersections. - this.intersectionThreshold = 2; - // prop: showCursorLegend - // Replace the plot legend with an enhanced legend displaying intersection information. - this.showCursorLegend = false; - // prop: cursorLegendFormatString - // Format string used in the cursor legend. If showTooltipDataPosition is true, - // this will also be the default format string used by tooltipFormatString. - this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString; - // whether the cursor is over the grid or not. - this._oldHandlers = {onselectstart: null, ondrag: null, onmousedown: null}; - // prop: constrainOutsideZoom - // True to limit actual zoom area to edges of grid, even when zooming - // outside of plot area. That is, can't zoom out by mousing outside plot. - this.constrainOutsideZoom = true; - // prop: showTooltipOutsideZoom - // True will keep updating the tooltip when zooming of the grid. - this.showTooltipOutsideZoom = false; - // true if mouse is over grid, false if not. - this.onGrid = false; - $.extend(true, this, options); - }; - - $.jqplot.Cursor.cursorLegendFormatString = '%s x:%s, y:%s'; - - // called with scope of plot - $.jqplot.Cursor.init = function (target, data, opts){ - // add a cursor attribute to the plot - var options = opts || {}; - this.plugins.cursor = new $.jqplot.Cursor(options.cursor); - var c = this.plugins.cursor; - - if (c.show) { - $.jqplot.eventListenerHooks.push(['jqplotMouseEnter', handleMouseEnter]); - $.jqplot.eventListenerHooks.push(['jqplotMouseLeave', handleMouseLeave]); - $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMouseMove]); - - if (c.showCursorLegend) { - opts.legend = opts.legend || {}; - opts.legend.renderer = $.jqplot.CursorLegendRenderer; - opts.legend.formatString = this.plugins.cursor.cursorLegendFormatString; - opts.legend.show = true; - } - - if (c.zoom) { - $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleMouseDown]); - - if (c.clickReset) { - $.jqplot.eventListenerHooks.push(['jqplotClick', handleClick]); - } - - if (c.dblClickReset) { - $.jqplot.eventListenerHooks.push(['jqplotDblClick', handleDblClick]); - } - } - - this.resetZoom = function() { - var axes = this.axes; - if (!c.zoomProxy) { - for (var ax in axes) { - axes[ax].reset(); - axes[ax]._ticks = []; - // fake out tick creation algorithm to make sure original auto - // computed format string is used if _overrideFormatString is true - if (c._zoom.axes[ax] !== undefined) { - axes[ax]._autoFormatString = c._zoom.axes[ax].tickFormatString; - } - } - this.redraw(); - } - else { - var ctx = this.plugins.cursor.zoomCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx = null; - } - this.plugins.cursor._zoom.isZoomed = false; - this.target.trigger('jqplotResetZoom', [this, this.plugins.cursor]); - }; - - - if (c.showTooltipDataPosition) { - c.showTooltipUnitPosition = false; - c.showTooltipGridPosition = false; - if (options.cursor.tooltipFormatString == undefined) { - c.tooltipFormatString = $.jqplot.Cursor.cursorLegendFormatString; - } - } - } - }; - - // called with context of plot - $.jqplot.Cursor.postDraw = function() { - var c = this.plugins.cursor; - - // Memory Leaks patch - if (c.zoomCanvas) { - c.zoomCanvas.resetCanvas(); - c.zoomCanvas = null; - } - - if (c.cursorCanvas) { - c.cursorCanvas.resetCanvas(); - c.cursorCanvas = null; - } - - if (c._tooltipElem) { - c._tooltipElem.emptyForce(); - c._tooltipElem = null; - } - - - if (c.zoom) { - c.zoomCanvas = new $.jqplot.GenericCanvas(); - this.eventCanvas._elem.before(c.zoomCanvas.createElement(this._gridPadding, 'jqplot-zoom-canvas', this._plotDimensions, this)); - c.zoomCanvas.setContext(); - } - - var elem = document.createElement('div'); - c._tooltipElem = $(elem); - elem = null; - c._tooltipElem.addClass('jqplot-cursor-tooltip'); - c._tooltipElem.css({position:'absolute', display:'none'}); - - - if (c.zoomCanvas) { - c.zoomCanvas._elem.before(c._tooltipElem); - } - - else { - this.eventCanvas._elem.before(c._tooltipElem); - } - - if (c.showVerticalLine || c.showHorizontalLine) { - c.cursorCanvas = new $.jqplot.GenericCanvas(); - this.eventCanvas._elem.before(c.cursorCanvas.createElement(this._gridPadding, 'jqplot-cursor-canvas', this._plotDimensions, this)); - c.cursorCanvas.setContext(); - } - - // if we are showing the positions in unit coordinates, and no axes groups - // were specified, create a default set. - if (c.showTooltipUnitPosition){ - if (c.tooltipAxisGroups.length === 0) { - var series = this.series; - var s; - var temp = []; - for (var i=0; i 6 && Math.abs(gridpos.y - c._zoom.start[1]) > 6) || (c.constrainZoomTo == 'x' && Math.abs(gridpos.x - c._zoom.start[0]) > 6) || (c.constrainZoomTo == 'y' && Math.abs(gridpos.y - c._zoom.start[1]) > 6)) { - if (!plot.plugins.cursor.zoomProxy) { - for (var ax in datapos) { - // make a copy of the original axes to revert back. - if (c._zoom.axes[ax] == undefined) { - c._zoom.axes[ax] = {}; - c._zoom.axes[ax].numberTicks = axes[ax].numberTicks; - c._zoom.axes[ax].tickInterval = axes[ax].tickInterval; - // for date axes... - c._zoom.axes[ax].daTickInterval = axes[ax].daTickInterval; - c._zoom.axes[ax].min = axes[ax].min; - c._zoom.axes[ax].max = axes[ax].max; - c._zoom.axes[ax].tickFormatString = (axes[ax].tickOptions != null) ? axes[ax].tickOptions.formatString : ''; - } - - - if ((c.constrainZoomTo == 'none') || (c.constrainZoomTo == 'x' && ax.charAt(0) == 'x') || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'y')) { - dp = datapos[ax]; - if (dp != null) { - if (dp > start[ax]) { - newmin = start[ax]; - newmax = dp; - } - else { - span = start[ax] - dp; - newmin = dp; - newmax = start[ax]; - } - - curax = axes[ax]; - - _numberTicks = null; - - // if aligning this axis, use number of ticks from previous axis. - // Do I need to reset somehow if alignTicks is changed and then graph is replotted?? - if (curax.alignTicks) { - if (curax.name === 'x2axis' && plot.axes.xaxis.show) { - _numberTicks = plot.axes.xaxis.numberTicks; - } - else if (curax.name.charAt(0) === 'y' && curax.name !== 'yaxis' && curax.name !== 'yMidAxis' && plot.axes.yaxis.show) { - _numberTicks = plot.axes.yaxis.numberTicks; - } - } - - if (this.looseZoom && (axes[ax].renderer.constructor === $.jqplot.LinearAxisRenderer || axes[ax].renderer.constructor === $.jqplot.LogAxisRenderer )) { //} || axes[ax].renderer.constructor === $.jqplot.DateAxisRenderer)) { - - ret = $.jqplot.LinearTickGenerator(newmin, newmax, curax._scalefact, _numberTicks); - - // if new minimum is less than "true" minimum of axis display, adjust it - if (axes[ax].tickInset && ret[0] < axes[ax].min + axes[ax].tickInset * axes[ax].tickInterval) { - ret[0] += ret[4]; - ret[2] -= 1; - } - - // if new maximum is greater than "true" max of axis display, adjust it - if (axes[ax].tickInset && ret[1] > axes[ax].max - axes[ax].tickInset * axes[ax].tickInterval) { - ret[1] -= ret[4]; - ret[2] -= 1; - } - - // for log axes, don't fall below current minimum, this will look bad and can't have 0 in range anyway. - if (axes[ax].renderer.constructor === $.jqplot.LogAxisRenderer && ret[0] < axes[ax].min) { - // remove a tick and shift min up - ret[0] += ret[4]; - ret[2] -= 1; - } - - axes[ax].min = ret[0]; - axes[ax].max = ret[1]; - axes[ax]._autoFormatString = ret[3]; - axes[ax].numberTicks = ret[2]; - axes[ax].tickInterval = ret[4]; - // for date axes... - axes[ax].daTickInterval = [ret[4]/1000, 'seconds']; - } - else { - axes[ax].min = newmin; - axes[ax].max = newmax; - axes[ax].tickInterval = null; - axes[ax].numberTicks = null; - // for date axes... - axes[ax].daTickInterval = null; - } - - axes[ax]._ticks = []; - } - } - - // if ((c.constrainZoomTo == 'x' && ax.charAt(0) == 'y' && c.autoscaleConstraint) || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'x' && c.autoscaleConstraint)) { - // dp = datapos[ax]; - // if (dp != null) { - // axes[ax].max == null; - // axes[ax].min = null; - // } - // } - } - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - plot.redraw(); - c._zoom.isZoomed = true; - ctx = null; - } - plot.target.trigger('jqplotZoom', [gridpos, datapos, plot, cursor]); - } - }; - - $.jqplot.preInitHooks.push($.jqplot.Cursor.init); - $.jqplot.postDrawHooks.push($.jqplot.Cursor.postDraw); - - function updateTooltip(gridpos, datapos, plot) { - var c = plot.plugins.cursor; - var s = ''; - var addbr = false; - if (c.showTooltipGridPosition) { - s = gridpos.x+', '+gridpos.y; - addbr = true; - } - if (c.showTooltipUnitPosition) { - var g; - for (var i=0; i0; n--) { - axis = an[n-1]; - if (ax[axis].show) { - dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]); - } - } - - return {offsets:go, gridPos:gridPos, dataPos:dataPos}; - } - - function handleZoomMove(ev) { - var plot = ev.data.plot; - var c = plot.plugins.cursor; - // don't do anything if not on grid. - if (c.show && c.zoom && c._zoom.started && !c.zoomTarget) { - ev.preventDefault(); - var ctx = c.zoomCanvas._ctx; - var positions = getEventPosition(ev); - var gridpos = positions.gridPos; - var datapos = positions.dataPos; - c._zoom.gridpos = gridpos; - c._zoom.datapos = datapos; - c._zoom.zooming = true; - var xpos = gridpos.x; - var ypos = gridpos.y; - var height = ctx.canvas.height; - var width = ctx.canvas.width; - if (c.showTooltip && !c.onGrid && c.showTooltipOutsideZoom) { - updateTooltip(gridpos, datapos, plot); - if (c.followMouse) { - moveTooltip(gridpos, plot); - } - } - if (c.constrainZoomTo == 'x') { - c._zoom.end = [xpos, height]; - } - else if (c.constrainZoomTo == 'y') { - c._zoom.end = [width, ypos]; - } - else { - c._zoom.end = [xpos, ypos]; - } - var sel = window.getSelection; - if (document.selection && document.selection.empty) - { - document.selection.empty(); - } - else if (sel && !sel().isCollapsed) { - sel().collapse(); - } - drawZoomBox.call(c); - ctx = null; - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - var c = plot.plugins.cursor; - if(plot.plugins.mobile){ - $(document).one('vmouseup.jqplot_cursor', {plot:plot}, handleMouseUp); - } else { - $(document).one('mouseup.jqplot_cursor', {plot:plot}, handleMouseUp); - } - var axes = plot.axes; - if (document.onselectstart != undefined) { - c._oldHandlers.onselectstart = document.onselectstart; - document.onselectstart = function () { return false; }; - } - if (document.ondrag != undefined) { - c._oldHandlers.ondrag = document.ondrag; - document.ondrag = function () { return false; }; - } - if (document.onmousedown != undefined) { - c._oldHandlers.onmousedown = document.onmousedown; - document.onmousedown = function () { return false; }; - } - if (c.zoom) { - if (!c.zoomProxy) { - var ctx = c.zoomCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx = null; - } - if (c.constrainZoomTo == 'x') { - c._zoom.start = [gridpos.x, 0]; - } - else if (c.constrainZoomTo == 'y') { - c._zoom.start = [0, gridpos.y]; - } - else { - c._zoom.start = [gridpos.x, gridpos.y]; - } - c._zoom.started = true; - for (var ax in datapos) { - // get zoom starting position. - c._zoom.axes.start[ax] = datapos[ax]; - } - if(plot.plugins.mobile){ - $(document).bind('vmousemove.jqplotCursor', {plot:plot}, handleZoomMove); - } else { - $(document).bind('mousemove.jqplotCursor', {plot:plot}, handleZoomMove); - } - - } - } - - function handleMouseUp(ev) { - var plot = ev.data.plot; - var c = plot.plugins.cursor; - if (c.zoom && c._zoom.zooming && !c.zoomTarget) { - var xpos = c._zoom.gridpos.x; - var ypos = c._zoom.gridpos.y; - var datapos = c._zoom.datapos; - var height = c.zoomCanvas._ctx.canvas.height; - var width = c.zoomCanvas._ctx.canvas.width; - var axes = plot.axes; - - if (c.constrainOutsideZoom && !c.onGrid) { - if (xpos < 0) { xpos = 0; } - else if (xpos > width) { xpos = width; } - if (ypos < 0) { ypos = 0; } - else if (ypos > height) { ypos = height; } - - for (var axis in datapos) { - if (datapos[axis]) { - if (axis.charAt(0) == 'x') { - datapos[axis] = axes[axis].series_p2u(xpos); - } - else { - datapos[axis] = axes[axis].series_p2u(ypos); - } - } - } - } - - if (c.constrainZoomTo == 'x') { - ypos = height; - } - else if (c.constrainZoomTo == 'y') { - xpos = width; - } - c._zoom.end = [xpos, ypos]; - c._zoom.gridpos = {x:xpos, y:ypos}; - - c.doZoom(c._zoom.gridpos, datapos, plot, c); - } - c._zoom.started = false; - c._zoom.zooming = false; - - $(document).unbind('mousemove.jqplotCursor', handleZoomMove); - - if (document.onselectstart != undefined && c._oldHandlers.onselectstart != null){ - document.onselectstart = c._oldHandlers.onselectstart; - c._oldHandlers.onselectstart = null; - } - if (document.ondrag != undefined && c._oldHandlers.ondrag != null){ - document.ondrag = c._oldHandlers.ondrag; - c._oldHandlers.ondrag = null; - } - if (document.onmousedown != undefined && c._oldHandlers.onmousedown != null){ - document.onmousedown = c._oldHandlers.onmousedown; - c._oldHandlers.onmousedown = null; - } - - } - - function drawZoomBox() { - var start = this._zoom.start; - var end = this._zoom.end; - var ctx = this.zoomCanvas._ctx; - var l, t, h, w; - if (end[0] > start[0]) { - l = start[0]; - w = end[0] - start[0]; - } - else { - l = end[0]; - w = start[0] - end[0]; - } - if (end[1] > start[1]) { - t = start[1]; - h = end[1] - start[1]; - } - else { - t = end[1]; - h = start[1] - end[1]; - } - ctx.fillStyle = 'rgba(0,0,0,0.2)'; - ctx.strokeStyle = '#999999'; - ctx.lineWidth = 1.0; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx.fillRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx.clearRect(l, t, w, h); - // IE won't show transparent fill rect, so stroke a rect also. - ctx.strokeRect(l,t,w,h); - ctx = null; - } - - $.jqplot.CursorLegendRenderer = function(options) { - $.jqplot.TableLegendRenderer.call(this, options); - this.formatString = '%s'; - }; - - $.jqplot.CursorLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.CursorLegendRenderer.prototype.constructor = $.jqplot.CursorLegendRenderer; - - // called in context of a Legend - $.jqplot.CursorLegendRenderer.prototype.draw = function() { - if (this._elem) { - this._elem.emptyForce(); - this._elem = null; - } - if (this.show) { - var series = this._series, s; - // make a table. one line label per row. - var elem = document.createElement('table'); - this._elem = $(elem); - elem = null; - this._elem.addClass('jqplot-legend jqplot-cursor-legend'); - this._elem.css('position', 'absolute'); - - var pad = false; - for (var i = 0; i< series.length; i++) { - s = series[i]; - if (s.show && s.showLabel) { - var lt = $.jqplot.sprintf(this.formatString, s.label.toString()); - if (lt) { - var color = s.color; - if (s._stack && !s.fill) { - color = ''; - } - addrow.call(this, lt, color, pad, i); - pad = true; - } - // let plugins add more rows to legend. Used by trend line plugin. - for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) { - var item = $.jqplot.addLegendRowHooks[j].call(this, s); - if (item) { - addrow.call(this, item.label, item.color, pad); - pad = true; - } - } - } - } - series = s = null; - delete series; - delete s; - } - - function addrow(label, color, pad, idx) { - var rs = (pad) ? this.rowSpacing : '0'; - var tr = $('').appendTo(this._elem); - tr.data('seriesIndex', idx); - $(''+ - '
'+ - '
'+ - '
').appendTo(tr); - var td = $(''); - td.appendTo(tr); - td.data('seriesIndex', idx); - if (this.escapeHtml) { - td.text(label); - } - else { - td.html(label); - } - tr = null; - td = null; - } - return this._elem; - }; - -})(jQuery); diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.dateAxisRenderer.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.dateAxisRenderer.js deleted file mode 100644 index ade574e..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.dateAxisRenderer.js +++ /dev/null @@ -1,741 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.9 - * Revision: d96a669 - * - * Copyright (c) 2009-2016 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.DateAxisRenderer - * A plugin for a jqPlot to render an axis as a series of date values. - * This renderer has no options beyond those supplied by the class. - * It supplies its own tick formatter, so the tickOptions.formatter option - * should not be overridden. - * - * Thanks to Ken Synder for his enhanced Date instance methods which are - * included with this code . - * - * To use this renderer, include the plugin in your source - * > - * - * and supply the appropriate options to your plot - * - * > {axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}} - * - * Dates can be passed into the axis in almost any recognizable value and - * will be parsed. They will be rendered on the axis in the format - * specified by tickOptions.formatString. e.g. tickOptions.formatString = '%Y-%m-%d'. - * - * Accecptable format codes - * are: - * - * > Code Result Description - * > == Years == - * > %Y 2008 Four-digit year - * > %y 08 Two-digit year - * > == Months == - * > %m 09 Two-digit month - * > %#m 9 One or two-digit month - * > %B September Full month name - * > %b Sep Abbreviated month name - * > == Days == - * > %d 05 Two-digit day of month - * > %#d 5 One or two-digit day of month - * > %e 5 One or two-digit day of month - * > %A Sunday Full name of the day of the week - * > %a Sun Abbreviated name of the day of the week - * > %w 0 Number of the day of the week (0 = Sunday, 6 = Saturday) - * > %o th The ordinal suffix string following the day of the month - * > == Hours == - * > %H 23 Hours in 24-hour format (two digits) - * > %#H 3 Hours in 24-hour integer format (one or two digits) - * > %I 11 Hours in 12-hour format (two digits) - * > %#I 3 Hours in 12-hour integer format (one or two digits) - * > %p PM AM or PM - * > == Minutes == - * > %M 09 Minutes (two digits) - * > %#M 9 Minutes (one or two digits) - * > == Seconds == - * > %S 02 Seconds (two digits) - * > %#S 2 Seconds (one or two digits) - * > %s 1206567625723 Unix timestamp (Seconds past 1970-01-01 00:00:00) - * > == Milliseconds == - * > %N 008 Milliseconds (three digits) - * > %#N 8 Milliseconds (one to three digits) - * > == Timezone == - * > %O 360 difference in minutes between local time and GMT - * > %Z Mountain Standard Time Name of timezone as reported by browser - * > %G -06:00 Hours and minutes between GMT - * > == Shortcuts == - * > %F 2008-03-26 %Y-%m-%d - * > %T 05:06:30 %H:%M:%S - * > %X 05:06:30 %H:%M:%S - * > %x 03/26/08 %m/%d/%y - * > %D 03/26/08 %m/%d/%y - * > %#c Wed Mar 26 15:31:00 2008 %a %b %e %H:%M:%S %Y - * > %v 3-Sep-2008 %e-%b-%Y - * > %R 15:31 %H:%M - * > %r 3:31:00 PM %I:%M:%S %p - * > == Characters == - * > %n \n Newline - * > %t \t Tab - * > %% % Percent Symbol - */ - $.jqplot.DateAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - this.date = new $.jsDate(); - }; - - var second = 1000; - var minute = 60 * second; - var hour = 60 * minute; - var day = 24 * hour; - var week = 7 * day; - - // these are less definitive - var month = 30.4368499 * day; - var year = 365.242199 * day; - - var daysInMonths = [31,28,31,30,31,30,31,30,31,30,31,30]; - // array of consistent nice intervals. Longer intervals - // will depend on days in month, days in year, etc. - var niceFormatStrings = ['%M:%S.%#N', '%M:%S.%#N', '%M:%S.%#N', '%M:%S', '%M:%S', '%M:%S', '%M:%S', '%H:%M:%S', '%H:%M:%S', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%a %H:%M', '%a %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%v', '%v', '%v', '%v', '%v', '%v', '%v']; - var niceIntervals = [0.1*second, 0.2*second, 0.5*second, second, 2*second, 5*second, 10*second, 15*second, 30*second, minute, 2*minute, 5*minute, 10*minute, 15*minute, 30*minute, hour, 2*hour, 4*hour, 6*hour, 8*hour, 12*hour, day, 2*day, 3*day, 4*day, 5*day, week, 2*week]; - - var niceMonthlyIntervals = []; - - function bestDateInterval(min, max, titarget) { - // iterate through niceIntervals to find one closest to titarget - var badness = Number.MAX_VALUE; - var temp, bestTi, bestfmt; - for (var i=0, l=niceIntervals.length; i < l; i++) { - temp = Math.abs(titarget - niceIntervals[i]); - if (temp < badness) { - badness = temp; - bestTi = niceIntervals[i]; - bestfmt = niceFormatStrings[i]; - } - } - - return [bestTi, bestfmt]; - } - - $.jqplot.DateAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.DateAxisRenderer.prototype.constructor = $.jqplot.DateAxisRenderer; - - $.jqplot.DateTickFormatter = function(format, val) { - if (!format) { - format = '%Y/%m/%d'; - } - return $.jsDate.strftime(val, format); - }; - - $.jqplot.DateAxisRenderer.prototype.init = function(options){ - // prop: tickRenderer - // A class of a rendering engine for creating the ticks labels displayed on the plot, - // See <$.jqplot.AxisTickRenderer>. - // this.tickRenderer = $.jqplot.AxisTickRenderer; - // this.labelRenderer = $.jqplot.AxisLabelRenderer; - this.tickOptions.formatter = $.jqplot.DateTickFormatter; - // prop: tickInset - // Controls the amount to inset the first and last ticks from - // the edges of the grid, in multiples of the tick interval. - // 0 is no inset, 0.5 is one half a tick interval, 1 is a full - // tick interval, etc. - this.tickInset = 0; - // prop: drawBaseline - // True to draw the axis baseline. - this.drawBaseline = true; - // prop: baselineWidth - // width of the baseline in pixels. - this.baselineWidth = null; - // prop: baselineColor - // CSS color spec for the baseline. - this.baselineColor = null; - this.daTickInterval = null; - this._daTickInterval = null; - - $.extend(true, this, options); - - var db = this._dataBounds, - stats, - sum, - s, - d, - pd, - sd, - intv; - - // Go through all the series attached to this axis and find - // the min/max bounds for this axis. - for (var i=0; i db.max) || db.max == null) { - db.max = d[j][0]; - } - if (j>0) { - intv = Math.abs(d[j][0] - d[j-1][0]); - stats.intervals.push(intv); - if (stats.frequencies.hasOwnProperty(intv)) { - stats.frequencies[intv] += 1; - } - else { - stats.frequencies[intv] = 1; - } - } - sum += intv; - - } - else { - d[j][1] = new $.jsDate(d[j][1]).getTime(); - pd[j][1] = new $.jsDate(d[j][1]).getTime(); - sd[j][1] = new $.jsDate(d[j][1]).getTime(); - if ((d[j][1] != null && d[j][1] < db.min) || db.min == null) { - db.min = d[j][1]; - } - if ((d[j][1] != null && d[j][1] > db.max) || db.max == null) { - db.max = d[j][1]; - } - if (j>0) { - intv = Math.abs(d[j][1] - d[j-1][1]); - stats.intervals.push(intv); - if (stats.frequencies.hasOwnProperty(intv)) { - stats.frequencies[intv] += 1; - } - else { - stats.frequencies[intv] = 1; - } - } - } - sum += intv; - } - - if (s.renderer.bands) { - if (s.renderer.bands.hiData.length) { - var bd = s.renderer.bands.hiData; - for (var j=0, l=bd.length; j < l; j++) { - if (this.name === 'xaxis' || this.name === 'x2axis') { - bd[j][0] = new $.jsDate(bd[j][0]).getTime(); - if ((bd[j][0] != null && bd[j][0] > db.max) || db.max == null) { - db.max = bd[j][0]; - } - } - else { - bd[j][1] = new $.jsDate(bd[j][1]).getTime(); - if ((bd[j][1] != null && bd[j][1] > db.max) || db.max == null) { - db.max = bd[j][1]; - } - } - } - } - if (s.renderer.bands.lowData.length) { - var bd = s.renderer.bands.lowData; - for (var j=0, l=bd.length; j < l; j++) { - if (this.name === 'xaxis' || this.name === 'x2axis') { - bd[j][0] = new $.jsDate(bd[j][0]).getTime(); - if ((bd[j][0] != null && bd[j][0] < db.min) || db.min == null) { - db.min = bd[j][0]; - } - } - else { - bd[j][1] = new $.jsDate(bd[j][1]).getTime(); - if ((bd[j][1] != null && bd[j][1] < db.min) || db.min == null) { - db.min = bd[j][1]; - } - } - } - } - } - - var tempf = 0, - tempn=0; - for (var n in stats.frequencies) { - stats.sortedIntervals.push({interval:n, frequency:stats.frequencies[n]}); - } - stats.sortedIntervals.sort(function(a, b){ - return b.frequency - a.frequency; - }); - - stats.min = $.jqplot.arrayMin(stats.intervals); - stats.max = $.jqplot.arrayMax(stats.intervals); - stats.mean = sum/d.length; - this._intervalStats.push(stats); - stats = sum = s = d = pd = sd = null; - } - db = null; - - }; - - // called with scope of an axis - $.jqplot.DateAxisRenderer.prototype.reset = function() { - this.min = this._options.min; - this.max = this._options.max; - this.tickInterval = this._options.tickInterval; - this.numberTicks = this._options.numberTicks; - this._autoFormatString = ''; - if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) { - this.tickOptions.formatString = ''; - } - this.daTickInterval = this._daTickInterval; - // this._ticks = this.__ticks; - }; - - $.jqplot.DateAxisRenderer.prototype.createTicks = function(plot) { - // we're are operating on an axis here - var ticks = this._ticks; - var userTicks = this.ticks; - var name = this.name; - // databounds were set on axis initialization. - var db = this._dataBounds; - var iv = this._intervalStats; - var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height; - var interval; - var min, max; - var pos1, pos2; - var tt, i; - var threshold = 30; - var insetMult = 1; - var daTickInterval = null; - - // if user specified a tick interval, convert to usable. - if (this.tickInterval != null) - { - // if interval is a number or can be converted to one, use it. - // Assume it is in SECONDS!!! - if (Number(this.tickInterval)) { - daTickInterval = [Number(this.tickInterval), 'seconds']; - } - // else, parse out something we can build from. - else if (typeof this.tickInterval == "string") { - var parts = this.tickInterval.split(' '); - if (parts.length == 1) { - daTickInterval = [1, parts[0]]; - } - else if (parts.length == 2) { - daTickInterval = [parts[0], parts[1]]; - } - } - } - - var tickInterval = this.tickInterval; - - // if we already have ticks, use them. - // ticks must be in order of increasing value. - - min = new $.jsDate((this.min != null) ? this.min : db.min).getTime(); - max = new $.jsDate((this.max != null) ? this.max : db.max).getTime(); - - // see if we're zooming. if we are, don't use the min and max we're given, - // but compute some nice ones. They will be reset later. - - var cursor = plot.plugins.cursor; - - if (cursor && cursor._zoom && cursor._zoom.zooming) { - this.min = null; - this.max = null; - } - - var range = max - min; - - if (this.tickOptions == null || !this.tickOptions.formatString) { - this._overrideFormatString = true; - } - - if (userTicks.length) { - // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed - for (i=0; i 6) { - intv = 6; - } - - // figure out the starting month and ending month. - var mstart = new $.jsDate(min).setDate(1).setHours(0,0,0,0); - - // See if max ends exactly on a month - var tempmend = new $.jsDate(max); - var mend = new $.jsDate(max).setDate(1).setHours(0,0,0,0); - - if (tempmend.getTime() !== mend.getTime()) { - mend = mend.add(1, 'month'); - } - - var nmonths = mend.diff(mstart, 'month'); - - nttarget = Math.ceil(nmonths/intv) + 1; - - this.min = mstart.getTime(); - this.max = mstart.clone().add((nttarget - 1) * intv, 'month').getTime(); - this.numberTicks = nttarget; - - for (var i=0; i 200) { - this.numberTicks = parseInt(3+(dim-200)/100, 10); - } - else { - this.numberTicks = 2; - } - } - - insetMult = range / (this.numberTicks-1)/1000; - - if (this.daTickInterval == null) { - this.daTickInterval = [insetMult, 'seconds']; - } - - - for (var i=0; i'); - if (this.seriesToggle) { - this._elem.css('z-index', '3'); - } - - var pad = false, - reverse = false, - nr, nc; - var s = series[0]; - var slen = s.data.length; - var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors); - - if (this.numberRows) { - nr = this.numberRows; - if (!this.numberColumns){ - nc = Math.ceil(slen/nr); - } - else{ - nc = this.numberColumns; - } - } - else if (this.numberColumns) { - nc = this.numberColumns; - nr = Math.ceil(slen/this.numberColumns); - } - else { - nr = slen; - nc = 1; - } - - var i, j, tr, td1, td2, lt, rs, div, div0, div1; - var idx = 0; - // check to see if we need to reverse - for (i=series.length-1; i>=0; i--) { - if (nc == 1 && series[i]._stack || series[i].renderer.constructor == $.jqplot.BezierCurveRenderer){ - reverse = true; - } - } - - for (i=0; i0){ - pad = true; - } - else{ - pad = false; - } - } - else{ - if (i == nr -1){ - pad = false; - } - else{ - pad = true; - } - } - rs = (pad) ? this.rowSpacing : '0'; - - td1 = $(document.createElement('td')); - td1.addClass('jqplot-table-legend jqplot-table-legend-swatch'); - td1.css({textAlign: 'center', paddingTop: rs}); - - div0 = $(document.createElement('div')); - div0.addClass('jqplot-table-legend-swatch-outline'); - if (tt !== undefined) { - div0.attr("title", tt); - } - - div1 = $(document.createElement('div')); - div1.addClass('jqplot-table-legend-swatch'); - div1.css({backgroundColor: color, borderColor: color}); - - td1.append(div0.append(div1)); - - td2 = $(document.createElement('td')); - td2.addClass('jqplot-table-legend jqplot-table-legend-label'); - td2.css('paddingTop', rs); - if (tt !== undefined) { - td2.attr("title", tt); - } - - if (this.escapeHtml){ - td2.text(lt); - } - else { - td2.html(lt); - } - if (reverse) { - if (this.showLabels) {td2.prependTo(tr);} - if (this.showSwatches) {td1.prependTo(tr);} - } - else { - if (this.showSwatches) {td1.appendTo(tr);} - if (this.showLabels) {td2.appendTo(tr);} - } - - if (this.seriesToggle) { - - var speed; - if (typeof(this.seriesToggle) === 'string' || typeof(this.seriesToggle) === 'number') { - if (!$.jqplot.use_excanvas || !this.disableIEFading) { - speed = this.seriesToggle; - } - } - if (this.showSwatches) { - td1.bind('click', {series:s, index:idx, speed:speed, plot: plot, replot:this.seriesToggleReplot}, handleToggle); - td1.addClass('jqplot-seriesToggle'); - } - if (this.showLabels) { - td2.bind('click', {series:s, index:idx, speed:speed, plot: plot, replot:this.seriesToggleReplot}, handleToggle); - td2.addClass('jqplot-seriesToggle'); - } - - // for slices that are already hidden, add the hidden class - if (s.showSlice[idx] === false && s.showLabel) { - td1.addClass('jqplot-series-hidden'); - td2.addClass('jqplot-series-hidden'); - } - } - - pad = true; - } - } - idx++; - } - - td1 = td2 = div0 = div1 = null; - } - } - return this._elem; - }; - - var handleToggle = function (ev) { - var d = ev.data, - replot = d.replot, - plot = d.plot, - idx = d.index; - - d.series.showSlice[idx] = (d.series.showSlice[idx] === false) ? true : false; - - var opts = {}; - - if ($.isPlainObject(replot)) { - $.extend(true, opts, replot); - } - - plot.replot(opts); - }; - - // called with scope of plot. - var postDraw = function () { - if (this.legend.renderer.constructor == $.jqplot.EnhancedPieLegendRenderer && this.legend.seriesToggle) { - var e = this.legend._elem.detach(); - this.eventCanvas._elem.after(e); - } - }; -})(jQuery); diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.highlighter.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.highlighter.js deleted file mode 100644 index df0dd95..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.highlighter.js +++ /dev/null @@ -1,465 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.9 - * Revision: d96a669 - * - * Copyright (c) 2009-2016 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($) { - $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]); - - /** - * Class: $.jqplot.Highlighter - * Plugin which will highlight data points when they are moused over. - * - * To use this plugin, include the js - * file in your source: - * - * > - * - * A tooltip providing information about the data point is enabled by default. - * To disable the tooltip, set "showTooltip" to false. - * - * You can control what data is displayed in the tooltip with various - * options. The "tooltipAxes" option controls whether the x, y or both - * data values are displayed. - * - * Some chart types (e.g. hi-low-close) have more than one y value per - * data point. To display the additional values in the tooltip, set the - * "yvalues" option to the desired number of y values present (3 for a hlc chart). - * - * By default, data values will be formatted with the same formatting - * specifiers as used to format the axis ticks. A custom format code - * can be supplied with the tooltipFormatString option. This will apply - * to all values in the tooltip. - * - * For more complete control, the "formatString" option can be set. This - * Allows conplete control over tooltip formatting. Values are passed to - * the format string in an order determined by the "tooltipAxes" and "yvalues" - * options. So, if you have a hi-low-close chart and you just want to display - * the hi-low-close values in the tooltip, you could set a formatString like: - * - * > highlighter: { - * > tooltipAxes: 'y', - * > yvalues: 3, - * > formatString:' - * > - * > - * >
hi:%s
low:%s
close:%s
' - * > } - * - */ - $.jqplot.Highlighter = function(options) { - // Group: Properties - // - //prop: show - // true to show the highlight. - this.show = $.jqplot.config.enablePlugins; - // prop: markerRenderer - // Renderer used to draw the marker of the highlighted point. - // Renderer will assimilate attributes from the data point being highlighted, - // so no attributes need set on the renderer directly. - // Default is to turn off shadow drawing on the highlighted point. - this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false}); - // prop: showMarker - // true to show the marker - this.showMarker = true; - // prop: lineWidthAdjust - // Pixels to add to the lineWidth of the highlight. - this.lineWidthAdjust = 2.5; - // prop: sizeAdjust - // Pixels to add to the overall size of the highlight. - this.sizeAdjust = 5; - // prop: showTooltip - // Show a tooltip with data point values. - this.showTooltip = true; - // prop: tooltipLocation - // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' - this.tooltipLocation = 'nw'; - // prop: fadeTooltip - // true = fade in/out tooltip, flase = show/hide tooltip - this.fadeTooltip = true; - // prop: tooltipFadeSpeed - // 'slow', 'def', 'fast', or number of milliseconds. - this.tooltipFadeSpeed = "fast"; - // prop: tooltipOffset - // Pixel offset of tooltip from the highlight. - this.tooltipOffset = 2; - // prop: tooltipAxes - // Which axes to display in tooltip, 'x', 'y' or 'both', 'xy' or 'yx' - // 'both' and 'xy' are equivalent, 'yx' reverses order of labels. - this.tooltipAxes = 'both'; - // prop; tooltipSeparator - // String to use to separate x and y axes in tooltip. - this.tooltipSeparator = ', '; - // prop; tooltipContentEditor - // Function used to edit/augment/replace the formatted tooltip contents. - // Called as str = tooltipContentEditor(str, seriesIndex, pointIndex) - // where str is the generated tooltip html and seriesIndex and pointIndex identify - // the data point being highlighted. Should return the html for the tooltip contents. - this.tooltipContentEditor = null; - // prop: useAxesFormatters - // Use the x and y axes formatters to format the text in the tooltip. - this.useAxesFormatters = true; - // prop: tooltipFormatString - // sprintf format string for the tooltip. - // Uses Ash Searle's javascript sprintf implementation - // found here: http://hexmen.com/blog/2007/03/printf-sprintf/ - // See http://perldoc.perl.org/functions/sprintf.html for reference. - // Additional "p" and "P" format specifiers added by Chris Leonello. - this.tooltipFormatString = '%.5P'; - // prop: formatString - // alternative to tooltipFormatString - // will format the whole tooltip text, populating with x, y values as - // indicated by tooltipAxes option. So, you could have a tooltip like: - // 'Date: %s, number of cats: %d' to format the whole tooltip at one go. - // If useAxesFormatters is true, values will be formatted according to - // Axes formatters and you can populate your tooltip string with - // %s placeholders. - this.formatString = null; - // prop: yvalues - // Number of y values to expect in the data point array. - // Typically this is 1. Certain plots, like OHLC, will - // have more y values in each data point array. - this.yvalues = 1; - // prop: bringSeriesToFront - // This option requires jQuery 1.4+ - // True to bring the series of the highlighted point to the front - // of other series. - this.bringSeriesToFront = false; - this._tooltipElem; - this.isHighlighting = false; - this.currentNeighbor = null; - - $.extend(true, this, options); - }; - - var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w']; - var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7}; - var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e']; - - // axis.renderer.tickrenderer.formatter - - // called with scope of plot - $.jqplot.Highlighter.init = function (target, data, opts){ - var options = opts || {}; - // add a highlighter attribute to the plot - this.plugins.highlighter = new $.jqplot.Highlighter(options.highlighter); - }; - - // called within scope of series - $.jqplot.Highlighter.parseOptions = function (defaults, options) { - // Add a showHighlight option to the series - // and set it to true by default. - this.showHighlight = true; - }; - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - $.jqplot.Highlighter.postPlotDraw = function() { - // Memory Leaks patch - 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 $.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 elem = document.createElement('div'); - this.plugins.highlighter._tooltipElem = $(elem); - elem = 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); - }; - - $.jqplot.preInitHooks.push($.jqplot.Highlighter.init); - $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Highlighter.parseOptions); - $.jqplot.postDrawHooks.push($.jqplot.Highlighter.postPlotDraw); - - function draw(plot, neighbor) { - var hl = plot.plugins.highlighter; - var s = plot.series[neighbor.seriesIndex]; - var smr = s.markerRenderer; - var mr = hl.markerRenderer; - mr.style = smr.style; - mr.lineWidth = smr.lineWidth + hl.lineWidthAdjust; - mr.size = smr.size + hl.sizeAdjust; - var rgba = $.jqplot.getColorComponents(smr.color); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]); - mr.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')'; - mr.init(); - mr.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], hl.highlightCanvas._ctx); - } - - function showTooltip(plot, series, neighbor) { - // neighbor looks like: {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]} - // gridData should be x,y pixel coords on the grid. - // add the plot._gridPadding to that to get x,y in the target. - var hl = plot.plugins.highlighter; - var elem = hl._tooltipElem; - var serieshl = series.highlighter || {}; - - var opts = $.extend(true, {}, hl, serieshl); - - if (opts.useAxesFormatters) { - var xf = series._xaxis._ticks[0].formatter; - var yf = series._yaxis._ticks[0].formatter; - var xfstr = series._xaxis._ticks[0].formatString; - var yfstr = series._yaxis._ticks[0].formatString; - var str; - var xstr = xf(xfstr, neighbor.data[0]); - var ystrs = []; - for (var i=1; i - * - * Properties described here are passed into the $.jqplot function - * as options on the series renderer. For example: - * - * > plot2 = $.jqplot('chart2', [s1, s2], { - * > seriesDefaults: { - * > renderer:$.jqplot.PieRenderer, - * > rendererOptions:{ - * > sliceMargin: 2, - * > startAngle: -90 - * > } - * > } - * > }); - * - * A pie plot will trigger events on the plot target - * according to user interaction. All events return the event object, - * the series index, the point (slice) index, and the point data for - * the appropriate slice. - * - * 'jqplotDataMouseOver' - triggered when user mouseing over a slice. - * 'jqplotDataHighlight' - triggered the first time user mouses over a slice, - * if highlighting is enabled. - * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of - * a highlighted slice. - * 'jqplotLegendHighlight' - triggered the first time user mouses over a legend, - * if highlighting is enabled. - * 'jqplotLegendUnhighlight' - triggered when a user moves the mouse out of - * a highlighted legend. - * 'jqplotDataClick' - triggered when the user clicks on a slice. - * 'jqplotDataRightClick' - tiggered when the user right clicks on a slice if - * the "captureRightClick" option is set to true on the plot. - */ - $.jqplot.PieRenderer = function(){ - $.jqplot.LineRenderer.call(this); - }; - - $.jqplot.PieRenderer.prototype = new $.jqplot.LineRenderer(); - $.jqplot.PieRenderer.prototype.constructor = $.jqplot.PieRenderer; - - // called with scope of a series - $.jqplot.PieRenderer.prototype.init = function(options, plot) { - // Group: Properties - // - // prop: diameter - // Outer diameter of the pie, auto computed by default - this.diameter = null; - // prop: padding - // padding between the pie and plot edges, legend, etc. - this.padding = 20; - // prop: sliceMargin - // angular spacing between pie slices in degrees. - this.sliceMargin = 0; - // prop: fill - // true or false, whether to fil the slices. - this.fill = true; - // prop: shadowOffset - // offset of the shadow from the slice and offset of - // each succesive stroke of the shadow from the last. - this.shadowOffset = 2; - // prop: shadowAlpha - // transparency of the shadow (0 = transparent, 1 = opaque) - this.shadowAlpha = 0.07; - // prop: shadowDepth - // number of strokes to apply to the shadow, - // each stroke offset shadowOffset from the last. - this.shadowDepth = 5; - // prop: highlightMouseOver - // True to highlight slice when moused over. - // This must be false to enable highlightMouseDown to highlight when clicking on a slice. - this.highlightMouseOver = true; - // prop: highlightMouseDown - // True to highlight when a mouse button is pressed over a slice. - // This will be disabled if highlightMouseOver is true. - this.highlightMouseDown = false; - // prop: highlightColors - // an array of colors to use when highlighting a slice. - this.highlightColors = []; - // prop: dataLabels - // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices. - // Defaults to percentage of each pie slice. - this.dataLabels = 'percent'; - // prop: showDataLabels - // true to show data labels on slices. - this.showDataLabels = false; - // prop: dataLabelFormatString - // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage. - this.dataLabelFormatString = null; - // prop: dataLabelThreshold - // Threshhold in percentage (0-100) of pie area, below which no label will be displayed. - // This applies to all label types, not just to percentage labels. - this.dataLabelThreshold = 2.5; - // prop: dataLabelPositionFactor - // A Multiplier (0-1) of the pie radius which controls position of label on slice. - // Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie. - this.dataLabelPositionFactor = 0.52; - // prop: dataLabelNudge - // Number of pixels to slide the label away from (+) or toward (-) the center of the pie. - this.dataLabelNudge = 2; - // prop: dataLabelCenterOn - // True to center the data label at its position. - // False to set the inside facing edge of the label at its position. - this.dataLabelCenterOn = true; - // prop: startAngle - // Angle to start drawing pie in degrees. - // According to orientation of canvas coordinate system: - // 0 = on the positive x axis - // -90 = on the positive y axis. - // 90 = on the negaive y axis. - // 180 or - 180 = on the negative x axis. - this.startAngle = 0; - this.tickRenderer = $.jqplot.PieTickRenderer; - // prop: showSlice - // Array for whether the pie chart slice for a data element should be displayed. - // Containsg true or false for each data element. If not specified, defaults to true. - this.showSlice = []; - // Used as check for conditions where pie shouldn't be drawn. - this._drawData = true; - this._type = 'pie'; - - // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver - if (options.highlightMouseDown && options.highlightMouseOver == null) { - options.highlightMouseOver = false; - } - - $.extend(true, this, options); - - if (this.sliceMargin < 0) { - this.sliceMargin = 0; - } - - this._diameter = null; - this._radius = null; - // array of [start,end] angles arrays, one for each slice. In radians. - this._sliceAngles = []; - // index of the currenty highlighted point, if any - this._highlightedPoint = null; - - // set highlight colors if none provided - if (this.highlightColors.length == 0) { - for (var i=0; i 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]); - newrgb[j] = parseInt(newrgb[j], 10); - } - this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')'); - } - } - - this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors); - - plot.postParseOptionsHooks.addOnce(postParseOptions); - plot.postInitHooks.addOnce(postInit); - plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); - plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); - plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); - plot.eventListenerHooks.addOnce('jqplotClick', handleClick); - plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); - plot.postDrawHooks.addOnce(postPlotDraw); - }; - - $.jqplot.PieRenderer.prototype.setGridData = function(plot) { - // set gridData property. This will hold angle in radians of each data point. - var stack = []; - var td = []; - var sa = this.startAngle/180*Math.PI; - var tot = 0; - // don't know if we have any valid data yet, so set plot to not draw. - this._drawData = false; - for (var i=0; i0) { - stack[i] += stack[i-1]; - } - tot += this.data[i][1]; - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i0) { - stack[i] += stack[i-1]; - } - tot += ndt[i][1]; - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i 0 && absang > 0.01 && absang < 6.282) { - rprime = parseFloat(sm) / 2.0 / calcRadiusAdjustment(ang); - } - - return rprime; - } - - $.jqplot.PieRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) { - if (this._drawData) { - var r = this._radius; - var fill = this.fill; - var lineWidth = this.lineWidth; - var sm = this.sliceMargin; - if (this.fill == false) { - sm += this.lineWidth; - } - ctx.save(); - ctx.translate(this._center[0], this._center[1]); - - var rprime = calcRPrime(ang1, ang2, this.sliceMargin, this.fill, this.lineWidth); - - var transx = rprime * Math.cos((ang1 + ang2) / 2.0); - var transy = rprime * Math.sin((ang1 + ang2) / 2.0); - - if ((ang2 - ang1) <= Math.PI) { - r -= rprime; - } - else { - r += rprime; - } - - ctx.translate(transx, transy); - - if (isShadow) { - for (var i=0, l=this.shadowDepth; i 6.282 + this.startAngle) { - ang2 = 6.282 + this.startAngle; - if (ang1 > ang2) { - ang1 = 6.281 + this.startAngle; - } - } - // Fix for IE, where it can't seem to handle 0 degree angles. Also avoids - // ugly line on unfilled pies. - if (ang1 >= ang2) { - return; - } - - ctx.beginPath(); - ctx.fillStyle = color; - ctx.strokeStyle = color; - ctx.lineWidth = lineWidth; - ctx.arc(0, 0, rad, ang1, ang2, false); - ctx.lineTo(0,0); - ctx.closePath(); - - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - } - }; - - // called with scope of series - $.jqplot.PieRenderer.prototype.draw = function (ctx, gd, options, plot) { - var i; - var opts = (options != undefined) ? options : {}; - // offset and direction of offset due to legend placement - var offx = 0; - var offy = 0; - var trans = 1; - var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors); - var sliceColor; - - if (options.legendInfo && options.legendInfo.placement == 'insideGrid') { - var li = options.legendInfo; - switch (li.location) { - case 'nw': - offx = li.width + li.xoffset; - break; - case 'w': - offx = li.width + li.xoffset; - break; - case 'sw': - offx = li.width + li.xoffset; - break; - case 'ne': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'e': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'se': - offx = li.width + li.xoffset; - trans = -1; - break; - case 'n': - offy = li.height + li.yoffset; - break; - case 's': - offy = li.height + li.yoffset; - trans = -1; - break; - default: - break; - } - } - - var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; - var fill = (opts.fill != undefined) ? opts.fill : this.fill; - - //see http://stackoverflow.com/questions/20221461/hidpi-retina-plot-drawing - var cw = parseInt(ctx.canvas.style.width); - var ch = parseInt(ctx.canvas.style.height); - // - - var w = cw - offx - 2 * this.padding; - var h = ch - offy - 2 * this.padding; - var mindim = Math.min(w,h); - var d = mindim; - - // Fixes issue #272. Thanks hugwijst! - // reset slice angles array. - this._sliceAngles = []; - - var sm = this.sliceMargin; - if (this.fill == false) { - sm += this.lineWidth; - } - - var rprime; - var maxrprime = 0; - - var ang, ang1, ang2, shadowColor; - var sa = this.startAngle / 180 * Math.PI; - - // have to pre-draw shadows, so loop throgh here and calculate some values also. - for (var i=0, l=gd.length; i Math.PI) { - maxrprime = Math.max(rprime, maxrprime); - } - } - - if (this.diameter != null && this.diameter > 0) { - this._diameter = this.diameter - 2*maxrprime; - } - else { - this._diameter = d - 2*maxrprime; - } - - // Need to check for undersized pie. This can happen if - // plot area too small and legend is too big. - if (this._diameter < 6) { - $.jqplot.log('Diameter of pie too small, not rendering.'); - return; - } - - var r = this._radius = this._diameter/2; - - this._center = [(cw - trans * offx)/2 + trans * offx + maxrprime * Math.cos(sa), (ch - trans*offy)/2 + trans * offy + maxrprime * Math.sin(sa)]; - - if (this.shadow) { - for (var i=0, l=gd.length; i= this.dataLabelThreshold) { - var fstr, avgang = (this._sliceAngles[i][0] + this._sliceAngles[i][1])/2, label; - - if (this.dataLabels == 'label') { - fstr = this.dataLabelFormatString || '%s'; - label = $.jqplot.sprintf(fstr, gd[i][0]); - } - else if (this.dataLabels == 'value') { - fstr = this.dataLabelFormatString || '%d'; - label = $.jqplot.sprintf(fstr, this.data[i][1]); - } - else if (this.dataLabels == 'percent') { - fstr = this.dataLabelFormatString || '%d%%'; - label = $.jqplot.sprintf(fstr, gd[i][2]*100); - } - else if (this.dataLabels.constructor == Array) { - fstr = this.dataLabelFormatString || '%s'; - label = $.jqplot.sprintf(fstr, this.dataLabels[i]); - } - - var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge; - - var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left; - var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top; - - var labelelem = $('
' + label + '
').insertBefore(plot.eventCanvas._elem); - if (this.dataLabelCenterOn) { - x -= labelelem.width()/2; - y -= labelelem.height()/2; - } - else { - x -= labelelem.width() * Math.sin(avgang/2); - y -= labelelem.height()/2; - } - x = Math.round(x); - y = Math.round(y); - labelelem.css({left: x, top: y}); - } - } - } - }; - - $.jqplot.PieAxisRenderer = function() { - $.jqplot.LinearAxisRenderer.call(this); - }; - - $.jqplot.PieAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); - $.jqplot.PieAxisRenderer.prototype.constructor = $.jqplot.PieAxisRenderer; - - - // There are no traditional axes on a pie chart. We just need to provide - // dummy objects with properties so the plot will render. - // called with scope of axis object. - $.jqplot.PieAxisRenderer.prototype.init = function(options){ - // - this.tickRenderer = $.jqplot.PieTickRenderer; - $.extend(true, this, options); - // I don't think I'm going to need _dataBounds here. - // have to go Axis scaling in a way to fit chart onto plot area - // and provide u2p and p2u functionality for mouse cursor, etc. - // for convienence set _dataBounds to 0 and 100 and - // set min/max to 0 and 100. - this._dataBounds = {min:0, max:100}; - this.min = 0; - this.max = 100; - this.showTicks = false; - this.ticks = []; - this.showMark = false; - this.show = false; - }; - - - - - $.jqplot.PieLegendRenderer = function(){ - $.jqplot.TableLegendRenderer.call(this); - }; - - $.jqplot.PieLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.PieLegendRenderer.prototype.constructor = $.jqplot.PieLegendRenderer; - - /** - * Class: $.jqplot.PieLegendRenderer - * Legend Renderer specific to pie plots. Set by default - * when user creates a pie plot. - */ - $.jqplot.PieLegendRenderer.prototype.init = function(options) { - // Group: Properties - // - // prop: numberRows - // Maximum number of rows in the legend. 0 or null for unlimited. - this.numberRows = null; - // prop: numberColumns - // Maximum number of columns in the legend. 0 or null for unlimited. - this.numberColumns = null; - // prop: width - // Fixed with of legend. 0 or null for auto size - this.width = null; - $.extend(true, this, options); - }; - - // called with context of legend - $.jqplot.PieLegendRenderer.prototype.draw = function() { - var legend = this; - if (this.show) { - var series = this._series; - - - this._elem = $(document.createElement('table')); - this._elem.addClass('jqplot-table-legend'); - - var ss = {position:'absolute'}; - if (this.background) { - ss['background'] = this.background; - } - if (this.border) { - ss['border'] = this.border; - } - if (this.fontSize) { - ss['fontSize'] = this.fontSize; - } - if (this.fontFamily) { - ss['fontFamily'] = this.fontFamily; - } - if (this.textColor) { - ss['textColor'] = this.textColor; - } - if (this.marginTop != null) { - ss['marginTop'] = this.marginTop; - } - if (this.marginBottom != null) { - ss['marginBottom'] = this.marginBottom; - } - if (this.marginLeft != null) { - ss['marginLeft'] = this.marginLeft; - } - if (this.marginRight != null) { - ss['marginRight'] = this.marginRight; - } - - this._elem.css(ss); - - // Pie charts legends don't go by number of series, but by number of data points - // in the series. Refactor things here for that. - - var pad = false, - reverse = false, - nr, - nc; - var s = series[0]; - var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors); - - if (s.show) { - var pd = s.data; - if (this.numberRows) { - nr = this.numberRows; - if (!this.numberColumns){ - nc = Math.ceil(pd.length/nr); - } - else{ - nc = this.numberColumns; - } - } - else if (this.numberColumns) { - nc = this.numberColumns; - nr = Math.ceil(pd.length/this.numberColumns); - } - else { - nr = pd.length; - nc = 1; - } - - var i, j; - var tr, td1, td2; - var lt, tt, rs, color; - var idx = 0; - var div0, div1; - - for (i=0; i0){ - pad = true; - } - else{ - pad = false; - } - } - else{ - if (i == nr -1){ - pad = false; - } - else{ - pad = true; - } - } - rs = (pad) ? this.rowSpacing : '0'; - - - - td1 = $(document.createElement('td')); - td1.addClass('jqplot-table-legend jqplot-table-legend-swatch'); - td1.css({textAlign: 'center', paddingTop: rs}); - - div0 = $(document.createElement('div')); - div0.addClass('jqplot-table-legend-swatch-outline'); - if (tt !== '') { - div0.attr("title", tt); - } - div1 = $(document.createElement('div')); - div1.addClass('jqplot-table-legend-swatch'); - div1.css({backgroundColor: color, borderColor: color}); - td1.append(div0.append(div1)); - - td2 = $(document.createElement('td')); - td2.addClass('jqplot-table-legend jqplot-table-legend-label'); - td2.css('paddingTop', rs); - - if (this.escapeHtml){ - td2.text(lt); - } - else { - td2.html('' + lt + ""); - } - if (reverse) { - td2.prependTo(tr); - td1.prependTo(tr); - } - else { - td1.appendTo(tr); - td2.appendTo(tr); - } - pad = true; - } - idx++; - } - } - } - } - return this._elem; - }; - - $.jqplot.PieRenderer.prototype.handleMove = function(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - plot.target.trigger('jqplotDataMouseOver', ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - plot.target.trigger('jqplotDataHighlight', ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - }; - - - // this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]); - - // setup default renderers for axes and legend so user doesn't have to - // called with scope of plot - function preInit(target, data, options) { - options = options || {}; - options.axesDefaults = options.axesDefaults || {}; - options.legend = options.legend || {}; - options.seriesDefaults = options.seriesDefaults || {}; - // only set these if there is a pie series - var setopts = false; - if (options.seriesDefaults.renderer == $.jqplot.PieRenderer) { - setopts = true; - } - else if (options.series) { - for (var i=0; i < options.series.length; i++) { - if (options.series[i].renderer == $.jqplot.PieRenderer) { - setopts = true; - } - } - } - - if (setopts) { - options.axesDefaults.renderer = $.jqplot.PieAxisRenderer; - options.legend.renderer = options.legend.renderer || $.jqplot.PieLegendRenderer; - options.legend.preDraw = true; - options.seriesDefaults.pointLabels = {show: false}; - } - } - - function postInit(target, data, options) { - for (var i=0; i - * - * By default, the last value in the data ponit array in the data series is used - * for the label. For most series renderers, extra data can be added to the - * data point arrays and the last value will be used as the label. - * - * For instance, - * this series: - * - * > [[1,4], [3,5], [7,2]] - * - * Would, by default, use the y values in the labels. - * Extra data can be added to the series like so: - * - * > [[1,4,'mid'], [3 5,'hi'], [7,2,'low']] - * - * And now the point labels would be 'mid', 'low', and 'hi'. - * - * Options to the point labels and a custom labels array can be passed into the - * "pointLabels" option on the series option like so: - * - * > series:[{pointLabels:{ - * > labels:['mid', 'hi', 'low'], - * > location:'se', - * > ypadding: 12 - * > } - * > }] - * - * A custom labels array in the options takes precendence over any labels - * in the series data. If you have a custom labels array in the options, - * but still want to use values from the series array as labels, set the - * "labelsFromSeries" option to true. - * - * By default, html entities (<, >, etc.) are escaped in point labels. - * If you want to include actual html markup in the labels, - * set the "escapeHTML" option to false. - * - */ - $.jqplot.PointLabels = function(options) { - // Group: Properties - // - // prop: show - // show the labels or not. - this.show = $.jqplot.config.enablePlugins; - // prop: location - // compass location where to position the label around the point. - // 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' - this.location = 'n'; - // prop: labelsFromSeries - // true to use labels within data point arrays. - this.labelsFromSeries = false; - // prop: seriesLabelIndex - // array index for location of labels within data point arrays. - // if null, will use the last element of the data point array. - this.seriesLabelIndex = null; - // prop: labels - // array of arrays of labels, one array for each series. - this.labels = []; - // actual labels that will get displayed. - // needed to preserve user specified labels in labels array. - this._labels = []; - // prop: stackedValue - // true to display value as stacked in a stacked plot. - // no effect if labels is specified. - this.stackedValue = false; - // prop: ypadding - // vertical padding in pixels between point and label - this.ypadding = 6; - // prop: xpadding - // horizontal padding in pixels between point and label - this.xpadding = 6; - // prop: escapeHTML - // true to escape html entities in the labels. - // If you want to include markup in the labels, set to false. - this.escapeHTML = true; - // prop: edgeTolerance - // Number of pixels that the label must be away from an axis - // boundary in order to be drawn. Negative values will allow overlap - // with the grid boundaries. - this.edgeTolerance = -5; - // prop: formatter - // A class of a formatter for the tick text. sprintf by default. - this.formatter = $.jqplot.DefaultTickFormatter; - // prop: formatString - // string passed to the formatter. - this.formatString = ''; - // prop: hideZeros - // true to not show a label for a value which is 0. - this.hideZeros = false; - this._elems = []; - - $.extend(true, this, options); - }; - - var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w']; - var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7}; - var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e']; - - // called with scope of a series - $.jqplot.PointLabels.init = function (target, data, seriesDefaults, opts, plot){ - var options = $.extend(true, {}, seriesDefaults, opts); - options.pointLabels = options.pointLabels || {}; - if (this.renderer.constructor === $.jqplot.BarRenderer && this.barDirection === 'horizontal' && !options.pointLabels.location) { - options.pointLabels.location = 'e'; - } - // add a pointLabels attribute to the series plugins - this.plugins.pointLabels = new $.jqplot.PointLabels(options.pointLabels); - this.plugins.pointLabels.setLabels.call(this); - }; - - // called with scope of series - $.jqplot.PointLabels.prototype.setLabels = function() { - var p = this.plugins.pointLabels; - var labelIdx; - if (p.seriesLabelIndex != null) { - labelIdx = p.seriesLabelIndex; - } - else if (this.renderer.constructor === $.jqplot.BarRenderer && this.barDirection === 'horizontal') { - labelIdx = (this._plotData[0].length < 3) ? 0 : this._plotData[0].length -1; - } - else { - labelIdx = (this._plotData.length === 0) ? 0 : this._plotData[0].length -1; - } - p._labels = []; - if (p.labels.length === 0 || p.labelsFromSeries) { - if (p.stackedValue) { - if (this._plotData.length && this._plotData[0].length){ - // var idx = p.seriesLabelIndex || this._plotData[0].length -1; - for (var i=0; i scr || elb + et > scb) { - elem.remove(); - } - - elem = null; - helem = null; - } - - // finally, animate them if the series is animated - // if (this.renderer.animation && this.renderer.animation._supported && this.renderer.animation.show && plot._drawCount < 2) { - // var sel = '.jqplot-point-label.jqplot-series-'+this.index; - // $(sel).hide(); - // $(sel).fadeIn(1000); - // } - - } - }; - - $.jqplot.postSeriesInitHooks.push($.jqplot.PointLabels.init); - $.jqplot.postDrawSeriesHooks.push($.jqplot.PointLabels.draw); -})(jQuery); -- cgit