source: branches/2.2.0.1/jabberir_messenger/jmessenger/js/dragdrop.js @ 4453

Revision 4453, 4.4 KB checked in by rafaelraymundo, 13 years ago (diff)

Ticket #1726 - Adicionando jabberit_messenger da comunidade.

  • Property svn:executable set to *
Line 
1(function()
2{
3        var _element    = null;
4        var _elementA   = null;
5        var _elementB   = null;
6        var _parent             = null;
7
8        function _configEvent( pObj, pEvent, pHandler )
9        {
10                if ( pObj && typeof pObj == 'object' )
11                {
12                        if ( pEvent.substring(0, 2) == 'on' )
13                                pEvent = pEvent.substring(2, pEvent.length);
14       
15                        if ( arguments.length == 3 )
16                        {
17                                if ( pObj.addEventListener )
18                                        pObj.addEventListener(pEvent, pHandler, false);
19                                else if ( pObj.attachEvent )
20                                        pObj.attachEvent('on' + pEvent, pHandler);
21                        }
22                        else if ( arguments.length == 4 )
23                        {
24                                if ( pObj.removeEventListener )
25                                {
26                                        pObj.removeEventListener( pEvent, pHandler, false );
27                                }
28                                else if ( pObj.detachEvent )
29                                {
30                                        pObj.detachEvent( 'on' + pEvent, pHandler );
31                                }
32                        }
33                }
34        }
35
36        function _drag(e)
37        {
38                if (typeof e.preventDefault != 'undefined')
39                        e.preventDefault();
40                else
41                        e.onselectstart = new Function("return false;");
42
43                _element = ( e.target ) ? e.target : e.srcElement;
44
45                if ( _element )
46                {
47                        _configEvent(_element, 'onmousemove', _mouseMove);
48                        _configEvent(top.document, 'onmousemove', _mouseMove);
49
50                        _configEvent(_element, 'onmouseup', _mouseUp);
51                        _configEvent(top.document, 'onmouseup', _mouseUp);
52                }
53        }
54
55        function _elementShadow( pId )
56        {
57                if( _elementA )
58                {
59                        var _elShadow                   = document.createElement("div");
60                        _elShadow.id                    = _elementA.id + "__Shadow";
61                        _elShadow.setAttribute("onselectstart" , "return false");
62                        _elShadow.style.width   = _elementA.style.width;
63                        _elShadow.style.height  = _elementA.style.height;
64                        _elShadow.style.top             = _elementA.style.top;
65                        _elShadow.style.left    = _elementA.style.left;
66                        _elShadow.style.zIndex  = _elementA.style.zIndex;
67                        _elShadow.className             = "x-shadow_Div";
68                       
69                        return _elShadow;
70                }
71        }
72
73        function _load()
74        {
75                if( arguments.length > 0 )
76                {
77                        var pId = arguments[0];
78                       
79                        _configEvent(document.getElementById( pId + "__draggable"), 'onmousedown', _mouseDownShadow);
80                }
81        }
82
83        function _getMouseOffset(e, el)
84        {
85                var docPos = _getPosition(el);
86                var mousePos = _mouseCoords(e);
87                return {
88                        'x' : mousePos.x - docPos.x,
89                        'y' : mousePos.y - docPos.y
90                };
91        }
92
93        function _getPosition(_pObject)
94        {
95                var left = 0;
96                var top  = 0;
97
98                while ( _pObject.offsetParent )
99                {
100                        left += _pObject.offsetLeft;
101                        top  += _pObject.offsetTop;
102                        _pObject = _pObject.offsetParent;
103                }
104
105                left += _pObject.offsetLeft;
106                top  += _pObject.offsetTop;
107
108                return {
109                        'x' : left,
110                        'y' : top
111                };
112        }
113
114        function _mouseCoords(ev)
115        {
116                var CoordX = "";
117                var CoordY = "";
118
119                if ( ev.pageX || ev.pageY )
120                        return {
121                                'x' : ev.pageX,
122                                'y' : ev.pageY
123                        };
124
125                CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft;
126                CoordY = ev.clientY + document.body.scrollTop  - document.body.clientTop;
127               
128                return {
129                        'x' : CoordX,
130                        'y' : CoordY
131                };
132        }
133
134        function _mouseMove(e)
135        {
136                if ( _element )
137                {
138                        if ( _element.mouseOffset == null )
139                                _element.mouseOffset = _getMouseOffset(e, _element);
140
141                        var mousePos = _mouseCoords(e);
142
143                        var x = mousePos.x - _element.mouseOffset.x;
144                        var y = mousePos.y - _element.mouseOffset.y;
145                        _element.style.left = (( x < 0 ) ? 0 : x) + 'px';
146                        _element.style.top  = (( y < 0 ) ? 0 : y) + 'px';
147                }
148        }
149
150        function _mouseUp()
151        {
152                if ( _element )
153                {
154                        _configEvent(_element, 'onmousemove', _mouseMove, 'remove');
155                        _configEvent(top.document, 'onmousemove', _mouseMove, 'remove');
156
157                        _configEvent(_element, 'onmouseup', _mouseUp, 'remove');
158                        _configEvent(top.document, 'onmouseup', _mouseUp, 'remove');
159
160                        _element.mouseOffset = null;
161                        _mouseUpShadow();
162                }
163        }
164
165        function _mouseDownShadow(e)
166        {
167                try
168                {
169                        if( arguments.length > 0 )
170                        {
171                                var _el = ( e.target ) ? e.target : e.srcElement;
172                                var _id = (_el.id.substring(0, _el.id.indexOf("__draggable")));
173                               
174                                _elementA = document.getElementById( _id + "__parent");
175                                _elementB = _elementShadow( _id + "__parent");
176                               
177                                _elementA.style.left = '-1500px';
178                                _parent   = _elementA.parentNode;
179                               
180                                var _B = _parent.appendChild(_elementB);
181                               
182                                _configEvent( _elementB, 'onmouseup', _mouseUpShadow);
183                                _configEvent( _elementB, 'onmousemove', _drag);
184                        }
185                       
186                }catch(e){}
187        }
188
189        function _mouseUpShadow()
190        {
191                try
192                {
193                        _elementA.style.top             = _elementB.style.top;
194                        _elementA.style.left    = _elementB.style.left;
195                       
196                        var _B = _parent.removeChild(_elementB);
197
198                        _elementA = null;
199                        _elementB = null;
200                        _element = null;
201                }
202                catch(e){}
203        }
204       
205        function _drag_drop(){}
206
207        _drag_drop.prototype.set        = _load;
208        window._drag_drop = _drag_drop;
209       
210})();
Note: See TracBrowser for help on using the repository browser.