all files / rich-text-editor/renderer/ toolbar-renderer.js

94.08% Statements 397/422
87.8% Branches 331/377
97.73% Functions 43/44
94.08% Lines 397/422
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 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679   6058× 6058× 6058× 6058× 6058× 6058×   6058×   6058× 6058× 6058×   333×   333×     2540× 2540× 2540×   5961× 2376×     5961× 5961× 2376× 2376× 475×               1465× 1465×   1464×       1464× 1464× 1464× 1454×       328× 328×   2124× 11×   2113×                 388× 31× 31× 31× 13× 13×   18× 17× 47×       16×   17×     388×   291× 290×   291×   262×     5961× 5961× 5961× 5961× 5961× 5961×           5961× 5961×             5961× 5961× 5961× 5961× 2438×                     2438×     5961× 5961× 5961× 27×         4286× 4286× 4286× 4286× 4286× 4286× 38×   4286× 4286× 4286×                   342×   341×       341× 327× 327× 327× 327×       327×       327× 10×         10×       327× 327× 760× 176×   760× 760× 35× 24× 24×   11×         725×   327× 327× 327× 11× 11× 11×       11×       327× 327× 327×               327× 200× 200× 200× 200× 1281×   200× 1593×   200× 200× 1352× 1352× 1352× 1352× 1093×   1352× 1352× 1352× 1352× 1352× 1352×           199× 199× 199×       1153×         14× 14× 14× 14× 14× 95×   14× 14× 95× 95× 95× 14× 14× 14×       81×         341×             4286× 4286× 4286× 4286× 4286× 4286× 4286×                   1330×     1329×   1329× 1329×           17× 17×     16×         45× 45×       45×     45× 45× 45× 45× 45× 45× 15× 15× 15× 10× 10× 10× 24×   23×             249× 249× 249×               249× 249×     249×     48×   47×     47×   47× 45×   47× 47×             249× 249× 249× 249×   649× 649× 649× 649× 649× 26× 26×     623×     649×               649× 649× 649×     649× 649× 649×     649× 649× 649×     649× 649× 649× 649×                 3154× 3154× 3154×               3154× 62×       54×     30× 30×       54× 15× 15×   54×     54×   54× 54×         54× 54× 54× 54×         53×                 649× 649× 649× 649× 649×   5961×   5961×   5961×   8508× 5968×   2540× 2438× 2438× 2438×             2540× 2540× 2540× 2540× 2540× 2540× 2540× 2540× 2540×        
define(["require", "exports", "@syncfusion/ej2-base", "@syncfusion/ej2-base", "@syncfusion/ej2-navigations", "@syncfusion/ej2-splitbuttons", "@syncfusion/ej2-popups", "../base/classes", "../base/constant", "../base/classes", "@syncfusion/ej2-inputs", "../../editor-manager/plugin/toolbar-status", "../../common/enum"], function (require, exports, ej2_base_1, ej2_base_2, ej2_navigations_1, ej2_splitbuttons_1, ej2_popups_1, classes, events, classes_1, ej2_inputs_1, toolbar_status_1, enum_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var ToolbarRenderer = (function () {
        function ToolbarRenderer(parent, serviceLocator) {
            this.isEscapeKey = false;
            this.rangeStore = false;
            this.parent = parent;
            this.isDestroyed = false;
            Eif (serviceLocator) {
                this.l10n = serviceLocator.getService('rteLocale');
            }
            this.wireEvent();
        }
        ToolbarRenderer.prototype.wireEvent = function () {
            this.parent.on(events.destroy, this.destroy, this);
            this.parent.on(events.destroyTooltip, this.destroyTooltip, this);
            this.parent.on(events.closeTooltip, this.closeTooltip, this);
        };
        ToolbarRenderer.prototype.destroyTooltip = function () {
            var currentDocument = this.parent.iframeSettings.enable ? this.parent.contentModule.getPanel().ownerDocument :
                this.parent.contentModule.getDocument();
            if (!ej2_base_1.isNullOrUndefined(currentDocument.querySelector('.e-tooltip-wrap')) && !ej2_base_1.isNullOrUndefined(currentDocument.querySelector('[data-tooltip-id]'))) {
                var tooltipTargetEle = currentDocument.querySelector('[data-tooltip-id]');
                var event_1 = new MouseEvent('mouseleave', { bubbles: true, cancelable: true });
                tooltipTargetEle.dispatchEvent(event_1);
            }
        };
        ToolbarRenderer.prototype.unWireEvent = function () {
            this.parent.off(events.destroy, this.destroy);
            this.parent.off(events.destroyTooltip, this.destroyTooltip);
            this.parent.off(events.closeTooltip, this.closeTooltip);
        };
        ToolbarRenderer.prototype.toolbarBeforeCreate = function (e) {
            if (this.mode === 'Extended') {
                e.enableCollision = false;
            }
        };
        ToolbarRenderer.prototype.toolbarCreated = function () {
            this.parent.notify(events.toolbarCreated, this);
            if (this.mode === 'Extended') {
                var extendedToolbarElement = this.toolbarPanel.querySelector('.e-expended-nav');
                if (extendedToolbarElement) {
                    ej2_base_1.EventHandler.add(extendedToolbarElement, 'mousedown', this.extendedToolbarMouseDownHandler, this);
                }
            }
        };
        ToolbarRenderer.prototype.extendedToolbarMouseDownHandler = function () {
            if (this.parent.userAgentData.isSafari()) {
                this.parent.notify(events.selectionSave, {});
            }
        };
        ToolbarRenderer.prototype.toolbarClicked = function (args) {
            var _this = this;
            if (!this.parent.enabled) {
                return;
            }
            if (this.parent.toolbarSettings.type === enum_1.ToolbarType.Popup) {
                var command = void 0;
                Eif (args.item && args.item.command) {
                    command = args.item.command;
                }
                var commandsArray = ['Formats', 'Font', 'Alignments', 'EmojiPicker', 'Table', 'BulletFormatList', 'NumberFormatList', 'CodeBlock'];
                var isPresent = !ej2_base_1.isNullOrUndefined(command) && commandsArray.indexOf(command) !== -1;
                if (isPresent) {
                    args.cancel = true;
                }
            }
            var toolbarClickEventArgs = { item: args.item, originalEvent: args.originalEvent, cancel: false };
            this.parent.trigger('toolbarClick', toolbarClickEventArgs, function (clickEventArgs) {
                if ((!_this.parent.readonly || ej2_base_1.isNullOrUndefined(args.item)) && !clickEventArgs.cancel) {
                    _this.parent.notify(events.toolbarClick, clickEventArgs);
                }
            });
        };
        ToolbarRenderer.prototype.dropDownSelected = function (args) {
            this.parent.notify(events.dropDownSelect, { element: args.element, item: args.item, originalEvent: args.event });
            this.destroyTooltip();
        };
        ToolbarRenderer.prototype.beforeDropDownItemRender = function (args) {
            if (this.parent.readonly || !this.parent.enabled) {
                return;
            }
            this.parent.notify(events.beforeDropDownItemRender, args);
        };
        ToolbarRenderer.prototype.tooltipBeforeRender = function (args) {
            Eif (!ej2_base_1.isNullOrUndefined(args.target.getAttribute('title'))) {
                var tooltipTarget = args.target.getAttribute('title');
                var tooltipText = void 0;
                switch (tooltipTarget) {
                    case 'Minimize':
                        tooltipText = this.l10n.getConstant('minimize');
                        args.target.setAttribute('title', tooltipText + ' (Esc)');
                        break;
                    case 'Maximize':
                        tooltipText = this.l10n.getConstant('maximize');
                        args.target.setAttribute('title', tooltipText + ' (Ctrl+Shift+F)');
                        break;
                }
            }
            if (args.target.querySelector('.e-active')) {
                args.cancel = true;
                Eif (!ej2_base_1.isNullOrUndefined(args.target.getAttribute('title'))) {
                    this.closeTooltip({ target: args.target, isTitle: true });
                }
            }
        };
        ToolbarRenderer.prototype.dropDownOpen = function (args) {
            if (args.element.parentElement.getAttribute('id').indexOf('TableCell') > -1 && !ej2_base_1.isNullOrUndefined(args.element.parentElement.querySelector('.e-cell-merge'))) {
                var listEle = args.element.querySelectorAll('li');
                var selectedEles_1 = this.parent.inputElement.querySelectorAll('.e-cell-select');
                if (selectedEles_1.length === 1) {
                    ej2_base_1.addClass([listEle[0]], 'e-disabled');
                    ej2_base_1.removeClass([listEle[1], listEle[2]], 'e-disabled');
                }
                else if (selectedEles_1.length > 1) {
                    if (!Array.from(selectedEles_1).every(function (element) {
                        return element.tagName.toLowerCase() === selectedEles_1[0].tagName.toLowerCase();
                    })) {
                        ej2_base_1.addClass([listEle[0]], 'e-disabled');
                    }
                    else {
                        ej2_base_1.removeClass([listEle[0]], 'e-disabled');
                    }
                    ej2_base_1.addClass([listEle[1], listEle[2]], 'e-disabled');
                }
            }
            this.parent.notify(events.selectionSave, args);
        };
        ToolbarRenderer.prototype.dropDownClose = function (args) {
            if (!this.isEscapeKey) {
                this.parent.notify(events.selectionRestore, args);
            }
            this.isEscapeKey = false;
        };
        ToolbarRenderer.prototype.dropDownBeforeClose = function (args) {
            if (!ej2_base_1.isNullOrUndefined(args.event) && args.event.key === 'Escape' && args.event.keyCode === 27) {
                this.isEscapeKey = true;
                this.parent.notify(events.preventQuickToolbarClose, args);
            }
        };
        ToolbarRenderer.prototype.renderToolbar = function (args) {
            var _this = this;
            var isBottomToolbar = this.parent.toolbarSettings && this.parent.toolbarSettings.position === 'Bottom';
            this.setPanel(args.target);
            this.renderPanel();
            this.mode = args.overflowMode;
            args.rteToolbarObj.toolbarObj = new ej2_navigations_1.Toolbar({
                items: args.items,
                width: '100%',
                overflowMode: args.overflowMode,
                beforeCreate: this.toolbarBeforeCreate.bind(this),
                created: function () {
                    _this.positionToolbar(isBottomToolbar);
                    _this.toolbarCreated();
                },
                clicked: this.toolbarClicked.bind(this),
                enablePersistence: args.enablePersistence,
                enableRtl: args.enableRtl,
                cssClass: args.cssClass
            });
            args.rteToolbarObj.toolbarObj.isStringTemplate = true;
            args.rteToolbarObj.toolbarObj.createElement = this.parent.createElement;
            args.rteToolbarObj.toolbarObj.appendTo(args.target);
            if (this.parent.showTooltip && args.type === 'toolbar') {
                this.tooltip = new ej2_popups_1.Tooltip({
                    target: '#' + this.parent.getID() + '_toolbar_wrapper [title]',
                    showTipPointer: true,
                    openDelay: 400,
                    opensOn: 'Hover',
                    beforeRender: this.tooltipBeforeRender.bind(this),
                    beforeOpen: this.tooltipBeforeOpen.bind(this),
                    cssClass: this.parent.getCssClass(),
                    windowCollision: true,
                    position: isBottomToolbar ? 'TopCenter' : 'BottomCenter'
                });
                this.tooltip.appendTo(args.target.parentElement);
            }
        };
        ToolbarRenderer.prototype.positionToolbar = function (isBottomToolbar) {
            var rteContainer = this.parent.element.querySelector('.e-rte-container');
            var toolbarWrapper = this.parent.element.querySelector('.e-toolbar-wrapper');
            if (isBottomToolbar && rteContainer && toolbarWrapper) {
                ej2_base_1.addClass([toolbarWrapper], 'e-rte-tb-bottom');
            }
        };
        ToolbarRenderer.prototype.tooltipBeforeOpen = function (args) {
            Eif (args.element) {
                args.element.setAttribute('data-rte-id', this.parent.getID());
            }
        };
        ToolbarRenderer.prototype.renderDropDownButton = function (args) {
            var _this = this;
            var css;
            var targetEle = args.activeElement;
            args.element.classList.add(classes_1.CLS_DROPDOWN_BTN);
            css = args.cssClass + ' ' + classes_1.CLS_RTE_ELEMENTS + ' ' + classes.CLS_DROPDOWN_MENU;
            if (this.parent.inlineMode.enable && ej2_base_1.Browser.isDevice) {
                css = css + ' ' + classes_1.CLS_INLINE_DROPDOWN;
            }
            var isTesting = this.parent.element && this.parent.element.dataset && this.parent.element.dataset.rteUnitTesting === 'true';
            var proxy = this;
            var dropDown = new ej2_splitbuttons_1.DropDownButton({
                items: args.items,
                iconCss: args.iconCss,
                cssClass: css,
                content: args.content,
                enablePersistence: this.parent.enablePersistence,
                enableRtl: this.parent.enableRtl,
                select: this.dropDownSelected.bind(this),
                animationSettings: isTesting ? { effect: 'None', duration: 0 } : { effect: 'None', duration: 400, easing: 'ease' },
                beforeOpen: function (args) {
                    if (proxy.parent.readonly || !proxy.parent.enabled) {
                        args.cancel = true;
                        return;
                    }
                    Iif (_this.parent.userAgentData.isSafari() && args.event.type === 'keydown' && _this.parent.formatter.editorManager.nodeSelection &&
                        !_this.parent.inputElement.contains(_this.parent.getRange().startContainer)) {
                        _this.parent.notify(events.selectionRestore, args);
                    }
                    if (proxy.parent.editorMode !== 'Markdown') {
                        var startNode = proxy.parent.getRange().startContainer.parentElement;
                        var tableEle = startNode.closest('table');
                        var trow = startNode.closest('tr');
                        if (!ej2_base_1.isNullOrUndefined(tableEle) && tableEle.classList.contains('e-dashed-border')) {
                            for (var index = 0; index < args.element.childNodes.length; index++) {
                                if (args.element.childNodes[index].classList.contains('e-dashed-borders')) {
                                    ej2_base_1.addClass([args.element.childNodes[index]], 'e-active');
                                }
                            }
                        }
                        if (!ej2_base_1.isNullOrUndefined(tableEle) && tableEle.classList.contains('e-alternate-rows') && window.getComputedStyle(trow).backgroundColor !== '') {
                            for (var index = 0; index < args.element.childNodes.length; index++) {
                                if (args.element.childNodes[index].classList.contains('e-alternate-rows')) {
                                    ej2_base_1.addClass([args.element.childNodes[index]], 'e-active');
                                }
                            }
                        }
                        if (!ej2_base_1.isNullOrUndefined(args.element.parentElement) && args.element.parentElement.classList.contains('e-border-style-btn')) {
                            var borderStyleValue = proxy.parent.contentModule.getDocument().activeElement.innerText.toLowerCase();
                            for (var i = 0; i < args.items.length; i++) {
                                Iif (args.items[i].text.toLowerCase() === borderStyleValue) {
                                    ej2_base_1.addClass([args.element.childNodes[i]], 'e-active');
                                    break;
                                }
                                else {
                                    ej2_base_1.removeClass([args.element.childNodes[i]], 'e-active');
                                }
                            }
                        }
                        var alignEle = proxy.parent.getRange().startContainer;
                        while (alignEle !== proxy.parent.inputElement && !ej2_base_1.isNullOrUndefined(alignEle.parentElement)) {
                            if (alignEle.nodeName === '#text') {
                                alignEle = alignEle.parentElement;
                            }
                            var alignStyle = window.getComputedStyle(alignEle).textAlign;
                            if (!ej2_base_1.isNullOrUndefined(args.items[0]) && args.items[0].command === 'Alignments') {
                                if ((args.items[0].text === 'Align Left' && (alignStyle === 'left') || alignStyle === 'start')) {
                                    ej2_base_1.addClass([args.element.childNodes[0]], 'e-active');
                                    break;
                                }
                                else if (args.items[1].text === 'Align Center' && alignStyle === 'center') {
                                    ej2_base_1.addClass([args.element.childNodes[1]], 'e-active');
                                    break;
                                }
                                else if (args.items[2].text === 'Align Right' && alignStyle === 'right') {
                                    ej2_base_1.addClass([args.element.childNodes[2]], 'e-active');
                                    break;
                                }
                                else Eif (args.items[3].text === 'Align Justify' && alignStyle === 'justify') {
                                    ej2_base_1.addClass([args.element.childNodes[3]], 'e-active');
                                    break;
                                }
                            }
                            alignEle = alignEle.parentElement;
                        }
                        var closestNode = startNode.closest('img');
                        var imageEle = closestNode ? closestNode : (targetEle ? targetEle : startNode.querySelector('img'));
                        if (!ej2_base_1.isNullOrUndefined(args.items[0]) && args.items[0].command === 'Images') {
                            Eif (!ej2_base_1.isNullOrUndefined(imageEle)) {
                                var index = void 0;
                                if (imageEle.classList.contains('e-imgleft') || imageEle.classList.contains('e-imginline')) {
                                    index = 0;
                                }
                                else if (imageEle.classList.contains('e-imgcenter') || imageEle.classList.contains('e-imgbreak')) {
                                    index = 1;
                                }
                                else if (imageEle.classList.contains('e-imgright')) {
                                    index = 2;
                                }
                                if (!ej2_base_1.isNullOrUndefined(args.element.childNodes[index])) {
                                    ej2_base_1.addClass([args.element.childNodes[index]], 'e-active');
                                }
                            }
                        }
                        var videoClosestNode = startNode.closest('.e-video-wrap');
                        var videoEle = videoClosestNode ? videoClosestNode : (targetEle ? targetEle : startNode.querySelector('video'));
                        if (!ej2_base_1.isNullOrUndefined(args.items[0]) && args.items[0].command === 'Videos') {
                            Eif (!ej2_base_1.isNullOrUndefined(videoEle)) {
                                var index = void 0;
                                if (videoEle.classList.contains('e-video-left') || videoEle.classList.contains('e-video-inline')) {
                                    index = 0;
                                }
                                else if (videoEle.classList.contains('e-video-center') || videoEle.classList.contains('e-video-break')) {
                                    index = 1;
                                }
                                else Iif (videoEle.classList.contains('e-video-right')) {
                                    index = 2;
                                }
                                if (!ej2_base_1.isNullOrUndefined(args.element.childNodes[index])) {
                                    ej2_base_1.addClass([args.element.childNodes[index]], 'e-active');
                                }
                            }
                        }
                        if (!ej2_base_1.isNullOrUndefined(args.items[0]) && (args.items[0].command === 'Formats' || args.items[0].command === 'Font')) {
                            var fontName_1 = [];
                            var formats_1 = [];
                            var hasUpdatedActive = false;
                            _this.parent.format.types.forEach(function (item) {
                                formats_1.push(item.value.toLocaleLowerCase());
                            });
                            _this.parent.fontFamily.items.forEach(function (item) {
                                fontName_1.push(item.value);
                            });
                            var toolbarStatus = toolbar_status_1.ToolbarStatus.get(_this.parent.contentModule.getDocument(), _this.parent.contentModule.getEditPanel(), formats_1, null, fontName_1);
                            for (var index = 0; index < args.element.childNodes.length; index++) {
                                var htmlString = dropDown.content.trim();
                                var styleMatch = htmlString.match(/style="([^"]*)"/);
                                var styleValue = '';
                                if (styleMatch) {
                                    styleValue = styleMatch[1];
                                }
                                var updatedHtml = htmlString.replace(/ style="([^"]*)"/, '');
                                var divNode = _this.parent.createElement('div');
                                divNode.innerHTML = updatedHtml;
                                var spanElement = divNode.querySelector('span');
                                spanElement.style.cssText = styleValue;
                                if (!hasUpdatedActive && ((divNode.textContent.trim() !== ''
                                    && args.element.childNodes[index].textContent.trim() === divNode.textContent.trim()) ||
                                    ((args.items[0].command === 'Formats' && !ej2_base_1.isNullOrUndefined(toolbarStatus.formats) && _this.parent.format.types[index].value.toLowerCase() === toolbarStatus.formats.toLowerCase() && args.element.childNodes[index].classList.contains(_this.parent.format.types[index].cssClass))
                                        || (args.items[0].subCommand === 'FontName' && args.items[0].command === 'Font' && !ej2_base_1.isNullOrUndefined(toolbarStatus.fontname) && !ej2_base_1.isNullOrUndefined(_this.parent.fontFamily.items[index]) && _this.parent.fontFamily.items[index].value.toLowerCase() === toolbarStatus.fontname.toLowerCase() && args.element.childNodes[index].classList.contains(_this.parent.fontFamily.items[index].cssClass)))
                                    || (((args.items[0].subCommand === 'FontName') && _this.parent.fontFamily.items[index].value === '' && ej2_base_1.isNullOrUndefined(toolbarStatus.fontname) && args.element.childNodes[index].classList.contains(_this.parent.fontFamily.items[index].cssClass)) ||
                                        ((args.items[0].subCommand === 'FontSize') && args.element.childNodes[index].textContent === 'Default' && divNode.textContent === 'Font Size' && _this.parent.fontSize.items[index].value === '' && !ej2_base_1.isNullOrUndefined(toolbarStatus.fontsize))))) {
                                    Eif (!args.element.childNodes[index].classList.contains('e-active')) {
                                        ej2_base_1.addClass([args.element.childNodes[index]], 'e-active');
                                        hasUpdatedActive = true;
                                    }
                                }
                                else {
                                    ej2_base_1.removeClass([args.element.childNodes[index]], 'e-active');
                                }
                            }
                        }
                    }
                    else Eif (proxy.parent.editorMode === 'Markdown') {
                        Eif (args.items[0].command === 'Formats') {
                            var formats_2 = [];
                            var hasUpdatedActive = false;
                            _this.parent.format.types.forEach(function (item) {
                                formats_2.push(item.value.toLocaleLowerCase());
                            });
                            var childNodes = args.element.childNodes;
                            for (var index = 0; index < childNodes.length; index++) {
                                var divNode = _this.parent.createElement('div');
                                divNode.innerHTML = dropDown.content.trim();
                                if (!hasUpdatedActive && ((divNode.textContent.trim() !== '' && childNodes[index].textContent.trim() === divNode.textContent.trim()))) {
                                    Eif (!childNodes[index].classList.contains('e-active')) {
                                        ej2_base_1.addClass([childNodes[index]], 'e-active');
                                        hasUpdatedActive = true;
                                    }
                                }
                                else {
                                    ej2_base_1.removeClass([childNodes[index]], 'e-active');
                                }
                            }
                        }
                    }
                    proxy.parent.notify(events.beforeDropDownOpen, args);
                },
                close: this.dropDownClose.bind(this),
                beforeClose: this.dropDownBeforeClose.bind(this),
                open: this.dropDownOpen.bind(this),
                beforeItemRender: this.beforeDropDownItemRender.bind(this)
            });
            dropDown.isStringTemplate = true;
            dropDown.createElement = proxy.parent.createElement;
            dropDown.appendTo(args.element);
            args.element.tabIndex = -1;
            var popupElement = document.getElementById(dropDown.element.id + '-popup');
            popupElement.setAttribute('aria-owns', this.parent.getID());
            return dropDown;
        };
        ToolbarRenderer.prototype.mouseOutHandler = function () {
            Eif (!ej2_base_1.isNullOrUndefined(this.tooltipTargetEle)) {
                this.tooltipTargetEle.setAttribute('title', this.tooltipTargetEle.getAttribute('data-title'));
            }
            else {
                var currentDocument = this.parent.iframeSettings.enable ? this.parent.contentModule.getPanel().ownerDocument :
                    this.parent.contentModule.getDocument();
                this.tooltipTargetEle = currentDocument.querySelector('[data-title]');
                this.tooltipTargetEle.setAttribute('title', this.tooltipTargetEle.getAttribute('data-title'));
            }
            this.tooltipTargetEle.removeAttribute('data-title');
            ej2_base_1.EventHandler.remove(this.tooltipTargetEle, 'mouseout', this.mouseOutHandler);
        };
        ToolbarRenderer.prototype.closeTooltip = function (args) {
            if (args.isTitle) {
                this.tooltipTargetEle = args.target;
                this.tooltipTargetEle.setAttribute('data-title', this.tooltipTargetEle.getAttribute('title'));
                this.tooltipTargetEle.removeAttribute('title');
                ej2_base_1.EventHandler.add(this.tooltipTargetEle, 'mouseout', this.mouseOutHandler, this);
            }
            else {
                var currentDocument = this.parent.iframeSettings.enable ? this.parent.contentModule.getPanel().ownerDocument :
                    this.parent.contentModule.getDocument();
                this.tooltipTargetEle = ej2_base_2.closest(args.target, '[data-tooltip-id]');
                if (!ej2_base_1.isNullOrUndefined(this.tooltipTargetEle) && this.parent.showTooltip && !ej2_base_1.isNullOrUndefined(currentDocument.querySelector('.e-tooltip-wrap'))) {
                    this.destroyTooltip();
                    this.tooltipTargetEle.setAttribute('data-title', this.tooltipTargetEle.getAttribute('title'));
                    this.tooltipTargetEle.removeAttribute('title');
                    ej2_base_1.EventHandler.add(this.tooltipTargetEle, 'mouseout', this.mouseOutHandler, this);
                }
            }
        };
        ToolbarRenderer.prototype.handleCodeBlockDropdown = function (args) {
            var range = this.parent.getRange();
            var startContainer = this.parent.formatter.editorManager.codeBlockObj
                .isValidCodeBlockStructure(range.startContainer);
            var endContainer = this.parent.formatter.editorManager.codeBlockObj.
                isValidCodeBlockStructure(range.endContainer);
            var codeBlock = !ej2_base_1.isNullOrUndefined(startContainer) || !ej2_base_1.isNullOrUndefined(endContainer);
            var codeBlockElement = startContainer || endContainer;
            var currentLanguage = '';
            Eif (codeBlock) {
                currentLanguage = codeBlockElement.getAttribute('data-language') || '';
                var listItems = args.element.querySelectorAll('li');
                for (var i = 0; i < listItems.length; i++) {
                    var itemLanguage = listItems[i].getAttribute('data-language') || listItems[i].textContent.toLowerCase();
                    if (currentLanguage.toLowerCase() === itemLanguage) {
                        ej2_base_1.addClass([listItems[i]], 'e-active');
                    }
                    else {
                        ej2_base_1.removeClass([listItems[i]], 'e-active');
                    }
                }
            }
        };
        ToolbarRenderer.prototype.handleListsDropdown = function (args) {
            var proxy = this;
            Iif (proxy.parent.readonly || !proxy.parent.enabled) {
                args.cancel = true;
                return;
            }
            Iif (ej2_base_1.Browser.info.name === 'safari' && !proxy.parent.inputElement.contains(proxy.parent.getRange().startContainer)) {
                proxy.parent.notify(events.selectionRestore, {});
            }
            Eif (proxy.parent.editorMode !== 'Markdown') {
                var startNode = proxy.parent.getRange().startContainer.parentElement;
                var listElem = startNode.closest('LI');
                var currentLiElem = !ej2_base_1.isNullOrUndefined(listElem) ? listElem.parentElement : null;
                var currentAction = args.items[0].subCommand;
                if (!ej2_base_1.isNullOrUndefined(currentLiElem)) {
                    var validNumberFormatAction = (currentAction === 'NumberFormatList' && currentLiElem.nodeName === 'OL');
                    var validBulletFormatAction = (currentAction === 'BulletFormatList' && currentLiElem.nodeName === 'UL');
                    if (validNumberFormatAction || validBulletFormatAction) {
                        var currentListStyle = currentLiElem.style.listStyleType.split('-').join('').toLocaleLowerCase();
                        currentListStyle = currentListStyle === 'decimal' ? 'number' : currentListStyle;
                        for (var index = 0; index < args.element.childNodes.length; index++) {
                            if (currentListStyle === args.element.childNodes[index].innerHTML.split(' ').join('').toLocaleLowerCase()) {
                                ej2_base_1.addClass([args.element.childNodes[index]], 'e-active');
                                break;
                            }
                            else if (currentListStyle === '' && (args.element.childNodes[index].innerHTML === 'Number' || args.element.childNodes[index].innerHTML === 'Disc')) {
                                ej2_base_1.addClass([args.element.childNodes[index]], 'e-active');
                                break;
                            }
                        }
                    }
                }
            }
        };
        ToolbarRenderer.prototype.renderSplitButton = function (args) {
            var _this = this;
            var css = args.cssClass;
            var splitButton = new ej2_splitbuttons_1.SplitButton({
                items: args.items,
                cssClass: css,
                iconCss: args.iconCss,
                enablePersistence: this.parent.enablePersistence,
                enableRtl: this.parent.enableRtl,
                select: this.dropDownSelected.bind(this),
                created: function () {
                    var splitBtnDiv = args.element.parentElement;
                    Iif (!splitBtnDiv) {
                        return;
                    }
                    splitBtnDiv.tabIndex = -1;
                },
                beforeOpen: function (args) {
                    if (_this.parent.readonly || !_this.parent.enabled) {
                        args.cancel = true;
                        return;
                    }
                    Iif (!args.items) {
                        return;
                    }
                    if (args.items[0].command === 'CodeBlock') {
                        _this.handleCodeBlockDropdown(args);
                    }
                    if (args.items[0].command === 'Lists') {
                        _this.handleListsDropdown(args);
                    }
                    _this.currentElement = splitButton.element;
                    _this.currentDropdown = splitButton;
                },
                close: this.dropDownClose.bind(this),
                beforeClose: this.dropDownBeforeClose.bind(this),
                open: this.dropDownOpen.bind(this),
                beforeItemRender: this.beforeDropDownItemRender.bind(this)
            });
            splitButton.appendTo(args.element);
            var popupElement = document.getElementById(splitButton.element.id + '_dropdownbtn-popup');
            popupElement.setAttribute('aria-owns', this.parent.getID());
            return splitButton;
        };
        ToolbarRenderer.prototype.renderColorPicker = function (args, item, toolbarType) {
            var _this = this;
            var proxy = this;
            var colorValue;
            var editTablecolorpicker = false;
            if (item === 'bordercolor' || item === 'tablebackgroundcolor') {
                colorValue = args.value;
                editTablecolorpicker = true;
            }
            else {
                colorValue = (ej2_base_1.isNullOrUndefined(this.defaultColorPicker)) ?
                    (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default : this.defaultColorPicker;
            }
            var colorPicker = new ej2_inputs_1.ColorPicker({
                enableRtl: this.parent.enableRtl,
                inline: false,
                value: colorValue,
                showButtons: false,
                cssClass: args.cssClass,
                disabled: !this.parent.enabled,
                created: function () {
                    var _a, _b, _c;
                    var colorPickerDiv = args.element.parentElement;
                    Iif (!colorPickerDiv) {
                        return;
                    }
                    colorPickerDiv.tabIndex = -1;
                    var colorPickerSplitDiv = colorPickerDiv.childNodes[1];
                    Iif (!colorPickerSplitDiv) {
                        return;
                    }
                    (_a = colorPickerSplitDiv.classList).add.apply(_a, args.cssClass.split(' '));
                    var colorPickerElem = colorPickerDiv.querySelector('.e-split-colorpicker');
                    Iif (!colorPickerElem) {
                        return;
                    }
                    (_b = colorPickerElem.classList).add.apply(_b, args.cssClass.split(' '));
                    var dropdownBtn = colorPickerDiv.querySelector('.e-dropdown-btn');
                    Eif (dropdownBtn) {
                        (_c = dropdownBtn.classList).add.apply(_c, args.cssClass.split(' '));
                    }
                },
                mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),
                modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),
                showRecentColors: ((toolbarType === 'quick' && !editTablecolorpicker) ? false : (editTablecolorpicker) ? true : ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.showRecentColors : proxy.parent.fontColor.showRecentColors)),
                presetColors: (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode : this.parent.fontColor.colorCode,
                columns: (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns,
                beforeTileRender: function (args) {
                    args.element.classList.add(classes.CLS_COLOR_PALETTE);
                    args.element.classList.add(classes_1.CLS_CUSTOM_TILE);
                    Iif (!ej2_base_1.isNullOrUndefined(_this.parent.cssClass)) {
                        var allClassName = _this.parent.getCssClass().split(' ');
                        for (var i = 0; i < allClassName.length; i++) {
                            if (allClassName[i].trim() !== '') {
                                args.element.classList.add(allClassName[i]);
                            }
                        }
                    }
                    if (args.value === '') {
                        args.element.classList.add(classes_1.CLS_NOCOLOR_ITEM);
                    }
                },
                beforeOpen: function () {
                    if ((proxy.parent.userAgentData.isSafari() || !proxy.parent.userAgentData.isSafari()) &&
                        _this.parent.formatter.editorManager.nodeSelection &&
                        _this.parent.inputElement.contains(_this.parent.getRange().startContainer)) {
                        proxy.parent.notify(events.selectionSave, {});
                        _this.rangeStore = true;
                    }
                },
                change: function (colorPickerArgs) {
                    if (_this.rangeStore) {
                        proxy.parent.notify(events.selectionRestore, {});
                        _this.rangeStore = false;
                    }
                    Eif (!proxy.parent.userAgentData.isSafari() ||
                        (proxy.parent.userAgentData.isSafari() && _this.parent.formatter.editorManager.nodeSelection &&
                            _this.parent.inputElement.contains(_this.parent.getRange().startContainer))) {
                        proxy.parent.notify(events.selectionSave, {});
                    }
                    var colorpickerValue = colorPickerArgs.currentValue.rgba;
                    colorPickerArgs.item = {
                        command: args.command,
                        subCommand: args.subCommand,
                        value: colorpickerValue
                    };
                    proxy.parent.notify(events.selectionRestore, {});
                    var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());
                    var closestElement = ej2_base_2.closest(range.startContainer.parentNode, 'table');
                    if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' || range.startContainer.nodeName === 'BODY' ||
                        (range.startContainer.parentNode && ej2_base_2.closest(range.startContainer.parentNode, 'td,th'))) && range.collapsed && args.subCommand === 'BackgroundColor' && (closestElement && ej2_base_2.closest(closestElement, '.' + classes.CLS_RTE) || proxy.parent.iframeSettings.enable)
                        && toolbarType === 'quick') {
                        _this.defaultColorPicker = colorPickerArgs.currentValue.hex;
                        colorPickerArgs.name = 'tableColorPickerChanged';
                        colorPickerArgs.item.command = 'Table';
                        proxy.parent.formatter.process(_this.parent, colorPickerArgs, colorPickerArgs.event, colorPickerArgs.item.value);
                    }
                    else {
                        proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);
                    }
                },
                beforeModeSwitch: function (args) {
                    colorValue = colorPicker.value;
                    Iif (colorValue === '') {
                        colorPicker.setProperties({ value: ((args.mode === 'Picker') ? '#008000ff' : '') }, true);
                    }
                    colorPicker.showButtons = args.mode === 'Palette' ? false : true;
                },
                beforeClose: this.dropDownClose.bind(this)
            });
            colorPicker.isStringTemplate = true;
            colorPicker.createElement = this.parent.createElement;
            colorPicker.appendTo(args.element);
            args.element.setAttribute('role', 'button');
            return colorPicker;
        };
        ToolbarRenderer.prototype.renderPanel = function () {
            this.getPanel().classList.add(classes_1.CLS_TOOLBAR);
        };
        ToolbarRenderer.prototype.getPanel = function () {
            return this.toolbarPanel;
        };
        ToolbarRenderer.prototype.setPanel = function (panel) {
            this.toolbarPanel = panel;
        };
        ToolbarRenderer.prototype.destroy = function () {
            if (this.isDestroyed) {
                return;
            }
            if (this.tooltip && !this.tooltip.isDestroyed) {
                this.tooltip.destroy();
                var tooltipElements = document.querySelectorAll('[data-rte-id="' + this.parent.getID() + '"]');
                for (var i = 0; i < tooltipElements.length; i++) {
                    var tooltipEle = tooltipElements[i];
                    if (this.parent.getID() === tooltipEle.getAttribute('data-rte-id')) {
                        ej2_base_1.detach(tooltipEle);
                    }
                }
            }
            this.unWireEvent();
            this.mode = null;
            this.defaultColorPicker = null;
            this.toolbarPanel = null;
            this.currentElement = null;
            this.currentDropdown = null;
            this.tooltip = null;
            this.tooltipTargetEle = null;
            this.isDestroyed = true;
        };
        return ToolbarRenderer;
    }());
    exports.ToolbarRenderer = ToolbarRenderer;
});