UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

92 lines 15.3 kB
import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; export class EditorService { constructor(domSanitizer) { this.domSanitizer = domSanitizer; this.compileSuject = new Subject(); } decompile(html, tagsContent, fieldsContent) { const htmlParsed = new DOMParser().parseFromString(html, 'text/html'); return new Promise((resolve) => { const tagsDom = []; const fieldsDom = []; tagsContent.forEach((item) => { tagsDom.push({ id: item.tag, value: item.value, element: htmlParsed.getElementById(item.tag), }); }); fieldsContent.forEach((item) => { fieldsDom.push({ id: item.field, value: item.value, element: htmlParsed.getElementById(item.field), }); }); for (let i = 0; i < tagsDom.length; i++) { if (tagsDom[i].element) { const element = new DOMParser() .parseFromString(`<span id="${tagsDom[i].id}" class="ui-hashtag">${tagsDom[i].id}</span>`, 'text/html').body.firstChild; tagsDom[i].element.insertAdjacentElement('afterend', element); tagsDom[i].element.remove(); } } for (let i = 0; i < fieldsDom.length; i++) { if (fieldsDom[i].element) { const element = new DOMParser() .parseFromString(`<input id="${fieldsDom[i].id}" class="ui-field" value="${this.getFieldValue(fieldsDom[i])}">`, 'text/html').body.firstChild; fieldsDom[i].element.insertAdjacentElement('afterend', element); fieldsDom[i].element.remove(); } } resolve(this.domSanitizer.bypassSecurityTrustHtml(htmlParsed.body.innerHTML)); }); } getFieldValue(field) { if (field.element.innerText) { return field.element.innerText; } return field.value || ' '; } compile(html, tagsContent, fieldsContent) { const htmlParsed = new DOMParser().parseFromString(html, 'text/html').body; return new Promise((resolve) => { const tags = htmlParsed.querySelectorAll('.ui-hashtag'); for (let i = 0; i < tags.length; i++) { const tagSelected = tagsContent.find(item => item.tag === this.getAttributeValue(tags[i].attributes, 'id')); if (tagSelected) { const element = new DOMParser() .parseFromString(`<strong id="${tagSelected.tag}">${tagSelected.value}</strong>`, 'text/html').body.firstChild; tags[i].insertAdjacentElement('afterend', element); tags[i].remove(); } } const fields = htmlParsed.querySelectorAll('.ui-field'); for (let i = 0; i < fields.length; i++) { const fieldSelected = fieldsContent.find(item => item.field === this.getAttributeValue(fields[i].attributes, 'id')); const fieldValue = this.getAttributeValue(fields[i].attributes, 'value') || ' '; const element = new DOMParser() .parseFromString(`<strong id="${fieldSelected.field}">${fieldValue}</strong>`, 'text/html').body.firstChild; fields[i].insertAdjacentElement('afterend', element); fields[i].remove(); } resolve(this.domSanitizer.bypassSecurityTrustHtml(htmlParsed.innerHTML)); }); } getAttributeValue(attributes, name) { for (let i = 0; i < attributes.length; i++) { if (attributes[i].name === name) { return attributes[i].value; } } } } /** @nocollapse */ EditorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorService, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable }); /** @nocollapse */ EditorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnVseS11aS9zcmMvY29tcG9uZW50cy9lZGl0b3Ivc2VydmljZXMvZWRpdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFNN0IsTUFBTSxPQUFPLGFBQWE7SUFJeEIsWUFBb0IsWUFBMEI7UUFBMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFGdkMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBR3JDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWSxFQUFFLFdBQXlCLEVBQUUsYUFBNkI7UUFDOUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixPQUFPLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUM3QyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDN0IsU0FBUyxDQUFDLElBQUksQ0FBQztv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QkFDOUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3BCO1lBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUk7UUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDL0IsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQzVCO1NBQ0Y7SUFDSCxDQUFDOzs4SEF6RlUsYUFBYTtrSUFBYixhQUFhOzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7VGFnQ29udGVudH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWctY29udGVudCc7XG5pbXBvcnQge0ZpZWxkQ29udGVudH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9maWVsZC1jb250ZW50JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVkaXRvclNlcnZpY2Uge1xuXG4gIHB1YmxpYyBjb21waWxlU3VqZWN0ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XG4gIH1cblxuICBkZWNvbXBpbGUoaHRtbDogc3RyaW5nLCB0YWdzQ29udGVudDogVGFnQ29udGVudFtdLCBmaWVsZHNDb250ZW50OiBGaWVsZENvbnRlbnRbXSkge1xuICAgIGNvbnN0IGh0bWxQYXJzZWQgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHRhZ3NEb20gPSBbXTtcbiAgICAgIGNvbnN0IGZpZWxkc0RvbSA9IFtdO1xuICAgICAgdGFnc0NvbnRlbnQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICB0YWdzRG9tLnB1c2goe1xuICAgICAgICAgIGlkOiBpdGVtLnRhZyxcbiAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICBlbGVtZW50OiBodG1sUGFyc2VkLmdldEVsZW1lbnRCeUlkKGl0ZW0udGFnKSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGZpZWxkc0NvbnRlbnQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBmaWVsZHNEb20ucHVzaCh7XG4gICAgICAgICAgaWQ6IGl0ZW0uZmllbGQsXG4gICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgZWxlbWVudDogaHRtbFBhcnNlZC5nZXRFbGVtZW50QnlJZChpdGVtLmZpZWxkKSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnc0RvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGFnc0RvbVtpXS5lbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBET01QYXJzZXIoKVxuICAgICAgICAgICAgLnBhcnNlRnJvbVN0cmluZyhgPHNwYW4gaWQ9XCIke3RhZ3NEb21baV0uaWR9XCIgY2xhc3M9XCJ1aS1oYXNodGFnXCI+JHt0YWdzRG9tW2ldLmlkfTwvc3Bhbj5gLCAndGV4dC9odG1sJykuYm9keS5maXJzdENoaWxkO1xuICAgICAgICAgIHRhZ3NEb21baV0uZWxlbWVudC5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyZW5kJywgPEVsZW1lbnQ+ZWxlbWVudCk7XG4gICAgICAgICAgdGFnc0RvbVtpXS5lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkc0RvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZmllbGRzRG9tW2ldLmVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERPTVBhcnNlcigpXG4gICAgICAgICAgICAucGFyc2VGcm9tU3RyaW5nKGA8aW5wdXQgaWQ9XCIke2ZpZWxkc0RvbVtpXS5pZH1cIiBjbGFzcz1cInVpLWZpZWxkXCIgdmFsdWU9XCIke3RoaXMuZ2V0RmllbGRWYWx1ZShmaWVsZHNEb21baV0pfVwiPmAsXG4gICAgICAgICAgICAgICd0ZXh0L2h0bWwnKS5ib2R5LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgZmllbGRzRG9tW2ldLmVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIDxFbGVtZW50PmVsZW1lbnQpO1xuICAgICAgICAgIGZpZWxkc0RvbVtpXS5lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXNvbHZlKHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWxQYXJzZWQuYm9keS5pbm5lckhUTUwpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmllbGRWYWx1ZSggZmllbGQgKSB7XG4gICAgaWYgKCBmaWVsZC5lbGVtZW50LmlubmVyVGV4dCApIHtcbiAgICAgIHJldHVybiBmaWVsZC5lbGVtZW50LmlubmVyVGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlIHx8ICcgJztcbiAgfVxuXG4gIGNvbXBpbGUoaHRtbDogc3RyaW5nLCB0YWdzQ29udGVudDogVGFnQ29udGVudFtdLCBmaWVsZHNDb250ZW50OiBGaWVsZENvbnRlbnRbXSkge1xuICAgIGNvbnN0IGh0bWxQYXJzZWQgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKS5ib2R5O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgICBjb25zdCB0YWdzID0gaHRtbFBhcnNlZC5xdWVyeVNlbGVjdG9yQWxsKCcudWktaGFzaHRhZycpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRhZ1NlbGVjdGVkID0gdGFnc0NvbnRlbnQuZmluZChpdGVtID0+IGl0ZW0udGFnID09PSB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKHRhZ3NbaV0uYXR0cmlidXRlcywgJ2lkJykpO1xuICAgICAgICBpZiAodGFnU2VsZWN0ZWQpIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERPTVBhcnNlcigpXG4gICAgICAgICAgICAucGFyc2VGcm9tU3RyaW5nKGA8c3Ryb25nIGlkPVwiJHt0YWdTZWxlY3RlZC50YWd9XCI+JHt0YWdTZWxlY3RlZC52YWx1ZX08L3N0cm9uZz5gLCAndGV4dC9odG1sJykuYm9keS5maXJzdENoaWxkO1xuICAgICAgICAgIHRhZ3NbaV0uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIDxFbGVtZW50PmVsZW1lbnQpO1xuICAgICAgICAgIHRhZ3NbaV0ucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZmllbGRzID0gaHRtbFBhcnNlZC5xdWVyeVNlbGVjdG9yQWxsKCcudWktZmllbGQnKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkU2VsZWN0ZWQgPSBmaWVsZHNDb250ZW50LmZpbmQoaXRlbSA9PiBpdGVtLmZpZWxkID09PSB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKGZpZWxkc1tpXS5hdHRyaWJ1dGVzLCAnaWQnKSk7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKGZpZWxkc1tpXS5hdHRyaWJ1dGVzLCAndmFsdWUnKSB8fCAnICc7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRE9NUGFyc2VyKClcbiAgICAgICAgICAucGFyc2VGcm9tU3RyaW5nKGA8c3Ryb25nIGlkPVwiJHtmaWVsZFNlbGVjdGVkLmZpZWxkfVwiPiR7ZmllbGRWYWx1ZX08L3N0cm9uZz5gLCAndGV4dC9odG1sJykuYm9keS5maXJzdENoaWxkO1xuICAgICAgICBmaWVsZHNbaV0uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIDxFbGVtZW50PmVsZW1lbnQpO1xuICAgICAgICBmaWVsZHNbaV0ucmVtb3ZlKCk7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUodGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbFBhcnNlZC5pbm5lckhUTUwpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlcywgbmFtZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlc1tpXS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuIl19