1///////////////////////////////////////////////////////////////////////////// 2Type.registerNamespace('AjaxControlToolkit');AjaxControlToolkit.IDragSource = function() { 3} 4AjaxControlToolkit.IDragSource.prototype = { 5get_dragDataType: function() { throw Error.notImplemented();}, 6getDragData: function() { throw Error.notImplemented();}, 7get_dragMode: function() { throw Error.notImplemented();}, 8onDragStart: function() { throw Error.notImplemented();}, 9onDrag: function() { throw Error.notImplemented();}, 10onDragEnd: function() { throw Error.notImplemented();} 11} 12AjaxControlToolkit.IDragSource.registerInterface('AjaxControlToolkit.IDragSource');///////////////////////////////////////////////////////////////////////////// 13AjaxControlToolkit.IDropTarget = function() { 14} 15AjaxControlToolkit.IDropTarget.prototype = { 16get_dropTargetElement: function() { throw Error.notImplemented();}, 17canDrop: function() { throw Error.notImplemented();}, 18drop: function() { throw Error.notImplemented();}, 19onDragEnterTarget: function() { throw Error.notImplemented();}, 20onDragLeaveTarget: function() { throw Error.notImplemented();}, 21onDragInTarget: function() { throw Error.notImplemented();} 22} 23AjaxControlToolkit.IDropTarget.registerInterface('AjaxControlToolkit.IDropTarget');///////////////////////////////////////////// 24AjaxControlToolkit.DragMode = function() { 25throw Error.invalidOperation();} 26AjaxControlToolkit.DragMode.prototype = { 27Copy: 0, 28Move: 1 29} 30AjaxControlToolkit.DragMode.registerEnum('AjaxControlToolkit.DragMode');////////////////////////////////////////////////////////////////// 31AjaxControlToolkit.DragDropEventArgs = function(dragMode, dragDataType, dragData) { 32this._dragMode = dragMode;this._dataType = dragDataType;this._data = dragData;} 33AjaxControlToolkit.DragDropEventArgs.prototype = { 34get_dragMode: function() { 35return this._dragMode || null;}, 36get_dragDataType: function() { 37return this._dataType || null;}, 38get_dragData: function() { 39return this._data || null;} 40} 41AjaxControlToolkit.DragDropEventArgs.registerClass('AjaxControlToolkit.DragDropEventArgs');AjaxControlToolkit._DragDropManager = function() { 42this._instance = null;this._events = null;} 43AjaxControlToolkit._DragDropManager.prototype = { 44add_dragStart: function(handler) { 45this.get_events().addHandler('dragStart', handler);}, 46remove_dragStart: function(handler) { 47this.get_events().removeHandler('dragStart', handler);}, 48get_events: function() { 49if (!this._events) { 50this._events = new Sys.EventHandlerList();} 51return this._events;}, 52add_dragStop: function(handler) { 53this.get_events().addHandler('dragStop', handler);}, 54remove_dragStop: function(handler) { 55this.get_events().removeHandler('dragStop', handler);}, 56_getInstance: function() { 57if (!this._instance) { 58if (Sys.Browser.agent === Sys.Browser.InternetExplorer) { 59this._instance = new AjaxControlToolkit.IEDragDropManager();} 60else { 61this._instance = new AjaxControlToolkit.GenericDragDropManager();} 62this._instance.initialize();this._instance.add_dragStart(Function.createDelegate(this, this._raiseDragStart));this._instance.add_dragStop(Function.createDelegate(this, this._raiseDragStop));} 63return this._instance;}, 64startDragDrop: function(dragSource, dragVisual, context) { 65this._getInstance().startDragDrop(dragSource, dragVisual, context);}, 66registerDropTarget: function(target) { 67this._getInstance().registerDropTarget(target);}, 68unregisterDropTarget: function(target) { 69this._getInstance().unregisterDropTarget(target);}, 70dispose: function() { 71delete this._events;Sys.Application.unregisterDisposableObject(this);Sys.Application.removeComponent(this);}, 72_raiseDragStart: function(sender, eventArgs) { 73var handler = this.get_events().getHandler('dragStart');if(handler) { 74handler(this, eventArgs);} 75}, 76_raiseDragStop: function(sender, eventArgs) { 77var handler = this.get_events().getHandler('dragStop');if(handler) { 78handler(this, eventArgs);} 79} 80} 81AjaxControlToolkit._DragDropManager.registerClass('AjaxControlToolkit._DragDropManager');AjaxControlToolkit.DragDropManager = new AjaxControlToolkit._DragDropManager();AjaxControlToolkit.IEDragDropManager = function() { 82AjaxControlToolkit.IEDragDropManager.initializeBase(this);this._dropTargets = null;this._radius = 10;this._activeDragVisual = null;this._activeContext = null;this._activeDragSource = null;this._underlyingTarget = null;this._oldOffset = null;this._potentialTarget = null;this._isDragging = false;this._mouseUpHandler = null;this._documentMouseMoveHandler = null;this._documentDragOverHandler = null;this._dragStartHandler = null;this._mouseMoveHandler = null;this._dragEnterHandler = null;this._dragLeaveHandler = null;this._dragOverHandler = null;this._dropHandler = null;} 83AjaxControlToolkit.IEDragDropManager.prototype = { 84add_dragStart : function(handler) { 85this.get_events().addHandler("dragStart", handler);}, 86remove_dragStart : function(handler) { 87this.get_events().removeHandler("dragStart", handler);}, 88add_dragStop : function(handler) { 89this.get_events().addHandler("dragStop", handler);}, 90remove_dragStop : function(handler) { 91this.get_events().removeHandler("dragStop", handler);}, 92initialize : function() { 93AjaxControlToolkit.IEDragDropManager.callBaseMethod(this, 'initialize');this._mouseUpHandler = Function.createDelegate(this, this._onMouseUp);this._documentMouseMoveHandler = Function.createDelegate(this, this._onDocumentMouseMove);this._documentDragOverHandler = Function.createDelegate(this, this._onDocumentDragOver);this._dragStartHandler = Function.createDelegate(this, this._onDragStart);this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove);this._dragEnterHandler = Function.createDelegate(this, this._onDragEnter);this._dragLeaveHandler = Function.createDelegate(this, this._onDragLeave);this._dragOverHandler = Function.createDelegate(this, this._onDragOver);this._dropHandler = Function.createDelegate(this, this._onDrop);}, 94dispose : function() { 95if(this._dropTargets) { 96for (var i = 0;i < this._dropTargets;i++) { 97this.unregisterDropTarget(this._dropTargets[i]);} 98this._dropTargets = null;} 99AjaxControlToolkit.IEDragDropManager.callBaseMethod(this, 'dispose');}, 100startDragDrop : function(dragSource, dragVisual, context) { 101var ev = window._event;if (this._isDragging) { 102return;} 103this._underlyingTarget = null;this._activeDragSource = dragSource;this._activeDragVisual = dragVisual;this._activeContext = context;var mousePosition = { x: ev.clientX, y: ev.clientY };dragVisual.originalPosition = dragVisual.style.position;dragVisual.style.position = "absolute";document._lastPosition = mousePosition;dragVisual.startingPoint = mousePosition;
103var scrollOffset = this.getScrollOffset(dragVisual, true);dragVisual.startingPoint = this.addPoints(dragVisual.startingPoint, scrollOffset);if (dragVisual.style.position == "absolute") { 104dragVisual.startingPoint = this.subtractPoints(dragVisual.startingPoint, $common.getLocation(dragVisual));} 105else { 106var left = parseInt(dragVisual.style.left);var top = parseInt(dragVisual.style.top);if (isNaN(left)) left = "0";if (isNaN(top)) top = "0";dragVisual.startingPoint = this.subtractPoints(dragVisual.startingPoint, { x: left, y: top });} 107this._prepareForDomChanges();dragSource.onDragStart();var eventArgs = new AjaxControlToolkit.DragDropEventArgs( 108dragSource.get_dragMode(), 109dragSource.get_dragDataType(), 110dragSource.getDragData(context));var handler = this.get_events().getHandler('dragStart');if(handler) handler(this,eventArgs);this._recoverFromDomChanges();this._wireEvents();this._drag( true);}, 111_stopDragDrop : function(cancelled) { 112var ev = window._event;if (this._activeDragSource != null) { 113this._unwireEvents();if (!cancelled) { 114cancelled = (this._underlyingTarget == null);} 115if (!cancelled && this._underlyingTarget != null) { 116this._underlyingTarget.drop(this._activeDragSource.get_dragMode(), this._activeDragSource.get_dragDataType(), 117this._activeDragSource.getDragData(this._activeContext));} 118this._activeDragSource.onDragEnd(cancelled);var handler = this.get_events().getHandler('dragStop');if(handler) handler(this,Sys.EventArgs.Empty);this._activeDragVisual.style.position = this._activeDragVisual.originalPosition;this._activeDragSource = null;this._activeContext = null;this._activeDragVisual = null;this._isDragging = false;this._potentialTarget = null;ev.preventDefault();} 119}, 120_drag : function(isInitialDrag) { 121var ev = window._event;var mousePosition = { x: ev.clientX, y: ev.clientY };document._lastPosition = mousePosition;var scrollOffset = this.getScrollOffset(this._activeDragVisual, true);var position = this.addPoints(this.subtractPoints(mousePosition, this._activeDragVisual.startingPoint), scrollOffset);if (!isInitialDrag && parseInt(this._activeDragVisual.style.left) == position.x && parseInt(this._activeDragVisual.style.top) == position.y) { 122return;} 123$common.setLocation(this._activeDragVisual, position);this._prepareForDomChanges();this._activeDragSource.onDrag();this._recoverFromDomChanges();this._potentialTarget = this._findPotentialTarget(this._activeDragSource, this._activeDragVisual);var movedToOtherTarget = (this._potentialTarget != this._underlyingTarget || this._potentialTarget == null);if (movedToOtherTarget && this._underlyingTarget != null) { 124this._leaveTarget(this._activeDragSource, this._underlyingTarget);} 125if (this._potentialTarget != null) { 126if (movedToOtherTarget) { 127this._underlyingTarget = this._potentialTarget;this._enterTarget(this._activeDragSource, this._underlyingTarget);} 128else { 129this._moveInTarget(this._activeDragSource, this._underlyingTarget);} 130} 131else { 132this._underlyingTarget = null;} 133}, 134_wireEvents : function() { 135$addHandler(document, "mouseup", this._mouseUpHandler);$addHandler(document, "mousemove", this._documentMouseMoveHandler);$addHandler(document.body, "dragover", this._documentDragOverHandler);$addHandler(this._activeDragVisual, "dragstart", this._dragStartHandler);$addHandler(this._activeDragVisual, "dragend", this._mouseUpHandler);$addHandler(this._activeDragVisual, "drag", this._mouseMoveHandler);}, 136_unwireEvents : function() { 137$removeHandler(this._activeDragVisual, "drag", this._mouseMoveHandler);$removeHandler(this._activeDragVisual, "dragend", this._mouseUpHandler);$removeHandler(this._activeDragVisual, "dragstart", this._dragStartHandler);$removeHandler(document.body, "dragover", this._documentDragOverHandler);$removeHandler(document, "mousemove", this._documentMouseMoveHandler);$removeHandler(document, "mouseup", this._mouseUpHandler);}, 138registerDropTarget : function(dropTarget) { 139if (this._dropTargets == null) { 140this._dropTargets = [];} 141Array.add(this._dropTargets, dropTarget);this._wireDropTargetEvents(dropTarget);}, 142unregisterDropTarget : function(dropTarget) { 143this._unwireDropTargetEvents(dropTarget);if (this._dropTargets) { 144Array.remove(this._dropTargets, dropTarget);} 145}, 146_wireDropTargetEvents : function(dropTarget) { 147var associatedElement = dropTarget.get_dropTargetElement();associatedElement._dropTarget = dropTarget;$addHandler(associatedElement, "dragenter", this._dragEnterHandler);$addHandler(associatedElement, "dragleave", this._dragLeaveHandler);$addHandler(associatedElement, "dragover", this._dragOverHandler);$addHandler(associatedElement, "drop", this._dropHandler);}, 148_unwireDropTargetEvents : function(dropTarget) { 149var associatedElement = dropTarget.get_dropTargetElement();if(associatedElement._dropTarget) 150{ 151associatedElement._dropTarget = null;$removeHandler(associatedElement, "dragenter", this._dragEnterHandler);$removeHandler(associatedElement, "dragleave", this._dragLeaveHandler);$removeHandler(associatedElement, "dragover", this._dragOverHandler);$removeHandler(associatedElement, "drop", this._dropHandler);} 152}, 153_onDragStart : function(ev) { 154window._event = ev;document.selection.empty();var dt = ev.dataTransfer;if(!dt && ev.rawEvent) dt = ev.rawEvent.dataTransfer;var dataType = this._activeDragSource.get_dragDataType().toLowerCase();var data = this._activeDragSource.getDragData(this._activeContext);if (data) { 155if (dataType != "text" && dataType != "url") { 156dataType = "text";if (data.innerHTML != null) { 157data = data.innerHTML;} 158} 159dt.effectAllowed = "move";dt.setData(dataType, data.toString());} 160}, 161_onMouseUp : function(ev) { 162window._event = ev;this._stopDragDrop(false);}, 163_onDocumentMouseMove : function(ev) { 164window._event = ev;this._dragDrop();}, 165_onDocumentDragOver : function(ev) { 166window._event = ev;if(this._potentialTarget) ev.preventDefault();}, 167_onMouseMove : function(ev) { 168window._event = ev;this._drag();}, 169_onDragEnter : function(ev) { 170window._event = ev;if (this._isDragging) { 171ev.preventDefault();} 172else { 173var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));for (var i = 0;i < dataObjects.length;i++) { 174this._dropTarget.onDragEnterTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);} 175} 176}, 177_onDragLeave : function(ev) { 178window._event = ev;if (this._isDragging) { 179ev.preventDefault();} 180else { 181var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));for (var i = 0;i < dataObjects.length;i++) { 182this._dropTarget.onDragLeaveTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);} 183} 184}, 185_onDragOver : function(ev) { 186window._event = ev;if (this._isDragging) { 187ev.preventDefault();} 188else { 189var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));for (var i = 0;i < dataObjects.length;i++) { 190this._dropTarget.onDragInTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);} 191} 192}, 193_onDrop : function(ev) { 194window._event = ev;if (!this._isDragging) { 195var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));for (var i = 0;i < dataObjects.length;i++) { 196this._dropTarget.drop(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);} 197} 198ev.preventDefault();}, 199_getDropTarget : function(element) { 200while (element) { 201if (element._dropTarget != null) { 202return element._dropTarget;} 203element = element.parentNode;} 204return null;}, 205_dragDrop : function() { 206if (this._isDragging) { 207return;} 208this._isDragging = true;this._activeDragVisual.dragDrop();document.selection.empty();}, 209_moveInTarget : function(dragSource, dropTarget) { 210this._prepareForDomChanges();dropTarget.onDragInTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));this._recoverFromDomChanges();}, 211_enterTarget : function(dragSource, dropTarget) { 212this._prepareForDomChanges();dropTarget.onDragEnterTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));this._recoverFromDomChanges();}, 213_leaveTarget : function(dragSource, dropTarget) { 214this._prepareForDomChanges();dropTarget.onDragLeaveTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));this._recoverFromDomChanges();}, 215_findPotentialTarget : function(dragSource, dragVisual) { 216var ev = window._event;if (this._dropTargets == null) { 217return null;} 218var type = dragSource.get_dragDataType();var mode = dragSource.get_dragMode();var data = dragSource.getDragData(this._activeContext);
218var scrollOffset = this.getScrollOffset(document.body, true);var x = ev.clientX + scrollOffset.x;var y = ev.clientY + scrollOffset.y;var cursorRect = { x: x - this._radius, y: y - this._radius, width: this._radius * 2, height: this._radius * 2 };var targetRect;for (var i = 0;i < this._dropTargets.length;i++) { 219targetRect = $common.getBounds(this._dropTargets[i].get_dropTargetElement());if ($common.overlaps(cursorRect, targetRect) && this._dropTargets[i].canDrop(mode, type, data)) { 220return this._dropTargets[i];} 221} 222return null;}, 223_prepareForDomChanges : function() { 224this._oldOffset = $common.getLocation(this._activeDragVisual);}, 225_recoverFromDomChanges : function() { 226var newOffset = $common.getLocation(this._activeDragVisual);if (this._oldOffset.x != newOffset.x || this._oldOffset.y != newOffset.y) { 227this._activeDragVisual.startingPoint = this.subtractPoints(this._activeDragVisual.startingPoint, this.subtractPoints(this._oldOffset, newOffset));scrollOffset = this.getScrollOffset(this._activeDragVisual, true);var position = this.addPoints(this.subtractPoints(document._lastPosition, this._activeDragVisual.startingPoint), scrollOffset);$common.setLocation(this._activeDragVisual, position);} 228}, 229addPoints : function(p1, p2) { 230return { x: p1.x + p2.x, y: p1.y + p2.y };}, 231subtractPoints : function(p1, p2) { 232return { x: p1.x - p2.x, y: p1.y - p2.y };}, 233getScrollOffset : function(element, recursive) { 234var left = element.scrollLeft;var top = element.scrollTop;if (recursive) { 235var parent = element.parentNode;while (parent != null && parent.scrollLeft != null) { 236left += parent.scrollLeft;top += parent.scrollTop;if (parent == document.body && (left != 0 && top != 0)) 237break;parent = parent.parentNode;} 238} 239return { x: left, y: top };}, 240getBrowserRectangle : function() { 241var width = window.innerWidth;var height = window.innerHeight;if (width == null) { 242width = document.body.clientWidth;} 243if (height == null) { 244height = document.body.clientHeight;} 245return { x: 0, y: 0, width: width, height: height };}, 246getNextSibling : function(item) { 247for (item = item.nextSibling;item != null;item = item.nextSibling) { 248if (item.innerHTML != null) { 249return item;} 250} 251return null;}, 252hasParent : function(element) { 253return (element.parentNode != null && element.parentNode.tagName != null);} 254} 255AjaxControlToolkit.IEDragDropManager.registerClass('AjaxControlToolkit.IEDragDropManager', Sys.Component);AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget = function(dropTarget) { 256if (dropTarget == null) { 257return [];} 258var ev = window._event;var dataObjects = [];var dataTypes = [ "URL", "Text" ];var data;for (var i = 0;i < dataTypes.length;i++) { 259var dt = ev.dataTransfer;if(!dt && ev.rawEvent) dt = ev.rawEvent.dataTransfer;data = dt.getData(dataTypes[i]);if (dropTarget.canDrop(AjaxControlToolkit.DragMode.Copy, dataTypes[i], data)) { 260if (data) { 261Array.add(dataObjects, { type : dataTypes[i], value : data });} 262} 263} 264return dataObjects;} 265AjaxControlToolkit.GenericDragDropManager = function() { 266AjaxControlToolkit.GenericDragDropManager.initializeBase(this);this._dropTargets = null;this._scrollEdgeConst = 40;this._scrollByConst = 10;this._scroller = null;this._scrollDeltaX = 0;this._scrollDeltaY = 0;this._activeDragVisual = null;this._activeContext = null;this._activeDragSource = null;this._oldOffset = null;this._potentialTarget = null;this._mouseUpHandler = null;this._mouseMoveHandler = null;this._keyPressHandler = null;this._scrollerTickHandler = null;} 267AjaxControlToolkit.GenericDragDropManager.prototype = { 268initialize : function() { 269AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "initialize");this._mouseUpHandler = Function.createDelegate(this, this._onMouseUp);this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove);this._keyPressHandler = Function.createDelegate(this, this._onKeyPress);this._scrollerTickHandler = Function.createDelegate(this, this._onScrollerTick);if (Sys.Browser.agent === Sys.Browser.Safari) { 270AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer(this);} 271this._scroller = new Sys.Timer();this._scroller.set_interval(10);this._scroller.add_tick(this._scrollerTickHandler);}, 272startDragDrop : function(dragSource, dragVisual, context) { 273this._activeDragSource = dragSource;this._activeDragVisual = dragVisual;this._activeContext = context;AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "startDragDrop", [dragSource, dragVisual, context]);}, 274_stopDragDrop : function(cancelled) { 275this._scroller.set_enabled(false);AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "_stopDragDrop", [cancelled]);}, 276_drag : function(isInitialDrag) { 277AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "_drag", [isInitialDrag]);this._autoScroll();}, 278_wireEvents : function() { 279$addHandler(document, "mouseup", this._mouseUpHandler);$addHandler(document, "mousemove", this._mouseMoveHandler);$addHandler(document, "keypress", this._keyPressHandler);}, 280_unwireEvents : function() { 281$removeHandler(document, "keypress", this._keyPressHandler);$removeHandler(document, "mousemove", this._mouseMoveHandler);$removeHandler(document, "mouseup", this._mouseUpHandler);}, 282_wireDropTargetEvents : function(dropTarget) { 283}, 284_unwireDropTargetEvents : function(dropTarget) { 285}, 286_onMouseUp : function(e) { 287window._event = e;this._stopDragDrop(false);}, 288_onMouseMove : function(e) { 289window._event = e;this._drag();}, 290_onKeyPress : function(e) { 291window._event = e;var k = e.keyCode ? e.keyCode : e.rawEvent.keyCode;if (k == 27) { 292this._stopDragDrop( true);} 293}, 294_autoScroll : function() { 295var ev = window._event;var browserRect = this.getBrowserRectangle();if (browserRect.width > 0) { 296this._scrollDeltaX = this._scrollDeltaY = 0;if (ev.clientX < browserRect.x + this._scrollEdgeConst) this._scrollDeltaX = -this._scrollByConst;else if (ev.clientX > browserRect.width - this._scrollEdgeConst) this._scrollDeltaX = this._scrollByConst;if (ev.clientY < browserRect.y + this._scrollEdgeConst) this._scrollDeltaY = -this._scrollByConst;else if (ev.clientY > browserRect.height - this._scrollEdgeConst) this._scrollDeltaY = this._scrollByConst;if (this._scrollDeltaX != 0 || this._scrollDeltaY != 0) { 297this._scroller.set_enabled(true);} 298else { 299this._scroller.set_enabled(false);} 300} 301}, 302_onScrollerTick : function() { 303var oldLeft = document.body.scrollLeft;var oldTop = document.body.scrollTop;window.scrollBy(this._scrollDeltaX, this._scrollDeltaY);var newLeft = document.body.scrollLeft;var newTop = document.body.scrollTop;var dragVisual = this._activeDragVisual;var position = { x: parseInt(dragVisual.style.left) + (newLeft - oldLeft), y: parseInt(dragVisual.style.top) + (newTop - oldTop) };$common.setLocation(dragVisual, position);} 304} 305AjaxControlToolkit.GenericDragDropManager.registerClass('AjaxControlToolkit.GenericDragDropManager', AjaxControlToolkit.IEDragDropManager);if (Sys.Browser.agent === Sys.Browser.Safari) { 306AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer = function(ddm) { 307ddm._getScrollOffset = ddm.getScrollOffset;ddm.getScrollOffset = function(element, recursive) { 308return { x: 0, y: 0 };} 309ddm._getBrowserRectangle = ddm.getBrowserRectangle;ddm.getBrowserRectangle = function() { 310var browserRect = ddm._getBrowserRectangle();var offset = ddm._getScrollOffset(document.body, true);return { x: browserRect.x + offset.x, y: browserRect.y + offset.y, 311width: browserRect.width + offset.x, height: browserRect.height + offset.y };} 312} 313}
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.