source: companies/celepar/jabberit_messenger/js/dragdrop.js @ 763

Revision 763, 3.3 KB checked in by niltonneto, 15 years ago (diff)

Importação inicial do Expresso da Celepar

Line 
1(function()
2{
3        var _element = null;
4
5        function _config(pObj, pEvent, pHandler)
6        {
7                if ( typeof pObj == 'object' )
8                {
9                        if ( pEvent.substring(0, 2) == 'on' )
10                                pEvent = pEvent.substring(2, pEvent.length);
11
12                        if ( arguments.length == 3 )
13                        {
14                                if ( pObj.addEventListener )
15                                        pObj.addEventListener(pEvent, pHandler, false);
16                                else if ( pObj.attachEvent )
17                                        pObj.attachEvent('on' + pEvent, pHandler);
18                        }
19                        else if ( arguments.length == 4 )
20                        {
21                                if ( pObj.removeEventListener )
22                                        pObj.removeEventListener(pEvent, pHandler, false);
23                                else if ( pObj.detachEvent )
24                                        pObj.detachEvent('on' + pEvent, pHandler);
25                        }
26                }
27        }
28
29        function _getMouseOffset(e, el)
30        {
31                var docPos = _getPosition(el);
32                var mousePos = _mouseCoords(e);
33                return {
34                        'x' : mousePos.x - docPos.x,
35                        'y' : mousePos.y - docPos.y
36                };
37        }
38
39        function _getPosition(_pObject)
40        {
41                var left = 0;
42                var top  = 0;
43
44                while ( _pObject.offsetParent )
45                {
46                        left += _pObject.offsetLeft;
47                        top  += _pObject.offsetTop;
48                        _pObject = _pObject.offsetParent;
49                }
50
51                left += _pObject.offsetLeft;
52                top  += _pObject.offsetTop;
53
54                return {
55                        'x' : left,
56                        'y' : top
57                };
58        }
59
60        function _mouseCoords(ev)
61        {
62                var CoordX = "";
63                var CoordY = "";
64
65                if ( ev.pageX || ev.pageY )
66                        return {
67                                'x' : ev.pageX,
68                                'y' : ev.pageY
69                        };
70
71                CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft;
72                CoordY = ev.clientY + document.body.scrollTop  - document.body.clientTop;
73                return {
74                        'x' : CoordX,
75                        'y' : CoordY
76                };
77        }
78
79        function _mouseMove(e)
80        {
81                if ( _element )
82                {
83                        if ( _element.mouseOffset == null )
84                                _element.mouseOffset = _getMouseOffset(e, _element);
85
86                        var mousePos = _mouseCoords(e);
87
88                        var x = mousePos.x - _element.mouseOffset.x;
89                        var y = mousePos.y - _element.mouseOffset.y;
90                        _element.style.left = (( x < 0 ) ? 0 : x) + 'px';
91                        _element.style.top  = (( y < 0 ) ? 0 : y) + 'px';
92                }
93        }
94
95        function _mouseUp()
96        {
97                if ( _element )
98                {
99                        _config(_element, 'onmousemove', _mouseMove, 'remove');
100                        _config(top.document, 'onmousemove', _mouseMove, 'remove');
101
102                        _config(_element, 'onmouseup', _mouseUp, 'remove');
103                        _config(top.document, 'onmouseup', _mouseUp, 'remove');
104
105                        _element.mouseOffset = null;
106                        _element = null;
107                }
108        }
109
110        function _toDrag(el)
111        {
112                if ( el.getAttribute('dragdrop_parent') == null )
113                {
114                        if ( el.getAttribute('dragdrop_child') != null )
115                        {
116                                var children = 0;
117                                while ( (++children < 5) && (el.getAttribute('dragdrop_parent') == null) )
118                                        el = el.parentNode;
119                        }
120                        if ( el.getAttribute('dragdrop_parent') == null )
121                                el = false;
122                }
123                return el;
124        }
125
126        function _drag(e)
127        {
128                if (typeof e.preventDefault != 'undefined')
129                        e.preventDefault();
130                else
131                        e.onselectstart = new Function("return false;");
132
133                var el = ( e.target ) ? e.target : e.srcElement;
134
135                el = _toDrag(el);
136
137                if ( el )
138                {
139                        _element = el;
140
141                        _config(el, 'onmousemove', _mouseMove);
142                        _config(top.document, 'onmousemove', _mouseMove);
143
144                        _config(el, 'onmouseup', _mouseUp);
145                        _config(top.document, 'onmouseup', _mouseUp);
146                }
147        }
148
149        function _set(_pObject)
150        {
151                if ( typeof _pObject != 'object' )
152                        return false;
153
154                _pObject.setAttribute('dragdrop_parent', 'true');
155
156                _config(_pObject, 'onmousedown', _drag);
157        }
158
159        function DragDrop()
160        {
161        }
162
163        DragDrop.prototype.drag = _set;
164        window.JITDragDrop = DragDrop;
165}
166)();
Note: See TracBrowser for help on using the repository browser.