author | Giulio Cesare Solaroli <giulio.cesare@clipperz.com> | 2011-10-02 23:56:18 (UTC) |
---|---|---|
committer | Giulio Cesare Solaroli <giulio.cesare@clipperz.com> | 2011-10-02 23:56:18 (UTC) |
commit | ef68436ac04da078ffdcacd7e1f785473a303d45 (patch) (unidiff) | |
tree | c403752d66a2c4775f00affd4fa8431b29c5b68c /frontend/beta/js/YUI-extensions/widgets/QuickTips.js | |
parent | 597ecfbc0249d83e1b856cbd558340c01237a360 (diff) | |
download | clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.zip clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.tar.gz clipperz-ef68436ac04da078ffdcacd7e1f785473a303d45.tar.bz2 |
First version of the newly restructured repository
Diffstat (limited to 'frontend/beta/js/YUI-extensions/widgets/QuickTips.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/beta/js/YUI-extensions/widgets/QuickTips.js | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/frontend/beta/js/YUI-extensions/widgets/QuickTips.js b/frontend/beta/js/YUI-extensions/widgets/QuickTips.js new file mode 100644 index 0000000..6658574 --- a/dev/null +++ b/frontend/beta/js/YUI-extensions/widgets/QuickTips.js | |||
@@ -0,0 +1,311 @@ | |||
1 | /** | ||
2 | * @class YAHOO.ext.QuickTips | ||
3 | * @singleton | ||
4 | */ | ||
5 | YAHOO.ext.QuickTips = function(){ | ||
6 | var el, tipBody, tipTitle, tm, cfg, close, tagEls = {}, reader, esc, anim, removeCls = null; | ||
7 | var ce, bd, xy; | ||
8 | var visible = false, disabled = true, inited = false; | ||
9 | var showProc = hideProc = dismissProc = 1, locks = []; | ||
10 | var E = YAHOO.util.Event, dd; | ||
11 | |||
12 | var onOver = function(e){ | ||
13 | if(disabled){ | ||
14 | return; | ||
15 | } | ||
16 | var t = E.getTarget(e); | ||
17 | if(!t){ | ||
18 | return; | ||
19 | } | ||
20 | if(ce && t == ce.el){ | ||
21 | clearTimeout(hideProc); | ||
22 | return; | ||
23 | } | ||
24 | if(t && tagEls[t.id]){ | ||
25 | tagEls[t.id].el = t; | ||
26 | showProc = show.defer(tm.showDelay, tm, [tagEls[t.id]]); | ||
27 | return; | ||
28 | } | ||
29 | var ttp = reader.getAttribute(t, cfg.attribute); | ||
30 | if(!ttp && tm.interceptTitles && t.title){ | ||
31 | ttp = t.title; | ||
32 | t.title = ''; | ||
33 | if(reader.useNS){ | ||
34 | t.setAttributeNS('y', 'qtip', ttp); | ||
35 | }else{ | ||
36 | t.setAttribute('qtip', ttp); | ||
37 | } | ||
38 | } | ||
39 | if(ttp){ | ||
40 | xy = E.getXY(e); | ||
41 | xy[0] += 12; xy[1] += 20; | ||
42 | showProc = show.defer(tm.showDelay, tm, [{ | ||
43 | el: t, | ||
44 | text: ttp, | ||
45 | width: reader.getAttribute(t, cfg.width), | ||
46 | autoHide: reader.getAttribute(t, cfg.hide) != 'user', | ||
47 | title: reader.getAttribute(t, cfg.title), | ||
48 | cls: reader.getAttribute(t, cfg.cls) | ||
49 | }]); | ||
50 | } | ||
51 | }; | ||
52 | |||
53 | var onOut = function(e){ | ||
54 | clearTimeout(showProc); | ||
55 | var t = E.getTarget(e); | ||
56 | if(t && ce && ce.el == t && (tm.autoHide && ce.autoHide !== false)){ | ||
57 | hideProc = setTimeout(hide, tm.hideDelay); | ||
58 | } | ||
59 | }; | ||
60 | |||
61 | var onMove = function(e){ | ||
62 | if(disabled){ | ||
63 | return; | ||
64 | } | ||
65 | xy = E.getXY(e); | ||
66 | xy[0] += 12; xy[1] += 20; | ||
67 | if(tm.trackMouse && ce){ | ||
68 | el.setXY(xy); | ||
69 | } | ||
70 | }; | ||
71 | |||
72 | var onDown = function(e){ | ||
73 | clearTimeout(showProc); | ||
74 | clearTimeout(hideProc); | ||
75 | if(!e.within(el)){ | ||
76 | if(tm.hideOnClick && ce && ce.autoHide !== false){ | ||
77 | hide(); | ||
78 | tm.disable(); | ||
79 | } | ||
80 | } | ||
81 | }; | ||
82 | |||
83 | var onUp = function(e){ | ||
84 | tm.enable(); | ||
85 | } | ||
86 | |||
87 | var show = function(o){ | ||
88 | if(disabled){ | ||
89 | return; | ||
90 | } | ||
91 | clearTimeout(dismissProc); | ||
92 | stopAnim(); | ||
93 | ce = o; | ||
94 | if(removeCls){ // in case manually hidden | ||
95 | el.removeClass(removeCls); | ||
96 | removeCls = null; | ||
97 | } | ||
98 | if(ce.cls){ | ||
99 | el.addClass(ce.cls); | ||
100 | removeCls = ce.cls; | ||
101 | } | ||
102 | if(ce.title){ | ||
103 | tipTitleText.update(ce.title); | ||
104 | tipTitle.show(); | ||
105 | }else{ | ||
106 | tipTitle.hide(); | ||
107 | } | ||
108 | tipBody.update(o.text); | ||
109 | if(!ce.width){ | ||
110 | if(tipBody.dom.style.width){ | ||
111 | tipBody.dom.style.width = ''; | ||
112 | } | ||
113 | if(tipBody.dom.offsetWidth > tm.maxWidth){ | ||
114 | tipBody.setWidth(tm.maxWidth); | ||
115 | } | ||
116 | }else{ | ||
117 | tipBody.setWidth(ce.width); | ||
118 | } | ||
119 | if(!ce.autoHide){ | ||
120 | close.setDisplayed(true); | ||
121 | if(dd){ | ||
122 | dd.unlock(); | ||
123 | } | ||
124 | }else{ | ||
125 | close.setDisplayed(false); | ||
126 | if(dd){ | ||
127 | dd.lock(); | ||
128 | } | ||
129 | } | ||
130 | if(xy){ | ||
131 | el.setXY(xy); | ||
132 | } | ||
133 | if(tm.animate){ | ||
134 | anim.attributes = {opacity:{to:1}}; | ||
135 | el.setOpacity(.1); | ||
136 | el.setStyle('visibility', 'visible'); | ||
137 | anim.animateX(afterShow); | ||
138 | }else{ | ||
139 | afterShow(); | ||
140 | } | ||
141 | }; | ||
142 | |||
143 | var afterShow = function(){ | ||
144 | if(ce){ | ||
145 | el.show(); | ||
146 | esc.enable(); | ||
147 | if(tm.autoDismiss && ce.autoHide !== false){ | ||
148 | dismissProc = setTimeout(hide, tm.autoDismissDelay); | ||
149 | } | ||
150 | } | ||
151 | } | ||
152 | |||
153 | var hide = function(noanim){ | ||
154 | clearTimeout(dismissProc); | ||
155 | clearTimeout(hideProc); | ||
156 | ce = null; | ||
157 | if(el.isVisible()){ | ||
158 | esc.disable(); | ||
159 | stopAnim(); | ||
160 | if(noanim !== true && tm.animate){ | ||
161 | anim.attributes = {opacity:{to:.1}}; | ||
162 | el.beforeAction(); | ||
163 | anim.animateX(afterHide); | ||
164 | }else{ | ||
165 | afterHide(); | ||
166 | } | ||
167 | } | ||
168 | }; | ||
169 | |||
170 | var afterHide = function(){ | ||
171 | el.hide(); | ||
172 | if(removeCls){ | ||
173 | el.removeClass(removeCls); | ||
174 | removeCls = null; | ||
175 | } | ||
176 | } | ||
177 | |||
178 | var stopAnim = function(){ | ||
179 | if(anim && anim.isAnimated()){ | ||
180 | anim.stop(); | ||
181 | } | ||
182 | } | ||
183 | |||
184 | return { | ||
185 | init : function(){ | ||
186 | if(YAHOO.ext.util.Browser.isIE && !YAHOO.ext.util.Browser.isIE7){ | ||
187 | return; | ||
188 | } | ||
189 | tm = YAHOO.ext.QuickTips; | ||
190 | cfg = tm.tagConfig; | ||
191 | reader = new YAHOO.ext.CustomTagReader(cfg.namespace); | ||
192 | if(!inited){ | ||
193 | el = new YAHOO.ext.Layer({cls:'ytip', shadow:true, useDisplay: false}); | ||
194 | el.update('<div class="ytip-hd-left"><div class="ytip-hd-right"><div class="ytip-hd"></div></div></div>'); | ||
195 | tipTitle = getEl(el.dom.firstChild); | ||
196 | tipTitleText = getEl(el.dom.firstChild.firstChild.firstChild); | ||
197 | tipTitle.enableDisplayMode('block'); | ||
198 | tipBody = el.createChild({tag:'div', cls:'ytip-bd'}); | ||
199 | close = el.createChild({tag:'div', cls:'ytip-close'}); | ||
200 | close.on('click', hide); | ||
201 | d = getEl(document); | ||
202 | d.mon('mousedown', onDown); | ||
203 | d.on('mouseup', onUp); | ||
204 | d.on('mouseover', onOver); | ||
205 | d.on('mouseout', onOut); | ||
206 | d.on('mousemove', onMove); | ||
207 | esc = d.addKeyListener(27, hide); | ||
208 | esc.disable(); | ||
209 | if(tm.animate){ | ||
210 | anim = new YAHOO.util.Anim(el.dom, {}, .1); | ||
211 | } | ||
212 | if(YAHOO.util.DD){ | ||
213 | dd = el.initDD('default', null, { | ||
214 | onDrag : function(){ | ||
215 | el.sync(); | ||
216 | } | ||
217 | }); | ||
218 | dd.setHandleElId(tipTitleText.id); | ||
219 | dd.lock(); | ||
220 | } | ||
221 | inited = true; | ||
222 | } | ||
223 | this.scan(document.body); | ||
224 | this.enable(); | ||
225 | }, | ||
226 | |||
227 | tips : function(config){ | ||
228 | var cs = config instanceof Array ? config : arguments; | ||
229 | for(var i = 0, len = cs.length; i < len; i++) { | ||
230 | var c = cs[i]; | ||
231 | var target = c.target; | ||
232 | if(target){ | ||
233 | if(target instanceof Array){ | ||
234 | for(var j = 0, jlen = target.length; j < jlen; j++){ | ||
235 | tagEls[target[j]] = c; | ||
236 | } | ||
237 | }else{ | ||
238 | tagEls[target] = c; | ||
239 | } | ||
240 | } | ||
241 | } | ||
242 | }, | ||
243 | |||
244 | enable : function(){ | ||
245 | if(inited){ | ||
246 | locks.pop(); | ||
247 | if(locks.length < 1){ | ||
248 | disabled = false; | ||
249 | } | ||
250 | } | ||
251 | }, | ||
252 | |||
253 | disable : function(){ | ||
254 | disabled = true; | ||
255 | clearTimeout(showProc); | ||
256 | clearTimeout(hideProc); | ||
257 | clearTimeout(dismissProc); | ||
258 | if(ce){ | ||
259 | hide(true); | ||
260 | } | ||
261 | locks.push(1); | ||
262 | }, | ||
263 | |||
264 | scan : function(toScan){ | ||
265 | toScan = toScan.dom ? toScan.dom : YAHOO.util.Dom.get(toScan); | ||
266 | var found = []; | ||
267 | reader.eachElement(cfg.tag, toScan, function(el){ | ||
268 | var t = reader.getAttribute(el, cfg.target); | ||
269 | if(t){ | ||
270 | found.push({ | ||
271 | target: t.indexOf(',') != -1 ? t.split(',') : t, | ||
272 | text: el.innerHTML, | ||
273 | autoHide: reader.getAttribute(el, cfg.hide) != 'user', | ||
274 | width: reader.getAttribute(el, cfg.width), | ||
275 | title: reader.getAttribute(el, cfg.title), | ||
276 | cls: reader.getAttribute(el, cfg.cls) | ||
277 | }); | ||
278 | } | ||
279 | el.parentNode.removeChild(el); | ||
280 | }); | ||
281 | this.tips(found); | ||
282 | }, | ||
283 | |||
284 | tagConfig : { | ||
285 | namespace : 'y', | ||
286 | tag : 'qtip', | ||
287 | attribute : 'qtip', | ||
288 | width : 'width', | ||
289 | target : 'target', | ||
290 | title : 'qtitle', | ||
291 | hide : 'hide', | ||
292 | cls : 'qclass' | ||
293 | }, | ||
294 | |||
295 | maxWidth : 300, | ||
296 | interceptTitles : true, | ||
297 | trackMouse : false, | ||
298 | hideOnClick : true, | ||
299 | showDelay : 500, | ||
300 | hideDelay : 200, | ||
301 | autoHide : true, | ||
302 | autoDismiss : true, | ||
303 | autoDismissDelay : 5000, | ||
304 | /** | ||
305 | * True to turn on fade animation. Defaults to true | ||
306 | * except in IE7 (ClearType/scrollbar flicker issues in IE7 with filters). | ||
307 | * @type Boolean | ||
308 | */ | ||
309 | animate : YAHOO.util.Anim && !YAHOO.ext.util.Browser.isIE7 | ||
310 | } | ||
311 | }(); | ||