all files / grid/renderer/ freeze-renderer.js

92.24% Statements 392/425
80.25% Branches 195/243
94.12% Functions 64/68
92.16% Lines 388/421
11 statements, 6 functions, 9 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605          99× 99× 99× 99× 99×   99× 99× 99× 99× 99× 99×   22×   22× 11× 11× 11×         83× 83×   85×                           92× 92× 92× 92× 92× 92× 92× 92× 92×   92× 92× 92×       21×   102× 102× 102× 102× 102× 102× 55× 55×       92×   99×   718×   1022×   99×     92× 92× 92× 92× 92× 92×                     92× 92×   92× 92× 92× 92× 92×   92× 92×       92×   113× 113× 113× 113× 113× 113× 113× 113×   75× 75× 75× 75×   226× 226×   214×   270× 270×     270× 270× 270×   270× 128× 128×     270×     270× 270×   270× 270× 270×   214× 106× 106×     108×     207× 207× 105× 15×   105×     164×       164×   164× 83× 83×     81× 81× 81× 81× 81× 81×   158× 55× 54×     282× 139× 139×   282×   126× 62×     64×     100×     81× 80×   81×   270×       388× 194×     194×       99× 99× 99×   75×     75×             92× 92× 92× 92× 92× 92×   92× 92× 92× 92× 92× 92× 92× 92×   92× 92×   21×     23× 23× 23× 23× 23× 23× 23× 23×     23×     23× 23× 23× 23× 23×       107× 107× 107× 107×   114× 114× 114× 114× 117× 117× 117× 117× 117×           125× 15× 15× 15×   15×   15× 65× 65×           65×       110× 110× 110×     110× 110× 110× 110× 110× 110× 110× 110×                             107× 107× 107× 104×             42×     217× 217× 217× 217× 217× 217× 217× 217× 217× 1858×     11× 11×   1858× 1853× 1853×   1858× 1858× 1858×     61×   1858×     45×     217×     18× 18× 18× 18× 18× 18×   18×       17× 17×         17×     125× 125× 125× 125× 125× 132× 132× 132×     123×       125×   125× 125× 620×               286× 286× 286× 286× 286×   286× 651× 281×   651× 651× 651×   286×   14×       92×   99×   473×   1087×   98× 98× 98×   20× 20× 20× 20× 80×   20×        
/* istanbul ignore next */ 
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
define(["require", "exports", "@syncfusion/ej2-base", "./header-renderer", "./content-renderer", "../services/freeze-row-model-generator", "../base/constant", "../base/util", "@syncfusion/ej2-inputs", "../base/string-literals"], function (require, exports, ej2_base_1, header_renderer_1, content_renderer_1, freeze_row_model_generator_1, events, util_1, ej2_inputs_1, literals) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var FreezeContentRender = (function (_super) {
        __extends(FreezeContentRender, _super);
        function FreezeContentRender(parent, locator) {
            var _this = _super.call(this, parent, locator) || this;
            _this.isInitialRender = true;
            _this.widthService = locator.getService('widthService');
            _this.addEventListener();
            return _this;
        }
        FreezeContentRender.prototype.addEventListener = function () {
            this.parent.addEventListener(events.actionComplete, this.actionComplete.bind(this));
            this.parent.addEventListener(events.batchAdd, this.batchAdd.bind(this));
            this.parent.on(events.batchCancel, this.batchAdd.bind(this));
            this.parent.addEventListener(events.batchDelete, this.batchAdd.bind(this));
            this.parent.on(events.setHeightToFrozenElement, this.refreshScrollOffset);
            this.parent.on(events.columnVisibilityChanged, this.widthService.refreshFrozenScrollbar, this);
        };
        FreezeContentRender.prototype.batchAdd = function (args) {
            var isAdd = args.name !== 'batchCancel'
                && !(this.parent.frozenRows && this.parent.editSettings.newRowPosition === 'Top');
            if (this.parent.height !== 'auto' && (isAdd || args.name === 'batchCancel' || args.name === 'batchDelete')) {
                this.refreshScrollOffset();
                var height = this.getTable().offsetHeight;
                Iif (args.name === 'add' && this.parent.editSettings.newRowPosition === 'Bottom') {
                    this.parent.getContent().firstChild.scroll(0, height);
                }
            }
        };
        FreezeContentRender.prototype.setHeightToContent = function (height) {
            this.getFrozenContent().style.height = height.toString() + 'px';
            this.getMovableContent().style.height = height.toString() + 'px';
        };
        FreezeContentRender.prototype.actionComplete = function (args) {
            if (this.parent.editSettings.mode !== 'Dialog' && (args.requestType === 'add' || (args.requestType === 'cancel'
                && args.row.classList.contains(literals.addedRow)))
                && (!this.parent.frozenRows || this.parent.editSettings.newRowPosition === 'Bottom') && this.parent.height !== 'auto') {
                this.refreshScrollOffset();
                var height = this.getTable().offsetHeight;
                Iif (args.requestType === 'add' && this.parent.editSettings.newRowPosition === 'Bottom') {
                    this.parent.getContent().firstChild.scroll(0, height);
                }
            }
        };
        FreezeContentRender.prototype.removeEventListener = function () {
            if (this.parent.isDestroyed) {
                return;
            }
            this.parent.removeEventListener(events.actionComplete, this.actionComplete);
            this.parent.removeEventListener(events.batchAdd, this.batchAdd);
            this.parent.off(events.columnVisibilityChanged, this.widthService.refreshFrozenScrollbar);
        };
        FreezeContentRender.prototype.renderPanel = function () {
            _super.prototype.renderPanel.call(this);
            var fDiv = this.parent.element.querySelector('.' + literals.frozenContent);
            var mDiv = this.parent.element.querySelector('.' + literals.movableContent);
            Eif (ej2_base_1.isNullOrUndefined(fDiv)) {
                fDiv = this.parent.createElement('div', { className: 'e-frozencontent e-frozen-left-content' });
                mDiv = this.parent.createElement('div', { className: literals.movableContent });
                this.getPanel().querySelector('.' + literals.content).appendChild(fDiv);
                this.getPanel().querySelector('.' + literals.content).appendChild(mDiv);
                mDiv.style.scrollbarWidth = 'none';
            }
            this.setFrozenContent(fDiv);
            this.setMovableContent(mDiv);
            Iif (ej2_base_1.Browser.userAgent.indexOf('Mac OS') > -1 && ej2_base_1.Browser.info.name === 'safari' && !this.parent.enableVirtualization) {
                this.getPanel().firstElementChild.classList.add('e-mac-safari');
            }
        };
        FreezeContentRender.prototype.renderFrozenRigthPanel = function () {
            _super.prototype.renderPanel.call(this);
        };
        FreezeContentRender.prototype.renderEmpty = function (tbody) {
            _super.prototype.renderEmpty.call(this, tbody);
            this.getMovableContent().querySelector(literals.tbody).innerHTML = '<tr><td></td></tr>';
            ej2_base_1.addClass([this.getMovableContent().querySelector(literals.tbody).querySelector('tr')], ['e-emptyrow']);
            this.getFrozenContent().querySelector('.e-emptyrow').querySelector('td').colSpan = this.parent.getVisibleFrozenColumns();
            this.getFrozenContent().style.borderRightWidth = '0px';
            if (this.parent.frozenRows) {
                this.parent.getHeaderContent().querySelector('.' + literals.frozenHeader).querySelector(literals.tbody).innerHTML = '';
                this.parent.getHeaderContent().querySelector('.' + literals.movableHeader).querySelector(literals.tbody).innerHTML = '';
            }
        };
        FreezeContentRender.prototype.renderFrozenRightEmpty = function (tbody) {
            _super.prototype.renderEmpty.call(this, tbody);
        };
        FreezeContentRender.prototype.setFrozenContent = function (ele) {
            this.frozenContent = ele;
        };
        FreezeContentRender.prototype.setMovableContent = function (ele) {
            this.movableContent = ele;
        };
        FreezeContentRender.prototype.getFrozenContent = function () {
            return this.frozenContent;
        };
        FreezeContentRender.prototype.getMovableContent = function () {
            return this.movableContent;
        };
        FreezeContentRender.prototype.getModelGenerator = function () {
            return new freeze_row_model_generator_1.FreezeRowModelGenerator(this.parent);
        };
        FreezeContentRender.prototype.renderFrozenRightTable = function () {
            _super.prototype.renderTable.call(this);
        };
        FreezeContentRender.prototype.renderTable = function () {
            var mTbl;
            Eif (this.getFrozenContent().querySelector('.' + literals.table) == null) {
                _super.prototype.renderTable.call(this);
                this.getFrozenContent().appendChild(this.getTable());
                mTbl = this.getTable().cloneNode(true);
                this.getMovableContent().appendChild(mTbl);
            }
            else {
                this.setTable(this.getFrozenContent().querySelector('.' + literals.table));
                this.setColGroup(this.parent.element.querySelector('.' + literals.gridHeader).querySelector(literals.colGroup).cloneNode(true));
                this.getFrozenContent().querySelector('.' + literals.table).appendChild(this.getColGroup());
                mTbl = this.getMovableContent().querySelector('.' + literals.table);
                if (this.parent.frozenRows) {
                    this.parent.getHeaderContent().classList.add('e-frozenhdrcont');
                }
            }
            Eif (this.getMovableContent().querySelector(literals.colGroup)) {
                ej2_base_1.remove(this.getMovableContent().querySelector(literals.colGroup));
            }
            var colGroup = ((this.parent.getHeaderContent().querySelector('.' + literals.movableHeader).querySelector(literals.colGroup)).cloneNode(true));
            mTbl.insertBefore(colGroup, mTbl.querySelector(literals.tbody));
            var style = this.parent.enableVirtualization ? '' : 'flex';
            this.getPanel().firstChild.style.display = style;
            this.renderHorizontalScrollbar('e-frozenscrollbar e-frozen-left-scrollbar', this.getScrollbarDisplay());
        };
        FreezeContentRender.prototype.getScrollbarDisplay = function () {
            var frozenDisplay = '';
            Iif ((this.parent.getFrozenColumns() && !this.parent.getVisibleFrozenColumns())
                || (this.parent.getFrozenLeftColumnsCount() && !this.parent.getVisibleFrozenLeftCount())) {
                frozenDisplay = 'none';
            }
            return frozenDisplay;
        };
        FreezeContentRender.prototype.renderHorizontalScrollbar = function (className, display, isRight) {
            var left = this.parent.createElement('div', { className: className, styles: 'display:' + display });
            var movable = this.parent.createElement('div', { className: 'e-movablescrollbar' });
            var child = this.parent.createElement('div', { className: 'e-movablechild' });
            var scrollbarHeight = util_1.getScrollBarWidth().toString();
            this.setScrollbarHeight(movable, scrollbarHeight);
            this.setScrollbarHeight(child, scrollbarHeight);
            movable.appendChild(child);
            this.appendScrollbar(left, movable, isRight);
        };
        FreezeContentRender.prototype.appendScrollbar = function (frozen, movable, isRight) {
            var parent = this.parent.createElement('div', { className: 'e-scrollbar', styles: 'display: flex' });
            parent.appendChild(frozen);
            parent.appendChild(movable);
            this.parent.getContent().appendChild(parent);
        };
        FreezeContentRender.prototype.setScrollbarHeight = function (ele, height) {
            ele.style.minHeight = height + 'px';
            ele.style.maxHeight = height + 'px';
        };
        FreezeContentRender.prototype.setIsFrozen = function (args, tableName) {
            args.isFrozen = !args.isFrozen;
        };
        FreezeContentRender.prototype.setTbody = function (modelData, args) {
            var tableName;
            Iif (ej2_base_1.isNullOrUndefined(modelData[0].cells[0])) {
                this.getMovableContent().querySelector(literals.tbody).innerHTML = '';
            }
            var cell = modelData[0].cells[0];
            var idx = cell.index;
            if (ej2_base_1.isUndefined(idx) && this.parent.isRowDragable()) {
                cell = modelData[0].cells[1];
                idx = cell.index;
            }
            if (idx === 0) {
                this.getPanel().firstChild.style.overflowX = 'hidden';
                if (this.parent.enableColumnVirtualization) {
                    this.getMovableContent().style.overflowX = 'hidden';
                }
            }
            if (this.parent.enableColumnVirtualization && args.renderMovableContent
                && args.requestType === 'virtualscroll' && this.getMovableContent().scrollLeft > 0 && args.virtualInfo.columnIndexes[0] !== 0) {
                idx = this.parent.getFrozenColumns();
            }
            Eif (cell && cell.column) {
                tableName = cell.column.getFreezeTableName();
            }
            this.setIdx(idx);
            args.tableName = tableName;
            return tableName;
        };
        FreezeContentRender.prototype.splitRows = function (tableName) {
            if (tableName === literals.frozenLeft) {
                this.freezeRows = this.rows;
                this.freezeRowElements = this.rowElements;
            }
            else {
                this.movableRows = this.rows;
            }
        };
        FreezeContentRender.prototype.renderNextFrozentPart = function (args, tableName) {
            var isVFTable = this.parent.enableVirtualization;
            if (tableName === literals.frozenLeft) {
                if (isVFTable) {
                    args.renderMovableContent = true;
                }
                this.refreshContentRows(ej2_base_1.extend({}, args));
            }
        };
        FreezeContentRender.prototype.appendContent = function (tbody, frag, args, tableName) {
            Iif (this.parent.isReact && !ej2_base_1.isNullOrUndefined(this.parent.rowTemplate)) {
                tbody = frag;
            }
            else {
                tbody.appendChild(frag);
            }
            if (tableName === literals.frozenLeft) {
                this.isLoaded = false;
                this.getFrozenContent().querySelector('table').appendChild(tbody);
            }
            else {
                this.refreshTbody(tbody);
                this.isLoaded = true;
                this.getMovableContent().querySelector('table').appendChild(tbody);
                this.refreshHeight();
                this.refreshScrollOffset();
                this.widthService.refreshFrozenScrollbar();
            }
            if (this.isInitialRender) {
                this.parent.scrollModule.setHeight();
                this.isInitialRender = false;
            }
        };
        FreezeContentRender.prototype.refreshScrollOffset = function () {
            if (this.parent.height !== 'auto') {
                var height = this.getTable().offsetHeight + 1;
                this.setHeightToContent(height);
            }
            this.parent.notify(events.refreshFrozenHeight, {});
        };
        FreezeContentRender.prototype.getFrozenHeader = function (tableName) {
            if (tableName === literals.frozenLeft) {
                return this.parent.getHeaderContent().querySelector('.' + literals.frozenHeader).querySelector(literals.tbody);
            }
            else {
                return this.parent.getHeaderContent().querySelector('.' + literals.movableHeader).querySelector(literals.tbody);
            }
        };
        FreezeContentRender.prototype.refreshTbody = function (tbody) {
            if (tbody.childElementCount < 1) {
                tbody.appendChild(this.parent.createElement('tr').appendChild(this.parent.createElement('td')));
            }
        };
        FreezeContentRender.prototype.refreshHeight = function () {
            if (!this.parent.allowTextWrap) {
                this.parent.notify(events.freezeRender, { case: 'refreshHeight' });
            }
            this.getFrozenContent().style.borderRightWidth = '1px';
        };
        FreezeContentRender.prototype.setIdx = function (idx) {
            this.idx = idx;
        };
        FreezeContentRender.prototype.getIdx = function () {
            return this.idx;
        };
        FreezeContentRender.prototype.getTbody = function (tableName) {
            if (tableName === literals.frozenLeft) {
                return this.getTable().querySelector(literals.tbody);
            }
            else {
                return this.getMovableContent().querySelector(literals.tbody);
            }
        };
        return FreezeContentRender;
    }(content_renderer_1.ContentRender));
    exports.FreezeContentRender = FreezeContentRender;
    var FreezeRender = (function (_super) {
        __extends(FreezeRender, _super);
        function FreezeRender(parent, locator) {
            var _this = _super.call(this, parent, locator) || this;
            _this.addEventListener();
            return _this;
        }
        FreezeRender.prototype.addEventListener = function () {
            this.eventHandler = [{ event: events.freezeRender, handler: this.refreshFreeze },
                { event: events.frozenHeight, handler: this.setFrozenHeight },
                { event: events.uiUpdate, handler: this.enableAfterRender }];
            util_1.addRemoveEventListener(this.parent, this.eventHandler, true, this);
        };
        FreezeRender.prototype.removeEventListener = function () {
            if (this.parent.isDestroyed) {
                return;
            }
            util_1.addRemoveEventListener(this.parent, this.eventHandler, false);
        };
        FreezeRender.prototype.renderTable = function () {
            _super.prototype.renderTable.call(this);
            this.rfshMovable();
            this.updateColgroup();
            this.initializeHeaderDrag();
            this.initializeHeaderDrop();
            this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });
        };
        FreezeRender.prototype.renderPanel = function () {
            var fDiv = this.parent.element.querySelector('.' + literals.frozenHeader);
            var mDiv = this.parent.element.querySelector('.' + literals.movableHeader);
            _super.prototype.renderPanel.call(this);
            Eif (ej2_base_1.isNullOrUndefined(fDiv)) {
                fDiv = this.parent.createElement('div', { className: 'e-frozenheader e-frozen-left-header' });
                mDiv = this.parent.createElement('div', { className: literals.movableHeader });
                this.getPanel().querySelector('.' + literals.headerContent).appendChild(fDiv);
                this.getPanel().querySelector('.' + literals.headerContent).appendChild(mDiv);
            }
            this.setFrozenHeader(fDiv);
            this.setMovableHeader(mDiv);
        };
        FreezeRender.prototype.renderFrozenRightPanel = function () {
            _super.prototype.renderPanel.call(this);
        };
        FreezeRender.prototype.renderFrozenRightTable = function () {
            _super.prototype.renderTable.call(this);
        };
        FreezeRender.prototype.refreshUI = function () {
            var tbody = this.getMovableHeader().querySelector(literals.tbody);
            ej2_base_1.remove(this.getMovableHeader().querySelector('table'));
            _super.prototype.refreshUI.call(this);
            this.rfshMovable();
            this.getMovableHeader().querySelector(literals.tbody).innerHTML = tbody.innerHTML;
            this.updateColgroup();
            this.widthService.setWidthToColumns();
            Iif (!this.parent.enableVirtualization && !this.parent.isFrozenGrid()) {
                this.widthService.setWidthToTable();
            }
            Iif (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {
                util_1.wrap([].slice.call(this.movableHeader.querySelectorAll('tr.e-columnheader')), true);
            }
            this.parent.updateDefaultCursor();
            util_1.renderMovable(this.parent.getContentTable().querySelector(literals.colGroup), this.parent.getFrozenColumns(), this.parent);
            this.widthService.refreshFrozenScrollbar();
            this.initializeHeaderDrag();
            this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });
        };
        FreezeRender.prototype.refreshFrozenLeftUI = function () {
            _super.prototype.refreshUI.call(this);
        };
        FreezeRender.prototype.rfshMovable = function () {
            this.getFrozenHeader().appendChild(this.getTable());
            this.getMovableHeader().appendChild(this.createHeader(undefined, 'movable'));
            this.refreshStackedHdrHgt();
            this.addMovableFirstCls();
        };
        FreezeRender.prototype.addMovableFirstCls = function () {
            Eif (this.parent.getVisibleFrozenColumns()) {
                var movablefirstcell = [].slice.call(this.parent.element.querySelector('.' + literals.movableHeader).querySelector('thead').getElementsByClassName('e-columnheader'));
                var len = movablefirstcell.length;
                for (var i = 0; i < len; i++) {
                    var cells = 'cells';
                    var element = movablefirstcell[parseInt(i.toString(), 10)]["" + cells][0];
                    Eif (element) {
                        ej2_base_1.addClass([element], ['e-movablefirst']);
                        if (movablefirstcell[parseInt(i.toString(), 10)]["" + cells][0].rowSpan > 1) {
                            i = i + (movablefirstcell[parseInt(i.toString(), 10)]["" + cells][0].rowSpan - 1);
                        }
                    }
                }
            }
        };
        FreezeRender.prototype.refreshFreeze = function (obj) {
            if (obj.case === 'filter') {
                var filterRow = this.getTable().querySelector('.e-filterbar');
                Eif (this.parent.allowFiltering && filterRow && this.getMovableHeader().querySelector('thead')) {
                    this.getMovableHeader().querySelector('thead:not(.e-masked-thead)')
                        .appendChild(this.filterRenderer(filterRow, this.parent.getFrozenColumns()));
                    var elements = [].slice.call(this.getMovableHeader().
                        querySelectorAll('thead .e-filterbarcell .e-input'));
                    for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
                        var elem = elements_1[_i];
                        var args = {
                            element: elem, floatLabelType: 'Never',
                            properties: {
                                enableRtl: this.parent.enableRtl, showClearButton: true
                            }
                        };
                        ej2_inputs_1.Input.bindInitialEvent(args);
                    }
                }
            }
            else Eif (obj.case === 'textwrap' || obj.case === 'refreshHeight') {
                this.refreshHeight(obj);
                this.parent.contentModule.refreshScrollOffset();
            }
        };
        FreezeRender.prototype.refreshHeight = function (obj) {
            var fRows;
            var mRows;
            var fHdr = this.getFrozenHeader();
            var mHdr = this.getMovableHeader();
            var cont = this.parent.getContent();
            var wrapMode = this.parent.textWrapSettings.wrapMode;
            var hdrClassList = this.parent.getHeaderContent().querySelector('.' + literals.headerContent).classList;
            if (obj.case === 'textwrap') {
                Eif (wrapMode !== 'Header' || obj.isModeChg) {
                    fRows = cont.querySelector('.' + literals.frozenContent).querySelector('tbody').childNodes;
                    mRows = cont.querySelector('.' + literals.movableContent).querySelector('tbody').childNodes;
                    this.setWrapHeight(fRows, mRows, obj.isModeChg, true);
                }
                Iif (wrapMode === 'Content' && this.parent.allowTextWrap) {
                    hdrClassList.add('e-wrap');
                }
                else {
                    hdrClassList.remove('e-wrap');
                }
                Eif (wrapMode === 'Both' || obj.isModeChg) {
                    fRows = fHdr.querySelectorAll('tr');
                    mRows = mHdr.querySelectorAll('tr');
                }
                else {
                    mRows = mHdr.querySelector(wrapMode === 'Content' ?
                        literals.tbody : 'thead').querySelectorAll('tr');
                    fRows = fHdr.querySelector(wrapMode === 'Content' ?
                        literals.tbody : 'thead').querySelectorAll('tr');
                }
                Eif (!this.parent.getHeaderContent().getElementsByClassName('e-stackedheadercell').length) {
                    this.setWrapHeight(fRows, mRows, obj.isModeChg, false, this.colDepth > 1);
                }
                this.refreshStackedHdrHgt();
            }
            else Eif (obj.case === 'refreshHeight') {
                this.setWrapHeight(cont.querySelector('.' + literals.frozenContent).querySelectorAll('tr'), cont.querySelector('.' + literals.movableContent).querySelectorAll('tr'), obj.isModeChg);
                if (!this.parent.getHeaderContent().getElementsByClassName('e-stackedheadercell').length) {
                    this.setWrapHeight(fHdr.querySelectorAll('tr'), mHdr.querySelectorAll('tr'), obj.isModeChg);
                }
            }
        };
        FreezeRender.prototype.enableAfterRender = function (e) {
            Iif (e.module === 'scroll') {
                this.setFrozenHeight();
            }
        };
        FreezeRender.prototype.updateResizeHandler = function () {
            var elements = [].slice.call(this.parent.getHeaderContent().getElementsByClassName('e-rhandler'));
            for (var i = 0; i < elements.length; i++) {
                elements[parseInt(i.toString(), 10)].style.height = elements[parseInt(i.toString(), 10)].parentElement.offsetHeight + 'px';
            }
        };
        FreezeRender.prototype.setWrapHeight = function (fRows, mRows, isModeChg, isContReset, isStackedHdr) {
            var fRowHgt;
            var mRowHgt;
            var isWrap = this.parent.allowTextWrap;
            var wrapMode = this.parent.textWrapSettings.wrapMode;
            var tHead = this.parent.getHeaderContent().querySelector('thead');
            var tBody = this.parent.getHeaderContent().querySelector(literals.tbody);
            var height = [];
            var width = [];
            for (var i = 0, len = fRows.length; i < len; i++) {
                if (isModeChg && ((!this.parent.rowHeight && tBody.className === 'e-hide') || (wrapMode === 'Header' && isContReset) ||
                    ((wrapMode === 'Content' && tHead.contains(fRows[parseInt(i.toString(), 10)])) || (wrapMode === 'Header' && tBody.contains(fRows[parseInt(i.toString(), 10)])))) ||
                    isStackedHdr) {
                    fRows[parseInt(i.toString(), 10)].style.height = null;
                    mRows[parseInt(i.toString(), 10)].style.height = null;
                }
                if (!ej2_base_1.isNullOrUndefined(fRows[parseInt(i.toString(), 10)]) && !ej2_base_1.isNullOrUndefined(mRows[parseInt(i.toString(), 10)])) {
                    height[parseInt(i.toString(), 10)] = fRows[parseInt(i.toString(), 10)].getBoundingClientRect().height;
                    width[parseInt(i.toString(), 10)] = mRows[parseInt(i.toString(), 10)].getBoundingClientRect().height;
                }
                fRowHgt = height[parseInt(i.toString(), 10)];
                mRowHgt = width[parseInt(i.toString(), 10)];
                if (!ej2_base_1.isNullOrUndefined(fRows[parseInt(i.toString(), 10)]) && fRows[parseInt(i.toString(), 10)].childElementCount
                    && ((isWrap && fRowHgt < mRowHgt) || (!isWrap && fRowHgt < mRowHgt) || (this.parent.allowResizing
                        && this.parent.resizeModule && this.parent.resizeModule.isFrozenColResized === false))) {
                    fRows[parseInt(i.toString(), 10)].style.height = mRowHgt + 'px';
                }
                if (mRows && !ej2_base_1.isNullOrUndefined(mRows[parseInt(i.toString(), 10)]) && mRows[parseInt(i.toString(), 10)].childElementCount
                    && ((isWrap && fRowHgt > mRowHgt) || (!isWrap && fRowHgt > mRowHgt) || (this.parent.allowResizing
                        && this.parent.resizeModule && this.parent.resizeModule.isFrozenColResized === true))) {
                    mRows[parseInt(i.toString(), 10)].style.height = fRowHgt + 'px';
                }
            }
            if (isWrap && this.parent.height !== 'auto') {
                this.setFrozenHeight();
            }
        };
        FreezeRender.prototype.setFrozenHeight = function (height) {
            if (height === void 0) { height = util_1.getScrollBarWidth(); }
            var movableContentHeight = this.parent.element.querySelector('.' + literals.movableContent).getBoundingClientRect().height;
            var movableContent = this.parent.element.querySelector('.' + literals.movableContent);
            var frozenContent = this.parent.element.querySelector('.' + literals.frozenContent);
            var contentScrollWidth = this.parent.getContent().scrollWidth;
            var contentTableScrollWidth = this.parent.element.querySelector('.e-movablecontent table').scrollWidth +
                this.parent.getContentTable().scrollWidth;
            if (movableContent.scrollWidth - movableContent.clientWidth) {
                frozenContent.style.height = movableContentHeight -
                    height + 'px';
                frozenContent.style.borderBottom = '';
            }
            else {
                frozenContent.style.height = movableContentHeight + 'px';
                Iif (((frozenContent.scrollHeight <= frozenContent.clientHeight) ||
                    (movableContent.scrollHeight <= movableContent.clientHeight))
                    && contentScrollWidth === contentTableScrollWidth) {
                    this.parent.scrollModule.removePadding();
                }
                frozenContent.style.borderBottom = '0px';
            }
        };
        FreezeRender.prototype.refreshStackedHdrHgt = function () {
            var fRowSpan;
            var mRowSpan;
            var fTr = [].slice.call(this.getFrozenHeader().getElementsByClassName('e-columnheader'));
            var mTr = [].slice.call(this.getMovableHeader().getElementsByClassName('e-columnheader'));
            for (var i = 0, len = fTr.length; i < len; i++) {
                fRowSpan = this.getRowSpan(fTr[parseInt(i.toString(), 10)]);
                mRowSpan = this.getRowSpan(mTr[parseInt(i.toString(), 10)]);
                if (fRowSpan.min > 1 || this.parent.isRowDragable() &&
                    ej2_base_1.isNullOrUndefined(this.parent.getFrozenVirtualHeader().querySelector('.e-stackedheadercell'))) {
                    this.updateStackedHdrRowHgt(i, fRowSpan.max, fTr[parseInt(i.toString(), 10)], mTr);
                }
                else Iif (mRowSpan.min > 1) {
                    this.updateStackedHdrRowHgt(i, mRowSpan.max, mTr[parseInt(i.toString(), 10)], fTr);
                }
            }
            if (this.parent.allowResizing) {
                this.updateResizeHandler();
            }
            var cols = this.parent.columns;
            for (var i = 0, len = cols.length; i < len; i++) {
                Iif ((this.parent.isRowDragable() && !ej2_base_1.isNullOrUndefined(cols[parseInt(i.toString(), 10)].columns)) &&
                    ej2_base_1.isNullOrUndefined(this.parent.getFrozenVirtualHeader().querySelector('.e-stackedheadercell'))) {
                    var emptyCellIndex = this.frozenHeader.querySelectorAll('.e-columnheader').length - 1;
                    this.frozenHeader.querySelectorAll('.e-columnheader')[parseInt(emptyCellIndex.toString(), 10)].remove();
                    break;
                }
            }
        };
        FreezeRender.prototype.getRowSpan = function (row) {
            var rSpan;
            var minRowSpan;
            var maxRowSpan;
            var lastCellIndex = row.childElementCount - 1;
            if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {
                row.children[parseInt(lastCellIndex.toString(), 10)].remove();
            }
            for (var i = 0, len = row.childElementCount; i < len; i++) {
                if (i === 0) {
                    minRowSpan = row.children[0].rowSpan;
                }
                rSpan = row.children[parseInt(i.toString(), 10)].rowSpan;
                minRowSpan = Math.min(rSpan, minRowSpan);
                maxRowSpan = Math.max(rSpan, minRowSpan);
            }
            return { min: minRowSpan, max: maxRowSpan };
        };
        FreezeRender.prototype.updateStackedHdrRowHgt = function (idx, maxRowSpan, row, rows) {
            var height = 0;
            for (var i = 0; i < maxRowSpan; i++) {
                height += rows[idx + i].style.height ?
                    parseInt(rows[idx + i].style.height, 10) : rows[idx + i].offsetHeight;
            }
            row.style.height = height + 'px';
        };
        FreezeRender.prototype.setFrozenHeader = function (ele) {
            this.frozenHeader = ele;
        };
        FreezeRender.prototype.setMovableHeader = function (ele) {
            this.movableHeader = ele;
        };
        FreezeRender.prototype.getFrozenHeader = function () {
            return this.frozenHeader;
        };
        FreezeRender.prototype.getMovableHeader = function () {
            return this.movableHeader;
        };
        FreezeRender.prototype.updateColgroup = function () {
            var mTable = this.getMovableHeader().querySelector('table');
            ej2_base_1.remove(this.getMovableHeader().querySelector(literals.colGroup));
            mTable.insertBefore(util_1.renderMovable(this.getFrozenHeader().querySelector(literals.colGroup), this.parent.getFrozenColumns(), this.parent), mTable.querySelector('thead'));
        };
        FreezeRender.prototype.filterRenderer = function (ele, frozenColumn, total) {
            var clone = ele.cloneNode(true);
            clone.innerHTML = '';
            var end = total ? total : this.parent.getColumns().length;
            for (var i = frozenColumn; i < end; i++) {
                clone.appendChild(ele.removeChild(ele.children[parseInt(frozenColumn.toString(), 10)]));
            }
            return clone;
        };
        return FreezeRender;
    }(header_renderer_1.HeaderRender));
    exports.FreezeRender = FreezeRender;
});