summaryrefslogtreecommitdiff
path: root/frontend/beta/js/YUI-extensions/widgets/QuickTips.js
Unidiff
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.js311
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 */
5YAHOO.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}();