PageSourceSearch

https://www.mitutoyo.com/webfoo/wp-content/themes/mitutoyo/assets/scripts/gridviewscroll.js?ver=1575496092

js mitutoyo.com collected 2026-10-02 05:21:16 UTC 23,957 bytes, 482 lines download raw bytes

1/*
2 * GridViewScroll with jQuery v1.0.0.3
3 * http://gridviewscroll.aspcity.idv.tw/
4
5 * Copyright (c) 2017 Likol Lee
6 * Released under the MIT license
7
8 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
10 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
18 * THE SOFTWARE.
19 */
20var GridViewScrollOptions = /** @class */ (function () {
21    function GridViewScrollOptions() {
22    }
23    return GridViewScrollOptions;
24}());
25var GridViewScrollScrollPosition = /** @class */ (function () {
26    function GridViewScrollScrollPosition() {
27    }
28    return GridViewScrollScrollPosition;
29}());
30var GridViewScroll = /** @class */ (function () {
31    function GridViewScroll(options) {
32        this._initialized = false;
33        if (options.elementID == null)
34            options.elementID = "";
35        if (options.width == null)
36            options.width = "700";
37        if (options.height == null)
38            options.height = "350";
39        if (options.freezeColumnCssClass == null)
40            options.freezeColumnCssClass = "";
41        if (options.freezeFooterCssClass == null)
42            options.freezeFooterCssClass = "";
43        if (options.freezeHeaderRowCount == null)
44            options.freezeHeaderRowCount = 1;
45        if (options.freezeColumnCount == null)
46            options.freezeColumnCount = 1;
47        this.initializeOptions(options);
48    }
49    GridViewScroll.prototype.initializeOptions = function (options) {
50        this.GridID = options.elementID;
51        this.GridWidth = options.width;
52        this.GridHeight = options.height;
53        this.FreezeColumn = options.freezeColumn;
54        this.FreezeFooter = options.freezeFooter;
55        this.FreezeColumnCssClass = options.freezeColumnCssClass;
56        this.FreezeFooterCssClass = options.freezeFooterCssClass;
57        this.FreezeHeaderRowCount = options.freezeHeaderRowCount;
58        this.FreezeColumnCount = options.freezeColumnCount;
59        this.OnScroll = options.onscroll;
60    };
61    GridViewScroll.prototype.enhance = function () {
62        this.FreezeCellWidths = [];
63        this.IsVerticalScrollbarEnabled = false;
64        this.IsHorizontalScrollbarEnabled = false;
65        if (this.GridID == null || this.GridID == "") {
66            return;
67        }
68        this.ContentGrid = document.getElementById(this.GridID);
69        if (this.ContentGrid == null) {
70            return;
71        }
72        if (this.ContentGrid.rows.length < 2) {
73            return;
74        }
75        if (this._initialized) {
76            this.undo();
77        }
78        this._initialized = true;
79        this.Parent = this.ContentGrid.parentNode;
80        this.ContentGrid.style.display = "none";
81        if (typeof this.GridWidth == 'string' && this.GridWidth.indexOf("%") > -1) {
82            var percentage = parseInt(this.GridWidth);
83            this.Width = this.Parent.offsetWidth * percentage / 100;
84        }
85        else {
86            this.Width = parseInt(this.GridWidth);
87        }
88        if (typeof this.GridHeight == 'string' && this.GridHeight.indexOf("%") > -1) {
89            var percentage = parseInt(this.GridHeight);
90            this.Height = this.Parent.offsetHeight * percentage / 100;
91        }
92        else {
93            this.Height = parseInt(this.GridHeight);
94        }
95        this.ContentGrid.style.display = "";
96        this.ContentGridHeaderRows = this.getGridHeaderRows();
97        this.ContentGridItemRow = this.ContentGrid.rows.item(this.FreezeHeaderRowCount);
98        var footerIndex = this.ContentGrid.rows.length - 1;
99        this.ContentGridFooterRow = this.ContentGrid.rows.item(footerIndex);
100        this.Content = document.createElement('div');
101        this.Content.id = this.GridID + "_Content";
102        this.Content.style.position = "relative";
103        this.Content = this.Parent.insertBefore(this.Content, this.ContentGrid);
104        this.ContentFixed = document.createElement('div');
105        this.ContentFixed.id = this.GridID + "_Content_Fixed";
106        this.ContentFixed.style.overflow = "auto";
107        this.ContentFixed = this.Content.appendChild(this.ContentFixed);
108        this.ContentGrid = this.ContentFixed.appendChild(this.ContentGrid);
109        this.ContentFixed.style.width = String(this.Width) + "px";
110        if (this.ContentGrid.offsetWidth > this.Width) {
111            this.IsHorizontalScrollbarEnabled = true;
112        }
113        if (this.ContentGrid.offsetHeight > this.Height) {
114            this.IsVerticalScrollbarEnabled = true;
115        }
116        this.Header = document.createElement('div');
117        this.Header.id = this.GridID + "_Header";
118        this.Header.style.position = "relative";
119        this.HeaderFixed = document.createElement('div');
120        this.HeaderFixed.id = this.GridID + "_Header_Fixed";
121        this.HeaderFixed.style.overflow = "hidden";
122        this.Header = this.Parent.insertBefore(this.Header, this.Content);
123        this.HeaderFixed = this.Header.appendChild(this.HeaderFixed);
124        this.ScrollbarWidth = this.getScrollbarWidth();
125        this.prepareHeader();
126        this.calculateHeader();
127        this.Header.style.width = String(this.Width) + "px";
128        if (this.IsVerticalScrollbarEnabled) {
129            this.HeaderFixed.style.width = String(this.Width - this.ScrollbarWidth) + "px";
130            if (this.IsHorizontalScrollbarEnabled) {
131                this.ContentFixed.style.width = this.HeaderFixed.style.width;
132                if (this.isRTL()) {
133                    this.ContentFixed.style.paddingLeft = String(this.ScrollbarWidth) + "px";
134                }
135                else {
136                    this.ContentFixed.style.paddingRight = String(this.ScrollbarWidth) + "px";
137                }
138            }
139            this.ContentFixed.style.height = String(this.Height - this.Header.offsetHeight) + "px";
140        }
141        else {
142            this.HeaderFixed.style.width = this.Header.style.width;
143            this.ContentFixed.style.width = this.Header.style.width;
144        }
145        if (this.FreezeColumn && this.IsHorizontalScrollbarEnabled) {
146            this.appendFreezeHeader();
147            this.appendFreezeContent();
148        }
149        if (this.FreezeFooter && this.IsVerticalScrollbarEnabled) {
150            this.appendFreezeFooter();
151            if (this.FreezeColumn && this.IsHorizontalScrollbarEnabled) {
152                this.appendFreezeFooterColumn();
153            }
154        }
155        var self = this;
156        this.ContentFixed.onscroll = function (event) {
157            var scrollTop = self.ContentFixed.scrollTop;
158            var scrollLeft = self.ContentFixed.scrollLeft;
159            self.HeaderFixed.scrollLeft = scrollLeft;
160            if (self.ContentFreeze != null)
161                self.ContentFreeze.scrollTop = scrollTop;
162            if (self.FooterFreeze != null)
163                self.FooterFreeze.scrollLeft = scrollLeft;
164            if (self.OnScroll != null) {
165                self.OnScroll(scrollTop, scrollLeft);
166            }
167        };
168    };
169    Object.defineProperty(GridViewScroll.prototype, "scrollPosition", {
170        get: function () {
171            var position = new GridViewScrollScrollPosition();
172            position.scrollTop = this.ContentFixed.scrollTop;
173            position.scrollLeft = this.ContentFixed.scrollLeft;
174            return position;
175        },
176        set: function (gridViewScrollScrollPosition) {
177            var scrollTop = gridViewScrollScrollPosition.scrollTop;
178            var scrollLeft = gridViewScrollScrollPosition.scrollLeft;
179            this.ContentFixed.scrollTop = scrollTop;
180            this.ContentFixed.scrollLeft = scrollLeft;
181            if (this.ContentFreeze != null)
182                this.ContentFreeze.scrollTop = scrollTop;
183            if (this.FooterFreeze != null)
184                this.FooterFreeze.scrollLeft = scrollLeft;
185        },
186        enumerable: true,
187        configurable: true
188    });
189    GridViewScroll.prototype.getGridHeaderRows = function () {
190        var gridHeaderRows = new Array();
191        for (var i = 0; i < this.FreezeHeaderRowCount; i++) {
192            gridHeaderRows.push(this.ContentGrid.rows.item(i));
193        }
194        return gridHeaderRows;
195    };
196    GridViewScroll.prototype.prepareHeader = function () {
197        this.HeaderGrid = this.ContentGrid.cloneNode(false);
198        this.HeaderGrid.id = this.GridID + "_Header_Fixed_Grid";
199        this.HeaderGrid = this.HeaderFixed.appendChild(this.HeaderGrid);
200        this.prepareHeaderGridRows();
201        for (var i = 0; i < this.ContentGridItemRow.cells.length; i++) {
202            this.appendHelperElement(this.ContentGridItemRow.cells.item(i));
203            this.appendHelperElement(this.HeaderGridHeaderCells[i]);
204        }
205    };
206    GridViewScroll.prototype.prepareHeaderGridRows = function () {
207        this.HeaderGridHeaderRows = new Array();
208        for (var i = 0; i < this.FreezeHeaderRowCount; i++) {
209            var gridHeaderRow = this.ContentGridHeaderRows[i];
210            var headerGridHeaderRow = gridHeaderRow.cloneNode(true);
211            this.HeaderGridHeaderRows.push(headerGridHeaderRow);
212            this.HeaderGrid.appendChild(headerGridHeaderRow);
213        }
214        this.prepareHeaderGridCells();
215    };
216    GridViewScroll.prototype.prepareHeaderGridCells = function () {
217        this.HeaderGridHeaderCells = new Array();
218        for (var i = 0; i < this.ContentGridItemRow.cells.length; i++) {
219            for (var rowIndex in this.HeaderGridHeaderRows) {
220                var cgridHeaderRow = this.HeaderGridHeaderRows[rowIndex];
221                var fixedCellIndex = 0;
222                for (var cellIndex = 0; cellIndex < cgridHeaderRow.cells.length; cellIndex++) {
223                    var cgridHeaderCell = cgridHeaderRow.cells.item(cellIndex);
224                    if (cgridHeaderCell.colSpan == 1 && i == fixedCellIndex) {
225                        this.HeaderGridHeaderCells.push(cgridHeaderCell);
226                    }
227                    else {
228                        fixedCellIndex += cgridHeaderCell.colSpan - 1;
229                    }
230                    fixedCellIndex++;
231                }
232            }
233        }
234    };
235    GridViewScroll.prototype.calculateHeader = function () {
236        for (var i = 0; i < this.ContentGridItemRow.cells.length; i++) {
237            var gridItemCell = this.ContentGridItemRow.cells.item(i);
238            var helperElement = gridItemCell.firstChild;
239            var helperWidth = parseInt(String(helperElement.offsetWidth));
240            this.FreezeCellWidths.push(helperWidth);
241            helperElement.style.width = helperWidth + "px";
242            helperElement = this.HeaderGridHeaderCells[i].firstChild;
243            helperElement.style.width = helperWidth + "px";
244        }
245        for (var i = 0; i < this.FreezeHeaderRowCount; i++) {
246            this.ContentGridHeaderRows[i].style.display = "none";
247        }
248    };
249    GridViewScroll.prototype.appendFreezeHeader = function () {
250        this.HeaderFreeze = document.createElement('div');
251        this.HeaderFreeze.id = this.GridID + "_Header_Freeze";
252        this.HeaderFreeze.style.position = "absolute";
253        this.HeaderFreeze.style.overflow = "hidden";
254        this.HeaderFreeze.style.top = "0px";
255        this.HeaderFreeze.style.left = "0px";
256        this.HeaderFreeze.style.width = "";
257        this.HeaderFreezeGrid = this.HeaderGrid.cloneNode(false);
258        this.HeaderFreezeGrid.id = this.GridID + "_Header_Freeze_Grid";
259        this.HeaderFreezeGrid = this.HeaderFreeze.appendChild(this.HeaderFreezeGrid);
260        this.HeaderFreezeGridHeaderRows = new Array();
261        for (var i = 0; i < this.HeaderGridHeaderRows.length; i++) {
262            var headerFreezeGridHeaderRow = this.HeaderGridHeaderRows[i].cloneNode(false);
263            this.HeaderFreezeGridHeaderRows.push(headerFreezeGridHeaderRow);
264            var columnIndex = 0;
265            var columnCount = 0;
266            while (columnCount < this.FreezeColumnCount) {
267                var freezeColumn = this.HeaderGridHeaderRows[i].cells.item(columnIndex).cloneNode(true);
268                headerFreezeGridHeaderRow.appendChild(freezeColumn);
269                columnCount += freezeColumn.colSpan;
270                columnIndex++;
271            }
272            this.HeaderFreezeGrid.appendChild(headerFreezeGridHeaderRow);
273        }
274        this.HeaderFreeze = this.Header.appendChild(this.HeaderFreeze);
275    };
276    GridViewScroll.prototype.appendFreezeContent = function () {
277        this.ContentFreeze = document.createElement('div');
278        this.ContentFreeze.id = this.GridID + "_Content_Freeze";
279        this.ContentFreeze.style.position = "absolute";
280        this.ContentFreeze.style.overflow = "hidden";
281        this.ContentFreeze.style.top = "0px";
282        this.ContentFreeze.style.left = "0px";
283        this.ContentFreeze.style.width = "";
284        this.ContentFreezeGrid = this.HeaderGrid.cloneNode(false);
285        this.ContentFreezeGrid.id = this.GridID + "_Content_Freeze_Grid";
286        this.ContentFreezeGrid = this.ContentFreeze.appendChild(this.ContentFreezeGrid);
287        var freezeCellHeights = [];
288        var paddingTop = this.getPaddingTop(this.ContentGridItemRow.cells.item(0));
289        var paddingBottom = this.getPaddingBottom(this.ContentGridItemRow.cells.item(0));
290        for (var i = 0; i < this.ContentGrid.rows.length; i++) {
291            var gridItemRow = this.ContentGrid.rows.item(i);
292            var gridItemCell = gridItemRow.cells.item(0);
293            var helperElement = void 0;
294            if (gridItemCell.firstChild.className == "gridViewScrollHelper") {
295                helperElement = gridItemCell.firstChild;
296            }
297            else {
298                helperElement = this.appendHelperElement(gridItemCell);
299            }
300            var helperHeight = parseInt(String(gridItemCell.offsetHeight - paddingTop - paddingBottom));
301            freezeCellHeights.push(helperHeight);
302            var cgridItemRow = gridItemRow.cloneNode(false);
303            var cgridItemCell = gridItemCell.cloneNode(true);
304            if (this.FreezeColumnCssClass != null || this.FreezeColumnCssClass != "")
305                cgridItemRow.className = this.FreezeColumnCssClass;
306            var columnIndex = 0;
307            var columnCount = 0;
308            while (columnCount < this.FreezeColumnCount) {
309                var freezeColumn = gridItemRow.cells.item(columnIndex).cloneNode(true);
310                cgridItemRow.appendChild(freezeColumn);
311                columnCount += freezeColumn.colSpan;
312                columnIndex++;
313            }
314            this.ContentFreezeGrid.appendChild(cgridItemRow);
315        }
316        for (var i = 0; i < this.ContentGrid.rows.length; i++) {
317            var gridItemRow = this.ContentGrid.rows.item(i);
318            var gridItemCell = gridItemRow.cells.item(0);
319            var cgridItemRow = this.ContentFreezeGrid.rows.item(i);
320            var cgridItemCell = cgridItemRow.cells.item(0);
321            var helperElement = gridItemCell.firstChild;
322            helperElement.style.height = String(freezeCellHeights[i]) + "px";
323            helperElement = cgridItemCell.firstChild;
324            helperElement.style.height = String(freezeCellHeights[i]) + "px";
325        }
326        if (this.IsVerticalScrollbarEnabled) {
327            this.ContentFreeze.style.height = String(this.Height - this.Header.offsetHeight - this.ScrollbarWidth) + "px";
328        }
329        else {
330            this.ContentFreeze.style.height = String(this.ContentFixed.offsetHeight - this.ScrollbarWidth) + "px";
331        }
332        this.ContentFreeze = this.Content.appendChild(this.ContentFreeze);
333    };
334    GridViewScroll.prototype.appendFreezeFooter = function () {
335        this.FooterFreeze = document.createElement('div');
336        this.FooterFreeze.id = this.GridID + "_Footer_Freeze";
337        this.FooterFreeze.style.position = "absolute";
338        this.FooterFreeze.style.overflow = "hidden";
339        this.FooterFreeze.style.left = "0px";
340        this.FooterFreeze.style.width = String(this.ContentFixed.offsetWidth - this.ScrollbarWidth) + "px";
341        this.FooterFreezeGrid = this.HeaderGrid.cloneNode(false);
342        this.FooterFreezeGrid.id = this.GridID + "_Footer_Freeze_Grid";
343        this.FooterFreezeGrid = this.FooterFreeze.appendChild(this.FooterFreezeGrid);
344        this.FooterFreezeGridHeaderRow = this.ContentGridFooterRow.cloneNode(true);
345        if (this.FreezeFooterCssClass != null || this.FreezeFooterCssClass != "")
346            this.FooterFreezeGridHeaderRow.className = this.FreezeFooterCssClass;
347        for (var i = 0; i < this.FooterFreezeGridHeaderRow.cells.length; i++) {
348            var cgridHeaderCell = this.FooterFreezeGridHeaderRow.cells.item(i);
349            var helperElement = this.appendHelperElement(cgridHeaderCell);
350            helperElement.style.width = String(this.FreezeCellWidths[i]) + "px";
351        }
352        this.FooterFreezeGridHeaderRow = this.FooterFreezeGrid.appendChild(this.FooterFreezeGridHeaderRow);
353        this.FooterFreeze = this.Content.appendChild(this.FooterFreeze);
354        var footerFreezeTop = this.ContentFixed.offsetHeight - this.FooterFreeze.offsetHeight;
355        if (this.IsHorizontalScrollbarEnabled) {
356            footerFreezeTop -= this.ScrollbarWidth;
357        }
358        this.FooterFreeze.style.top = String(footerFreezeTop) + "px";
359    };
360    GridViewScroll.prototype.appendFreezeFooterColumn = function () {
361        this.FooterFreezeColumn = document.createElement('div');
362        this.FooterFreezeColumn.id = this.GridID + "_Footer_FreezeColumn";
363        this.FooterFreezeColumn.style.position = "absolute";
364        this.FooterFreezeColumn.style.overflow = "hidden";
365        this.FooterFreezeColumn.style.left = "0px";
366        this.FooterFreezeColumn.style.width = "";
367        this.FooterFreezeColumnGrid = this.HeaderGrid.cloneNode(false);
368        this.FooterFreezeColumnGrid.id = this.GridID + "_Footer_FreezeColumn_Grid";
369        this.FooterFreezeColumnGrid = this.FooterFreezeColumn.appendChild(this.FooterFreezeColumnGrid);
370        this.FooterFreezeColumnGridHeaderRow = this.FooterFreezeGridHeaderRow.cloneNode(false);
371        this.FooterFreezeColumnGridHeaderRow = this.FooterFreezeColumnGrid.appendChild(this.FooterFreezeColumnGridHeaderRow);
372        if (this.FreezeFooterCssClass != null)
373            this.FooterFreezeColumnGridHeaderRow.className = this.FreezeFooterCssClass;
374        var columnIndex = 0;
375        var columnCount = 0;
376        while (columnCount < this.FreezeColumnCount) {
377            var freezeColumn = this.FooterFreezeGridHeaderRow.cells.item(columnIndex).cloneNode(true);
378            this.FooterFreezeColumnGridHeaderRow.appendChild(freezeColumn);
379            columnCount += freezeColumn.colSpan;
380            columnIndex++;
381        }
382        var footerFreezeTop = this.ContentFixed.offsetHeight - this.FooterFreeze.offsetHeight;
383        if (this.IsHorizontalScrollbarEnabled) {
384            footerFreezeTop -= this.ScrollbarWidth;
385        }
386        this.FooterFreezeColumn.style.top = String(footerFreezeTop) + "px";
387        this.FooterFreezeColumn = this.Content.appendChild(this.FooterFreezeColumn);
388    };
389    GridViewScroll.prototype.appendHelperElement = function (gridItemCell) {
390        var helperElement = document.createElement('div');
391        helperElement.className = "gridViewScrollHelper";
392        while (gridItemCell.hasChildNodes()) {
393            helperElement.appendChild(gridItemCell.firstChild);
394        }
395        return gridItemCell.appendChild(helperElement);
396    };
397    GridViewScroll.prototype.getScrollbarWidth = function () {
398        var innerElement = document.createElement('p');
399        innerElement.style.width = "100%";
400        innerElement.style.height = "200px";
401        var outerElement = document.createElement('div');
402        outerElement.style.position = "absolute";
403        outerElement.style.top = "0px";
404        outerElement.style.left = "0px";
405        outerElement.style.visibility = "hidden";
406        outerElement.style.width = "200px";
407        outerElement.style.height = "150px";
408        outerElement.style.overflow = "hidden";
409        outerElement.appendChild(innerElement);
410        document.body.appendChild(outerElement);
411        var innerElementWidth = innerElement.offsetWidth;
412        outerElement.style.overflow = 'scroll';
413        var outerElementWidth = innerElement.offsetWidth;
414        if (innerElementWidth === outerElementWidth)
415            outerElementWidth = outerElement.clientWidth;
416        document.body.removeChild(outerElement);
417        return innerElementWidth - outerElementWidth;
418    };
419    GridViewScroll.prototype.isRTL = function () {
420        var direction = "";
421        if (window.getComputedStyle) {
422            direction = window.getComputedStyle(this.ContentGrid, null).getPropertyValue('direction');
423        }
424        else {
425            direction = this.ContentGrid.currentStyle.direction;
426        }
427        return direction === "rtl";
428    };
429    GridViewScroll.prototype.getPaddingTop = function (element) {
430        var value = "";
431        if (window.getComputedStyle) {
432            value = window.getComputedStyle(element, null).getPropertyValue('padding-Top');
433        }
434        else {
435            value = element.currentStyle.paddingTop;
436        }
437        return parseInt(value);
438    };
439    GridViewScroll.prototype.getPaddingBottom = function (element) {
440        var value = "";
441        if (window.getComputedStyle) {
442            value = window.getComputedStyle(element, null).getPropertyValue('padding-Bottom');
443        }
444        else {
445            value = element.currentStyle.paddingBottom;
446        }
447        return parseInt(value);
448    };
449    GridViewScroll.prototype.undo = function () {
450        this.undoHelperElement();
451        for (var _i = 0, _a = this.ContentGridHeaderRows; _i < _a.length; _i++) {
452            var contentGridHeaderRow = _a[_i];
453            contentGridHeaderRow.style.display = "";
454        }
455        this.Parent.insertBefore(this.ContentGrid, this.Header);
456        this.Parent.removeChild(this.Header);
457        this.Parent.removeChild(this.Content);
458        this._initialized = false;
459    };
460    GridViewScroll.prototype.undoHelperElement = function () {
461        for (var i = 0; i < this.ContentGridItemRow.cells.length; i++) {
462            var gridItemCell = this.ContentGridItemRow.cells.item(i);
463            var helperElement = gridItemCell.firstChild;
464            while (helperElement.hasChildNodes()) {
465                gridItemCell.appendChild(helperElement.firstChild);
466            }
467            gridItemCell.removeChild(helperElement);
468        }
469        if (this.FreezeColumn) {
470            for (var i = 2; i < this.ContentGrid.rows.length; i++) {
471                var gridItemRow = this.ContentGrid.rows.item(i);
472                var gridItemCell = gridItemRow.cells.item(0);
473                var helperElement = gridItemCell.firstChild;
474                while (helperElement.hasChildNodes()) {
475                    gridItemCell.appendChild(helperElement.firstChild);
476                }
477                gridItemCell.removeChild(helperElement);
478            }
479        }
480    };
481    return GridViewScroll;
482}());

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.