1 | /*! |
---|
2 | * Ext JS Library 3.4.0 |
---|
3 | * Copyright(c) 2006-2011 Sencha Inc. |
---|
4 | * licensing@sencha.com |
---|
5 | * http://www.sencha.com/license |
---|
6 | */ |
---|
7 | /** |
---|
8 | * @class Ext.Tip |
---|
9 | * @extends Ext.Panel |
---|
10 | * @xtype tip |
---|
11 | * This is the base class for {@link Ext.QuickTip} and {@link Ext.Tooltip} that provides the basic layout and |
---|
12 | * positioning that all tip-based classes require. This class can be used directly for simple, statically-positioned |
---|
13 | * tips that are displayed programmatically, or it can be extended to provide custom tip implementations. |
---|
14 | * @constructor |
---|
15 | * Create a new Tip |
---|
16 | * @param {Object} config The configuration options |
---|
17 | */ |
---|
18 | Ext.Tip = Ext.extend(Ext.Panel, { |
---|
19 | /** |
---|
20 | * @cfg {Boolean} closable True to render a close tool button into the tooltip header (defaults to false). |
---|
21 | */ |
---|
22 | /** |
---|
23 | * @cfg {Number} width |
---|
24 | * Width in pixels of the tip (defaults to auto). Width will be ignored if it exceeds the bounds of |
---|
25 | * {@link #minWidth} or {@link #maxWidth}. The maximum supported value is 500. |
---|
26 | */ |
---|
27 | /** |
---|
28 | * @cfg {Number} minWidth The minimum width of the tip in pixels (defaults to 40). |
---|
29 | */ |
---|
30 | minWidth : 40, |
---|
31 | /** |
---|
32 | * @cfg {Number} maxWidth The maximum width of the tip in pixels (defaults to 300). The maximum supported value is 500. |
---|
33 | */ |
---|
34 | maxWidth : 300, |
---|
35 | /** |
---|
36 | * @cfg {Boolean/String} shadow True or "sides" for the default effect, "frame" for 4-way shadow, and "drop" |
---|
37 | * for bottom-right shadow (defaults to "sides"). |
---|
38 | */ |
---|
39 | shadow : "sides", |
---|
40 | /** |
---|
41 | * @cfg {String} defaultAlign <b>Experimental</b>. The default {@link Ext.Element#alignTo} anchor position value |
---|
42 | * for this tip relative to its element of origin (defaults to "tl-bl?"). |
---|
43 | */ |
---|
44 | defaultAlign : "tl-bl?", |
---|
45 | autoRender: true, |
---|
46 | quickShowInterval : 250, |
---|
47 | |
---|
48 | // private panel overrides |
---|
49 | frame:true, |
---|
50 | hidden:true, |
---|
51 | baseCls: 'x-tip', |
---|
52 | floating:{shadow:true,shim:true,useDisplay:true,constrain:false}, |
---|
53 | autoHeight:true, |
---|
54 | |
---|
55 | closeAction: 'hide', |
---|
56 | |
---|
57 | // private |
---|
58 | initComponent : function(){ |
---|
59 | Ext.Tip.superclass.initComponent.call(this); |
---|
60 | if(this.closable && !this.title){ |
---|
61 | this.elements += ',header'; |
---|
62 | } |
---|
63 | }, |
---|
64 | |
---|
65 | // private |
---|
66 | afterRender : function(){ |
---|
67 | Ext.Tip.superclass.afterRender.call(this); |
---|
68 | if(this.closable){ |
---|
69 | this.addTool({ |
---|
70 | id: 'close', |
---|
71 | handler: this[this.closeAction], |
---|
72 | scope: this |
---|
73 | }); |
---|
74 | } |
---|
75 | }, |
---|
76 | |
---|
77 | /** |
---|
78 | * Shows this tip at the specified XY position. Example usage: |
---|
79 | * <pre><code> |
---|
80 | // Show the tip at x:50 and y:100 |
---|
81 | tip.showAt([50,100]); |
---|
82 | </code></pre> |
---|
83 | * @param {Array} xy An array containing the x and y coordinates |
---|
84 | */ |
---|
85 | showAt : function(xy){ |
---|
86 | Ext.Tip.superclass.show.call(this); |
---|
87 | if(this.measureWidth !== false && (!this.initialConfig || typeof this.initialConfig.width != 'number')){ |
---|
88 | this.doAutoWidth(); |
---|
89 | } |
---|
90 | if(this.constrainPosition){ |
---|
91 | xy = this.el.adjustForConstraints(xy); |
---|
92 | } |
---|
93 | this.setPagePosition(xy[0], xy[1]); |
---|
94 | }, |
---|
95 | |
---|
96 | // protected |
---|
97 | doAutoWidth : function(adjust){ |
---|
98 | adjust = adjust || 0; |
---|
99 | var bw = this.body.getTextWidth(); |
---|
100 | if(this.title){ |
---|
101 | bw = Math.max(bw, this.header.child('span').getTextWidth(this.title)); |
---|
102 | } |
---|
103 | bw += this.getFrameWidth() + (this.closable ? 20 : 0) + this.body.getPadding("lr") + adjust; |
---|
104 | this.setWidth(bw.constrain(this.minWidth, this.maxWidth)); |
---|
105 | |
---|
106 | // IE7 repaint bug on initial show |
---|
107 | if(Ext.isIE7 && !this.repainted){ |
---|
108 | this.el.repaint(); |
---|
109 | this.repainted = true; |
---|
110 | } |
---|
111 | }, |
---|
112 | |
---|
113 | /** |
---|
114 | * <b>Experimental</b>. Shows this tip at a position relative to another element using a standard {@link Ext.Element#alignTo} |
---|
115 | * anchor position value. Example usage: |
---|
116 | * <pre><code> |
---|
117 | // Show the tip at the default position ('tl-br?') |
---|
118 | tip.showBy('my-el'); |
---|
119 | |
---|
120 | // Show the tip's top-left corner anchored to the element's top-right corner |
---|
121 | tip.showBy('my-el', 'tl-tr'); |
---|
122 | </code></pre> |
---|
123 | * @param {Mixed} el An HTMLElement, Ext.Element or string id of the target element to align to |
---|
124 | * @param {String} position (optional) A valid {@link Ext.Element#alignTo} anchor position (defaults to 'tl-br?' or |
---|
125 | * {@link #defaultAlign} if specified). |
---|
126 | */ |
---|
127 | showBy : function(el, pos){ |
---|
128 | if(!this.rendered){ |
---|
129 | this.render(Ext.getBody()); |
---|
130 | } |
---|
131 | this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign)); |
---|
132 | }, |
---|
133 | |
---|
134 | initDraggable : function(){ |
---|
135 | this.dd = new Ext.Tip.DD(this, typeof this.draggable == 'boolean' ? null : this.draggable); |
---|
136 | this.header.addClass('x-tip-draggable'); |
---|
137 | } |
---|
138 | }); |
---|
139 | |
---|
140 | Ext.reg('tip', Ext.Tip); |
---|
141 | |
---|
142 | // private - custom Tip DD implementation |
---|
143 | Ext.Tip.DD = function(tip, config){ |
---|
144 | Ext.apply(this, config); |
---|
145 | this.tip = tip; |
---|
146 | Ext.Tip.DD.superclass.constructor.call(this, tip.el.id, 'WindowDD-'+tip.id); |
---|
147 | this.setHandleElId(tip.header.id); |
---|
148 | this.scroll = false; |
---|
149 | }; |
---|
150 | |
---|
151 | Ext.extend(Ext.Tip.DD, Ext.dd.DD, { |
---|
152 | moveOnly:true, |
---|
153 | scroll:false, |
---|
154 | headerOffsets:[100, 25], |
---|
155 | startDrag : function(){ |
---|
156 | this.tip.el.disableShadow(); |
---|
157 | }, |
---|
158 | endDrag : function(e){ |
---|
159 | this.tip.el.enableShadow(true); |
---|
160 | } |
---|
161 | }); |
---|