PageSourceSearch

https://qintong.xyz/resources/scripts/axure/drag.js

js qintong.xyz collected 2026-10-07 21:49:51 UTC 10,445 bytes, 256 lines download raw bytes

1$axure.internal(function($ax) {
2    var widgetDragInfo = new Object();
3    var _drag = {};
4    $ax.drag = _drag;
5
6    $ax.drag.GetWidgetDragInfo = function() {
7        return $.extend({}, widgetDragInfo);
8    };
9
10    $ax.drag.StartDragWidget = function(event, id) {
11        $ax.setjBrowserEvent(jQuery.Event(event));
12        if(event.donotdrag) return;
13
14        var x, y;
15        var tg;
16        if(IE_10_AND_BELOW) {
17            x = window.event.clientX + window.document.documentElement.scrollLeft + window.document.body.scrollLeft;
18            y = window.event.clientY + window.document.documentElement.scrollTop + window.document.body.scrollTop;
19            tg = window.event.srcElement;
20        } else {
21            if(event.changedTouches) {
22                x = event.changedTouches[0].pageX;
23                y = event.changedTouches[0].pageY;
24            } else {
25                x = event.pageX;
26                y = event.pageY;
27                event.preventDefault();
28            }
29            tg = event.target;
30        }
31
32        widgetDragInfo.hasStarted = false;
33        widgetDragInfo.widgetId = id;
34        widgetDragInfo.cursorStartX = x;
35        widgetDragInfo.cursorStartY = y;
36        widgetDragInfo.lastX = x;
37        widgetDragInfo.lastY = y;
38        widgetDragInfo.currentX = x;
39        widgetDragInfo.currentY = y;
40
41        widgetDragInfo.movedWidgets = new Object();
42        widgetDragInfo.startTime = (new Date()).getTime();
43        widgetDragInfo.targetWidget = tg;
44
45        var movedownName = IE_10_AND_BELOW && $ax.features.supports.windowsMobile ?
46            $ax.features.eventNames.mouseDownName : $ax.features.eventNames.mouseMoveName;
47        $ax.event.addEvent(document, movedownName, _dragWidget, true);
48        $ax.event.addEvent(document, $ax.features.eventNames.mouseUpName, _stopDragWidget, true);
49
50        $ax.legacy.SuppressBubble(event);
51    };
52
53    var _dragWidget = function(event) {
54        $ax.setjBrowserEvent(jQuery.Event(event));
55
56        var x, y;
57        if(IE_10_AND_BELOW) {
58            x = window.event.clientX + window.document.documentElement.scrollLeft + window.document.body.scrollLeft;
59            y = window.event.clientY + window.document.documentElement.scrollTop + window.document.body.scrollTop;
60        } else {
61            if(event.changedTouches) {
62                x = event.changedTouches[0].pageX;
63                y = event.changedTouches[0].pageY;
64                //allow scroll (defaults) if only swipe events have cases and delta x is less than 5px and not blocking scrolling
65                var deltaX = x - widgetDragInfo.currentX;
66                var target = window.document.getElementById(widgetDragInfo.widgetId);
67                if($ax.event.hasSyntheticEvent(widgetDragInfo.widgetId, "onDrag") || $ax.event.hasSyntheticEvent(widgetDragInfo.widgetId, "onSwipeUp") ||
68                    $ax.event.hasSyntheticEvent(widgetDragInfo.widgetId, "onSwipeDown") || (deltaX * deltaX) > 25
69                    || ($ax.document.configuration.preventScroll && $ax.legacy.GetScrollable(target) == window.document.body)) {
70                    event.preventDefault();
71                }
72            } else {
73                x = event.pageX;
74                y = event.pageY;
75            }
76        }
77        widgetDragInfo.xDelta = x - widgetDragInfo.currentX;
78        widgetDragInfo.yDelta = y - widgetDragInfo.currentY;
79        widgetDragInfo.lastX = widgetDragInfo.currentX;
80        widgetDragInfo.lastY = widgetDragInfo.currentY;
81        widgetDragInfo.currentX = x;
82        widgetDragInfo.currentY = y;
83
84        widgetDragInfo.currentTime = (new Date()).getTime();
85
86        $ax.legacy.SuppressBubble(event);
87
88        if(!widgetDragInfo.hasStarted) {
89            widgetDragInfo.hasStarted = true;
90            $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onDragStart");
91
92            widgetDragInfo.oldBodyCursor = window.document.body.style.cursor;
93            window.document.body.style.cursor = 'move';
94            var widget = window.document.getElementById(widgetDragInfo.widgetId);
95            widgetDragInfo.oldCursor = widget.style.cursor;
96            widget.style.cursor = 'move';
97        }
98
99        $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onDrag");
100    };
101
102    var _suppressClickAfterDrag = function(event) {
103        _removeSuppressEvents();
104
105        $ax.legacy.SuppressBubble(event);
106    };
107
108    var _removeSuppressEvents = function () {
109        if(IE_10_AND_BELOW) {
110            $ax.event.removeEvent(event.srcElement, 'click', _suppressClickAfterDrag, undefined, true);
111            $ax.event.removeEvent(widgetDragInfo.targetWidget, 'mousemove', _removeSuppressEvents, undefined, true);
112        } else {
113            $ax.event.removeEvent(document, "click", _suppressClickAfterDrag, true);
114            $ax.event.removeEvent(document, 'mousemove', _removeSuppressEvents, true);
115        }
116    };
117
118    var _stopDragWidget = function(event) {
119        $ax.setjBrowserEvent(jQuery.Event(event));
120
121        var tg;
122
123
124        var movedownName = IE_10_AND_BELOW && $ax.features.supports.windowsMobile ?
125            $ax.features.eventNames.mouseDownName : $ax.features.eventNames.mouseMoveName;
126        $ax.event.removeEvent(document, movedownName, _dragWidget, true);
127        $ax.event.removeEvent(document, $ax.features.eventNames.mouseUpName, _stopDragWidget, true);
128
129        tg = IE_10_AND_BELOW ? window.event.srcElement : event.target;
130
131        if(widgetDragInfo.hasStarted) {
132            widgetDragInfo.currentTime = (new Date()).getTime();
133            $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onDragDrop");
134
135            if($ax.globalVariableProvider.getVariableValue('totaldragx') < -30 && $ax.globalVariableProvider.getVariableValue('dragtime') < 1000) {
136                $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onSwipeLeft");
137            }
138
139            if($ax.globalVariableProvider.getVariableValue('totaldragx') > 30 && $ax.globalVariableProvider.getVariableValue('dragtime') < 1000) {
140                $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onSwipeRight");
141            }
142
143            var totalDragY = $ax.globalVariableProvider.getVariableValue('totaldragy');
144            if(totalDragY < -30 && $ax.globalVariableProvider.getVariableValue('dragtime') < 1000) {
145                $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onSwipeUp");
146            }
147
148            if(totalDragY > 30 && $ax.globalVariableProvider.getVariableValue('dragtime') < 1000) {
149                $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onSwipeDown");
150            }
151
152            window.document.body.style.cursor = widgetDragInfo.oldBodyCursor;
153            var widget = window.document.getElementById(widgetDragInfo.widgetId);
154            // It may be null if OnDragDrop filtered out the widget
155            if(widget != null) widget.style.cursor = widgetDragInfo.oldCursor;
156
157            if(widgetDragInfo.targetWidget == tg && !event.changedTouches) {
158                // suppress the click after the drag on desktop browsers
159                if(IE_10_AND_BELOW && widgetDragInfo.targetWidget) {
160                    $ax.event.addEvent(widgetDragInfo.targetWidget, 'click', _suppressClickAfterDrag, true, true);
161                    $ax.event.addEvent(widgetDragInfo.targetWidget, "onmousemove", _removeSuppressEvents, true, true);
162                } else {
163                    $ax.event.addEvent(document, "click", _suppressClickAfterDrag, true);
164                    $ax.event.addEvent(document, "mousemove", _removeSuppressEvents, true);
165
166                }
167            }
168        }
169
170        widgetDragInfo.hasStarted = false;
171        widgetDragInfo.movedWidgets = new Object();
172
173        return false;
174    };
175
176    $ax.drag.GetDragX = function() {
177        if(widgetDragInfo.hasStarted) return widgetDragInfo.xDelta;
178        return 0;
179    };
180
181    $ax.drag.GetDragY = function() {
182        if(widgetDragInfo.hasStarted) return widgetDragInfo.yDelta;
183        return 0;
184    };
185
186    $ax.drag.GetTotalDragX = function() {
187        if(widgetDragInfo.hasStarted) return widgetDragInfo.currentX - widgetDragInfo.cursorStartX;
188        return 0;
189    };
190
191    $ax.drag.GetTotalDragY = function() {
192        if(widgetDragInfo.hasStarted) return widgetDragInfo.currentY - widgetDragInfo.cursorStartY;
193        return 0;
194    };
195
196    $ax.drag.GetDragTime = function() {
197        if(widgetDragInfo.hasStarted) return widgetDragInfo.currentTime - widgetDragInfo.startTime;
198        return 600000;
199    };
200
201    $ax.drag.LogMovedWidgetForDrag = function (id, dragInfo) {
202        dragInfo = dragInfo || widgetDragInfo;
203        if(dragInfo.hasStarted) {
204            var containerIndex = id.indexOf('_container');
205            if(containerIndex != -1) id = id.substring(0, containerIndex);
206
207            // If state or other non-widget id, this should not be dragged, and should exit out to avoid exceptions.
208            if(!$obj(id)) return;
209
210            var query = $ax('#' + id);
211            //var x = query.left();
212            //var y = query.top();
213            var viewportLocation = query.viewportLocation();
214            var x =  viewportLocation.left;
215            var y = viewportLocation.top;
216
217            var movedWidgets = dragInfo.movedWidgets;
218            if(!movedWidgets[id]) {
219                movedWidgets[id] = new Location(x, y);
220            }
221        }
222    };
223
224    var Location = function(x, y) {
225        this.x = x;
226        this.y = y;
227    };
228    $ax.drag.location = Location;
229
230    var Rectangle = $ax.drag.Rectangle = function(x, y, width, height) {
231        this.x = x;
232        this.y = y;
233        this.width = width;
234        this.height = height;
235        this.right = x + width;
236        this.bottom = y + height;
237    };
238
239    Rectangle.prototype.IntersectsWith = function(rect) {
240        if(this.Invalid()) return false;
241        if(rect.length) {
242            for(var i = 0; i < rect.length; i++) if(!rect[i].Invalid && this.IntersectsWith(rect[i])) return true;
243            return false;
244        }
245        if(rect.Invalid()) return false;
246        return this.x < rect.right && this.right > rect.x && this.y < rect.bottom && this.bottom > rect.y;
247    };
248
249    Rectangle.prototype.Invalid = function() {
250        return this.x == -1 && this.y == -1 && this.width == -1 && this.height == -1;
251    };
252
253    Rectangle.prototype.Move = function(x, y) {
254        return new Rectangle(x, y, this.width, this.height);
255    };
256});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.