Linux multi-monitor fullscreen support
[ryzomcore.git] / web / public_php / admin / overlib / overlib_draggable.js
blobd6797982c1f61ce198c35061ebc84a60da4ee3d9
1 //\/////\r
2 //\  overLIB Draggable Plugin\r
3 //\\r
4 //\  You may not remove or change this notice.\r
5 //\  Copyright Erik Bosrup 1998-2003. All rights reserved.\r
6 //\  Contributors are listed on the homepage.\r
7 //\  See http://www.bosrup.com/web/overlib/ for details.\r
8 //\/////\r
9 ////////\r
10 // PRE-INIT\r
11 // Ignore these lines, configuration is below.\r
12 ////////\r
13 if (typeof olInfo == 'undefined' || typeof olInfo.meets == 'undefined' || !olInfo.meets(4.14)) alert('overLIB 4.14 or later is required for the Draggable Plugin.');\r
14 else {\r
15 registerCommands('draggable,altcut,dragimg');\r
16 ////////\r
17 // DEFAULT CONFIGURATION\r
18 // Settings you want everywhere are set here. All of this can also be\r
19 // changed on your html page or through an overLIB call.\r
20 ////////\r
21 if (typeof ol_draggable=='undefined') var ol_draggable=0;\r
22 if (typeof ol_altcut=='undefined') var ol_altcut=0;\r
23 if (typeof ol_dragimg=='undefined') var ol_dragimg='';\r
24 ////////\r
25 // END OF CONFIGURATION\r
26 // Don't change anything below this line, all configuration is above.\r
27 ////////\r
28 ////////\r
29 // INIT\r
30 ////////\r
31 // Runtime variables init. Don't change for config!\r
32 var o3_draggable=0;\r
33 var o3_altcut=0;\r
34 var o3_dragimg='';\r
35 var olImgLeft,olImgTop;\r
36 var olImgObj;\r
37 var olMseMv;  // hold old mouseMove routine\r
38 ////////\r
39 // PLUGIN FUNCTIONS\r
40 ////////\r
41 function setDragVariables() {\r
42         o3_draggable=ol_draggable;\r
43         o3_altcut=ol_altcut;\r
44         o3_dragimg=ol_dragimg;\r
45         olImgObj=null;\r
46 }\r
47 // Parses Draggable commands\r
48 function parseDragExtras(pf,i,ar) {\r
49         var k=i;\r
50         if (k < ar.length) {\r
51                 if (ar[k]==DRAGGABLE) { eval(pf+'draggable=('+pf+'draggable==0) ? 1 : 0'); return k; }\r
52                 if (ar[k]==ALTCUT) { eval(pf+'altcut=('+pf+'altcut==0) ? 1 : 0'); return k; }\r
53                 if (ar[k]==DRAGIMG) { eval(pf+'dragimg="'+ar[++k]+'"'); return k; }\r
54         }\r
55         return -1;\r
56 }\r
57 //////\r
58 //  PRESHOW PROCESSING FOR DRAGGABLE POPUPS\r
59 //////\r
60 function startDrag() {\r
61  // Initiate dragging if in same frame and its a sticky\r
62         if (o3_draggable) {\r
63                 if (o3_sticky&&(o3_frame==ol_frame)) initDrag();\r
64                 else o3_draggable=0;\r
65         }\r
66 }\r
67 //////\r
68 //  POSTHIDE PROCESSING FOR DRAGGABLE POPUPS\r
69 //////\r
70 function stopDrag() {\r
71         if (o3_draggable) endDrag();\r
72 }\r
73 //////\r
74 // DRAGGABLE FUNCTIONS\r
75 //////\r
76 function initDrag() {\r
77         olMseMv=capExtent.onmousemove;\r
78         if(olNs4) {\r
79                 document.captureEvents(Event.MOUSEDOWN | Event.CLICK);\r
80                 document.onmousedown=grabEl;\r
81                 document.onclick=function(e) {return routeEvent(e);}\r
82         } else {\r
83                 over.onmousedown=grabEl;\r
84         }\r
85         if (o3_dragimg) chkForImgSupport(o3_dragimg);\r
86         return true;\r
87 }\r
88 // Checks for image for dragging\r
89 function chkForImgSupport(dragImg) {\r
90         if (dragImg) {\r
91                 if (typeof getAnchorObjRef!='undefined') olImgObj=getAnchorObjRef(dragImg);\r
92                 if (olImgObj==null) o3_dragimg='';\r
93         }\r
94 }\r
95 // Sets cursor symbol\r
96 function setCursor(on) {\r
97         if (olNs4) return;\r
98         over.style.cursor=(on ? 'move' : 'auto');\r
99 }\r
100 // Checks cursor position relative to image\r
101 function chkCursorPosition(Obj,XPos,YPos) {\r
102         if (Obj) {\r
103                 o3_anchorx=o3_anchory=0;\r
104                 o3_anchoralign='UL';\r
105                 getAnchorLocation(Obj);\r
106                 if (XPos < olImgLeft||XPos > (olImgLeft+Obj.width)||YPos < olImgTop||YPos > (olImgTop+Obj.height)) return false;\r
107         }\r
108         return true;\r
110 // Sets up mouse grab for moving\r
111 function grabEl(e) {\r
112         var e=(e) ? e : event;\r
113         var X,Y;\r
114         var cKy=(olNs4 ? e.modifiers & Event.ALT_MASK : (!olOp ? e.altKey : e.ctrlKey));\r
115         if ((o3_altcut ? !cKy : cKy)) {\r
116                 //   get mouse's current x,y location\r
117                 X=(e.pageX || eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft'));\r
118                 Y=(e.pageY || eval('e.clientY+o3_frame.'+docRoot+'.scrollTop'));\r
119           if (chkCursorPosition(olImgObj,X,Y)) {\r
120                         if (olNs4) document.captureEvents(Event.MOUSEUP);\r
121                         capExtent.onmousemove=moveEl;\r
122                         document.onmouseup=function() {setCursor(0); if (olIe4) over.onselectstart=null; capExtent.onmousemove=olMseMv;}\r
123                         setCursor(1);\r
124                         if (olIe4) over.onselectstart=function() {return false;}\r
125                         if (olNs4) {\r
126                         cX=X\r
127                         cY=Y\r
128                         } else {\r
129                         // get offsets from upper left hand corner of popup to keep popup from jummping\r
130                         // when first starting to drag\r
131                         cX=X-(olNs4 ? over.left : parseInt(over.style.left));\r
132                         cY=Y-(olNs4 ? over.top : parseInt(over.style.top)); \r
133                         }\r
134                         return (olNs4 ? routeEvent(e) : false);\r
135           }\r
136         } else setCursor(0);\r
138 // Moves popup to follow mouse\r
139 function moveEl(e) {\r
140         var e=(e) ? e : event;\r
141         var dX,dY,X,Y;\r
142         //  get new mouse location\r
143         X=(e.pageX || eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft'));\r
144         Y=(e.pageY || eval('e.clientY+o3_frame.'+docRoot+'.scrollTop'));\r
145         if (chkCursorPosition(olImgObj,X,Y)){\r
146                 if (olNs4) {\r
147                         dX=X-cX; cX=X;\r
148                         dY=Y-cY; cY=Y;\r
149                         over.moveBy(dX,dY);\r
150                 } else \r
151                         repositionTo(over,X-cX,Y-cY);  // move popup to that position\r
152         }\r
154 // Cleanup for Drag end\r
155 function endDrag(obj) {\r
156         if (olNs4) {\r
157                 document.releaseEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.CLICK);\r
158                 document.onmousedown=document.onclick=null;\r
159         } else {\r
160                 if(!obj) obj=over;\r
161                 obj.onmousedown=null;\r
162         }\r
163         document.onmouseup= null;\r
165 ////////\r
166 // PLUGIN REGISTRATIONS\r
167 ////////\r
168 registerRunTimeFunction(setDragVariables);\r
169 registerCmdLineFunction(parseDragExtras);\r
170 registerHook("disp",startDrag,FBEFORE);\r
171 registerHook("hideObject",stopDrag,FAFTER);\r
172 if (olInfo.meets(4.14)) registerNoParameterCommands('draggable,altcut');\r
174 //end \r