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.