| Index: static/js/plotkit/Base.js
|
| diff --git a/static/js/plotkit/Base.js b/static/js/plotkit/Base.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ebe547ac2cf8bd5998acce6852b0ae0c74c7919d
|
| --- /dev/null
|
| +++ b/static/js/plotkit/Base.js
|
| @@ -0,0 +1,401 @@
|
| +/*
|
| + =======
|
| + PlotKit is a collection of Javascript classes that allows
|
| + you to quickly visualise data using different types of charts.
|
| +
|
| + http://www.liquidx.net/plotkit/
|
| +
|
| + See LICENSE file for copyright information.
|
| +*/
|
| +
|
| +// --------------------------------------------------------------------
|
| +// Check required components
|
| +// --------------------------------------------------------------------
|
| +
|
| +try {
|
| + if (typeof(MochiKit.Base) == 'undefined' ||
|
| + typeof(MochiKit.DOM) == 'undefined' ||
|
| + typeof(MochiKit.Color) == 'undefined' ||
|
| + typeof(MochiKit.Format) == 'undefined')
|
| + {
|
| + throw "";
|
| + }
|
| +}
|
| +catch (e) {
|
| + throw "PlotKit depends on MochiKit.{Base,Color,DOM,Format}"
|
| +}
|
| +
|
| +// -------------------------------------------------------------------
|
| +// Inject Common Shortcuts we use into MochiKit.Color.Color
|
| +// -------------------------------------------------------------------
|
| +
|
| +MochiKit.Base.update(MochiKit.Color.Color.prototype, {
|
| + asFillColor: function() {
|
| + return this.lighterColorWithLevel(0.3);
|
| + },
|
| +
|
| + asStrokeColor: function() {
|
| + return this.darkerColorWithLevel(0.1);
|
| + },
|
| +
|
| + asPointColor: function() {
|
| + return this.lighterColorWithLevel(0.1);
|
| + }
|
| +});
|
| +
|
| +
|
| +// -------------------------------------------------------------------
|
| +// Define our own PlotKit namespace
|
| +// -------------------------------------------------------------------
|
| +
|
| +if (typeof(PlotKit) == 'undefined') {
|
| + PlotKit = {};
|
| +}
|
| +
|
| +PlotKit.NAME = "PlotKit";
|
| +PlotKit.VERSION = "0.8";
|
| +PlotKit.__repr__ = function() {
|
| + return "[" + this.NAME + " " + this.VERSION + "]";
|
| +};
|
| +
|
| +PlotKit.toString = function() {
|
| + return this.__repr__();
|
| +}
|
| +
|
| +// -------------------------------------------------------------------
|
| +// Encapsulate all our utility function into it's own namespace.
|
| +// -------------------------------------------------------------------
|
| +
|
| +if (typeof(PlotKit.Base) == 'undefined') {
|
| + PlotKit.Base = {};
|
| +}
|
| +
|
| +PlotKit.Base.NAME = 'PlotKit.Base';
|
| +PlotKit.Base.VERSION = PlotKit.VERSION;
|
| +
|
| +PlotKit.Base.__repr__ = function() {
|
| + return "[" + this.NAME + " " + this.VERSION + "]";
|
| +};
|
| +
|
| +PlotKit.Base.toString = function() {
|
| + return this.__repr__();
|
| +}
|
| +
|
| +
|
| +// Detect whether we are using prototype.js
|
| +PlotKit.Base.usingPrototype = function() {
|
| + try {
|
| + return (typeof(Object.extend) == 'function');
|
| + }
|
| + catch (e) {
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +
|
| +MochiKit.Base.update(PlotKit.Base, {
|
| + roundInterval: function(range, intervals, precision) {
|
| + // We want to make the interval look regular,
|
| + var trunc = MochiKit.Format.roundToFixed;
|
| + var sep = range/intervals;
|
| + return parseFloat(trunc(sep, precision));
|
| + },
|
| +
|
| + collapse: function(lst) {
|
| + var m = MochiKit.Base;
|
| + var biggerList = new Array();
|
| + for (var i = 0; i < lst.length; i++) {
|
| + biggerList = m.concat(biggerList, lst[i]);
|
| + }
|
| + if (PlotKit.Base.usingPrototype()) {
|
| + delete biggerList.extend;
|
| + delete biggerList.from;
|
| + delete biggerList.inspect;
|
| + }
|
| +
|
| + return biggerList;
|
| + },
|
| +
|
| + uniq: function(sortedList) {
|
| + // get unique elements in list, exactly the same as unix shell's uniq.
|
| + var m = MochiKit.Base;
|
| +
|
| + if (!m.isArrayLike(sortedList) || (sortedList.length < 1))
|
| + return new Array();
|
| +
|
| + var uniq = new Array();
|
| + var lastElem = sortedList[0];
|
| + uniq.push(sortedList[0]);
|
| + for (var i = 1; i < sortedList.length; i++) {
|
| + if (m.compare(sortedList[i], lastElem) != 0) {
|
| + lastElem = sortedList[i];
|
| + uniq.push(sortedList[i]);
|
| + }
|
| + }
|
| + return uniq;
|
| + },
|
| +
|
| + colorScheme: function() {
|
| + var mb = MochiKit.Base;
|
| + var mc = MochiKit.Color
|
| + var scheme = ["red", "orange", "yellow", "green", "cyan", "blue", "purple", "magenta"];
|
| +
|
| + var makeColor = function(name) {
|
| + return mc.Color[name + "Color"]()
|
| + };
|
| +
|
| + return mb.map(makeColor, scheme);
|
| + },
|
| +
|
| + baseDarkPrimaryColors: function () {
|
| + var hexColor = MochiKit.Color.Color.fromHexString;
|
| + return [hexColor("#ad3f40"),
|
| + hexColor("#ddac2c"),
|
| + hexColor("#dfdd0c"),
|
| + hexColor("#5276c4"),
|
| + hexColor("#739c5a")];
|
| + },
|
| +
|
| + basePrimaryColors: function () {
|
| + var hexColor = MochiKit.Color.Color.fromHexString;
|
| + return [hexColor("#d24c4d"),
|
| + hexColor("#f2b32f"),
|
| + hexColor("#ece90e"),
|
| + hexColor("#5d83da"),
|
| + hexColor("#78a15d")];
|
| + },
|
| +
|
| + baseBlueColors: function () {
|
| + var hexColor = MochiKit.Color.Color.fromHexString;
|
| + return [hexColor("#4b6b94"), hexColor("#5d81b4"), hexColor("#acbad2")];
|
| + },
|
| +
|
| + palette: function(baseColor, fromLevel, toLevel, increment) {
|
| + var isNil = MochiKit.Base.isUndefinedOrNull;
|
| + var fractions = new Array();
|
| + if (isNil(increment))
|
| + increment = 0.1;
|
| + if (isNil(toLevel))
|
| + toLevel = 0.4;
|
| + if (isNil(fromLevel))
|
| + fromLevel = -0.2;
|
| +
|
| + var level = fromLevel;
|
| + while (level <= toLevel) {
|
| + fractions.push(level);
|
| + level += increment;
|
| + }
|
| +
|
| + var makeColor = function(color, fraction) {
|
| + return color.lighterColorWithLevel(fraction);
|
| + };
|
| + return MochiKit.Base.map(partial(makeColor, baseColor), fractions);
|
| + },
|
| +
|
| + excanvasSupported: function() {
|
| + if (/MSIE/.test(navigator.userAgent) && !window.opera) {
|
| + return true;
|
| + }
|
| + return false;
|
| + },
|
| +
|
| + // The following functions are from quirksmode.org
|
| + // http://www.quirksmode.org/js/findpos.html
|
| +
|
| + findPosX: function(obj) {
|
| + var curleft = 0;
|
| + if (obj.offsetParent) {
|
| + while (obj.offsetParent) {
|
| + curleft += obj.offsetLeft
|
| + obj = obj.offsetParent;
|
| + }
|
| + }
|
| + else if (obj.x)
|
| + curleft += obj.x;
|
| + return curleft;
|
| + },
|
| +
|
| + findPosY: function(obj) {
|
| + var curtop = 0;
|
| + if (obj.offsetParent) {
|
| + while (obj.offsetParent) {
|
| + curtop += obj.offsetTop
|
| + obj = obj.offsetParent;
|
| + }
|
| + }
|
| + else if (obj.y)
|
| + curtop += obj.y;
|
| + return curtop;
|
| + },
|
| +
|
| + isFuncLike: function(obj) {
|
| + return (typeof(obj) == 'function');
|
| + }
|
| +});
|
| +
|
| +//
|
| +// Prototype.js aware (crippled) versions of map and items.
|
| +//
|
| +
|
| +PlotKit.Base.map = function(fn, lst) {
|
| + if (PlotKit.Base.usingPrototype()) {
|
| + var rval = [];
|
| + for (var x in lst) {
|
| + if (typeof(lst[x]) == 'function') continue;
|
| + rval.push(fn(lst[x]));
|
| + }
|
| + return rval;
|
| + }
|
| + else {
|
| + return MochiKit.Base.map(fn, lst);
|
| + }
|
| +};
|
| +
|
| +PlotKit.Base.items = function(lst) {
|
| + if (PlotKit.Base.usingPrototype()) {
|
| + var rval = [];
|
| + for (var x in lst) {
|
| + if (typeof(lst[x]) == 'function') continue;
|
| + rval.push([x, lst[x]]);
|
| + }
|
| + return rval;
|
| + }
|
| + else {
|
| + return MochiKit.Base.items(lst);
|
| + }
|
| +};
|
| +
|
| +PlotKit.Base.keys = function(lst) {
|
| + if (PlotKit.Base.usingPrototype()) {
|
| + var rval = [];
|
| + for (var x in lst) {
|
| + if (typeof(lst[x]) == 'function') continue;
|
| + rval.push(x);
|
| + }
|
| + return rval;
|
| + }
|
| + else {
|
| + return MochiKit.Base.keys(lst);
|
| + }
|
| +};
|
| +
|
| +//
|
| +// colour schemes
|
| +//
|
| +
|
| +PlotKit.Base.baseColors = function () {
|
| + var hexColor = MochiKit.Color.Color.fromHexString;
|
| + return [hexColor("#476fb2"),
|
| + hexColor("#be2c2b"),
|
| + hexColor("#85b730"),
|
| + hexColor("#734a99"),
|
| + hexColor("#26a1c5"),
|
| + hexColor("#fb8707"),
|
| + hexColor("#000000")];
|
| +};
|
| +
|
| +PlotKit.Base.officeBaseStyle = {
|
| + "axisLineWidth": 2.0,
|
| + "axisLabelColor": Color.grayColor(),
|
| + "axisLineColor": Color.whiteColor(),
|
| + "padding": {top: 5, bottom: 10, left: 30, right: 30}
|
| +};
|
| +
|
| +MochiKit.Base.update(PlotKit.Base,{
|
| + officeBlue: function() {
|
| + var r = {
|
| + "colorScheme": PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),
|
| + "backgroundColor": PlotKit.Base.baseColors()[0].lighterColorWithLevel(0.45)
|
| + };
|
| + MochiKit.Base.update(r, PlotKit.Base.officeBaseStyle);
|
| + return r;
|
| + },
|
| + officeRed: function() {
|
| + var r = {
|
| + "colorScheme": PlotKit.Base.palette(PlotKit.Base.baseColors()[1]),
|
| + "backgroundColor": PlotKit.Base.baseColors()[1].lighterColorWithLevel(0.5)
|
| + };
|
| + MochiKit.Base.update(r, PlotKit.Base.officeBaseStyle);
|
| + return r;
|
| + },
|
| + officeGreen: function() {
|
| + var r = {
|
| + "colorScheme": PlotKit.Base.palette(PlotKit.Base.baseColors()[2]),
|
| + "backgroundColor": PlotKit.Base.baseColors()[2].lighterColorWithLevel(0.5)
|
| + };
|
| + MochiKit.Base.update(r, PlotKit.Base.officeBaseStyle);
|
| + return r;
|
| + },
|
| + officePurple: function() {
|
| + var r = {
|
| + "colorScheme": PlotKit.Base.palette(PlotKit.Base.baseColors()[3]),
|
| + "backgroundColor": PlotKit.Base.baseColors()[3].lighterColorWithLevel(0.5)
|
| + };
|
| + MochiKit.Base.update(r, PlotKit.Base.officeBaseStyle);
|
| + return r;
|
| + },
|
| +
|
| + officeCyan: function() {
|
| + var r = {
|
| + "colorScheme": PlotKit.Base.palette(PlotKit.Base.baseColors()[4]),
|
| + "backgroundColor": PlotKit.Base.baseColors()[4].lighterColorWithLevel(0.5)
|
| + };
|
| + MochiKit.Base.update(r, PlotKit.Base.officeBaseStyle);
|
| + return r;
|
| + },
|
| +
|
| + officeOrange: function() {
|
| + var r = {
|
| + "colorScheme": PlotKit.Base.palette(PlotKit.Base.baseColors()[5]),
|
| + "backgroundColor": PlotKit.Base.baseColors()[5].lighterColorWithLevel(0.4)
|
| + };
|
| + MochiKit.Base.update(r, PlotKit.Base.officeBaseStyle);
|
| + return r;
|
| + },
|
| +
|
| + officeBlack: function() {
|
| + var r = {
|
| + "colorScheme": PlotKit.Base.palette(PlotKit.Base.baseColors()[6], 0.0, 0.6),
|
| + "backgroundColor": PlotKit.Base.baseColors()[6].lighterColorWithLevel(0.9)
|
| + };
|
| + MochiKit.Base.update(r, PlotKit.Base.officeBaseStyle);
|
| + return r;
|
| + }
|
| +});
|
| +
|
| +
|
| +PlotKit.Base.EXPORT = [
|
| + "baseColors",
|
| + "collapse",
|
| + "colorScheme",
|
| + "findPosX",
|
| + "findPosY",
|
| + "officeBaseStyle",
|
| + "officeBlue",
|
| + "officeRed",
|
| + "officeGreen",
|
| + "officePurple",
|
| + "officeCyan",
|
| + "officeOrange",
|
| + "officeBlack",
|
| + "roundInterval",
|
| + "uniq",
|
| + "isFuncLike",
|
| + "excanvasSupported"
|
| +];
|
| +
|
| +PlotKit.Base.EXPORT_OK = [];
|
| +
|
| +PlotKit.Base.__new__ = function() {
|
| + var m = MochiKit.Base;
|
| +
|
| + m.nameFunctions(this);
|
| +
|
| + this.EXPORT_TAGS = {
|
| + ":common": this.EXPORT,
|
| + ":all": m.concat(this.EXPORT, this.EXPORT_OK)
|
| + };
|
| +};
|
| +
|
| +PlotKit.Base.__new__();
|
| +MochiKit.Base._exportSymbols(this, PlotKit.Base);
|
|
|