diff -r 322d0feea350 -r 89ef5ed3c48b src/cm/media/js/lib/yui/yui_3.10.3/build/series-curve-util/series-curve-util-debug.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui_3.10.3/build/series-curve-util/series-curve-util-debug.js Tue Jul 16 14:29:46 2013 +0200 @@ -0,0 +1,142 @@ +/* +YUI 3.10.3 (build 2fb5187) +Copyright 2013 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +http://yuilibrary.com/license/ +*/ + +YUI.add('series-curve-util', function (Y, NAME) { + +/** + * Provides functionality for drawing curves in a series. + * + * @module charts + * @submodule series-curve-util + */ +/** + * Utility class used for calculating curve points. + * + * @class CurveUtil + * @constructor + * @submodule series-curve-util + */ +function CurveUtil() +{ +} + +CurveUtil.prototype = { + /** + * Creates an array of start, end and control points for splines. + * + * @method getCurveControlPoints + * @param {Array} xcoords Collection of x-coordinates used for calculate the curves + * @param {Array} ycoords Collection of y-coordinates used for calculate the curves + * @return Object + * @protected + */ + getCurveControlPoints: function(xcoords, ycoords) + { + var outpoints = [], + i = 1, + l = xcoords.length - 1, + xvals = [], + yvals = []; + + + // Too few points, need at least two + if (l < 1) + { + return null; + } + + outpoints[0] = { + startx: xcoords[0], + starty: ycoords[0], + endx: xcoords[1], + endy: ycoords[1] + }; + + // Special case, the Bezier should be a straight line + if (l === 1) + { + outpoints[0].ctrlx1 = (2.0*xcoords[0] + xcoords[1])/3.0; + outpoints[0].ctrly2 = (2.0*ycoords[0] + ycoords[1])/3.0; + outpoints[0].ctrlx2 = 2.0*outpoints[0].ctrlx1 - xcoords[0]; + outpoints[0].ctrly2 = 2.0*outpoints[0].ctrly1 - ycoords[0]; + return outpoints; + } + + for (; i < l; ++i) + { + outpoints.push({ + startx: Math.round(xcoords[i]), + starty: Math.round(ycoords[i]), + endx: Math.round(xcoords[i+1]), + endy: Math.round(ycoords[i+1]) + }); + xvals[i] = 4.0 * xcoords[i] + 2*xcoords[i+1]; + yvals[i] = 4.0*ycoords[i] + 2*ycoords[i+1]; + } + + xvals[0] = xcoords[0] + (2.0 * xcoords[1]); + xvals[l-1] = (8.0 * xcoords[l-1] + xcoords[l]) / 2.0; + xvals = this.getControlPoints(xvals.concat()); + yvals[0] = ycoords[0] + (2.0 * ycoords[1]); + yvals[l-1] = (8.0 * ycoords[l-1] + ycoords[l]) / 2.0; + yvals = this.getControlPoints(yvals.concat()); + + for (i = 0; i < l; ++i) + { + outpoints[i].ctrlx1 = Math.round(xvals[i]); + outpoints[i].ctrly1 = Math.round(yvals[i]); + + if (i < l-1) + { + outpoints[i].ctrlx2 = Math.round(2*xcoords[i+1] - xvals[i+1]); + outpoints[i].ctrly2 = Math.round(2*ycoords[i+1] - yvals[i+1]); + } + else + { + outpoints[i].ctrlx2 = Math.round((xcoords[l] + xvals[l-1])/2); + outpoints[i].ctrly2 = Math.round((ycoords[l] + yvals[l-1])/2); + } + } + + return outpoints; + }, + + /** + * Gets the control points for the curve. + * + * @method getControlPoints + * @param {Array} vals Collection of values coords used to generate control points. + * @return Array + * @private + */ + getControlPoints: function(vals) + { + var l = vals.length, + x = [], + tmp = [], + b = 2.0, + i = 1; + x[0] = vals[0] / b; + for (; i < l; ++i) + { + tmp[i] = 1/b; + b = (i < l-1 ? 4.0 : 3.5) - tmp[i]; + x[i] = (vals[i] - x[i-1]) / b; + } + + for (i = 1; i < l; ++i) + { + x[l-i-1] -= tmp[l-i] * x[l-i]; + } + + return x; + } +}; +Y.CurveUtil = CurveUtil; + + +}, '3.10.3');