diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..6da9b62 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,73 @@ +{ + "asi": false, + "bitwise": false, + "boss": false, + "browser": true, + "camelcase": true, + "couch": false, + "curly": true, + "debug": false, + "devel": true, + "dojo": false, + "eqeqeq": true, + "eqnull": true, + "es3": false, + "esnext": false, + "evil": false, + "expr": true, + "forin": false, + "funcscope": true, + "gcl": false, + "globalstrict": false, + "immed": true, + "iterator": false, + "jquery": false, + "lastsemic": false, + "latedef": false, + "laxbreak": true, + "laxcomma": false, + "loopfunc": true, + "mootools": false, + "moz": false, + "multistr": false, + "newcap": true, + "noarg": true, + "node": false, + "noempty": false, + "nonew": true, + "nonstandard": false, + "nomen": false, + "onecase": false, + "onevar": false, + "passfail": false, + "phantom": false, + "plusplus": false, + "proto": false, + "prototypejs": false, + "regexdash": true, + "regexp": false, + "rhino": false, + "scripturl": true, + "shadow": false, + "shelljs": false, + "smarttabs": true, + "strict": false, + "sub": false, + "supernew": false, + "trailing": true, + "undef": true, + "unused": true, + "validthis": true, + "withstmt": false, + "white": true, + "worker": false, + "wsh": false, + "yui": false, + + "maxlen": 120, + "indent": 4, + "maxerr": 250, + "predef": [ "require", "define" ], + "quotmark": "double", + "maxcomplexity": 10 +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..dbd47e4 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: "0.10" +install: "npm -g install jshint" +script: "jshint ." \ No newline at end of file diff --git a/DrillDownUp.js b/DrillDownUp.js index 2736ffb..f33e178 100755 --- a/DrillDownUp.js +++ b/DrillDownUp.js @@ -1,42 +1,42 @@ define(["dojo/_base/lang", "dojo/_base/event", "dcl/dcl", "dojo/on", "dojo/dom-geometry", "dojo/dom-construct", "dojo/dom-style", "dojo/_base/fx", "dojo/has!touch?dojox/gesture/tap"], - function(lang, event, dcl, on, domGeom, domConstruct, domStyle, fx, tap){ + function (lang, event, dcl, on, domGeom, domConstruct, domStyle, fx, tap) { return dcl(null, { // summary: // Specializes TreeMap to support drill down and up operations. - postCreate: function(){ + postCreate: function () { this.own(on(this, "dblclick", lang.hitch(this, this._onDoubleClick))); - if(tap){ + if (tap) { this.own(on(this, tap.doubletap, lang.hitch(this, this._onDoubleClick))); } }, - _onDoubleClick: function(e){ + _onDoubleClick: function (e) { var renderer = this._getRendererFromTarget(e.target); - if(renderer.item){ + if (renderer.item) { var item = renderer.item; - if(this._isLeaf(item)){ + if (this._isLeaf(item)) { // walk up item = renderer.parentItem; renderer = this.itemToRenderer[this.getIdentity(item)]; // our leaf parent is the root, we can't do much... - if(renderer == null){ + if (renderer == null) { return; } } // Drill up - if(this.rootItem == item){ + if (this.rootItem === item) { this.drillUp(renderer); - }else{ + } else { this.drillDown(renderer); } event.stop(e); } }, - drillUp: function(renderer){ + drillUp: function (renderer) { // summary: // Drill up from the given renderer. // renderer: DomNode @@ -61,26 +61,33 @@ define(["dojo/_base/lang", "dojo/_base/event", "dcl/dcl", "dojo/on", "dojo/dom-g var corner = domGeom.getMarginBox(this); fx.animateProperty({ - node: renderer, duration: 500, properties: { + node: renderer, + duration: 500, + properties: { left: { end: finalBox.x - corner.l - }, top: { + }, + top: { end: finalBox.y - corner.t - }, height: { + }, + height: { end: finalBox.h - }, width: { + }, + width: { end: finalBox.w } - }, onAnimate: lang.hitch(this, function(values){ + }, + onAnimate: lang.hitch(this, function () { var box = domGeom.getContentBox(renderer); this._layoutGroupContent(renderer, box.w, box.h, renderer.level + 1, false, true); - }), onEnd: lang.hitch(this, function(){ + }), + onEnd: lang.hitch(this, function () { this.removeChild(renderer); }) }).play(); }, - drillDown: function(renderer){ + drillDown: function (renderer) { // summary: // Drill up from the given renderer. // renderer: DomNode @@ -95,26 +102,34 @@ define(["dojo/_base/lang", "dojo/_base/event", "dcl/dcl", "dojo/on", "dojo/dom-g parentNode.removeChild(renderer); domConstruct.place(renderer, this); domStyle.set(renderer, { - left: (spanInfo.x - box.l)+ "px", top: (spanInfo.y - box.t)+ "px" + left: (spanInfo.x - box.l) + "px", + top: (spanInfo.y - box.t) + "px" }); var zIndex = domStyle.get(renderer, "zIndex"); domStyle.set(renderer, "zIndex", 40); fx.animateProperty({ - node: renderer, duration: 500, properties: { + node: renderer, + duration: 500, + properties: { left: { end: box.l - }, top: { + }, + top: { end: box.t - }, height: { + }, + height: { end: box.h - }, width: { + }, + width: { end: box.w } - }, onAnimate: lang.hitch(this, function(values){ + }, + onAnimate: lang.hitch(this, function () { var box2 = domGeom.getContentBox(renderer); this._layoutGroupContent(renderer, box2.w, box2.h, renderer.level + 1, false); - }), onEnd: lang.hitch(this, function(){ + }), + onEnd: lang.hitch(this, function () { domStyle.set(renderer, "zIndex", zIndex); this.rootItem = item; }) diff --git a/GroupLabel.js b/GroupLabel.js index 3ed17ed..89ebcee 100755 --- a/GroupLabel.js +++ b/GroupLabel.js @@ -1,15 +1,14 @@ -define(["dcl/dcl", "dojo/dom-construct", "dojo/dom-style"], - function(dcl, domConstruct, domStyle) { +define(["dcl/dcl", "dojo/dom-construct", "dojo/dom-style"], function (dcl, domConstruct, domStyle) { return dcl(null, { // summary: // Specializes TreeMap to remove leaf labels and display group labels centered on group // content instead of display them in headers. - createRenderer: dcl.superCall(function(sup){ - return function(item, level, kind){ + createRenderer: dcl.superCall(function (sup) { + return function (item, level, kind) { var renderer = sup.call(this, item, level, kind); - if(kind == "content" || kind == "leaf"){ + if (kind === "content" || kind === "leaf") { var p = domConstruct.create("div"); domStyle.set(p, { "zIndex": 30, @@ -22,22 +21,24 @@ define(["dcl/dcl", "dojo/dom-construct", "dojo/dom-style"], domConstruct.place(p, renderer); } return renderer; - } + }; }), - styleRenderer: function(renderer, item, level, kind){ - switch(kind){ - case "leaf": - domStyle.set(renderer, "background", this.getColorForItem(item).toHex()); - case "content": - if(level == 0){ - renderer.firstChild.innerHTML = this.getLabelForItem(item); - }else{ - renderer.firstChild.innerHTML = null; - } - break; - case "header": - domStyle.set(renderer, "display", "none"); + styleRenderer: function (renderer, item, level, kind) { + switch (kind) { + case "leaf": + /* jshint -W086 */ + domStyle.set(renderer, "background", this.getColorForItem(item).toHex()); + case "content": + /* jshint +W086 */ + if (level === 0) { + renderer.firstChild.innerHTML = this.getLabelForItem(item); + } else { + renderer.firstChild.innerHTML = null; + } + break; + case "header": + domStyle.set(renderer, "display", "none"); } } }); diff --git a/Keyboard.js b/Keyboard.js index ca0faf6..1ffd762 100755 --- a/Keyboard.js +++ b/Keyboard.js @@ -1,41 +1,42 @@ define(["dojo/_base/lang", "dojo/_base/event", "dcl/dcl", "dojo/on", "dojo/keys", "dojo/dom-attr", "./_utils", "dui/_FocusMixin"], - function(lang, event, dcl, on, keys, domAttr, utils, _FocusMixin){ + function (lang, event, dcl, on, keys, domAttr, utils, _FocusMixin) { return dcl(_FocusMixin, { // summary: // Specializes TreeMap to support keyboard navigation and accessibility. - + // tabIndex: String // Order fields are traversed when user hits the tab key tabIndex: "0", _setTabIndexAttr: "domNode", - - constructor: function(){ + + constructor: function () { }, - - postCreate: function(){ + + postCreate: function () { this.own(on(this, "keydown", lang.hitch(this, this._onKeyDown))); this.own(on(this, "mousedown", lang.hitch(this, this._onMouseDown))); }, - createRenderer: dcl.superCall(function(sup){ - return function(item, level, kind){ + createRenderer: dcl.superCall(function (sup) { + return function (item, level, kind) { var renderer = sup.call(this, item, level, kind); // on Firefox we need a tabindex on sub divs to let the keyboard event be dispatched // put -1 so that it is not tablable domAttr.set(renderer, "tabindex", "-1"); return renderer; - } + }; }), - - _onMouseDown: function(e){ + + _onMouseDown: function () { this.focus(); }, - - _onKeyDown: function(e){ + + /* jshint -W074 */ + _onKeyDown: function (e) { var selected = this.selectedItem; - if(!selected){ + if (!selected) { // nothing selected selected we can't navigate return; } @@ -43,53 +44,54 @@ define(["dojo/_base/lang", "dojo/_base/event", "dcl/dcl", "dojo/on", "dojo/keys" var parent = renderer.parentItem; var children, childrenI, selectedI; // we also need items to be sorted out - if(e.keyCode != keys.UP_ARROW && e.keyCode != keys.NUMPAD_MINUS && - e.keyCode != keys.NUMPAD_PLUS){ - children = (e.keyCode == keys.DOWN_ARROW)?selected.children:parent.children; - if(children){ + if (e.keyCode !== keys.UP_ARROW && e.keyCode !== keys.NUMPAD_MINUS && + e.keyCode !== keys.NUMPAD_PLUS) { + children = (e.keyCode === keys.DOWN_ARROW) ? selected.children : parent.children; + if (children) { childrenI = utils.initElements(children, lang.hitch(this, this._computeAreaForItem)).elements; selectedI = childrenI[children.indexOf(selected)]; - childrenI.sort(function(a, b){ + childrenI.sort(function (a, b) { return b.size - a.size; }); - }else{ + } else { return; } } var newSelected; - switch(e.keyCode){ - case keys.LEFT_ARROW: - newSelected = children[childrenI[Math.max(0, childrenI.index(selectedI)-1)].index]; + switch (e.keyCode) { + case keys.LEFT_ARROW: + newSelected = children[childrenI[Math.max(0, childrenI.index(selectedI) - 1)].index]; break; - case keys.RIGHT_ARROW: - newSelected = children[childrenI[Math.min(childrenI.length-1, childrenI.indexOf(selectedI)+1)].index]; + case keys.RIGHT_ARROW: + newSelected = children[childrenI[Math.min(childrenI.length - 1, + childrenI.indexOf(selectedI) + 1)].index]; break; - case keys.DOWN_ARROW: + case keys.DOWN_ARROW: newSelected = children[childrenI[0].index]; break; - case keys.UP_ARROW: + case keys.UP_ARROW: newSelected = parent; break; // TODO //case "+": - case keys.NUMPAD_PLUS: - if(!this._isLeaf(selected) && this.drillDown){ + case keys.NUMPAD_PLUS: + if (!this._isLeaf(selected) && this.drillDown) { this.drillDown(renderer); event.stop(e); } break; // TODO //case "-": - case keys.NUMPAD_MINUS: - if(!this._isLeaf(selected) && this.drillUp){ + case keys.NUMPAD_MINUS: + if (!this._isLeaf(selected) && this.drillUp) { this.drillUp(renderer); event.stop(e); } break; } - if(newSelected){ - if(!this._isRoot(newSelected)){ + if (newSelected) { + if (!this._isRoot(newSelected)) { this.selectedItem = newSelected; event.stop(e); } diff --git a/ScaledLabel.js b/ScaledLabel.js index f817942..062c391 100755 --- a/ScaledLabel.js +++ b/ScaledLabel.js @@ -1,40 +1,40 @@ define(["dcl/dcl", "dojo/dom-geometry", "dojo/dom-construct", "dojo/dom-style"], - function(dcl, domGeom, domConstruct, domStyle) { + function (dcl, domGeom, domConstruct, domStyle) { return dcl(null, { // summary: // Specializes TreeMap to display scaled leaf labels instead of constant size labels. - onRendererUpdated: function(evt){ - if(evt.kind == "leaf"){ + onRendererUpdated: function (evt) { + if (evt.kind === "leaf") { var renderer = evt.renderer; // start back with default size var oldSize = domStyle.get(renderer, "fontSize"); domStyle.set(renderer.firstChild, "fontSize", oldSize); - oldSize = parseInt(oldSize); + oldSize = parseInt(oldSize, 10); var hRatio = 0.75 * domGeom.getContentBox(renderer).w / domGeom.getMarginBox(renderer.firstChild).w; - var vRatio = domGeom.getContentBox(renderer).h / domGeom.getMarginBox(renderer.firstChild).h; + var vRatio = domGeom.getContentBox(renderer).h / domGeom.getMarginBox(renderer.firstChild).h; var hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w; var vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h; var newSize = Math.floor(oldSize * Math.min(hRatio, vRatio)); - while(vDiff > 0 && hDiff > 0){ + while (vDiff > 0 && hDiff > 0) { domStyle.set(renderer.firstChild, "fontSize", newSize + "px"); hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w; vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h; oldSize = newSize; newSize += 1; } - if(vDiff < 0 || hDiff < 0){ + if (vDiff < 0 || hDiff < 0) { // back track domStyle.set(renderer.firstChild, "fontSize", oldSize + "px"); } } }, - createRenderer: dcl.superCall(function(sup){ - return function(item, level, kind){ + createRenderer: dcl.superCall(function (sup) { + return function (item, level, kind) { var renderer = sup.call(this, item, level, kind); - if(kind == "leaf"){ + if (kind === "leaf") { var p = domConstruct.create("div"); domStyle.set(p, { "position": "absolute", @@ -43,18 +43,18 @@ define(["dcl/dcl", "dojo/dom-geometry", "dojo/dom-construct", "dojo/dom-style"], domConstruct.place(p, renderer); } return renderer; - } + }; }), - - styleRenderer: dcl.superCall(function(sup){ - return function(renderer, item, level, kind){ - if (kind != "leaf"){ + + styleRenderer: dcl.superCall(function (sup) { + return function (renderer, item, level, kind) { + if (kind !== "leaf") { sup.call(this, renderer, item, level, kind); - }else{ + } else { domStyle.set(renderer, "background", this.getColorForItem(item).toHex()); renderer.firstChild.innerHTML = this.getLabelForItem(item); } - } + }; }) }); }); \ No newline at end of file diff --git a/TreeMap.js b/TreeMap.js index 0022f7b..38e6bfd 100755 --- a/TreeMap.js +++ b/TreeMap.js @@ -1,20 +1,20 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/_base/Color", "dojo/touch", - "dojo/when", "dojo/on", "dojo/query", "dojo/dom-construct", "dojo/dom-geometry", "dojo/dom-class", "dojo/dom-style", - "./_utils", "dui/_WidgetBase", "dui/mixins/_Invalidating", "dui/mixins/Selection", "dui/mixins/StoreMap", - "dojo/uacss"], - function(lang, dcl, register, event, Color, touch, when, on, query, domConstruct, domGeom, domClass, domStyle, - utils, _WidgetBase, _Invalidating, Selection, StoreMap){ + "dojo/when", "dojo/on", "dojo/query", "dojo/dom-construct", "dojo/dom-geometry", "dojo/dom-class", "dojo/dom-style", + "./_utils", "dui/_WidgetBase", "dui/mixins/_Invalidating", "dui/mixins/Selection", "dui/mixins/StoreMap", + "dojo/uacss"], + function (lang, dcl, register, event, Color, touch, when, on, query, domConstruct, domGeom, domClass, domStyle, + utils, _WidgetBase, _Invalidating, Selection, StoreMap) { return register("d-treemap", [HTMLElement, _WidgetBase, _Invalidating, Selection, StoreMap], { // summary: // A treemap widget. - + baseClass: "dtreemap", - + // store: dojo/store/api/Store // The store that contains the items to display. store: null, - + // query: Object // A query that can be passed to when querying the store. query: {}, @@ -22,7 +22,7 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // queryOptions: dojo/store/api/Store.QueryOptions? // Options to be applied when querying the store. queryOptions: null, - + // itemToRenderer: [protected] Object // The associated array item to renderer list. itemToRenderer: null, @@ -42,7 +42,7 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // A function that returns the tooltip text of a treemap cell from a store item. If specified takes // precedence over tooltipAttr. tooltipFunc: null, - + // areaAttr: String // The attribute of the store item that contains the data used to compute the area of a treemap cell. // The attribute of the store item that contains the data used to compute the area of a treemap cell. @@ -50,10 +50,10 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ areaAttr: "", // areaFunc: Function - // A function that returns the value use to compute the area of cell from a store item. If specified takes - // precedence over areaAttr. + // A function that returns the value use to compute the area of cell from a store item. If specified + // takes precedence over areaAttr. areaFunc: null, - + // labelAttr: String // The attribute of the store item that contains the label of a treemap cell. // Default is "label". @@ -63,22 +63,22 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // A function that returns the label of a treemap cell from a store item. If specified takes // precedence over labelAttr. labelFunc: null, - + // labelThreshold: Number // The starting depth level at which the labels are not displayed anymore on cells. // If NaN no threshold is applied. The depth is the visual depth of the items on the screen not // in the data (i.e. after drill down the depth of an item might change). // Default is NaN. - labelThreshold: NaN, - + labelThreshold: NaN, + // colorAttr: String // The attribute of the store item that contains the data used to compute the color of a treemap cell. // Default is "". colorAttr: "", // colorFunc: Function - // A function that returns from a store item the data used to compute the color of a treemap cell. If specificied - // takes precedence over colorAttr. + // A function that returns from a store item the data used to compute the color of a treemap cell. + // If specificied takes precedence over colorAttr. colorFunc: null, // colorModel: dcolor/api/ColorModel @@ -105,79 +105,81 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ copyAllItemProps: true, - preCreate: function(){ + preCreate: function () { this.itemToRenderer = {}; this.addInvalidatingProperties("colorModel", "groupAttrs", "groupFuncs", "areaAttr", "areaFunc", "labelAttr", "labelFunc", "labelThreshold", "tooltipAttr", "tooltipFunc", "colorAttr", "colorFunc", "rootItem", "items"); }, - getIdentity: function(item){ - return item.__treeID?item.__treeID:this.store.getIdentity(item); + getIdentity: function (item) { + return item.__treeID ? item.__treeID : this.store.getIdentity(item); }, - resize: function(box){ - if(box){ + resize: function (box) { + if (box) { domGeom.setMarginBox(this, box); - this.invalidateRendering(); + this.invalidateRendering(); } }, - - postCreate: function(){ + + postCreate: function () { this.own(on(this, "mouseover", lang.hitch(this, this._onMouseOver))); this.own(on(this, "mouseout", lang.hitch(this, this._onMouseOut))); this.own(on(this, touch.release, lang.hitch(this, this._onMouseUp))); this.setAttribute("role", "presentation"); this.setAttribute("aria-label", "treemap"); }, - + // we need to call Store.refreshRendering - refreshRendering: dcl.superCall(function(sup){ - return function(){ + /* jshint -W074 */ + refreshRendering: dcl.superCall(function (sup) { + return function () { sup.call(this); var forceCreate = false; - if(this.invalidatedProperties.items){ + if (this.invalidatedProperties.items) { this.invalidatedProperties.groupAttrs = true; this.invalidatedProperties.colorAttr = true; } - if(this.invalidatedProperties.groupAttrs ||this.invalidatedProperties.groupFuncs){ + if (this.invalidatedProperties.groupAttrs || this.invalidatedProperties.groupFuncs) { this._updateTreeMapHierarchy(); forceCreate = true; } - if(this.invalidatedProperties.rootItem){ + if (this.invalidatedProperties.rootItem) { forceCreate = true; } - if(this.invalidatedProperties.colorAttr || this.invalidatedProperties.colorFunc || this.invalidatedProperties.colorModel){ - if(this.colorModel != null && this.items != null && this.colorModel.initialize){ - this.colorModel.initialize(this.items, lang.hitch(this, function(item){ + if (this.invalidatedProperties.colorAttr || this.invalidatedProperties.colorFunc || + this.invalidatedProperties.colorModel) { + if (this.colorModel != null && this.items != null && this.colorModel.initialize) { + this.colorModel.initialize(this.items, lang.hitch(this, function (item) { return this._colorFunc(item); })); } } - if(this.invalidatedProperties.areaAttr || this.invalidatedProperties.areaFunc){ + if (this.invalidatedProperties.areaAttr || this.invalidatedProperties.areaFunc) { this._removeAreaForGroup(); } - if(this._groupeditems == null){ + if (this._groupeditems == null) { return; } - if(forceCreate){ + if (forceCreate) { domConstruct.empty(this); } var rootItem = this.rootItem, rootParentItem; - if(rootItem != null){ + if (rootItem != null) { var rootItemRenderer = this._getRenderer(rootItem); - if(rootItemRenderer){ - if(this._isLeaf(rootItem)){ + if (rootItemRenderer) { + if (this._isLeaf(rootItem)) { rootItem = rootItemRenderer.parentItem; } rootParentItem = rootItemRenderer.parentItem; @@ -185,59 +187,59 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ } var box = domGeom.getMarginBox(this); - if(rootItem != null && !this._isRoot(rootItem)){ + if (rootItem != null && !this._isRoot(rootItem)) { this._buildRenderer(this, rootParentItem, rootItem, { x: box.l, y: box.t, w: box.w, h: box.h }, 0, forceCreate); - }else{ - this._buildChildrenRenderers(this, rootItem?rootItem:{ __treeRoot: true, children : this._groupeditems }, + } else { + this._buildChildrenRenderers(this, rootItem ? rootItem : { __treeRoot: true, children: this._groupeditems }, 0, forceCreate, box); } - } + }; }), - - _setItemsAttr: function(value){ + + _setItemsAttr: function (value) { this._set("items", value); this._set("rootItem", null); }, - _setGroupAttrsAttr: function(value){ + _setGroupAttrsAttr: function (value) { this._set("rootItem", null); - if(this.groupFuncs == null){ - if(value !=null){ - this._groupFuncs = value.map(function(attr){ - return function(item){ + if (this.groupFuncs == null) { + if (value != null) { + this._groupFuncs = value.map(function (attr) { + return function (item) { return item[attr]; }; }); - }else{ + } else { this._groupFuncs = null; } } this._set("groupAttrs", value); }, - _setGroupFuncsAttr: function(value){ + _setGroupFuncsAttr: function (value) { this._set("rootItem", null); this._set("groupFuncs", this._groupFuncs = value); - if(value == null && this.groupAttrs != null){ - this._groupFuncs = this.groupAttrs.map(function(attr){ - return function(item){ + if (value == null && this.groupAttrs != null) { + this._groupFuncs = this.groupAttrs.map(function (attr) { + return function (item) { return item[attr]; }; }); } }, - _colorFunc: function(/*Object*/ item){ + _colorFunc: function (/*Object*/ item) { var color = item.color; - if(!color){ + if (!color) { color = 0; } return parseFloat(color); }, - - createRenderer: function(item, level, kind){ + + createRenderer: function (item, level, kind) { // summary: // Creates an item renderer of the specified kind. This is called only when the treemap // is created. Default implementation always create div nodes. It also sets overflow @@ -253,14 +255,14 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // tags: // protected var div = domConstruct.create("div"); - if(kind != "header"){ + if (kind !== "header") { domStyle.set(div, "overflow", "hidden"); - domStyle.set(div, "position", "absolute"); + domStyle.set(div, "position", "absolute"); } return div; }, - - styleRenderer: function(renderer, item, level, kind){ + + styleRenderer: function (renderer, item, level, kind) { // summary: // Style the item renderer. This is called each time the treemap is refreshed. // For leaf items it colors them with the color computed from the color model. @@ -275,78 +277,81 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // The specified kind. This can either be "leaf", "group", "header" or "content". // tags: // protected - switch(kind){ - case "leaf": - domStyle.set(renderer, "background", this.getColorForItem(item).toHex()); - case "header": - var label = this.getLabelForItem(item); - if(label && (isNaN(this.labelThreshold) || level < this.labelThreshold)){ - renderer.innerHTML = label; - }else{ - domConstruct.empty(renderer); - } - break; - default: - - } + switch (kind) { + case "leaf": + /* jshint -W086 */ + domStyle.set(renderer, "background", this.getColorForItem(item).toHex()); + case "header": + /* jshint +W086 */ + var label = this.getLabelForItem(item); + if (label && (isNaN(this.labelThreshold) || level < this.labelThreshold)) { + renderer.innerHTML = label; + } else { + domConstruct.empty(renderer); + } + break; + default: + + } }, - - _updateTreeMapHierarchy: function(){ + + _updateTreeMapHierarchy: function () { var items = this.items; - if(items == null){ + if (items == null) { return; } - if(this._groupFuncs != null && this._groupFuncs.length > 0){ - this._groupeditems = utils.group(items, this._groupFuncs, lang.hitch(this, this._getAreaForItem)).children; - }else{ + if (this._groupFuncs != null && this._groupFuncs.length > 0) { + this._groupeditems = utils.group(items, this._groupFuncs, + lang.hitch(this, this._getAreaForItem)).children; + } else { this._groupeditems = items; } }, - - _removeAreaForGroup: function(item){ + + _removeAreaForGroup: function (item) { var children; - if(item != null){ - if(item.__treeValue){ + if (item != null) { + if (item.__treeValue) { delete item.__treeValue; children = item.children; - }else{ + } else { // not a grouping item return; } - }else{ + } else { children = this._groupeditems; } - if(children){ - for(var i = 0; i < children.length; ++i){ + if (children) { + for (var i = 0; i < children.length; ++i) { this._removeAreaForGroup(children[i]); } } }, - - _getAreaForItem: function(item){ + + _getAreaForItem: function (item) { var area = parseFloat(item.area); return isNaN(area) ? 0 : area; }, - _computeAreaForItem: function(item){ + _computeAreaForItem: function (item) { var value; - if(item.__treeID){ // group + if (item.__treeID) { // group value = item.__treeValue; - if(!value){ + if (!value) { value = 0; var children = item.children; - for(var i = 0; i < children.length; ++i){ + for (var i = 0; i < children.length; ++i) { value += this._computeAreaForItem(children[i]); } item.__treeValue = value; } - }else{ + } else { value = this._getAreaForItem(item); } return value; }, - - getColorForItem: function(item){ + + getColorForItem: function (item) { // summary: // Returns the color for a given item. This either use the colorModel if not null // or just the result of the colorFunc. @@ -355,74 +360,74 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // tags: // protected var value = this._colorFunc(item); - if(this.colorModel != null){ + if (this.colorModel != null) { return this.colorModel.getColor(value); - }else{ + } else { return new Color(value); } }, - - getLabelForItem: function(item){ + + getLabelForItem: function (item) { // summary: // Returns the label for a given item. // item: Object // The data item. // tags: // protected - return item.__treeName?item.__treeName:item.label.toString(); + return item.__treeName ? item.__treeName : item.label.toString(); }, - - _buildChildrenRenderers: function(domNode, item, level, forceCreate, delta, anim){ + + _buildChildrenRenderers: function (domNode, item, level, forceCreate, delta, anim) { var children = item.children; var box = domGeom.getMarginBox(domNode); var solution = utils.solve(children, box.w, box.h, lang.hitch(this, - this._computeAreaForItem), !this.isLeftToRight()); - + this._computeAreaForItem), !this.isLeftToRight()); + var rectangles = solution.rectangles; - - if(delta){ - rectangles = rectangles.map(function(item){ + + if (delta) { + rectangles = rectangles.map(function (item) { item.x += delta.l; item.y += delta.t; return item; }); } - + var rectangle; - for(var j = 0; j < children.length; ++j){ + for (var j = 0; j < children.length; ++j) { rectangle = rectangles[j]; this._buildRenderer(domNode, item, children[j], rectangle, level, forceCreate, anim); } }, - - _isLeaf: function(item){ + + _isLeaf: function (item) { return !item.children; }, - - _isRoot: function(item){ + + _isRoot: function (item) { return item.__treeRoot; }, - - _getRenderer: function(item, anim, parent){ - if(anim){ + + _getRenderer: function (item, anim, parent) { + if (anim) { // while animating we do that on a copy of the subtree // so we can use our hash object to get to the renderer - for(var i = 0; i < parent.children.length; ++i){ - if(parent.children[i].item == item){ - return parent.children[i]; - } - } + for (var i = 0; i < parent.children.length; ++i) { + if (parent.children[i].item === item) { + return parent.children[i]; + } + } } return this.itemToRenderer[this.getIdentity(item)]; }, - _buildRenderer: function(container, parent, child, rect, level, forceCreate, anim){ + _buildRenderer: function (container, parent, child, rect, level, forceCreate, anim) { var isLeaf = this._isLeaf(child); var renderer = !forceCreate ? this._getRenderer(child, anim, container) : null; renderer = isLeaf ? this._updateLeafRenderer(renderer, child, level) : this._updateGroupRenderer(renderer, - child, level); - if(forceCreate){ + child, level); + if (forceCreate) { renderer.level = level; renderer.item = child; renderer.parentItem = parent; @@ -430,10 +435,10 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // update its selection status this.updateRenderers(child); } - + // in some cases the computation might be slightly incorrect (0.0000...1) // and due to the floor this will cause 1px gaps - + var x = Math.floor(rect.x); var y = Math.floor(rect.y); var w = Math.floor(rect.x + rect.w + 0.00000000001) - x; @@ -441,52 +446,52 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // before sizing put the item inside its parent so that styling // is applied and taken into account - if(forceCreate){ + if (forceCreate) { domConstruct.place(renderer, container); } domGeom.setMarginBox(renderer, { l: x, t: y, w: w, h: h }); - - if(!isLeaf){ + + if (!isLeaf) { var box = domGeom.getContentBox(renderer); this._layoutGroupContent(renderer, box.w, box.h, level + 1, forceCreate, anim); } - - this.onRendererUpdated({ renderer: renderer, item: child, kind: isLeaf?"leaf":"group", level: level }); + + this.onRendererUpdated({ renderer: renderer, item: child, kind: isLeaf ? "leaf" : "group", level: level }); }, - - _layoutGroupContent: function(renderer, width, height, level, forceCreate, anim){ + + _layoutGroupContent: function (renderer, width, height, level, forceCreate, anim) { var header = query(".dtreemap-header", renderer)[0]; var content = query(".dtreemap-groupcontent", renderer)[0]; - if(header == null || content == null){ + if (header == null || content == null) { return; } - + var box = domGeom.getMarginBox(header); - + // If the header is too high, reduce its area // and don't show the children.. - if(box.h > height){ + if (box.h > height) { // TODO: this might cause pb when coming back to visibility later // as the getMarginBox of the header will keep that value? box.h = height; domStyle.set(content, "display", "none"); - }else{ + } else { domStyle.set(content, "display", "block"); domGeom.setMarginBox(content, { l: 0, t: box.h, w: width, h: (height - box.h) }); this._buildChildrenRenderers(content, renderer.item, level, forceCreate, null, anim); } - + domGeom.setMarginBox(header, { l: 0, t: 0, w: width, h: box.h }); }, - - _updateGroupRenderer: function(renderer, item, level){ + + _updateGroupRenderer: function (renderer, item, level) { // summary: // Update a group renderer. This creates the renderer if not already created, // call styleRender for it and recurse into children. @@ -499,25 +504,25 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // tags: // private var forceCreate = renderer == null; - if(renderer == null){ + if (renderer == null) { renderer = this.createRenderer("div", level, "group"); domClass.add(renderer, "dtreemap-group"); } this.styleRenderer(renderer, item, level, "group"); var header = query(".dtreemap-header", renderer)[0]; header = this._updateHeaderRenderer(header, item, level); - if(forceCreate){ + if (forceCreate) { domConstruct.place(header, renderer); } var content = query(".dtreemap-groupcontent", renderer)[0]; content = this._updateGroupContentRenderer(content, item, level); - if(forceCreate){ + if (forceCreate) { domConstruct.place(content, renderer); } return renderer; }, - - _updateHeaderRenderer: function(renderer, item, level){ + + _updateHeaderRenderer: function (renderer, item, level) { // summary: // Update a leaf renderer. This creates the renderer if not already created, // call styleRender for it and set the label as its innerHTML. @@ -529,7 +534,7 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // The item depth level. // tags: // private - if(renderer == null){ + if (renderer == null) { renderer = this.createRenderer(item, level, "header"); domClass.add(renderer, "dtreemap-header"); domClass.add(renderer, "dtreemap-header_" + level); @@ -537,8 +542,8 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ this.styleRenderer(renderer, item, level, "header"); return renderer; }, - - _updateLeafRenderer: function(renderer, item, level){ + + _updateLeafRenderer: function (renderer, item, level) { // summary: // Update a leaf renderer. This creates the renderer if not already created, // call styleRender for it and set the label as its innerHTML. @@ -550,19 +555,19 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // The item depth level. // tags: // private - if(renderer == null){ + if (renderer == null) { renderer = this.createRenderer(item, level, "leaf"); domClass.add(renderer, "dtreemap-leaf"); domClass.add(renderer, "dtreemap-leaf_" + level); - } + } this.styleRenderer(renderer, item, level, "leaf"); - if(item.tooltip){ + if (item.tooltip) { renderer.title = item.tooltip; } return renderer; }, - - _updateGroupContentRenderer: function(renderer, item, level){ + + _updateGroupContentRenderer: function (renderer, item, level) { // summary: // Update a group content renderer. This creates the renderer if not already created, // and call styleRender for it. @@ -574,7 +579,7 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // The item depth level. // tags: // private - if(renderer == null){ + if (renderer == null) { renderer = this.createRenderer(item, level, "content"); domClass.add(renderer, "dtreemap-groupcontent"); domClass.add(renderer, "dtreemap-groupcontent_" + level); @@ -582,44 +587,44 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ this.styleRenderer(renderer, item, level, "content"); return renderer; }, - - _getRendererFromTarget: function(target){ + + _getRendererFromTarget: function (target) { var renderer = target; - while(renderer != this && !renderer.item){ + while (renderer !== this && !renderer.item) { renderer = renderer.parentNode; - } + } return renderer; }, - _onMouseOver: function(e){ + _onMouseOver: function (e) { var renderer = this._getRendererFromTarget(e.target); - if(renderer.item){ + if (renderer.item) { var item = renderer.item; this._hoveredItem = item; this.updateRenderers(item); - this.onItemRollOver({renderer: renderer, item : item, triggerEvent: e}); + this.onItemRollOver({renderer: renderer, item: item, triggerEvent: e}); } }, - - _onMouseOut: function(e){ + + _onMouseOut: function (e) { var renderer = this._getRendererFromTarget(e.target); - if(renderer.item){ + if (renderer.item) { var item = renderer.item; this._hoveredItem = null; this.updateRenderers(item); - this.onItemRollOut({renderer: renderer, item : item, triggerEvent: e}); + this.onItemRollOut({renderer: renderer, item: item, triggerEvent: e}); } }, - - _onMouseUp: function(e){ + + _onMouseUp: function (e) { var renderer = this._getRendererFromTarget(e.target); - if(renderer.item){ + if (renderer.item) { this.selectFromEvent(e, renderer.item, renderer, true); //event.stop(e); } }, - - onRendererUpdated: function(){ + + onRendererUpdated: function () { // summary: // Called when a renderer has been updated. This is called after creation, styling and sizing for // each group and leaf renderers. For group renders this is also called after creation of children @@ -627,55 +632,54 @@ define(["dojo/_base/lang", "dcl/dcl", "dui/register", "dojo/_base/event", "dojo/ // tags: // callback }, - - onItemRollOver: function(){ + + onItemRollOver: function () { // summary: // Called when an item renderer has been hovered. // tags: // callback }, - - onItemRollOut: function(){ + + onItemRollOut: function () { // summary: // Called when an item renderer has been rolled out. // tags: // callback - }, - - updateRenderers: function(items){ + }, + + updateRenderers: function (items) { // summary: // Updates the renderer(s) that represent the specified item(s). // item: Object|Array // The item(s). - if(!items){ + if (!items) { return; - } - if(!lang.isArray(items)){ + } + if (!lang.isArray(items)) { items = [items]; } - for(var i=0; i>> 1; // int.MaxValue; var aspectLast; var offsetX = 0; var offsetY = 0; - var tmp_width = width; - var tmp_height = height; - - var vert = tmp_width > tmp_height; - - while(end != elements.length){ - aspectLast = utils._trySolution(elements, start, end, vert, tmp_width, tmp_height); - - if((aspectLast > aspectCurr) || (aspectLast < 1)){ + var tmpWidth = width; + var tmpHeight = height; + + var vert = tmpWidth > tmpHeight, n; + + while (end !== elements.length) { + aspectLast = utils._trySolution(elements, start, end, vert, tmpWidth, tmpHeight); + + if ((aspectLast > aspectCurr) || (aspectLast < 1)) { var currX = 0; var currY = 0; - - for(var n = start; n < end; n++){ + + for (n = start; n < end; n++) { elements[n].x = offsetX + currX; elements[n].y = offsetY + currY; - if(vert){ + if (vert) { currY += elements[n].height; - }else{ + } else { currX += elements[n].width; } } - - if(vert){ + + if (vert) { offsetX += elements[start].width; - }else{ + } else { offsetY += elements[start].height; } - - tmp_width = width - offsetX; - tmp_height = height - offsetY; - - vert = tmp_width > tmp_height; - + + tmpWidth = width - offsetX; + tmpHeight = height - offsetY; + + vert = tmpWidth > tmpHeight; + start = end; end = start; - + aspectCurr = -1 >>> 1; // int.MaxValue; continue; - }else{ - for(var n = start; n <= end; n++){ + } else { + for (n = start; n <= end; n++) { elements[n].width = elements[n].widthTmp; elements[n].height = elements[n].heightTmp; } @@ -183,67 +188,68 @@ define(function(){ } end++; } - + var currX1 = 0; var currY1 = 0; - - for(var n = start; n < end; n++){ + + for (n = start; n < end; n++) { elements[n].x = offsetX + currX1; elements[n].y = offsetY + currY1; - if(vert){ + if (vert) { currY1 += elements[n].height; - }else{ + } else { currX1 += elements[n].width; } } - + }, - _trySolution: function(elements, start, end, vert, tmp_width, tmp_height){ + _trySolution: function (elements, start, end, vert, tmpWidth, tmpHeight) { var total = 0; var aspect = 0; var localWidth = 0; var localHeight = 0; - - for(var n = start; n <= end; n++){ + var n; + + for (n = start; n <= end; n++) { total += elements[n].sizeTmp; } - - if(vert){ - if(tmp_height == 0){ + + if (vert) { + if (tmpHeight === 0) { localWidth = localHeight = 0; - }else{ - localWidth = total / tmp_height * 100; - localHeight = tmp_height; + } else { + localWidth = total / tmpHeight * 100; + localHeight = tmpHeight; } - }else{ - if(tmp_width == 0){ + } else { + if (tmpWidth === 0) { localWidth = localHeight = 0; - }else{ - localHeight = total / tmp_width * 100; - localWidth = tmp_width; + } else { + localHeight = total / tmpWidth * 100; + localWidth = tmpWidth; } } - - for(var n = start; n <= end; n++){ - if(vert){ + + for (n = start; n <= end; n++) { + if (vert) { elements[n].widthTmp = localWidth; - if(total == 0){ + if (total === 0) { elements[n].heightTmp = 0; - }else{ + } else { elements[n].heightTmp = localHeight * elements[n].sizeTmp / total; } - }else{ - if(total == 0){ + } else { + if (total === 0) { elements[n].widthTmp = 0; - }else{ + } else { elements[n].widthTmp = localWidth * elements[n].sizeTmp / total; } elements[n].heightTmp = localHeight; } } aspect = Math.max(elements[end].heightTmp / elements[end].widthTmp, elements[end].widthTmp - / elements[end].heightTmp); - if(aspect == undefined){ + / elements[end].heightTmp); + if (aspect === undefined) { return 1; } return aspect; diff --git a/demos/tracTreemap/src.js b/demos/tracTreemap/src.js index 91788f9..cfcfcab 100755 --- a/demos/tracTreemap/src.js +++ b/demos/tracTreemap/src.js @@ -2,53 +2,53 @@ var groupByChanged, sizeByChanged, colorByChanged, MyTreeMap; var DAY = 86400000; -var colorByPriorityFunc = function(item){ - switch(item.priority){ - case "blocker": - return {r: 255, g: 0, b: 0}; - case "high": - return {r: 170, g: 85, b: 0}; - case "low": - return {r: 85, g: 170, b: 0}; - default: - return {r: 0, g: 255, b: 0}; +var colorByPriorityFunc = function (item) { + switch (item.priority) { + case "blocker": + return {r: 255, g: 0, b: 0}; + case "high": + return {r: 170, g: 85, b: 0}; + case "low": + return {r: 85, g: 170, b: 0}; + default: + return {r: 0, g: 255, b: 0}; } return {}; -}; +}; -var colorByDateFunc = function(item){ +var colorByDateFunc = function (item) { var created = new Date(item.created).getTime(); // color based on how ancient is the bug var old = new Date().getTime() - created; - if(old < 8*DAY){ + if (old < 8 * DAY) { return {r: 0, g: 255, b: 0}; - }else if(old < 35*DAY){ + } else if (old < 35 * DAY) { return {r: 85, g: 170, b: 0}; - }else if(old < 400*DAY){ + } else if (old < 400 * DAY) { return {r: 170, g: 85, b: 0}; - }else{ + } else { return {r: 255, g: 0, b: 0}; } return {}; -}; +}; -var sizeByPriorityFunc = function(item){ - switch(item.priority){ - case "blocker": - return 4; - case "high": - return 3; - case "low": - return 2; - default: - return 1; +var sizeByPriorityFunc = function (item) { + switch (item.priority) { + case "blocker": + return 4; + case "high": + return 3; + case "low": + return 2; + default: + return 1; } return 0; -}; +}; -var sizeByCcFunc = function(item){ - return item.cc?item.cc.split(",").length:1; -} +var sizeByCcFunc = function (item) { + return item.cc ? item.cc.split(",").length : 1; +}; require(["dojo/ready", "dojo/dom", "dojo/_base/Color", "dcl/dcl", "dojo/parser", "dui/registry", "dui/dijit/Tooltip", "dojo/dom-style", "dojo/dom-attr", "dojo/dom-construct", @@ -56,124 +56,125 @@ require(["dojo/ready", "dojo/dom", "dojo/_base/Color", "dcl/dcl", "dojo/parser", "dui/form/RadioButton", "dtreemap/Keyboard", "dtreemap/DrillDownUp", "dojo/store/Memory", "dojo/store/Observable", "dojo/io/script", "dojo/when"], - function(ready, dom, Color, dcl, parser, registry, Tooltip, - domStyle, domAttr, domConstruct, - BorderContainer, ContentPane, TreeMap, RadioButton, Keyboard, DrillDownUp, - Memory, Observable, script, when){ + function (ready, dom, Color, dcl, parser, registry, Tooltip, domStyle, domAttr, domConstruct, + BorderContainer, ContentPane, TreeMap, RadioButton, Keyboard, DrillDownUp, + Memory, Observable, script, when) { + + //var store = new DataStore({ store: new CsvStore({url: "report_132.csv"}) }); - //var store = new DataStore({ store: new CsvStore({url: "http://trac.dojotoolkit.org/report/132?asc=1&format=csv"}) }); - //var store = new DataStore({ store: new CsvStore({url: "report_132.csv"}) }); + var query = "select * from csv where url='http://trac.dojotoolkit.org/report/179?asc=1&format=csv'"; + var request = script.get({ + url: "http://query.yahooapis.com/v1/public/yql?q=" + encodeURIComponent(query) + "&format=json", + jsonp: "callback" + }); + var store; - var query = 'select * from csv where url="http://trac.dojotoolkit.org/report/179?asc=1&format=csv"'; - var request = script.get({ - url: "http://query.yahooapis.com/v1/public/yql?q=" + encodeURIComponent(query) + "&format=json", - jsonp: "callback" - }); - var store; - - when(request, function(response){ - var results = response.query.results.row; - var header = results[0]; - var rows = results.slice(1); - var data = rows.map(function (row) { - var ticket = {}; - for(var prop in row){ - ticket[header[prop]] = row[prop]; + when(request, function (response) { + var results = response.query.results.row; + var header = results[0]; + var rows = results.slice(1); + var data = rows.map(function (row) { + var ticket = {}; + for (var prop in row) { + ticket[header[prop]] = row[prop]; + } + return ticket; + }); + /* jshint -W064 */ + store = Observable(new Memory({data: data, idProperty: "ticket"})); + /* jshint +W064 */ + // depending on when we arrive here treemap + // might already been there... + // reset data: + var treeMap = registry.byId("treeMap"); + if (treeMap) { + treeMap.set("store", store); } - return ticket; - }); - store = Observable(new Memory({data: data, idProperty: "ticket"})); - // depending on when we arrive here treemap - // might already been there... - // reset data: - var treeMap = registry.byId("treeMap"); - if(treeMap){ - treeMap.set("store", store); - } - }, function(err){ - console.log("could not reach data source"); - }); - - ready(function(){ - MyTreeMap = dcl([TreeMap, Keyboard, DrillDownUp], { - createRenderer: function(item, level, kind){ - if(kind == "leaf"){ - var div = domConstruct.create("a"); - domAttr.set(div, "href", "http://bugs.dojotoolkit.org/ticket/" + item.ticket); - domStyle.set(div, "overflow", "hidden"); - domStyle.set(div, "position", "absolute"); - return div; - }else{ - return this.inherited(arguments); + }, function () { + console.log("could not reach data source"); + }); + + ready(function () { + MyTreeMap = dcl([TreeMap, Keyboard, DrillDownUp], { + createRenderer: function (item, level, kind) { + if (kind === "leaf") { + var div = domConstruct.create("a"); + domAttr.set(div, "href", "http://bugs.dojotoolkit.org/ticket/" + item.ticket); + domStyle.set(div, "overflow", "hidden"); + domStyle.set(div, "position", "absolute"); + return div; + } else { + return this.inherited(arguments); + } } + }); + parser.parse(); + var treeMap = registry.byId("treeMap"); + treeMap.set("colorFunc", colorByPriorityFunc); + treeMap.set("areaFunc", sizeByCcFunc); + treeMap.set("groupAttrs", ["component"]); + if (store) { + treeMap.set("store", store); } + treeMap.onItemRollOver = function (evt) { + if (evt.item.summary) { + Tooltip.show(evt.item.summary, evt.renderer); + } + }; + treeMap.onItemRollOut = function (evt) { + Tooltip.hide(evt.renderer); + }; }); - parser.parse(); - var treeMap = registry.byId("treeMap"); - treeMap.set("colorFunc", colorByPriorityFunc); - treeMap.set("areaFunc", sizeByCcFunc); - treeMap.set("groupAttrs", ["component"]); - if(store){ - treeMap.set("store", store); - } - treeMap.onItemRollOver=function(evt){ - if(evt.item.summary){ - Tooltip.show(evt.item.summary, evt.renderer); + + /* jshint -W074 */ + groupByChanged = function () { + var groupBy = []; + if (dom.byId("g2").checked) { + groupBy = ["owner"]; + } else if (dom.byId("g3").checked) { + groupBy = ["component"]; + } else if (dom.byId("g4").checked) { + groupBy = ["milestone"]; + } else if (dom.byId("g5").checked) { + groupBy = ["status"]; + } else if (dom.byId("g6").checked) { + groupBy = ["version"]; + } + if (dom.byId("g22").checked) { + groupBy.push(["owner"]); + } else if (dom.byId("g23").checked) { + groupBy.push(["component"]); + } else if (dom.byId("g24").checked) { + groupBy.push(["milestone"]); + } else if (dom.byId("g25").checked) { + groupBy.push(["status"]); + } else if (dom.byId("g26").checked) { + groupBy.push(["version"]); + } + var treeMap = registry.byId("treeMap"); + if (groupBy.length > 0) { + treeMap.set("groupAttrs", groupBy); + } else { + treeMap.set("groupAttrs", null); } }; - treeMap.onItemRollOut=function(evt){ - Tooltip.hide(evt.renderer); - }; - }); - - groupByChanged=function(value){ - var groupBy = []; - if(dom.byId("g2").checked){ - groupBy = ["owner"]; - }else if(dom.byId("g3").checked){ - groupBy = ["component"]; - }else if(dom.byId("g4").checked){ - groupBy = ["milestone"]; - }else if(dom.byId("g5").checked){ - groupBy = ["status"]; - }else if(dom.byId("g6").checked){ - groupBy = ["version"]; - } - if(dom.byId("g22").checked){ - groupBy.push(["owner"]); - }else if(dom.byId("g23").checked){ - groupBy.push(["component"]); - }else if(dom.byId("g24").checked){ - groupBy.push(["milestone"]); - }else if(dom.byId("g25").checked){ - groupBy.push(["status"]); - }else if(dom.byId("g26").checked){ - groupBy.push(["version"]); - } - var treeMap = registry.byId("treeMap"); - if(groupBy.length > 0){ - treeMap.set("groupAttrs", groupBy); - }else{ - treeMap.set("groupAttrs", null); - } - }; + /* jshint +W074 */ - sizeByChanged = function(value){ - var treeMap = registry.byId("treeMap"); - if(dom.byId("s1").checked){ - treeMap.set("areaFunc", sizeByPriorityFunc); - }else if(dom.byId("s2").checked){ - treeMap.set("areaFunc", sizeByCcFunc); - } - }; + sizeByChanged = function () { + var treeMap = registry.byId("treeMap"); + if (dom.byId("s1").checked) { + treeMap.set("areaFunc", sizeByPriorityFunc); + } else if (dom.byId("s2").checked) { + treeMap.set("areaFunc", sizeByCcFunc); + } + }; - colorByChanged = function(value){ - var colorBy = null; - var treeMap = registry.byId("treeMap"); - if(dom.byId("c1").checked){ - treeMap.set("colorFunc", colorByPriorityFunc); - }else if(dom.byId("c2").checked){ - treeMap.set("colorFunc", colorByDateFunc); - } - }; -}); \ No newline at end of file + colorByChanged = function () { + var treeMap = registry.byId("treeMap"); + if (dom.byId("c1").checked) { + treeMap.set("colorFunc", colorByPriorityFunc); + } else if (dom.byId("c2").checked) { + treeMap.set("colorFunc", colorByDateFunc); + } + }; + }); \ No newline at end of file