jui.define("chart.topology.sort.random", [], function() { return function(data, area, space) { var xy = []; for(var i = 0; i < data.length; i++) { var x = Math.floor(Math.random() * (area.width - space)), y = Math.floor(Math.random() * (area.height - space)); xy[i] = { x: area.x + x, y: area.y + y }; } return xy; } }); jui.define("chart.topology.sort.linear", [], function() { var cache = {}; function getRandomRowIndex(row_cnt) { var row_index = Math.floor(Math.random() * row_cnt); if(cache[row_index]) { var cnt = 0; for(var k in cache) { cnt++; } if(cnt < row_cnt) { return getRandomRowIndex(row_cnt); } else { cache = {}; } } else { cache[row_index] = true; } return row_index; } return function(data, area, space) { var xy = [], row_cnt = Math.floor(area.height / space), col_cnt = Math.floor(area.width / space), col_step = Math.floor(col_cnt / data.length), col_index = 0; var left = -1, right = data.length; for(var i = 0; i < data.length; i++) { var x = 0, y = 0, index = 0; if(i % 2 == 0) { x = col_index * space; y = getRandomRowIndex(row_cnt) * space; col_index += col_step; left += 1; index = left; } else { x = (col_cnt - col_index) * space + space; y = getRandomRowIndex(row_cnt) * space; right -=1; index = right; } xy[index] = { x: area.x + x + space, y: area.y + y + (space / 2) }; } return xy; } }); jui.define("chart.grid.topologytable", [ "util.base" ], function(_) { /** * @class chart.grid.topologytable * @extends chart.grid.core */ var TopologyTableGrid = function() { var self = this; function getDataIndex(key) { var index = null, data = self.axis.data; for(var i = 0, len = data.length; i < len; i++) { if(self.axis.getValue(data[i], "key") == key) { index = i; break; } } return index; } this.drawBefore = function() { if(!this.axis.cacheXY) { var sortFunc = jui.include("chart.topology.sort." + this.grid.sort), sortArgs = [ this.axis.data, this.axis.area(), this.grid.space ]; if(_.typeCheck("function", sortFunc)) { this.axis.cacheXY = sortFunc.apply(this, sortArgs); } else { sortFunc = jui.include(this.grid.sort); if(_.typeCheck("function", sortFunc)) { this.axis.cacheXY = sortFunc.apply(this, sortArgs); } } } if(!this.axis.cache) { this.axis.cache = { scale: 1, viewX: 0, viewY: 0, nodeKey: null // 활성화 상태의 노드 키 } } this.scale = (function() { return function(index) { var index = (_.typeCheck("string", index)) ? getDataIndex(index) : index; var func = { setX: function(value) { self.axis.cacheXY[index].x = value - self.axis.cache.viewX; }, setY: function(value) { self.axis.cacheXY[index].y = value - self.axis.cache.viewY; }, setScale: function(s) { self.axis.cache.scale = s; }, setView: function(x, y) { self.axis.cache.viewX = x; self.axis.cache.viewY = y; }, moveLast: function() { var target1 = self.axis.cacheXY.splice(index, 1); self.axis.cacheXY.push(target1[0]); var target2 = self.axis.data.splice(index, 1); self.axis.data.push(target2[0]); } } if(_.typeCheck("integer", index)) { var x = self.axis.cacheXY[index].x + self.axis.cache.viewX, y = self.axis.cacheXY[index].y + self.axis.cache.viewY, scale = self.axis.cache.scale; return _.extend(func, { x: x * scale, y: y * scale, scale: scale }); } return func; } })(this.axis); } this.draw = function() { this.grid.hide = true; return this.drawGrid(); } } TopologyTableGrid.setup = function() { return { /** @cfg {String} [sort=null] */ sort: "linear", // or random /** @cfg {Number} [space=50] */ space: 50 } } return TopologyTableGrid; }, "chart.grid.core");