/*global Raphael */ /*global d3 */ ;(function (name, definition) { if (typeof define === 'function') { // Module define(definition); } else { // Assign to common namespaces or simply the global object (window) this[name] = definition(function (id) { return this[id];}); } })('Parallel', function (require) { var DataV = require('DataV'); var Parallel = DataV.extend(DataV.Chart, { initialize: function (node, options) { this.type = "Parallel"; this.node = this.checkNode(node); this.defaults = {}; // Properties this.allDimensions = []; this.dimensions = []; this.dimensionType = {}; this.dimensionDomain = {}; this.dimensionExtent = {}; // Canvas this.defaults.width = 750; this.defaults.height = 500; this.defaults.marginWidth = [20,20,20,20]; this.defaults.backgroundAttr = {"fill": "none", "stroke": "#ccc", "stroke-opacity": 0.4}; this.defaults.foregroundAttr = {"fill": "none", "stroke": "steelblue", "stroke-opacity": 0.7}; this.defaults.domainAttr = {"stroke": "#000"}; this.defaults.tickAttr = {"stroke": "#000"}; this.defaults.tickTextAttr = {}; this.defaults.titleAttr ={}; this.customEvent = { "brushstart": function(){}, "brushend": function(){}, "brush": function(){} }; this.setOptions(options); this.createCanvas(); } }); Parallel.prototype.checkNode = function (node) { if (!node) { throw new Error("Please specify which node to render."); } if(typeof(node) === "string") { return document.getElementById(node); } else if (node.nodeName) {//DOM-element return node; } throw new Error("Please specify which node to render."); }; Parallel.prototype.chooseDimensions = function (dimen) { var conf = this.defaults; this.dimensions = []; for (var i=0, l=dimen.length; i end) { temp = start; start = end; end = temp; } start = Math.max(0, start + 0.5 - 0.5); end = Math.min(this.dimensionDomain[dimen].length, end + 0.5 + 0.5); b.extent([start, end]); */ b.extent(this._getOrdinalExtent(dimen, this.dimensionExtent[dimen])); } } this.y[dimen].brush = b(paper); //this.y[dimensions[i]].brush.dimension = dimensions[i]; } if (!$.isEmptyObject(this.dimensionExtent)) { this.brush(); } }; Parallel.prototype._getOrdinalExtent = function (dimen, stringArray) { start = this.dimensionDomain[dimen].itemIndex[stringArray[0]]; end = this.dimensionDomain[dimen].itemIndex[stringArray[1]]; if (start > end) { temp = start; start = end; end = temp; } start = Math.max(0, start + 0.5 - 0.5); end = Math.min(this.dimensionDomain[dimen].length, end + 0.5 + 0.5); return [start, end]; }; Parallel.prototype.createCanvas = function () { if (!this.node) { throw new Error("Please specify which node to render."); } var conf = this.defaults; this.node.style.position = "relative"; this.canvas = Raphael(this.node, conf.width, conf.height); //console.log(this.canvas); }; Parallel.prototype.getColor = function (colorJson) { var colorM = DataV.getColor(); var color; var colorStyle = colorJson ? colorJson : {}; var colorMode = colorStyle.mode ? colorStyle.mode : 'default'; switch (colorMode){ case "gradient": var index = colorJson.index ? colorJson.index : 0; index = index <0 ? 0 : (index>colorM.length-1 ? colorM.length-1 : index); color = d3.interpolateRgb.apply(null, [colorM[index][0],colorM[index][1]]); break; case "random": case "default": var ratio = colorStyle.ratio ? colorStyle.ratio : 0; if(ratio <0 ){ratio=0;} if(ratio > 1) { ratio =1;} var colorArray =[]; for (var i=0, l=colorM.length; i