all files / grid/renderer/ inline-edit-renderer.js

94.16% Statements 145/154
85.29% Branches 58/68
100% Functions 14/14
94.16% Lines 145/154
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   38×   14× 14× 14× 14×     13×   14× 14×   14× 14× 14×                         31× 31×   32×                 28×   31× 31×   31× 31× 31× 31× 31× 31×   31× 31× 31× 31× 31×                                 10×   10×     45× 45× 45× 45× 30×   45×       45×   45×   42× 42× 42× 42× 42× 42×   42×   42× 42× 42× 337× 337× 337×     337× 311× 311× 28×   283×       26×   337× 337× 337×   42× 42× 42× 42× 42×            
define(["require", "exports", "@syncfusion/ej2-base", "../base/constant", "../base/util"], function (require, exports, ej2_base_1, events, util_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var InlineEditRender = (function () {
        function InlineEditRender(parent) {
            this.parent = parent;
        }
        InlineEditRender.prototype.addNew = function (elements, args) {
            this.isEdit = false;
            var mTbody;
            var tbody;
            if (this.parent.frozenRows) {
                tbody = this.parent.getHeaderContent().querySelector('tbody');
            }
            else {
                tbody = this.parent.getContentTable().querySelector('tbody');
            }
            args.row = ej2_base_1.createElement('tr', { className: 'e-row e-addedrow' });
            if (tbody.querySelector('.e-emptyrow')) {
                tbody.querySelector('.e-emptyrow').classList.add('e-hide');
            }
            tbody.insertBefore(args.row, tbody.firstChild);
            args.row.appendChild(this.getEditElement(elements, false, undefined, args, true));
            if (this.parent.getFrozenColumns()) {
                var mEle = this.renderMovableform(args.row, args);
                if (this.parent.frozenRows) {
                    mTbody = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');
                }
                else {
                    mTbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');
                }
                mTbody.insertBefore(mEle, mTbody.firstChild);
                args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');
                mEle.setAttribute('colspan', '' + (this.parent.getVisibleColumns().length - this.parent.getVisibleFrozenColumns()));
                Eif (this.parent.height === 'auto') {
                    this.parent.notify(events.frozenHeight, {});
                }
            }
        };
        InlineEditRender.prototype.renderMovableform = function (ele, args) {
            var mEle = ele.cloneNode(true);
            var form = args.movableForm = mEle.querySelector('form');
            Iif (this.parent.editSettings.template) {
                form.innerHTML = '';
                this.appendChildren(form, args.rowData, false);
                return mEle;
            }
            this.renderMovable(ele, mEle);
            mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()
                .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;
            return mEle;
        };
        InlineEditRender.prototype.updateFreezeEdit = function (row, td) {
            td = td.concat([].slice.call(this.getFreezeRow(row).querySelectorAll('td.e-rowcell')));
            return td;
        };
        InlineEditRender.prototype.getFreezeRow = function (row) {
            if (this.parent.getFrozenColumns()) {
                var idx = parseInt(row.getAttribute('aria-rowindex'), 10);
                var fCont = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');
                var mCont = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');
                var fHdr = this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody');
                var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');
                if (this.parent.frozenRows && idx >= this.parent.frozenRows) {
                    idx -= this.parent.frozenRows;
                }
                if (fCont.contains(row)) {
                    return mCont.children[idx];
                }
                else if (mCont.contains(row)) {
                    return fCont.children[idx];
                }
                else Eif (fHdr.contains(row)) {
                    return mHdr.children[idx];
                }
                else if (mHdr.contains(row)) {
                    return fHdr.children[idx];
                }
            }
            return row;
        };
        InlineEditRender.prototype.update = function (elements, args) {
            this.isEdit = true;
            if (ej2_base_1.closest(args.row, '.e-movablecontent')) {
                args.row = this.getFreezeRow(args.row);
            }
            var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));
            args.row.innerHTML = '';
            tdElement = this.updateFreezeEdit(args.row, tdElement);
            args.row.appendChild(this.getEditElement(elements, true, tdElement, args, true));
            args.row.classList.add('e-editedrow');
            this.refreshFreezeEdit(args.row, args);
        };
        InlineEditRender.prototype.refreshFreezeEdit = function (row, args) {
            var td = row.firstChild;
            var fCls;
            var cont;
            var idx = parseInt(row.getAttribute('aria-rowindex'), 10);
            if (this.parent.getFrozenColumns()) {
                if (idx < this.parent.frozenRows) {
                    cont = this.parent.getHeaderContent();
                    fCls = '.e-frozenheader';
                }
                else {
                    cont = this.parent.getContent();
                    fCls = '.e-frozencontent';
                }
                var mTd = td.cloneNode(true);
                var form = args.movableForm = mTd.querySelector('form');
                Iif (this.parent.editSettings.template) {
                    form.innerHTML = '';
                    this.appendChildren(form, args.rowData, false);
                }
                var fRows = void 0;
                Eif (cont.querySelector(fCls).contains(row)) {
                    fRows = this.parent.getMovableRowByIndex(idx);
                    this.updateFrozenCont(fRows, td, mTd);
                }
                else {
                    fRows = this.parent.getRowByIndex(idx);
                    this.updateFrozenCont(fRows, mTd, td);
                }
                fRows.appendChild(mTd);
                fRows.classList.add('e-editedrow');
            }
        };
        InlineEditRender.prototype.updateFrozenCont = function (row, ele, mEle) {
            row.innerHTML = '';
            Eif (!this.parent.editSettings.template) {
                this.renderMovable(ele, mEle);
                mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()
                    .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;
            }
            ele.setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');
            mEle.setAttribute('colspan', this.parent.getColumns().length - this.parent.getFrozenColumns() + '');
        };
        InlineEditRender.prototype.renderMovable = function (ele, mEle) {
            var frzCols = this.parent.getFrozenColumns();
            for (var i = 0; i < frzCols; i++) {
                mEle.querySelector('tr').removeChild(mEle.querySelector('tr').children[0]);
            }
            for (var i = frzCols, len = ele.querySelector('tr').childElementCount; i < len; i++) {
                ele.querySelector('tr').removeChild(ele.querySelector('tr').children[ele.querySelector('tr').childElementCount - 1]);
            }
        };
        InlineEditRender.prototype.getEditElement = function (elements, isEdit, tdElement, args, isFrozen) {
            var gObj = this.parent;
            var gLen = 0;
            var isDetail = !ej2_base_1.isNullOrUndefined(gObj.detailTemplate) || !ej2_base_1.isNullOrUndefined(gObj.childGrid) ? 1 : 0;
            if (gObj.allowGrouping) {
                gLen = gObj.groupSettings.columns.length;
            }
            var td = ej2_base_1.createElement('td', {
                className: 'e-editcell e-normaledit',
                attrs: { colspan: (gObj.getVisibleColumns().length - gObj.getVisibleFrozenColumns() + gLen + isDetail).toString() }
            });
            var form = args.form =
                ej2_base_1.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });
            if (this.parent.editSettings.template) {
                this.appendChildren(form, args.rowData, isFrozen);
                td.appendChild(form);
                return td;
            }
            var table = ej2_base_1.createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25' } });
            table.appendChild(gObj.getContentTable().querySelector('colgroup').cloneNode(true));
            var tbody = ej2_base_1.createElement('tbody');
            var tr = ej2_base_1.createElement('tr');
            var i = 0;
            if (isDetail) {
                tr.insertBefore(ej2_base_1.createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);
            }
            while (i < gLen) {
                tr.appendChild(ej2_base_1.createElement('td', { className: 'e-indentcell' }));
                i++;
            }
            var m = 0;
            i = 0;
            while ((isEdit && m < tdElement.length && i < gObj.getColumns().length) || i < gObj.getColumns().length) {
                var span = isEdit ? tdElement[m].getAttribute('colspan') : null;
                var col = gObj.getColumns()[i];
                var td_1 = ej2_base_1.createElement('td', {
                    className: 'e-rowcell', attrs: { style: 'text-align:' + (col.textAlign ? col.textAlign : ''), 'colspan': span ? span : '' }
                });
                if (col.visible) {
                    td_1.appendChild(elements[col.uid]);
                    if (col.editType === 'booleanedit') {
                        td_1.classList.add('e-boolcell');
                    }
                    else if (col.commands || col.commandsTemplate) {
                        ej2_base_1.addClass([td_1], 'e-unboundcell');
                    }
                }
                else {
                    td_1.classList.add('e-hide');
                }
                tr.appendChild(td_1);
                i = span ? i + parseInt(span, 10) : i + 1;
                m++;
            }
            tbody.appendChild(tr);
            table.appendChild(tbody);
            form.appendChild(table);
            td.appendChild(form);
            return td;
        };
        InlineEditRender.prototype.removeEventListener = function () {
        };
        InlineEditRender.prototype.appendChildren = function (form, data, isFrozen) {
            var dummyData = ej2_base_1.extend({}, data, { isAdd: !this.isEdit, isFrozen: isFrozen }, true);
            util_1.appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate'));
        };
        return InlineEditRender;
    }());
    exports.InlineEditRender = InlineEditRender;
});