source: Dev/trunk/src/client/dojox/gfx/demos/tooltip.html @ 529

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

Added Dojo 1.9.3 release.

File size: 7.7 KB
Line 
1<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
2<head>
3        <title>A Sample ToolTip using dijit and dojox.gfx</title>
4        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5        <style type="text/css">
6                @import "../../../dojo/resources/dojo.css";
7                @import "../../../dijit/tests/css/dijitTests.css";
8                @import "../../../dijit/themes/tundra/tundra.css";
9                .tooltipBody {
10                        color:#fff;
11                }
12        </style>
13        <script type="text/javascript" data-dojo-config="parseOnLoad:true, isDebug:true" src="../../../dojo/dojo.js"></script>
14        <script type="text/javascript">
15                dojo.require("dijit.form.Button");
16       
17                dojo.require("dojox.gfx");
18                dojo.require("dojox.gfx.move");
19                dojo.require("dijit._Widget"); dojo.require("dijit._Templated");
20               
21                dojo.declare("demo.Tooltip",[dijit._Widget,dijit._Templated],{
22                       
23                        // attachId: String|DomNode?
24                        //              the Id or domNode to attach this tooltip to
25                        attachId:"",
26
27                        // attachHover: Boolean
28                        //              disable hover behavior for the target
29                        attachHover:true,
30
31                        // attachParent: Boolean
32                        //              automatically attach to our parentnode rather than byId or query
33                        attachParent:false,
34
35                        // attachQuery: String?
36                        //              an optional selector query to attach this tooltip to
37                        attachQuery:"",
38
39                        // attachScope: String|DomNode?
40                        //              and optional scope to run the query against, passed as the
41                        //              second arg to dojo.query()
42                        queryScope:"",
43
44                        // hideDelay: Int
45                        //              time in my to delay automatically closing the node
46                        hideDelay: 123, // ms
47
48                        // persists: Boolean
49                        //              if true, the node will stay visible until explicitly closed
50                        //              via _hide() or click on closeIcon
51                        persists:false,
52                       
53                        templateString:
54                                '<div class="foo">'
55                                        +'<div style="position:relative;">'
56                                                +'<div dojoAttachPoint="surfaceNode"></div>'
57                                                +'<div class="tooltipBody" dojoAttachPoint="containerNode"></div>'
58                                        +'</div>'
59                                +'</div>',
60                       
61                        postCreate:function(){
62                                // call _Widget postCreate first
63                                this.inherited(arguments);
64                                // gfx version of "_Templated" idea:
65                                this._initSurface();
66                               
67                                if(this.attachParent){
68                                        // over-ride and reuse attachId as domNode from now on
69                                        this.attachId = this.domNode.parentNode;
70                                }
71                                if(this.attachId){
72                                        // domNode again. setup connections
73                                        this.attachId = dojo.byId(this.attachId);
74                                        if(this.attachHover){
75                                                this.connect(this.attachId,"onmouseenter","_show");
76                                        }
77                                        if(!this.persists){
78                                                this.connect(this.attachId,"onmouseleave","_initHide");
79                                        }
80                                }else if(this.attachQuery){
81                                        // setup connections via dojo.query for multi-tooltips
82                                        var nl = dojo.query(this.attachQuery,this.queryScope);
83                                        if(this.attachHover){ nl.connect("onmouseenter",this,"_show") }
84                                        if(!this.persists){ nl.connect("onmouseleave",this,"_initHide") }
85                                }
86                                // place the tooltip                   
87                                dojo.body().appendChild(this.domNode);
88                                dojo.style(this.domNode,{
89                                        position:"absolute"
90                                });
91                                // could do this in css:
92                                dojo.style(this.containerNode,{
93                                        position:"absolute",
94                                        top:"15px",
95                                        left:"12px",
96                                        height:"83px",
97                                        width:"190px"
98                                });
99                                // setup our animations
100                                this._hideAnim = dojo.fadeOut({ node:this.domNode, duration:150 });
101                                this._showAnim = dojo.fadeIn({ node:this.domNode, duration:75 });
102                                this.connect(this._hideAnim,"onEnd","_postHide");
103                                if(!this.persists){
104                                        this.connect(this.domNode,"onmouseleave","_initHide");
105                                }
106                                // hide quickly
107                                this._postHide();
108                        },
109                       
110                        _initHide: function(e){
111                                // summary: start the timer for the hideDelay
112                                if(!this.persists && this.hideDelay){
113                                        this._delay = setTimeout(dojo.hitch(this,"_hide",e||null),this.hideDelay);
114                                }
115                        },
116                       
117                        _clearDelay: function(){
118                                // summary: clear our hide delay timeout
119                                if(this._delay){ clearTimeout(this._delay); }
120                        },
121                       
122                        _show: function(e){
123                                // summary: show the widget
124                                this._clearDelay();
125                                var pos = dojo.coords(e.target || this.attachId,true)
126                                // we need to more accurately position the domNode:
127                                dojo.style(this.domNode,{
128                                        top: pos.y - (pos.h / 2) - 50,
129                                        left: pos.x + pos.w - 25,
130                                        display:"block"
131                                });
132                                dojo.fadeIn({ node: this.domNode, duration:75 }).play();
133                        },
134                       
135                        _hide: function(e){
136                                // summary: hide the tooltip
137                                this._hideAnim.play();
138                        },
139                       
140                        _postHide: function(){
141                                // summary: after hide animation cleanup
142                                dojo.style(this.domNode,"display","none");
143                        },
144                       
145                        _initSurface:function(){
146                                // made generally from an SVG file:
147                                this.surface = dojox.gfx.createSurface(this.surfaceNode,220,120);
148                                this.tooltip = this.surface.createGroup();
149                                this.tooltip.createPath("M213,101.072c0,6.675-5.411,12.086-12.086,12.086H13.586 c-6.675,0-12.086-5.411-12.086-12.086V21.004c0-6.675,5.411-12.086,12.086-12.086h187.328c6.675,0,12.086,5.411,12.086,12.086 V101.072z")
150                                        .setFill("rgba(0,0,0,0.25)");
151                               
152                                this.tooltip.createPath("M211.5,97.418c0,6.627-5.373,12-12,12 h-186c-6.627,0-12-5.373-12-12v-79.5c0-6.627,5.373-12,12-12h186c6.627,0,12,5.373,12,12V97.418z")
153                                        .setStroke({ width:2, color:"#FFF" })
154                                        .setFill("rgba(0,0,0,0.5)")
155                                        .connect("onmouseover",dojo.hitch(this,"_clearDelay"));
156                               
157                                if(this.persists){
158                                        // make the close icon
159                                        this._toolButton = this.surface.createGroup();
160                                        this._toolButton.createEllipse({ cx:207.25, cy:12.32, rx: 7.866, ry: 7.099 })
161                                                .setFill("#ededed");
162                                        this._toolButton.createCircle({ cx:207.25, cy: 9.25, r:8.25 })
163                                                .setStroke({ width:2, color:"#FFF" })
164                                                .setFill("#000")
165                                        ;
166                                        this._toolButton.connect("onclick",dojo.hitch(this,"_hide"));   
167                                        // the X       
168                                        this._toolButton.createLine({ x1:203.618, y1:5.04, x2: 210.89, y2:12.979 })
169                                                .setStroke({ width:2, color:"#d6d6d6" });
170                                        this._toolButton.createLine({ x1:203.539, y1:12.979, x2: 210.89, y2:5.04 })
171                                                .setStroke({ width:2, color:"#d6d6d6" });
172                                }
173                        }       
174                });
175        </script>
176       
177</head>
178<body class="tundra">
179
180        <h1>dojox.gfx: A Sample tooltip</h1>
181
182        <ul style="width:150px; border:2px solid #ededed; cursor:pointer">
183               
184       
185                <!-- you can put any content you want in there -->
186                <li id="warn2">
187                        Tooltip + Button
188                        <div attachId="warn2" id="warn2tt" dojoType="demo.Tooltip"><p style="margin-top:0">Canvas renderer doesn't implement event handling.
189                                <button dojoType="dijit.form.Button">
190                                        Button
191                                        <script type="dojo/method" data-dojo-event="onClick">
192                                                alert(" woo hoo! ");
193                                                dijit.byId("warn2tt")._hide();
194                                        </script>
195                                </button>
196                        </p></div>
197                </li>
198
199                <!-- a simple tooltip -->
200                <li id="warn1">
201                        Hover trigger / persists
202                        <div persists="true" attachId="warn1" dojoType="demo.Tooltip">Canvas renderer doesn't implement event handling.</div>
203                </li>
204
205                <!-- these get the same tooltip from the attachQuery=".multitip" below -->
206                <li class="multitip">MultiTip trigger 1</li>
207                <li>I do nothing</li>
208                <li class="multitip">Trigger two</li>
209
210                <li><a href="#" onclick="dijit.byId('nohover')._show(arguments[0])">show this way
211                        <label dojoType="demo.Tooltip" attachParent="true" attachHover="false" id="nohover">some text</label>
212                        </a>   
213                </li>
214
215                <!-- attachParent makes the tooltip look for domNode.parentNode before moving to body() -->
216                <li>
217                        Parent Attached Tooltip
218                        <div attachParent="true" persists="true" dojoType="demo.Tooltip">
219                                <form id="fooForm">
220                                        <p style="margin-top:0;">
221                                        Name:<br> <input type="text" name="username" style="border:1px solid #ededed" /><br>
222                                        Pass:<br> <input type="password" name="password" style="border:1px solid #ededed" />
223                                        </p>
224                                </form>
225                        </div>
226                </li>
227
228        </ul>
229
230        <!-- attach a single tooltip message to a number of nodes at once -->
231        <div attachQuery=".multitip" dojoType="demo.Tooltip">Canvas renderer doesn't implement event handling. (shared tooltip)</div>
232
233</body>
234</html>
Note: See TracBrowser for help on using the repository browser.