diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-07-27 10:05:23 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-07-27 10:05:23 +0200 |
| commit | 5bf66662a9bdd62c5bccab15e607cd95cfb8fcab (patch) | |
| tree | 39a1a4629749056191c05dfd899f931701b7acf3 /srcs/phpmyadmin/js/vendor/jqplot/plugins | |
| parent | 5afd237bbd22028b85532b8c0b3fcead49a00764 (diff) | |
| download | ft_server-master.tar.gz ft_server-master.tar.bz2 ft_server-master.zip | |
Removed wordpress and phpmyadmin, my server doesn't handle it well and it brings shame on my famillyHEADmaster
Diffstat (limited to 'srcs/phpmyadmin/js/vendor/jqplot/plugins')
10 files changed, 0 insertions, 6050 deletions
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; i<this.data.length; i++) { - sum += this.data[i][pos]; - if (i>0) { - 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<l; i+=skip) { - this.data.splice(i+count, 0, [null, null]); - this._plotData.splice(i+count, 0, [null, null]); - this._stackData.splice(i+count, 0, [null, null]); - count++; - } - for (i=0; i<this.data.length; i++) { - if (this._primaryAxis == '_xaxis') { - this.data[i][0] = i+1; - this._plotData[i][0] = i+1; - this._stackData[i][0] = i+1; - } - else { - this.data[i][1] = i+1; - this._plotData[i][1] = i+1; - this._stackData[i][1] = i+1; - } - } - } - } - - $.jqplot.preSeriesInitHooks.push(barPreInit); - - // needs to be called with scope of series, not renderer. - $.jqplot.BarRenderer.prototype.calcSeriesNumbers = function() { - var nvals = 0; - var nseries = 0; - var paxis = this[this._primaryAxis]; - var s, series, pos; - // loop through all series on this axis - for (var i=0; i < paxis._series.length; i++) { - series = paxis._series[i]; - if (series === this) { - pos = i; - } - // is the series rendered as a bar? - if (series.renderer.constructor == $.jqplot.BarRenderer) { - // gridData may not be computed yet, use data length insted - nvals += series.data.length; - nseries += 1; - } - } - // return total number of values for all bar series, total number of bar series, and position of this series - return [nvals, nseries, pos]; - }; - - $.jqplot.BarRenderer.prototype.setBarWidth = function() { - // need to know how many data values we have on the approprate axis and figure it out. - var i; - var nvals = 0; - var nseries = 0; - var paxis = this[this._primaryAxis]; - var s, series, pos; - var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this); - nvals = temp[0]; - nseries = temp[1]; - var nticks = paxis.numberTicks; - var nbins = (nticks-1)/2; - // so, now we have total number of axis values. - if (paxis.name == 'xaxis' || paxis.name == 'x2axis') { - if (this._stack) { - this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals * nseries - this.barMargin; - } - else { - this.barWidth = ((paxis._offsets.max - paxis._offsets.min)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries; - // this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding - this.barMargin/nseries; - } - } - else { - if (this._stack) { - this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals * nseries - this.barMargin; - } - else { - this.barWidth = ((paxis._offsets.min - paxis._offsets.max)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries; - // this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding - this.barMargin/nseries; - } - } - return [nvals, nseries]; - }; - - function computeHighlightColors (colors) { - var ret = []; - for (var i=0; i<colors.length; i++){ - var rgba = $.jqplot.getColorComponents(colors[i]); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - newrgb[j] = (sum > 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<gridData.length; i++) { - if (!this._stack && this.data[i][1] == null) { - continue; - } - points = []; - base = gridData[i][0] + this._barNudge; - - // stacked - if (this._stack && this._prevGridData.length) { - ystart = getStart(this.index, i, this._plotData[i][1], plot, 'y'); - } - - // not stacked - else { - if (this.fillToZero) { - ystart = this._yaxis.series_u2p(0); - } - else if (this.waterfall && 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<gridData.length; i++) { - if (!this._stack && this.data[i][0] == null) { - continue; - } - points = []; - base = gridData[i][1] - this._barNudge; - xstart; - - if (this._stack && this._prevGridData.length) { - xstart = getStart(this.index, i, this._plotData[i][0], plot, 'x'); - } - // not stacked - else { - if (this.fillToZero) { - xstart = this._xaxis.series_u2p(0); - } - else if (this.waterfall && 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<this._dataColors.length; i++) { - this.highlightColors.push(temp); - } - } - - }; - - - // for stacked plots, shadows will be pre drawn by drawShadow. - $.jqplot.BarRenderer.prototype.drawShadow = function(ctx, gridData, options, plot) { - var i; - var opts = (options != undefined) ? 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, points, pointy, nvals, nseries, pos; - - if (this._stack && this.shadow) { - if (this.barWidth == null) { - this.renderer.setBarWidth.call(this); - } - - var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this); - nvals = temp[0]; - nseries = temp[1]; - pos = temp[2]; - - if (this._stack) { - this._barNudge = 0; - } - else { - this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding); - } - if (showLine) { - - if (this.barDirection == 'vertical') { - for (var i=0; i<gridData.length; i++) { - if (this.data[i][1] == null) { - continue; - } - points = []; - var base = gridData[i][0] + this._barNudge; - var ystart; - - if (this._stack && this._prevGridData.length) { - ystart = getStart(this.index, i, this._plotData[i][1], plot, 'y'); - } - else { - if (this.fillToZero) { - ystart = this._yaxis.series_u2p(0); - } - else { - ystart = ctx.canvas.height; - } - } - - 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]); - this.renderer.shadowRenderer.draw(ctx, points, opts); - } - } - - else if (this.barDirection == 'horizontal'){ - for (var i=0; i<gridData.length; i++) { - if (this.data[i][0] == null) { - continue; - } - points = []; - var base = gridData[i][1] - this._barNudge; - var xstart; - - if (this._stack && this._prevGridData.length) { - xstart = getStart(this.index, i, this._plotData[i][0], plot, 'x'); - } - else { - if (this.fillToZero) { - xstart = this._xaxis.series_u2p(0); - } - else { - xstart = 0; - } - } - - 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]); - points.push([xstart, base-this.barWidth/2]); - this.renderer.shadowRenderer.draw(ctx, points, opts); - } - } - } - - } - }; - - function postInit(target, data, options) { - for (var i=0; i<this.series.length; i++) { - if (this.series[i].renderer.constructor == $.jqplot.BarRenderer) { - // don't allow mouseover and mousedown at same time. - if (this.series[i].highlightMouseOver) { - this.series[i].highlightMouseDown = false; - } - } - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.barRenderer && this.plugins.barRenderer.highlightCanvas) { - - this.plugins.barRenderer.highlightCanvas.resetCanvas(); - this.plugins.barRenderer.highlightCanvas = null; - } - - this.plugins.barRenderer = {highlightedSeriesIndex:null}; - this.plugins.barRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - - this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-barRenderer-highlight-canvas', this._plotDimensions, this)); - this.plugins.barRenderer.highlightCanvas.setContext(); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); - } - - function highlight (plot, sidx, pidx, points) { - var s = plot.series[sidx]; - var canvas = plot.plugins.barRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.barRenderer.highlightedSeriesIndex = sidx; - var opts = {fillStyle: s.highlightColors[pidx]}; - s.renderer.shapeRenderer.draw(canvas._ctx, points, opts); - canvas = null; - } - - function unhighlight (plot) { - var canvas = plot.plugins.barRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.barRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - canvas = null; - } - - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].show && plot.series[ins[0]].highlightMouseOver && - !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { - var idx = plot.plugins.barRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - } - - function handleClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt = jQuery.Event('jqplotDataClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - function handleRightClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var idx = plot.plugins.barRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - var evt = jQuery.Event('jqplotDataRightClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - -})(jQuery); diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js deleted file mode 100644 index bac2fc2..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js +++ /dev/null @@ -1,203 +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.CanvasAxisLabelRenderer - * Renderer to draw axis labels with a canvas element to support advanced - * featrues such as rotated text. This renderer uses a separate rendering engine - * to draw the text on the canvas. Two modes of rendering the text are available. - * If the browser has native font support for canvas fonts (currently Mozila 3.5 - * and Safari 4), you can enable text rendering with the canvas fillText method. - * You do so by setting the "enableFontSupport" option to true. - * - * Browsers lacking native font support will have the text drawn on the canvas - * using the Hershey font metrics. Even if the "enableFontSupport" option is true - * non-supporting browsers will still render with the Hershey font. - * - */ - $.jqplot.CanvasAxisLabelRenderer = function(options) { - // Group: Properties - - // prop: angle - // angle of text, measured clockwise from x axis. - this.angle = 0; - // name of the axis associated with this tick - this.axis; - // prop: show - // whether or not to show the tick (mark and label). - this.show = true; - // prop: showLabel - // whether or not to show the label. - this.showLabel = true; - // prop: label - // label for the axis. - this.label = ''; - // prop: fontFamily - // CSS spec for the font-family css attribute. - // Applies only to browsers supporting native font rendering in the - // canvas tag. Currently Mozilla 3.5 and Safari 4. - this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'; - // prop: fontSize - // CSS spec for font size. - this.fontSize = '11pt'; - // prop: fontWeight - // CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100 - 900 - this.fontWeight = 'normal'; - // prop: fontStretch - // Multiplier to condense or expand font width. - // Applies only to browsers which don't support canvas native font rendering. - this.fontStretch = 1.0; - // prop: textColor - // css spec for the color attribute. - this.textColor = '#666666'; - // prop: enableFontSupport - // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. - // If true, label will be drawn with canvas tag native support for fonts. - // If false, label will be drawn with Hershey font metrics. - this.enableFontSupport = true; - // prop: pt2px - // Point to pixel scaling factor, used for computing height of bounding box - // around a label. The labels text renderer has a default setting of 1.4, which - // should be suitable for most fonts. Leave as null to use default. If tops of - // letters appear clipped, increase this. If bounding box seems too big, decrease. - // This is an issue only with the native font renderering capabilities of Mozilla - // 3.5 and Safari 4 since they do not provide a method to determine the font height. - this.pt2px = null; - - this._elem; - this._ctx; - this._plotWidth; - this._plotHeight; - this._plotDimensions = {height:null, width:null}; - - $.extend(true, this, options); - - if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') { - this.angle = -90; - } - - var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}; - if (this.pt2px) { - ropts.pt2px = this.pt2px; - } - - if (this.enableFontSupport) { - if ($.jqplot.support_canvas_text()) { - this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts); - } - - else { - this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); - } - } - else { - this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); - } - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) { - $.extend(true, this, options); - this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}); - }; - - // return width along the x axis - // will check first to see if an element exists. - // if not, will return the computed text box width. - $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) { - if (this._elem) { - return this._elem.outerWidth(true); - } - else { - var tr = this._textRenderer; - var l = tr.getWidth(ctx); - var h = tr.getHeight(ctx); - var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l); - return w; - } - }; - - // return height along the y axis. - $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) { - if (this._elem) { - return this._elem.outerHeight(true); - } - else { - var tr = this._textRenderer; - var l = tr.getWidth(ctx); - var h = tr.getHeight(ctx); - var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l); - return w; - } - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() { - var a = this.angle * Math.PI/180; - return a; - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx, plot) { - // Memory Leaks patch - if (this._elem) { - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - window.G_vmlCanvasManager.uninitElement(this._elem.get(0)); - } - - this._elem.emptyForce(); - this._elem = null; - } - - // create a canvas here, but can't draw on it untill it is appended - // to dom for IE compatability. - var elem = plot.canvasManager.getCanvas(); - - this._textRenderer.setText(this.label, ctx); - var w = this.getWidth(ctx); - var h = this.getHeight(ctx); - elem.width = w; - elem.height = h; - elem.style.width = w; - elem.style.height = h; - - elem = plot.canvasManager.initCanvas(elem); - - this._elem = $(elem); - this._elem.css({ position: 'absolute'}); - this._elem.addClass('jqplot-'+this.axis+'-label'); - - elem = null; - return this._elem; - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() { - this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label); - }; - -})(jQuery);
\ No newline at end of file diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.canvasTextRenderer.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.canvasTextRenderer.js deleted file mode 100644 index a74ea4e..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.canvasTextRenderer.js +++ /dev/null @@ -1,449 +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." - * - * included jsDate library by Chris Leonello: - * - * Copyright (c) 2010-2015 Chris Leonello - * - * jsDate is currently available for use in all personal or commercial projects - * under both the MIT and GPL version 2.0 licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * jsDate borrows many concepts and ideas from the Date Instance - * Methods by Ken Snyder along with some parts of Ken's actual code. - * - * Ken's original Date Instance Methods and copyright notice: - * - * Ken Snyder (ken d snyder at gmail dot com) - * 2008-09-10 - * version 2.0.2 (http://kendsnyder.com/sandbox/date/) - * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) - * - * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. - * Larry has generously given permission to adapt his code for inclusion - * into jqPlot. - * - * Larry's original code can be found here: - * - * https://github.com/lsiden/export-jqplot-to-png - * - * - */ - -(function($) { - // This code is a modified version of the canvastext.js code, copyright below: - // - // This code is released to the public domain by Jim Studt, 2007. - // He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/ - // - $.jqplot.CanvasTextRenderer = function(options){ - this.fontStyle = 'normal'; // normal, italic, oblique [not implemented] - this.fontVariant = 'normal'; // normal, small caps [not implemented] - this.fontWeight = 'normal'; // normal, bold, bolder, lighter, 100 - 900 - this.fontSize = '10px'; - this.fontFamily = 'sans-serif'; - this.fontStretch = 1.0; - this.fillStyle = '#666666'; - this.angle = 0; - this.textAlign = 'start'; - this.textBaseline = 'alphabetic'; - this.text; - this.width; - this.height; - this.pt2px = 1.28; - - $.extend(true, this, options); - this.normalizedFontSize = this.normalizeFontSize(this.fontSize); - this.setHeight(); - }; - - $.jqplot.CanvasTextRenderer.prototype.init = function(options) { - $.extend(true, this, options); - this.normalizedFontSize = this.normalizeFontSize(this.fontSize); - this.setHeight(); - }; - - // convert css spec into point size - // returns float - $.jqplot.CanvasTextRenderer.prototype.normalizeFontSize = function(sz) { - sz = String(sz); - var n = parseFloat(sz); - if (sz.indexOf('px') > -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 - * > <script type="text/javascript" language="javascript" src="plugins/jqplot.categoryAxisRenderer.js"></script> - * - * 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<this._series.length; i++) { - var s = this._series[i]; - if (s.groups) { - this.groups = s.groups; - } - var d = s.data; - - for (var j=0; j<d.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - if (d[j][0] < db.min || db.min == null) { - db.min = d[j][0]; - } - if (d[j][0] > 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<l; i+=skip) { - userTicks.splice(i+count, 0, ' '); - count++; - } - this._grouped = true; - } - this.min = 0.5; - this.max = userTicks.length + 0.5; - var range = this.max - this.min; - this.numberTicks = 2*userTicks.length + 1; - for (i=0; i<userTicks.length; i++){ - tt = this.min + 2 * i * range / (this.numberTicks-1); - // need a marker before and after the tick - var t = new this.tickRenderer(this.tickOptions); - t.showLabel = false; - // t.showMark = true; - t.setTick(tt, this.name); - this._ticks.push(t); - var t = new this.tickRenderer(this.tickOptions); - t.label = userTicks[i]; - // t.showLabel = true; - t.showMark = false; - t.showGridline = false; - t.setTick(tt+0.5, this.name); - this._ticks.push(t); - } - // now add the last tick at the end - var t = new this.tickRenderer(this.tickOptions); - t.showLabel = false; - // t.showMark = true; - t.setTick(tt+1, this.name); - this._ticks.push(t); - } - - // we don't have any ticks yet, let's make some! - else { - if (name == 'xaxis' || name == 'x2axis') { - dim = this._plotDimensions.width; - } - else { - dim = this._plotDimensions.height; - } - - // if min, max and number of ticks specified, user can't specify interval. - if (this.min != null && this.max != null && this.numberTicks != null) { - this.tickInterval = null; - } - - // if max, min, and interval specified and interval won't fit, ignore interval. - if (this.min != null && this.max != null && this.tickInterval != null) { - if (parseInt((this.max-this.min)/this.tickInterval, 10) != (this.max-this.min)/this.tickInterval) { - this.tickInterval = null; - } - } - - // find out how many categories are in the lines and collect labels - var labels = []; - var numcats = 0; - var min = 0.5; - var max, val; - var isMerged = false; - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - for (var j=0; j<s.data.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - val = s.data[j][0]; - } - else { - val = s.data[j][1]; - } - if ($.inArray(val, labels) == -1) { - isMerged = true; - numcats += 1; - labels.push(val); - } - } - } - - if (isMerged && this.sortMergedLabels) { - if (typeof labels[0] == "string") { - labels.sort(); - } else { - labels.sort(function(a,b) { return a - b; }); - } - } - - // keep a reference to these tick labels to use for redrawing plot (see bug #57) - this.ticks = labels; - - // now bin the data values to the right lables. - for (var i=0; i<this._series.length; i++) { - var s = this._series[i]; - for (var j=0; j<s.data.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - val = s.data[j][0]; - } - else { - val = s.data[j][1]; - } - // for category axis, force the values into category bins. - // we should have the value in the label array now. - var idx = $.inArray(val, labels)+1; - if (this.name == 'xaxis' || this.name == 'x2axis') { - s.data[j][0] = idx; - } - else { - s.data[j][1] = idx; - } - } - } - - // adjust with blanks if we have groups - if (this.groups > 1 && !this._grouped) { - var l = labels.length; - var skip = parseInt(l/this.groups, 10); - var count = 0; - for (var i=skip; i<l; i+=skip+1) { - labels[i] = ' '; - } - this._grouped = true; - } - - max = numcats + 0.5; - if (this.numberTicks == null) { - this.numberTicks = 2*numcats + 1; - } - - var range = max - min; - this.min = min; - this.max = max; - var track = 0; - - // todo: adjust this so more ticks displayed. - var maxVisibleTicks = parseInt(3+dim/10, 10); - var skip = parseInt(numcats/maxVisibleTicks, 10); - - if (this.tickInterval == null) { - - this.tickInterval = range / (this.numberTicks-1); - - } - // if tickInterval is specified, we will ignore any computed maximum. - for (var i=0; i<this.numberTicks; i++){ - tt = this.min + i * this.tickInterval; - var t = new this.tickRenderer(this.tickOptions); - // if even tick, it isn't a category, it's a divider - if (i/2 == parseInt(i/2, 10)) { - t.showLabel = false; - t.showMark = true; - } - else { - if (skip>0 && track<skip) { - t.showLabel = false; - track += 1; - } - else { - t.showLabel = true; - track = 0; - } - t.label = t.formatter(t.formatString, labels[(i-1)/2]); - t.showMark = false; - t.showGridline = false; - } - t.setTick(tt, this.name); - this._ticks.push(t); - } - } - - }; - - // called with scope of axis - $.jqplot.CategoryAxisRenderer.prototype.draw = function(ctx, plot) { - if (this.show) { - // populate the axis label and value properties. - // createTicks is a method on the renderer, but - // call it within the scope of the axis. - this.renderer.createTicks.call(this); - // fill a div with axes labels in the right direction. - // Need to pregenerate each axis to get its bounds and - // position it and the labels correctly on the plot. - var dim=0; - var temp; - // Added for theming. - if (this._elem) { - // this._elem.empty(); - // Memory Leaks patch - this._elem.emptyForce(); - } - - this._elem = this._elem || $('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>'); - - 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<t.length; i++) { - var tick = t[i]; - if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { - var elem = tick.draw(ctx, plot); - elem.appendTo(this._elem); - } - } - - this._groupLabels = []; - // now make group labels - for (var i=0; i<this.groupLabels.length; i++) - { - var elem = $('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>'); - 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<t.length; i++) { - var tick = t[i]; - if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - temp = tick._elem.outerHeight(true); - } - else { - temp = tick._elem.outerWidth(true); - } - if (temp > dim) { - dim = temp; - } - } - } - - var dim2 = 0; - for (var i=0; i<this._groupLabels.length; i++) { - var l = this._groupLabels[i]; - if (this.name == 'xaxis' || this.name == 'x2axis') { - temp = l.outerHeight(true); - } - else { - temp = l.outerWidth(true); - } - if (temp > 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<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'xaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - if (temp * t.angle < 0) { - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - } - // position at start - else { - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - } - break; - case 'end': - shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - case 'start': - shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; - break; - case 'middle': - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - default: - shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; - break; - } - } - else { - shim = -t.getWidth()/2; - } - var val = this.u2p(t.value) + shim + 'px'; - t._elem.css('left', val); - t.pack(); - } - } - - var labeledge=['bottom', 0]; - if (lshow) { - var w = this._label._elem.outerWidth(true); - this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px'); - if (this.name == 'xaxis') { - this._label._elem.css('bottom', '0px'); - labeledge = ['bottom', this._label._elem.outerHeight(true)]; - } - else { - this._label._elem.css('top', '0px'); - labeledge = ['top', this._label._elem.outerHeight(true)]; - } - this._label.pack(); - } - - // draw the group labels - var step = parseInt(this._ticks.length/this.groups, 10) + 1; - for (i=0; i<this._groupLabels.length; i++) { - var mid = 0; - var count = 0; - for (var j=i*step; j<(i+1)*step; j++) { - if (j >= 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<ticks.length; i++) { - var t = ticks[i]; - if (t.show && t.showLabel) { - var shim; - if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { - // will need to adjust auto positioning based on which axis this is. - var temp = (this.name == 'yaxis') ? 1 : -1; - switch (t.labelPosition) { - case 'auto': - // position at end - case 'end': - if (temp * t.angle < 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 'start': - if (t.angle > 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._groupLabels.length; i++) { - var mid = 0; - var count = 0; - for (var j=i*step; j<(i+1)*step; j++) { // j must never reach (i+1)*step as we don't want to have overlap between loops - if (j >= 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<series.length; i++) { - s = series[i]; - var ax = s.xaxis+','+s.yaxis; - if ($.inArray(ax, temp) == -1) { - temp.push(ax); - } - } - for (var i=0; i<temp.length; i++) { - c.tooltipAxisGroups.push(temp[i].split(',')); - } - } - } - }; - - // Group: methods - // - // method: $.jqplot.Cursor.zoomProxy - // links targetPlot to controllerPlot so that plot zooming of - // targetPlot will be controlled by zooming on the controllerPlot. - // controllerPlot will not actually zoom, but acts as an - // overview plot. Note, the zoom options must be set to true for - // zoomProxy to work. - $.jqplot.Cursor.zoomProxy = function(targetPlot, controllerPlot) { - var tc = targetPlot.plugins.cursor; - var cc = controllerPlot.plugins.cursor; - tc.zoomTarget = true; - tc.zoom = true; - tc.style = 'auto'; - tc.dblClickReset = false; - cc.zoom = true; - cc.zoomProxy = true; - - controllerPlot.target.bind('jqplotZoom', plotZoom); - controllerPlot.target.bind('jqplotResetZoom', plotReset); - - function plotZoom(ev, gridpos, datapos, plot, cursor) { - tc.doZoom(gridpos, datapos, targetPlot, cursor); - } - - function plotReset(ev, plot, cursor) { - targetPlot.resetZoom(); - } - }; - - $.jqplot.Cursor.prototype.resetZoom = function(plot, cursor) { - var axes = plot.axes; - var cax = cursor._zoom.axes; - if (!plot.plugins.cursor.zoomProxy && cursor._zoom.isZoomed) { - for (var ax in axes) { - // axes[ax]._ticks = []; - // axes[ax].min = cax[ax].min; - // axes[ax].max = cax[ax].max; - // axes[ax].numberTicks = cax[ax].numberTicks; - // axes[ax].tickInterval = cax[ax].tickInterval; - // // for date axes - // axes[ax].daTickInterval = cax[ax].daTickInterval; - 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 - axes[ax]._autoFormatString = cax[ax].tickFormatString; - } - plot.redraw(); - cursor._zoom.isZoomed = false; - } - else { - var ctx = cursor.zoomCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx = null; - } - plot.target.trigger('jqplotResetZoom', [plot, cursor]); - }; - - $.jqplot.Cursor.resetZoom = function(plot) { - plot.resetZoom(); - }; - - $.jqplot.Cursor.prototype.doZoom = function (gridpos, datapos, plot, cursor) { - var c = cursor; - var axes = plot.axes; - var zaxes = c._zoom.axes; - var start = zaxes.start; - var end = zaxes.end; - var min, max, dp, span, - newmin, newmax, curax, _numberTicks, ret; - var ctx = plot.plugins.cursor.zoomCanvas._ctx; - // don't zoom if zoom area is too small (in pixels) - if ((c.constrainZoomTo == 'none' && Math.abs(gridpos.x - c._zoom.start[0]) > 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; i<c.tooltipAxisGroups.length; i++) { - g = c.tooltipAxisGroups[i]; - if (addbr) { - s += '<br />'; - } - if (c.useAxesFormatters) { - for (var j=0; j<g.length; j++) { - if (j) { - s += ', '; - } - var af = plot.axes[g[j]]._ticks[0].formatter; - var afstr = plot.axes[g[j]]._ticks[0].formatString; - s += af(afstr, datapos[g[j]]); - } - } - else { - s += $.jqplot.sprintf(c.tooltipFormatString, datapos[g[0]], datapos[g[1]]); - } - addbr = true; - } - } - - if (c.showTooltipDataPosition) { - var series = plot.series; - var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y); - var addbr = false; - - for (var i = 0; i< series.length; i++) { - if (series[i].show) { - var idx = series[i].index; - var label = series[i].label.toString(); - var cellid = $.inArray(idx, ret.indices); - var sx = undefined; - var sy = undefined; - if (cellid != -1) { - var data = ret.data[cellid].data; - if (c.useAxesFormatters) { - var xf = series[i]._xaxis._ticks[0].formatter; - var yf = series[i]._yaxis._ticks[0].formatter; - var xfstr = series[i]._xaxis._ticks[0].formatString; - var yfstr = series[i]._yaxis._ticks[0].formatString; - sx = xf(xfstr, data[0]); - sy = yf(yfstr, data[1]); - } - else { - sx = data[0]; - sy = data[1]; - } - if (addbr) { - s += '<br />'; - } - s += $.jqplot.sprintf(c.tooltipFormatString, label, sx, sy); - addbr = true; - } - } - } - - } - c._tooltipElem.html(s); - } - - function moveLine(gridpos, plot) { - var c = plot.plugins.cursor; - var ctx = c.cursorCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - if (c.showVerticalLine) { - c.shapeRenderer.draw(ctx, [[gridpos.x, 0], [gridpos.x, ctx.canvas.height]]); - } - if (c.showHorizontalLine) { - c.shapeRenderer.draw(ctx, [[0, gridpos.y], [ctx.canvas.width, gridpos.y]]); - } - var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y); - if (c.showCursorLegend) { - var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label'); - for (var i=0; i<cells.length; i++) { - var idx = $(cells[i]).data('seriesIndex'); - var series = plot.series[idx]; - var label = series.label.toString(); - var cellid = $.inArray(idx, ret.indices); - var sx = undefined; - var sy = undefined; - if (cellid != -1) { - var data = ret.data[cellid].data; - if (c.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; - sx = xf(xfstr, data[0]); - sy = yf(yfstr, data[1]); - } - else { - sx = data[0]; - sy = data[1]; - } - } - if (plot.legend.escapeHtml) { - $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy)); - } - else { - $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy)); - } - } - } - ctx = null; - } - - function getIntersectingPoints(plot, x, y) { - var ret = {indices:[], data:[]}; - var s, i, d0, d, j, r, p; - var threshold; - var c = plot.plugins.cursor; - for (var i=0; i<plot.series.length; i++) { - s = plot.series[i]; - r = s.renderer; - if (s.show) { - threshold = c.intersectionThreshold; - if (s.showMarker) { - threshold += s.markerRenderer.size/2; - } - for (var j=0; j<s.gridData.length; j++) { - p = s.gridData[j]; - // check vertical line - if (c.showVerticalLine) { - if (Math.abs(x-p[0]) <= threshold) { - ret.indices.push(i); - ret.data.push({seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}); - } - } - } - } - } - return ret; - } - - function moveTooltip(gridpos, plot) { - var c = plot.plugins.cursor; - var elem = c._tooltipElem; - switch (c.tooltipLocation) { - case 'nw': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true); - break; - case 'n': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2; - var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true); - break; - case 'ne': - var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true); - break; - case 'e': - var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - case 'se': - var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset; - break; - case 's': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2; - var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset; - break; - case 'sw': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset; - break; - case 'w': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - default: - var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset; - var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset; - break; - } - - elem.css('left', x); - elem.css('top', y); - elem = null; - } - - function positionTooltip(plot) { - // fake a grid for positioning - var grid = plot._gridPadding; - var c = plot.plugins.cursor; - var elem = c._tooltipElem; - switch (c.tooltipLocation) { - case 'nw': - var a = grid.left + c.tooltipOffset; - var b = grid.top + c.tooltipOffset; - elem.css('left', a); - elem.css('top', b); - break; - case 'n': - var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2; - var b = grid.top + c.tooltipOffset; - elem.css('left', a); - elem.css('top', b); - break; - case 'ne': - var a = grid.right + c.tooltipOffset; - var b = grid.top + c.tooltipOffset; - elem.css({right:a, top:b}); - break; - case 'e': - var a = grid.right + c.tooltipOffset; - var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2; - elem.css({right:a, top:b}); - break; - case 'se': - var a = grid.right + c.tooltipOffset; - var b = grid.bottom + c.tooltipOffset; - elem.css({right:a, bottom:b}); - break; - case 's': - var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2; - var b = grid.bottom + c.tooltipOffset; - elem.css({left:a, bottom:b}); - break; - case 'sw': - var a = grid.left + c.tooltipOffset; - var b = grid.bottom + c.tooltipOffset; - elem.css({left:a, bottom:b}); - break; - case 'w': - var a = grid.left + c.tooltipOffset; - var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2; - elem.css({left:a, top:b}); - break; - default: // same as 'se' - var a = grid.right - c.tooltipOffset; - var b = grid.bottom + c.tooltipOffset; - elem.css({right:a, bottom:b}); - break; - } - elem = null; - } - - function handleClick (ev, gridpos, datapos, neighbor, plot) { - ev.preventDefault(); - ev.stopImmediatePropagation(); - var c = plot.plugins.cursor; - if (c.clickReset) { - c.resetZoom(plot, c); - } - var sel = window.getSelection; - if (document.selection && document.selection.empty) - { - document.selection.empty(); - } - else if (sel && !sel().isCollapsed) { - sel().collapse(); - } - return false; - } - - function handleDblClick (ev, gridpos, datapos, neighbor, plot) { - ev.preventDefault(); - ev.stopImmediatePropagation(); - var c = plot.plugins.cursor; - if (c.dblClickReset) { - c.resetZoom(plot, c); - } - var sel = window.getSelection; - if (document.selection && document.selection.empty) - { - document.selection.empty(); - } - else if (sel && !sel().isCollapsed) { - sel().collapse(); - } - return false; - } - - function handleMouseLeave(ev, gridpos, datapos, neighbor, plot) { - var c = plot.plugins.cursor; - c.onGrid = false; - if (c.show) { - $(ev.target).css('cursor', c.previousCursor); - if (c.showTooltip && !(c._zoom.zooming && c.showTooltipOutsideZoom && !c.constrainOutsideZoom)) { - c._tooltipElem.empty(); - c._tooltipElem.hide(); - } - if (c.zoom) { - c._zoom.gridpos = gridpos; - c._zoom.datapos = datapos; - } - if (c.showVerticalLine || c.showHorizontalLine) { - var ctx = c.cursorCanvas._ctx; - ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); - ctx = null; - } - if (c.showCursorLegend) { - var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label'); - for (var i=0; i<cells.length; i++) { - var idx = $(cells[i]).data('seriesIndex'); - var series = plot.series[idx]; - var label = series.label.toString(); - if (plot.legend.escapeHtml) { - $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined)); - } - else { - $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined)); - } - - } - } - } - } - - function handleMouseEnter(ev, gridpos, datapos, neighbor, plot) { - var c = plot.plugins.cursor; - c.onGrid = true; - if (c.show) { - c.previousCursor = ev.target.style.cursor; - ev.target.style.cursor = c.style; - if (c.showTooltip) { - updateTooltip(gridpos, datapos, plot); - if (c.followMouse) { - moveTooltip(gridpos, plot); - } - else { - positionTooltip(plot); - } - c._tooltipElem.show(); - } - if (c.showVerticalLine || c.showHorizontalLine) { - moveLine(gridpos, plot); - } - } - - } - - function handleMouseMove(ev, gridpos, datapos, neighbor, plot) { - var c = plot.plugins.cursor; - if (c.show) { - if (c.showTooltip) { - updateTooltip(gridpos, datapos, plot); - if (c.followMouse) { - moveTooltip(gridpos, plot); - } - } - if (c.showVerticalLine || c.showHorizontalLine) { - moveLine(gridpos, plot); - } - } - } - - function getEventPosition(ev) { - var plot = ev.data.plot; - var go = plot.eventCanvas._elem.offset(); - var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top}; - ////// - // TO DO: handle yMidAxis - ////// - var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null, yMidAxis:null}; - var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis']; - var ax = plot.axes; - var n, axis; - for (n=11; n>0; 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 = $('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem); - tr.data('seriesIndex', idx); - $('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+rs+';">'+ - '<div style="border:1px solid #cccccc;padding:0.2em;">'+ - '<div class="jqplot-cursor-legend-swatch" style="background-color:'+color+';"></div>'+ - '</div></td>').appendTo(tr); - var td = $('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+rs+';"></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 <Axis> 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 <http://kendsnyder.com/sandbox/date/>. - * - * To use this renderer, include the plugin in your source - * > <script type="text/javascript" language="javascript" src="plugins/jqplot.dateAxisRenderer.js"></script> - * - * 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<this._series.length; i++) { - stats = {intervals:[], frequencies:{}, sortedIntervals:[], min:null, max:null, mean:null}; - sum = 0; - s = this._series[i]; - d = s.data; - pd = s._plotData; - sd = s._stackData; - intv = 0; - - for (var j=0; j<d.length; j++) { - if (this.name == 'xaxis' || this.name == 'x2axis') { - d[j][0] = new $.jsDate(d[j][0]).getTime(); - pd[j][0] = new $.jsDate(d[j][0]).getTime(); - sd[j][0] = new $.jsDate(d[j][0]).getTime(); - if ((d[j][0] != null && d[j][0] < db.min) || db.min == null) { - db.min = d[j][0]; - } - if ((d[j][0] != null && d[j][0] > 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<userTicks.length; i++){ - var ut = userTicks[i]; - var t = new this.tickRenderer(this.tickOptions); - if (ut.constructor == Array) { - t.value = new $.jsDate(ut[0]).getTime(); - t.label = ut[1]; - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(t.value, this.name); - this._ticks.push(t); - } - - else { - t.value = new $.jsDate(ut).getTime(); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(t.value, this.name); - this._ticks.push(t); - } - } - this.numberTicks = userTicks.length; - this.min = this._ticks[0].value; - this.max = this._ticks[this.numberTicks-1].value; - this.daTickInterval = [(this.max - this.min) / (this.numberTicks - 1)/1000, 'seconds']; - } - - //////// - // We don't have any ticks yet, let's make some! - //////// - - // special case when there is only one point, make three tick marks to center the point - else if (this.min == null && this.max == null && db.min == db.max) - { - var onePointOpts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null}); - var delta = 300000; - this.min = db.min - delta; - this.max = db.max + delta; - this.numberTicks = 3; - - for(var i=this.min;i<=this.max;i+= delta) - { - onePointOpts.value = i; - - var t = new this.tickRenderer(onePointOpts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - - t.showLabel = false; - t.showMark = false; - - this._ticks.push(t); - } - - if(this.showTicks) { - this._ticks[1].showLabel = true; - } - if(this.showTickMarks) { - this._ticks[1].showTickMarks = true; - } - } - // if user specified min and max are null, we set those to make best ticks. - else if (this.min == null && this.max == null) { - - var opts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null}); - - // want to find a nice interval - var nttarget, - titarget; - - // if no tickInterval or numberTicks options specified, make a good guess. - if (!this.tickInterval && !this.numberTicks) { - var tdim = Math.max(dim, threshold+1); - // how many ticks to put on the axis? - // date labels tend to be long. If ticks not rotated, - // don't use too many and have a high spacing factor. - // If we are rotating ticks, use a lower factor. - var spacingFactor = 115; - if (this.tickRenderer === $.jqplot.CanvasAxisTickRenderer && this.tickOptions.angle) { - spacingFactor = 115 - 40 * Math.abs(Math.sin(this.tickOptions.angle/180*Math.PI)); - } - - nttarget = Math.ceil((tdim-threshold)/spacingFactor + 1); - titarget = (max - min) / (nttarget - 1); - } - - // If tickInterval is specified, we'll try to honor it. - // Not guaranteed to get this interval, but we'll get as close as - // we can. - // tickInterval will be used before numberTicks, that is if - // both are specified, numberTicks will be ignored. - else if (this.tickInterval) { - titarget = new $.jsDate(0).add(daTickInterval[0], daTickInterval[1]).getTime(); - } - - // if numberTicks specified, try to honor it. - // Not guaranteed, but will try to get close. - else if (this.numberTicks) { - nttarget = this.numberTicks; - titarget = (max - min) / (nttarget - 1); - } - - // If we can use an interval of 2 weeks or less, pick best one - if (titarget <= 19*day) { - var ret = bestDateInterval(min, max, titarget); - var tempti = ret[0]; - this._autoFormatString = ret[1]; - - min = new $.jsDate(min); - min = Math.floor((min.getTime() - min.getUtcOffset())/tempti) * tempti + min.getUtcOffset(); - - nttarget = Math.ceil((max - min) / tempti) + 1; - this.min = min; - this.max = min + (nttarget - 1) * tempti; - - // if max is less than max, add an interval - if (this.max < max) { - this.max += tempti; - nttarget += 1; - } - this.tickInterval = tempti; - this.numberTicks = nttarget; - - for (var i=0; i<nttarget; i++) { - opts.value = this.min + i * tempti; - t = new this.tickRenderer(opts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - this._ticks.push(t); - } - - insetMult = this.tickInterval; - } - - // should we use a monthly interval? - else if (titarget <= 9 * month) { - - this._autoFormatString = '%v'; - - // how many months in an interval? - var intv = Math.round(titarget/month); - if (intv < 1) { - intv = 1; - } - else if (intv > 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<nttarget; i++) { - if (i === 0) { - opts.value = mstart.getTime(); - } - else { - opts.value = mstart.add(intv, 'month').getTime(); - } - t = new this.tickRenderer(opts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - this._ticks.push(t); - } - - insetMult = intv * month; - } - - // use yearly intervals - else { - - this._autoFormatString = '%v'; - - // how many years in an interval? - var intv = Math.round(titarget/year); - if (intv < 1) { - intv = 1; - } - - // figure out the starting and ending years. - var mstart = new $.jsDate(min).setMonth(0, 1).setHours(0,0,0,0); - var mend = new $.jsDate(max).add(1, 'year').setMonth(0, 1).setHours(0,0,0,0); - - var nyears = mend.diff(mstart, 'year'); - - nttarget = Math.ceil(nyears/intv) + 1; - - this.min = mstart.getTime(); - this.max = mstart.clone().add((nttarget - 1) * intv, 'year').getTime(); - this.numberTicks = nttarget; - - for (var i=0; i<nttarget; i++) { - if (i === 0) { - opts.value = mstart.getTime(); - } - else { - opts.value = mstart.add(intv, 'year').getTime(); - } - t = new this.tickRenderer(opts); - - if (this._overrideFormatString && this._autoFormatString != '') { - t.formatString = this._autoFormatString; - } - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - this._ticks.push(t); - } - - insetMult = intv * year; - } - } - - //////// - // Some option(s) specified, work around that. - //////// - - else { - if (name == 'xaxis' || name == 'x2axis') { - dim = this._plotDimensions.width; - } - else { - dim = this._plotDimensions.height; - } - - // if min, max and number of ticks specified, user can't specify interval. - if (this.min != null && this.max != null && this.numberTicks != null) { - this.tickInterval = null; - } - - if (this.tickInterval != null && daTickInterval != null) { - this.daTickInterval = daTickInterval; - } - - // if min and max are same, space them out a bit - if (min == max) { - var adj = 24*60*60*500; // 1/2 day - min -= adj; - max += adj; - } - - range = max - min; - - var optNumTicks = 2 + parseInt(Math.max(0, dim-100)/100, 10); - - - var rmin, rmax; - - rmin = (this.min != null) ? new $.jsDate(this.min).getTime() : min - range/2*(this.padMin - 1); - rmax = (this.max != null) ? new $.jsDate(this.max).getTime() : max + range/2*(this.padMax - 1); - this.min = rmin; - this.max = rmax; - range = this.max - this.min; - - if (this.numberTicks == null){ - // if tickInterval is specified by user, we will ignore computed maximum. - // max will be equal or greater to fit even # of ticks. - if (this.daTickInterval != null) { - var nc = new $.jsDate(this.max).diff(this.min, this.daTickInterval[1], true); - this.numberTicks = Math.ceil(nc/this.daTickInterval[0]) +1; - // this.max = new $.jsDate(this.min).add(this.numberTicks-1, this.daTickInterval[1]).getTime(); - this.max = new $.jsDate(this.min).add((this.numberTicks-1) * this.daTickInterval[0], this.daTickInterval[1]).getTime(); - } - else if (dim > 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<this.numberTicks; i++){ - var min = new $.jsDate(this.min); - tt = min.add(i*this.daTickInterval[0], this.daTickInterval[1]).getTime(); - var t = new this.tickRenderer(this.tickOptions); - // var t = new $.jqplot.AxisTickRenderer(this.tickOptions); - if (!this.showTicks) { - t.showLabel = false; - t.showMark = false; - } - else if (!this.showTickMarks) { - t.showMark = false; - } - t.setTick(tt, this.name); - this._ticks.push(t); - } - } - - if (this.tickInset) { - this.min = this.min - this.tickInset * insetMult; - this.max = this.max + this.tickInset * insetMult; - } - - if (this._daTickInterval == null) { - this._daTickInterval = this.daTickInterval; - } - - ticks = null; - }; - -})(jQuery); - diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.enhancedPieLegendRenderer.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.enhancedPieLegendRenderer.js deleted file mode 100644 index 382f8ea..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.enhancedPieLegendRenderer.js +++ /dev/null @@ -1,261 +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.EnhancedPieLegendRenderer - // Legend renderer which can specify the number of rows and/or columns in the legend - // Similar to EnhancedLegendRenderer, but for pie charts - $.jqplot.EnhancedPieLegendRenderer = function(){ - $.jqplot.TableLegendRenderer.call(this); - }; - - $.jqplot.EnhancedPieLegendRenderer.prototype = new $.jqplot.TableLegendRenderer(); - $.jqplot.EnhancedPieLegendRenderer.prototype.constructor = $.jqplot.EnhancedPieLegendRenderer; - - // called with scope of legend. - $.jqplot.EnhancedPieLegendRenderer.prototype.init = function(options) { - // 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: seriesToggle - // false to not enable series on/off toggling on the legend. - // true or a fadein/fadeout speed (number of milliseconds or 'fast', 'normal', 'slow') - // to enable show/hide of series on click of legend item. - this.seriesToggle = 'normal'; - // prop: seriesToggleReplot - // True to replot the chart after toggling series on/off. - // This will set the series show property to false. - // This allows for rescaling or other maniplation of chart. - // Set to an options object (e.g. {resetAxes: true}) for replot options. - this.seriesToggleReplot = false; - // prop: disableIEFading - // true to toggle series with a show/hide method only and not allow fading in/out. - // This is to overcome poor performance of fade in some versions of IE. - this.disableIEFading = true; - // prop: toolTips - // optional array of toolTip text corresponding to each pie slice - this.toolTips = []; - $.extend(true, this, options); - - if (this.seriesToggle) { - $.jqplot.postDrawHooks.push(postDraw); - } - }; - - // called with scope of legend - $.jqplot.EnhancedPieLegendRenderer.prototype.draw = function(offsets, plot) { - var legend = this; - if (this.show) { - var series = this._series; - var s; - var ss = 'position:absolute;'; - ss += (this.background) ? 'background:'+this.background+';' : ''; - ss += (this.border) ? 'border:'+this.border+';' : ''; - ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : ''; - ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : ''; - ss += (this.textColor) ? 'color:'+this.textColor+';' : ''; - ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : ''; - ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : ''; - ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : ''; - ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : ''; - this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>'); - 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; i<nr; i++) { - tr = $(document.createElement('tr')); - tr.addClass('jqplot-table-legend'); - if (reverse){ - tr.prependTo(this._elem); - } - else{ - tr.appendTo(this._elem); - } - for (j=0; j<nc; j++) { - if (idx < slen){ - lt = this.labels[idx] || s.data[idx][0].toString(); - tt = this.toolTips[idx]; - if (lt) { - var color = colorGenerator.next(); - if (!reverse){ - if (i>0){ - 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: - * - * > <script type="text/javascript" src="plugins/jqplot.highlighter.js"></script> - * - * 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:'<table class="jqplot-highlighter"> - * > <tr><td>hi:</td><td>%s</td></tr> - * > <tr><td>low:</td><td>%s</td></tr> - * > <tr><td>close:</td><td>%s</td></tr></table>' - * > } - * - */ - $.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<opts.yvalues+1; i++) { - ystrs.push(yf(yfstr, neighbor.data[i])); - } - if (typeof opts.formatString === 'string') { - switch (opts.tooltipAxes) { - case 'both': - case 'xy': - ystrs.unshift(xstr); - ystrs.unshift(opts.formatString); - str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs); - break; - case 'yx': - ystrs.push(xstr); - ystrs.unshift(opts.formatString); - str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs); - break; - case 'x': - str = $.jqplot.sprintf.apply($.jqplot.sprintf, [opts.formatString, xstr]); - break; - case 'y': - ystrs.unshift(opts.formatString); - str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs); - break; - default: // same as xy - ystrs.unshift(xstr); - ystrs.unshift(opts.formatString); - str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs); - break; - } - } - else { - switch (opts.tooltipAxes) { - case 'both': - case 'xy': - str = xstr; - for (var i=0; i<ystrs.length; i++) { - str += opts.tooltipSeparator + ystrs[i]; - } - break; - case 'yx': - str = ''; - for (var i=0; i<ystrs.length; i++) { - str += ystrs[i] + opts.tooltipSeparator; - } - str += xstr; - break; - case 'x': - str = xstr; - break; - case 'y': - str = ystrs.join(opts.tooltipSeparator); - break; - default: // same as 'xy' - str = xstr; - for (var i=0; i<ystrs.length; i++) { - str += opts.tooltipSeparator + ystrs[i]; - } - break; - - } - } - } - else { - var str; - if (typeof opts.formatString === 'string') { - str = $.jqplot.sprintf.apply($.jqplot.sprintf, [opts.formatString].concat(neighbor.data)); - } - - else { - if (opts.tooltipAxes == 'both' || opts.tooltipAxes == 'xy') { - str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]) + opts.tooltipSeparator + $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]); - } - else if (opts.tooltipAxes == 'yx') { - str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]) + opts.tooltipSeparator + $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]); - } - else if (opts.tooltipAxes == 'x') { - str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]); - } - else if (opts.tooltipAxes == 'y') { - str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]); - } - } - } - if ($.isFunction(opts.tooltipContentEditor)) { - // args str, seriesIndex, pointIndex are essential so the hook can look up - // extra data for the point. - str = opts.tooltipContentEditor(str, neighbor.seriesIndex, neighbor.pointIndex, plot); - } - elem.html(str); - var gridpos = {x:neighbor.gridData[0], y:neighbor.gridData[1]}; - var ms = 0; - var fact = 0.707; - if (series.markerRenderer.show == true) { - ms = (series.markerRenderer.size + opts.sizeAdjust)/2; - } - - var loc = locations; - if (series.fillToZero && series.fill && neighbor.data[1] < 0) { - loc = oppositeLocations; - } - - switch (loc[locationIndicies[opts.tooltipLocation]]) { - case 'nw': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms; - var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms; - break; - case 'n': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2; - var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - ms; - break; - case 'ne': - var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + fact * ms; - var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms; - break; - case 'e': - var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + ms; - var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - case 'se': - var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + fact * ms; - var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + fact * ms; - break; - case 's': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2; - var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + ms; - break; - case 'sw': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms; - var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + fact * ms; - break; - case 'w': - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - ms; - var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2; - break; - default: // same as 'nw' - var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms; - var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms; - break; - } - elem.css('left', x); - elem.css('top', y); - if (opts.fadeTooltip) { - // Fix for stacked up animations. Thnanks Trevor! - elem.stop(true,true).fadeIn(opts.tooltipFadeSpeed); - } - else { - elem.show(); - } - elem = null; - - } - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - var hl = plot.plugins.highlighter; - var c = plot.plugins.cursor; - if (hl.show) { - if (neighbor == null && hl.isHighlighting) { - var evt = jQuery.Event('jqplotHighlighterUnhighlight'); - plot.target.trigger(evt); - - var ctx = hl.highlightCanvas._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - if (hl.fadeTooltip) { - hl._tooltipElem.fadeOut(hl.tooltipFadeSpeed); - } - else { - hl._tooltipElem.hide(); - } - if (hl.bringSeriesToFront) { - plot.restorePreviousSeriesOrder(); - } - hl.isHighlighting = false; - hl.currentNeighbor = null; - ctx = null; - } - else if (neighbor != null && plot.series[neighbor.seriesIndex].showHighlight && !hl.isHighlighting) { - var evt = jQuery.Event('jqplotHighlighterHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data, plot]; - plot.target.trigger(evt, ins); - - hl.isHighlighting = true; - hl.currentNeighbor = neighbor; - if (hl.showMarker) { - draw(plot, neighbor); - } - if (plot.series[neighbor.seriesIndex].show && hl.showTooltip && (!c || !c._zoom.started)) { - showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor); - } - if (hl.bringSeriesToFront) { - plot.moveSeriesToFront(neighbor.seriesIndex); - } - } - // check to see if we're highlighting the wrong point. - else if (neighbor != null && hl.isHighlighting && hl.currentNeighbor != neighbor) { - // highlighting the wrong point. - - // if new series allows highlighting, highlight new point. - if (plot.series[neighbor.seriesIndex].showHighlight) { - var ctx = hl.highlightCanvas._ctx; - ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); - hl.isHighlighting = true; - hl.currentNeighbor = neighbor; - if (hl.showMarker) { - draw(plot, neighbor); - } - if (plot.series[neighbor.seriesIndex].show && hl.showTooltip && (!c || !c._zoom.started)) { - showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor); - } - if (hl.bringSeriesToFront) { - plot.moveSeriesToFront(neighbor.seriesIndex); - } - } - } - } - } -})(jQuery);
\ No newline at end of file diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.pieRenderer.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.pieRenderer.js deleted file mode 100644 index 46d7301..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.pieRenderer.js +++ /dev/null @@ -1,964 +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.PieRenderer - * Plugin renderer to draw a pie chart. - * x values, if present, will be used as slice labels. - * y values give slice size. - * - * To use this renderer, you need to include the - * pie renderer plugin, for example: - * - * > <script type="text/javascript" src="plugins/jqplot.pieRenderer.js"></script> - * - * 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<this.seriesColors.length; i++){ - var rgba = $.jqplot.getColorComponents(this.seriesColors[i]); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var sum = newrgb[0] + newrgb[1] + newrgb[2]; - for (var j=0; j<3; j++) { - // when darkening, lowest color component can be is 60. - newrgb[j] = (sum > 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; i<this.data.length; i++){ - if (this.data[i][1] != 0) { - // we have data, O.K. to draw. - this._drawData = true; - if (this.showSlice[i] === undefined) { - this.showSlice[i] = true; - } - } - stack.push(this.data[i][1]); - td.push([this.data[i][0]]); - if (i>0) { - stack[i] += stack[i-1]; - } - tot += this.data[i][1]; - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i<stack.length; i++) { - td[i][1] = stack[i] * fact; - td[i][2] = this.data[i][1]/tot; - } - this.gridData = td; - }; - - $.jqplot.PieRenderer.prototype.makeGridData = function(data, plot) { - - var hdt = document.getElementsByClassName("jqplot-table-legend-label jqplot-seriesToggle jqplot-series-hidden"); - - var ndt = this.data.map(function(arr) { - return arr.slice(); - }); - - if (hdt[0] != null) { - for(i=0;i<hdt.length;i++){ - for(j=0;j<ndt.length;j++){ - if(hdt[i].innerText == ndt[j][0]){ - ndt[j][1] = 0; - } - } - } - } - - var stack = []; - var td = []; - var tot = 0; - var sa = this.startAngle/180*Math.PI; - // don't know if we have any valid data yet, so set plot to not draw. - this._drawData = false; - for (var i=0; i<data.length; i++){ - if (this.data[i][1] != 0) { - // we have data, O.K. to draw. - this._drawData = true; - } - stack.push(ndt[i][1]); - td.push([ndt[i][0]]); - if (i>0) { - stack[i] += stack[i-1]; - } - tot += ndt[i][1]; - } - var fact = Math.PI*2/stack[stack.length - 1]; - - for (var i=0; i<stack.length; i++) { - td[i][1] = stack[i] * fact; - td[i][2] = ndt[i][1]/tot; - } - - return td; - }; - - function calcRadiusAdjustment(ang) { - return Math.sin((ang - (ang-Math.PI) / 8 / Math.PI )/2.0); - } - - function calcRPrime(ang1, ang2, sliceMargin, fill, lineWidth) { - var rprime = 0; - var ang = ang2 - ang1; - var absang = Math.abs(ang); - var sm = sliceMargin; - if (fill == false) { - sm += lineWidth; - } - - if (sm > 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<l; i++) { - ctx.save(); - ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI)); - doDraw(r); - } - for (var i=0, l=this.shadowDepth; i<l; i++) { - ctx.restore(); - } - } - - else { - doDraw(r); - } - ctx.restore(); - } - - function doDraw (rad) { - // Fix for IE and Chrome that can't seem to draw circles correctly. - // ang2 should always be <= 2 pi since that is the way the data is converted. - // 2Pi = 6.2831853, Pi = 3.1415927 - if (ang2 > 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<l; i++) { - ang1 = (i == 0) ? sa : gd[i-1][1] + sa; - ang2 = gd[i][1] + sa; - - this._sliceAngles.push([ang1, ang2]); - - rprime = calcRPrime(ang1, ang2, this.sliceMargin, this.fill, this.lineWidth); - - if (Math.abs(ang2-ang1) > 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<l; i++) { - shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')'; - this.renderer.drawSlice.call (this, ctx, this._sliceAngles[i][0], this._sliceAngles[i][1], shadowColor, true); - } - } - - for (var i=0; i<gd.length; i++) { - - sliceColor = colorGenerator.next(); - - if (this.showSlice[i]) { - this.renderer.drawSlice.call (this, ctx, this._sliceAngles[i][0], this._sliceAngles[i][1], sliceColor, false); - - if (this.showDataLabels && gd[i][2]*100 >= 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 = $('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">' + label + '</div>').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; i<nr; i++) { - tr = $(document.createElement('tr')); - tr.addClass('jqplot-table-legend'); - - if (reverse){ - tr.prependTo(this._elem); - } - - else{ - tr.appendTo(this._elem); - } - - for (j=0; j<nc; j++) { - if (idx < pd.length) { - tt = ''; - if (this.labels[idx]) { - lt = this.labels[idx]; - } - else { - if (typeof pd[idx][0] === 'object') { - lt = pd[idx][0][0].toString(); - tt = pd[idx][0][1].toString(); - } - else { - lt = pd[idx][0].toString(); - } - } - //lt = this.labels[idx] || pd[idx][0].toString(); - color = colorGenerator.next(); - if (!reverse){ - if (i>0){ - 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('<a title="' + tt + '">' + lt + "</a>"); - } - 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<this.series.length; i++) { - if (this.series[i].renderer.constructor == $.jqplot.PieRenderer) { - // don't allow mouseover and mousedown at same time. - if (this.series[i].highlightMouseOver) { - this.series[i].highlightMouseDown = false; - } - } - } - } - - // called with scope of plot - function postParseOptions(options) { - for (var i=0; i<this.series.length; i++) { - this.series[i].seriesColors = this.seriesColors; - this.series[i].colorGenerator = $.jqplot.colorGenerator; - } - } - - function highlight (plot, sidx, pidx) { - if (plot.series[sidx].showSlice[pidx]) { - var s = plot.series[sidx]; - var canvas = plot.plugins.pieRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); - s._highlightedPoint = pidx; - plot.plugins.pieRenderer.highlightedSeriesIndex = sidx; - s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColorGenerator.get(pidx), false); - } - } - - function unhighlight (plot) { - var canvas = plot.plugins.pieRenderer.highlightCanvas; - canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); - for (var i=0; i<plot.series.length; i++) { - plot.series[i]._highlightedPoint = null; - } - plot.plugins.pieRenderer.highlightedSeriesIndex = null; - plot.target.trigger('jqplotDataUnhighlight'); - } - - function handleMove(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt1 = jQuery.Event('jqplotDataMouseOver'); - evt1.pageX = ev.pageX; - evt1.pageY = ev.pageY; - plot.target.trigger(evt1, ins); - if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) { - var evt = jQuery.Event('jqplotDataHighlight'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - highlight (plot, ins[0], ins[1]); - } - } - else if (neighbor == null) { - unhighlight (plot); - } - } - - function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { - var idx = plot.plugins.pieRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - } - - function handleClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var evt = jQuery.Event('jqplotDataClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - function handleRightClick(ev, gridpos, datapos, neighbor, plot) { - if (neighbor) { - var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; - var idx = plot.plugins.pieRenderer.highlightedSeriesIndex; - if (idx != null && plot.series[idx].highlightMouseDown) { - unhighlight(plot); - } - var evt = jQuery.Event('jqplotDataRightClick'); - evt.which = ev.which; - evt.pageX = ev.pageX; - evt.pageY = ev.pageY; - plot.target.trigger(evt, ins); - } - } - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - function postPlotDraw() { - // Memory Leaks patch - if (this.plugins.pieRenderer && this.plugins.pieRenderer.highlightCanvas) { - this.plugins.pieRenderer.highlightCanvas.resetCanvas(); - this.plugins.pieRenderer.highlightCanvas = null; - } - - this.plugins.pieRenderer = {highlightedSeriesIndex:null}; - this.plugins.pieRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); - - // do we have any data labels? if so, put highlight canvas before those - var labels = $(this.targetId+' .jqplot-data-label'); - if (labels.length) { - $(labels[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions, this)); - } - // else put highlight canvas before event canvas. - else { - this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions, this)); - } - - var hctx = this.plugins.pieRenderer.highlightCanvas.setContext(); - this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); - } - - $.jqplot.preInitHooks.push(preInit); - - $.jqplot.PieTickRenderer = function() { - $.jqplot.AxisTickRenderer.call(this); - }; - - $.jqplot.PieTickRenderer.prototype = new $.jqplot.AxisTickRenderer(); - $.jqplot.PieTickRenderer.prototype.constructor = $.jqplot.PieTickRenderer; - -})(jQuery); - -
\ No newline at end of file diff --git a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.pointLabels.js b/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.pointLabels.js deleted file mode 100644 index 88ca4f2..0000000 --- a/srcs/phpmyadmin/js/vendor/jqplot/plugins/jqplot.pointLabels.js +++ /dev/null @@ -1,379 +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.PointLabels - * Plugin for putting labels at the data points. - * - * To use this plugin, include the js - * file in your source: - * - * > <script type="text/javascript" src="plugins/jqplot.pointLabels.js"></script> - * - * 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<this._plotData.length; i++) { - p._labels.push(this._plotData[i][labelIdx]); - } - } - } - else { - // var d = this._plotData; - var d = this.data; - if (this.renderer.constructor === $.jqplot.BarRenderer && this.waterfall) { - d = this._data; - } - if (d.length && d[0].length) { - // var idx = p.seriesLabelIndex || d[0].length -1; - for (var i=0; i<d.length; i++) { - p._labels.push(d[i][labelIdx]); - } - } - d = null; - } - } - else if (p.labels.length){ - p._labels = p.labels; - } - }; - - $.jqplot.PointLabels.prototype.xOffset = function(elem, location, padding) { - location = location || this.location; - padding = padding || this.xpadding; - var offset; - - switch (location) { - case 'nw': - offset = -elem.outerWidth(true) - this.xpadding; - break; - case 'n': - offset = -elem.outerWidth(true)/2; - break; - case 'ne': - offset = this.xpadding; - break; - case 'e': - offset = this.xpadding; - break; - case 'se': - offset = this.xpadding; - break; - case 's': - offset = -elem.outerWidth(true)/2; - break; - case 'sw': - offset = -elem.outerWidth(true) - this.xpadding; - break; - case 'w': - offset = -elem.outerWidth(true) - this.xpadding; - break; - default: // same as 'nw' - offset = -elem.outerWidth(true) - this.xpadding; - break; - } - return offset; - }; - - $.jqplot.PointLabels.prototype.yOffset = function(elem, location, padding) { - location = location || this.location; - padding = padding || this.xpadding; - var offset; - - switch (location) { - case 'nw': - offset = -elem.outerHeight(true) - this.ypadding; - break; - case 'n': - offset = -elem.outerHeight(true) - this.ypadding; - break; - case 'ne': - offset = -elem.outerHeight(true) - this.ypadding; - break; - case 'e': - offset = -elem.outerHeight(true)/2; - break; - case 'se': - offset = this.ypadding; - break; - case 's': - offset = this.ypadding; - break; - case 'sw': - offset = this.ypadding; - break; - case 'w': - offset = -elem.outerHeight(true)/2; - break; - default: // same as 'nw' - offset = -elem.outerHeight(true) - this.ypadding; - break; - } - return offset; - }; - - // called with scope of series - $.jqplot.PointLabels.draw = function (sctx, options, plot) { - var p = this.plugins.pointLabels; - // set labels again in case they have changed. - p.setLabels.call(this); - // remove any previous labels - for (var i=0; i<p._elems.length; i++) { - // Memory Leaks patch - // p._elems[i].remove(); - if(p._elems[i]) { - p._elems[i].emptyForce(); - } - } - p._elems.splice(0, p._elems.length); - - if (p.show) { - var ax = '_'+this._stackAxis+'axis'; - - if (!p.formatString) { - p.formatString = this[ax]._ticks[0].formatString; - p.formatter = this[ax]._ticks[0].formatter; - } - - var pd = this._plotData; - var ppd = this._prevPlotData; - var xax = this._xaxis; - var yax = this._yaxis; - var elem, helem; - - for (var i=0, l=p._labels.length; i < l; i++) { - var label = p._labels[i]; - - if (label == null || (p.hideZeros && parseFloat(label) == 0)) { - continue; - } - - label = p.formatter(p.formatString, label); - - helem = document.createElement('div'); - p._elems[i] = $(helem); - - elem = p._elems[i]; - - - elem.addClass('jqplot-point-label jqplot-series-'+this.index+' jqplot-point-'+i); - elem.css('position', 'absolute'); - elem.insertAfter(sctx.canvas); - - if (p.escapeHTML) { - elem.text(label); - } - else { - elem.html(label); - } - var location = p.location; - if ((this.fillToZero && pd[i][1] < 0) || (this.fillToZero && this._type === 'bar' && this.barDirection === 'horizontal' && pd[i][0] < 0) || (this.waterfall && parseInt(label, 10)) < 0) { - location = oppositeLocations[locationIndicies[location]]; - } - - - var ell = xax.u2p(pd[i][0]) + p.xOffset(elem, location); - var elt = yax.u2p(pd[i][1]) + p.yOffset(elem, location); - - // we have stacked chart but are not showing stacked values, - // place labels in center. - if (this._stack && !p.stackedValue) { - if (this.barDirection === "vertical") { - elt = (this._barPoints[i][0][1] + this._barPoints[i][1][1]) / 2 + plot._gridPadding.top - 0.5 * elem.outerHeight(true); - } - else { - ell = (this._barPoints[i][2][0] + this._barPoints[i][0][0]) / 2 + plot._gridPadding.left - 0.5 * elem.outerWidth(true); - } - } - - if (this.renderer.constructor == $.jqplot.BarRenderer) { - if (this.barDirection == "vertical") { - ell += this._barNudge; - } - else { - elt -= this._barNudge; - } - } - elem.css('left', ell); - elem.css('top', elt); - var elr = ell + elem.width(); - var elb = elt + elem.height(); - var et = p.edgeTolerance; - var scl = $(sctx.canvas).position().left; - var sct = $(sctx.canvas).position().top; - var scr = sctx.canvas.width + scl; - var scb = sctx.canvas.height + sct; - // if label is outside of allowed area, remove it - if (ell - et < scl || elt - et < sct || elr + et > 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); |
