all files / block-manager/renderer/content/ content-renderer.js

97.78% Statements 88/90
89.13% Branches 41/46
100% Functions 12/12
97.73% Lines 86/88
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   1390×   7439× 7439× 6901× 6901×   6901× 6304× 6304× 6304× 6304× 6304×     597× 3167×         538× 538× 538×         7439×   9471×   8485× 8485×   418× 418×   283× 283×   285× 285×   9471× 9471×         9023× 538× 538×   8485× 555×   8485× 8485× 5887× 5887×     2598× 2598×     418× 418× 418× 418×     418× 418×   283× 296× 283×   280× 280× 280× 280× 280×               280×           280×                     280×     280× 280×   280×     280× 280× 280× 280× 280×   285× 285× 309× 285×   284×                 284× 284× 284×        
define(["require", "exports", "../../../common/utils/dom", "../../../common/utils/common", "../../../models/enums", "@syncfusion/ej2-base"], function (require, exports, dom_1, common_1, enums_1, ej2_base_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var ContentRenderer = (function () {
        function ContentRenderer(manager) {
            this.parent = manager;
        }
        ContentRenderer.prototype.renderContent = function (block, contentElement) {
            var _this = this;
            if (block.content && block.content.length > 0) {
                Eif (contentElement) {
                    contentElement.innerHTML = '';
                }
                if (block.content.length === 1) {
                    var props = block.content[0].properties;
                    var styles = props ? props.styles : {};
                    var isEmptyStyles = !styles || Object.keys(styles).length === 0;
                    var isDirectText = isEmptyStyles && block.content[0].contentType === enums_1.ContentType.Text;
                    this.invokeContentRenderer(block, block.content[0], contentElement, isDirectText);
                }
                else {
                    block.content.forEach(function (content) {
                        _this.invokeContentRenderer(block, content, contentElement);
                    });
                }
            }
            else {
                this.renderText(null, contentElement, true);
                Eif (contentElement) {
                    contentElement.innerHTML = (!block.properties.placeholder)
                        ? '<br>'
                        : contentElement.innerHTML;
                }
            }
            this.parent.stateManager.updateManagerBlocks();
        };
        ContentRenderer.prototype.invokeContentRenderer = function (block, contentModel, contentElement, isDirectText) {
            switch (contentModel.contentType) {
                case enums_1.ContentType.Text:
                    this.renderText(contentModel, contentElement, isDirectText);
                    break;
                case enums_1.ContentType.Link:
                    this.renderAnchor(contentModel, contentElement);
                    break;
                case enums_1.ContentType.Mention:
                    this.renderMention(contentModel, contentElement);
                    break;
                case enums_1.ContentType.Label:
                    this.renderLabel(contentModel, contentElement);
                    break;
            }
            Eif (contentElement) {
                contentElement.innerHTML = (!block.properties.placeholder && !contentModel.content)
                    ? '<br>'
                    : contentElement.innerHTML;
            }
        };
        ContentRenderer.prototype.renderText = function (content, contentElement, isDirectText) {
            if (!content) {
                contentElement.textContent = '';
                return;
            }
            if (contentElement && contentElement.id) {
                contentElement.removeAttribute('id');
            }
            content.content = this.parent.serializeValue(content.content);
            if (isDirectText) {
                contentElement.id = content.id;
                contentElement.textContent = content.content;
            }
            else {
                var node = dom_1.createFormattingElement(content);
                contentElement.appendChild(node);
            }
        };
        ContentRenderer.prototype.renderAnchor = function (content, contentElement) {
            var props = content.properties;
            props.url = common_1.normalizeUrl(props.url);
            content.content = this.parent.serializeValue(content.content);
            var linkData = {
                url: props.url
            };
            var formattedElement = dom_1.createFormattingElement(content, linkData);
            contentElement.appendChild(formattedElement);
        };
        ContentRenderer.prototype.renderMention = function (content, contentElement) {
            var props = content.properties;
            var userModel = this.parent.users.find(function (user) { return user.id.toLowerCase() === props.userId; });
            if (!userModel) {
                return;
            }
            var name = userModel.user.trim();
            var initials = common_1.getUserInitials(name);
            var backgroundColor = userModel.avatarBgColor || common_1.getAutoAvatarColor(userModel.id);
            var avatarUrl = userModel.avatarUrl || '';
            var wrapper = ej2_base_1.createElement('div', {
                id: content.id,
                className: 'e-mention-chip e-user-chip',
                attrs: {
                    'data-user-id': userModel.id,
                    contenteditable: 'false'
                }
            });
            var avatar = ej2_base_1.createElement('div', {
                className: 'em-avatar',
                attrs: {
                    style: "background-color: " + backgroundColor + ";"
                }
            });
            Iif (avatarUrl) {
                var avatarImg = ej2_base_1.createElement('img', {
                    className: 'em-img',
                    attrs: {
                        src: avatarUrl,
                        alt: userModel.user
                    }
                });
                avatar.appendChild(avatarImg);
            }
            else {
                var initial = ej2_base_1.createElement('div', {
                    className: 'em-initial'
                });
                initial.innerText = initials;
                avatar.appendChild(initial);
            }
            var userNameContent = ej2_base_1.createElement('div', {
                className: 'em-content'
            });
            userNameContent.innerText = userModel.user;
            content.content = userModel.user;
            wrapper.appendChild(avatar);
            wrapper.appendChild(userNameContent);
            contentElement.appendChild(wrapper);
        };
        ContentRenderer.prototype.renderLabel = function (content, contentElement) {
            var props = content.properties;
            var items = this.parent.labelSettings.items;
            var labelItem = items.find(function (item) { return item.id === props.labelId; });
            if (!labelItem) {
                return;
            }
            var labelChip = ej2_base_1.createElement('span', {
                id: content.id,
                className: 'e-mention-chip e-label-chip',
                styles: "background: " + labelItem.labelColor + ";color: " + common_1.getAccessibleTextColor(labelItem.labelColor) + ";",
                attrs: {
                    'data-label-id': labelItem.id,
                    contenteditable: 'false'
                }
            });
            labelChip.innerText = labelItem.groupBy + ": " + labelItem.text;
            content.content = labelItem.groupBy + ": " + labelItem.text;
            contentElement.appendChild(labelChip);
        };
        return ContentRenderer;
    }());
    exports.ContentRenderer = ContentRenderer;
});