truly-ui
Version:
Web Components for Desktop Applications.
92 lines • 15.3 kB
JavaScript
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