source: Dev/trunk/src/client/dojox/charting/action2d/Highlight.js

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

Added Dojo 1.9.3 release.

File size: 3.9 KB
RevLine 
[483]1define(["dojo/_base/lang", "dojo/_base/declare", "dojo/_base/Color", "dojo/_base/connect", "dojox/color/_base",
2                "./PlotAction", "dojo/fx/easing", "dojox/gfx/fx"],
3        function(lang, declare, Color, hub, c, PlotAction, dfe, dgf){
4
5        /*=====
6        var __HighlightCtorArgs = {
7                // summary:
8                //              Additional arguments for highlighting actions.
9                // duration: Number?
10                //              The amount of time in milliseconds for an animation to last.  Default is 400.
11                // easing: dojo/fx/easing/*?
12                //              An easing object (see dojo.fx.easing) for use in an animation.  The
13                //              default is dojo.fx.easing.backOut.
14                // highlight: String|dojo/_base/Color|Function?
15                //              Either a color or a function that creates a color when highlighting happens.
16        };
17        =====*/
18       
19        var DEFAULT_SATURATION  = 100,  // %
20                DEFAULT_LUMINOSITY1 = 75,       // %
21                DEFAULT_LUMINOSITY2 = 50,       // %
22                cc = function(color){
23                        return function(){ return color; };
24                },
25
26                hl = function(color){
27                        var a = new c.Color(color),
28                                x = a.toHsl();
29                        if(x.s == 0){
30                                x.l = x.l < 50 ? 100 : 0;
31                        }else{
32                                x.s = DEFAULT_SATURATION;
33                                if(x.l < DEFAULT_LUMINOSITY2){
34                                        x.l = DEFAULT_LUMINOSITY1;
35                                }else if(x.l > DEFAULT_LUMINOSITY1){
36                                        x.l = DEFAULT_LUMINOSITY2;
37                                }else{
38                                        x.l = x.l - DEFAULT_LUMINOSITY2 > DEFAULT_LUMINOSITY1 - x.l ?
39                                                DEFAULT_LUMINOSITY2 : DEFAULT_LUMINOSITY1;
40                                }
41                        }
42                        var rcolor = c.fromHsl(x);
43                        rcolor.a = a.a;
44                        return rcolor;
45                },
46
47                spiderhl = function(color){
48                        var r = hl(color);
49                        r.a = 0.7;
50                        return r;
51                }
52
53        return declare("dojox.charting.action2d.Highlight", PlotAction, {
54                // summary:
55                //              Creates a highlighting action on a plot, where an element on that plot
56                //              has a highlight on it.
57
58                // the data description block for the widget parser
59                defaultParams: {
60                        duration: 400,  // duration of the action in ms
61                        easing:   dfe.backOut   // easing for the action
62                },
63                optionalParams: {
64                        highlight: "red"        // name for the highlight color
65                                                                // programmatic instantiation can use functions and color objects
66                },
67
68                constructor: function(chart, plot, kwArgs){
69                        // summary:
70                        //              Create the highlighting action and connect it to the plot.
71                        // chart: dojox/charting/Chart
72                        //              The chart this action belongs to.
73                        // plot: String?
74                        //              The plot this action is attached to.  If not passed, "default" is assumed.
75                        // kwArgs: __HighlightCtorArgs?
76                        //              Optional keyword arguments object for setting parameters.
77                        var a = kwArgs && kwArgs.highlight;
78                        this.colorFunc = a ? (lang.isFunction(a) ? a : cc(a)) : hl;
79                        this.connect();
80                },
81
82                process: function(o){
83                        // summary:
84                        //              Process the action on the given object.
85                        // o: dojox/gfx/shape.Shape
86                        //              The object on which to process the highlighting action.
87                        if(!o.shape || !(o.type in this.overOutEvents)){ return; }
88
89                        // if spider let's deal only with poly
90                        if(o.element == "spider_circle" || o.element == "spider_plot"){
91                                return;
92                        }else if(o.element == "spider_poly" && this.colorFunc == hl){
93                                // hardcode alpha for compatibility reasons
94                                // TODO to remove in 2.0
95                                this.colorFunc = spiderhl;
96                        }
97
98                        var runName = o.run.name, index = o.index, anim;
99
100                        if(runName in this.anim){
101                                anim = this.anim[runName][index];
102                        }else{
103                                this.anim[runName] = {};
104                        }
105
106                        if(anim){
107                                anim.action.stop(true);
108                        }else{
109                                var color = o.shape.getFill();
110                                if(!color || !(color instanceof Color)){
111                                        return;
112                                }
113                                this.anim[runName][index] = anim = {
114                                        start: color,
115                                        end:   this.colorFunc(color)
116                                };
117                        }
118
119                        var start = anim.start, end = anim.end;
120                        if(o.type == "onmouseout"){
121                                // swap colors
122                                var t = start;
123                                start = end;
124                                end = t;
125                        }
126
127                        anim.action = dgf.animateFill({
128                                shape:    o.shape,
129                                duration: this.duration,
130                                easing:   this.easing,
131                                color:    {start: start, end: end}
132                        });
133                        if(o.type == "onmouseout"){
134                                hub.connect(anim.action, "onEnd", this, function(){
135                                        if(this.anim[runName]){
136                                                delete this.anim[runName][index];
137                                        }
138                                });
139                        }
140                        anim.action.play();
141                }
142        });
143       
144});
Note: See TracBrowser for help on using the repository browser.