source: Dev/trunk/src/client/dojox/treemap/DrillDownUp.js @ 532

Last change on this file since 532 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.7 KB
Line 
1define(["dojo/_base/lang", "dojo/_base/event", "dojo/_base/declare", "dojo/on", "dojo/dom-geometry", "dojo/dom-construct",
2        "dojo/dom-style", "dojo/_base/fx", "dojo/has!touch?dojox/gesture/tap"],
3        function(lang, event, declare, on, domGeom, domConstruct, domStyle, fx, tap){
4
5        return declare("dojox.treemap.DrillDownUp", null, {
6                // summary:
7                //              Specializes TreeMap to support drill down and up operations.
8
9                postCreate: function(){
10                        this.inherited(arguments);
11                        this.own(on(this.domNode, "dblclick", lang.hitch(this, this._onDoubleClick)));
12                        if(tap){
13                                this.own(on(this.domNode, tap.doubletap, lang.hitch(this, this._onDoubleClick)));
14                        }
15                },
16
17                _onDoubleClick: function(e){
18                        var renderer = this._getRendererFromTarget(e.target);
19                        if(renderer.item){
20                                var item = renderer.item;
21                                if(this._isLeaf(item)){
22                                        // walk up
23                                        item = renderer.parentItem;
24                                        renderer = this.itemToRenderer[this.getIdentity(item)];
25                                        // our leaf parent is the root, we can't do much...
26                                        if(renderer == null){
27                                                return;
28                                        }
29                                }
30                                // Drill up
31                                if(this.rootItem == item){
32                                        this.drillUp(renderer);
33                                }else{
34                                        this.drillDown(renderer);
35                                }
36                                event.stop(e);
37                        }
38                },
39
40                drillUp: function(renderer){
41                        // summary:
42                        //              Drill up from the given renderer.
43                        // renderer: DomNode
44                        //              The item renderer.
45                        var item = renderer.item;
46
47                        // Remove the current rootItem renderer
48                        // rebuild the tree map
49                        // and animate the old renderer before deleting it.
50
51                        this.domNode.removeChild(renderer);
52                        var parent = this._getRenderer(item).parentItem;
53                        this.set("rootItem", parent);
54                        this.validateRendering(); // Must call this to create the treemap now
55
56                        // re-add the old renderer to show the animation
57                        domConstruct.place(renderer, this.domNode);
58
59                        domStyle.set(renderer, "zIndex", 40);
60
61                        var finalBox = domGeom.position(this._getRenderer(item), true);
62                        var corner = domGeom.getMarginBox(this.domNode);
63
64                        fx.animateProperty({
65                                node: renderer, duration: 500, properties: {
66                                        left: {
67                                                end: finalBox.x - corner.l
68                                        }, top: {
69                                                end: finalBox.y - corner.t
70                                        }, height: {
71                                                end: finalBox.h
72                                        }, width: {
73                                                end: finalBox.w
74                                        }
75                                }, onAnimate: lang.hitch(this, function(values){
76                                        var box = domGeom.getContentBox(renderer);
77                                        this._layoutGroupContent(renderer, box.w, box.h, renderer.level + 1, false, true);
78                                }), onEnd: lang.hitch(this, function(){
79                                        this.domNode.removeChild(renderer);
80                                })
81                        }).play();
82                },
83
84                drillDown: function(renderer){
85                        // summary:
86                        //              Drill up from the given renderer.
87                        // renderer: DomNode
88                        //              The item renderer.
89                        var box = domGeom.getMarginBox(this.domNode);
90                        var item = renderer.item;
91
92                        // Set the new root item into the rootPanel to make it appear on top
93                        // of the other nodes, and keep the same global location
94                        var parentNode = renderer.parentNode;
95                        var spanInfo = domGeom.position(renderer, true);
96                        parentNode.removeChild(renderer);
97                        domConstruct.place(renderer, this.domNode);
98                        domStyle.set(renderer, {
99                                left: (spanInfo.x - box.l)+ "px", top: (spanInfo.y - box.t)+ "px"
100                        });
101                        var zIndex = domStyle.get(renderer, "zIndex");
102                        domStyle.set(renderer, "zIndex", 40);
103
104                        fx.animateProperty({
105                                node: renderer, duration: 500, properties: {
106                                        left: {
107                                                end: box.l
108                                        }, top: {
109                                                end: box.t
110                                        }, height: {
111                                                end: box.h
112                                        }, width: {
113                                                end: box.w
114                                        }
115                                }, onAnimate: lang.hitch(this, function(values){
116                                        var box2 = domGeom.getContentBox(renderer);
117                                        this._layoutGroupContent(renderer, box2.w, box2.h, renderer.level + 1, false);
118                                }), onEnd: lang.hitch(this, function(){
119                                        domStyle.set(renderer, "zIndex", zIndex);
120                                        this.set("rootItem", item);
121                                })
122                        }).play();
123                }
124        });
125});
Note: See TracBrowser for help on using the repository browser.