tnx-shared 5.3.265 → 5.3.267

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,105 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from "@angular/core";
3
+ import { FileObjectService } from "../components/file-explorer/services/file-object.service";
4
+ import { CommonService } from "./common.service";
5
+ import { TemplateInstanceService } from "./templateinstance.service";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./common.service";
8
+ import * as i2 from "./templateinstance.service";
9
+ import * as i3 from "../components/file-explorer/services/file-object.service";
10
+ export class LatexService {
11
+ constructor(_commonService, _templateInstanceService, _fileObjectService) {
12
+ this._commonService = _commonService;
13
+ this._templateInstanceService = _templateInstanceService;
14
+ this._fileObjectService = _fileObjectService;
15
+ }
16
+ // replace latex to image
17
+ replaceLatexData(data, oldData, fields, fontSize, ignoreCheckEdited = false) {
18
+ var _a;
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ try {
21
+ for (const field of fields) {
22
+ const pattern = /\\\(.*?\\\)|\$\$.*?\$\$|\$.*?\$|\\\[.*?\\\]/gm;
23
+ const patternChild = /\\\(|\\\)|\$\$|\$\$|\$|\$|\\\[|\\\]/gm;
24
+ if (data[field] && data[field] != oldData[field] || ignoreCheckEdited) {
25
+ let temp = data[field];
26
+ const lstLatex = data[field].match(pattern);
27
+ const lstLatexDistint = lstLatex === null || lstLatex === void 0 ? void 0 : lstLatex.filter((current, index, self) => self.indexOf(current) === index);
28
+ if (!(lstLatexDistint === null || lstLatexDistint === void 0 ? void 0 : lstLatexDistint.length)) {
29
+ data[field + 'Print'] = temp;
30
+ continue;
31
+ }
32
+ for (const latexItem of lstLatexDistint) {
33
+ const latex = latexItem.replace(patternChild, '');
34
+ const base64 = yield this._templateInstanceService.laTexToBase64Image(latex, fontSize);
35
+ if (!base64.success) {
36
+ return false;
37
+ }
38
+ const imageName = 'latex.png';
39
+ const imageBlob = this._commonService.dataURItoBlob(base64.data.replace('data:image/png;base64,', ''));
40
+ const imageFile = new File([imageBlob], imageName, { type: 'image/png' });
41
+ const uploadFile = yield this._fileObjectService.uploadWithByteArray(imageFile);
42
+ if (!uploadFile) {
43
+ return false;
44
+ }
45
+ let preIndex = temp.indexOf(latexItem);
46
+ if (preIndex < 0) {
47
+ continue;
48
+ }
49
+ const lstLatexSame = lstLatex.filter(x => x == latexItem);
50
+ for (let i = 0; i < lstLatexSame.length; i++) {
51
+ let index = temp.indexOf(latexItem, preIndex + i);
52
+ const alignCenter = ((_a = latexItem.match(/\$\$|\$\$|\\\[|\\\]/gm)) === null || _a === void 0 ? void 0 : _a.length) > 0;
53
+ let image = `<img src="${this._fileObjectService.getUrlImage(uploadFile)}" >`;
54
+ if (!fontSize) {
55
+ image = `<img src="${this._fileObjectService.getUrlImage(uploadFile)}" height="16.32px">`;
56
+ }
57
+ if (alignCenter) {
58
+ const lastIndexOfParagraph = temp.substring(0, index).lastIndexOf('<p');
59
+ if (lastIndexOfParagraph < 0) {
60
+ image = `<p style="text-align: center;"><img src="${this._fileObjectService.getUrlImage(uploadFile)}" ></p>`;
61
+ if (!fontSize) {
62
+ image = `<p style="text-align: center;"><img src="${this._fileObjectService.getUrlImage(uploadFile)}" height="16.32px" ></p>`;
63
+ }
64
+ }
65
+ else {
66
+ image = `<img src="${this._fileObjectService.getUrlImage(uploadFile)}" >`;
67
+ if (!fontSize) {
68
+ image = `<img src="${this._fileObjectService.getUrlImage(uploadFile)}" height="16.32px" >`;
69
+ }
70
+ const styleIndex = temp.substring(0, index).lastIndexOf('<p style=');
71
+ if (styleIndex < 0) {
72
+ temp = temp.substring(0, lastIndexOfParagraph + 2) + ' style="text-align: center;"' + temp.substring(lastIndexOfParagraph + 2);
73
+ }
74
+ else {
75
+ temp = temp.substring(0, styleIndex + 10) + 'text-align: center;' + temp.substring(styleIndex + 10);
76
+ }
77
+ }
78
+ }
79
+ index = temp.indexOf(latexItem);
80
+ temp = temp.substring(0, index) + image + temp.substring(index + latexItem.length);
81
+ }
82
+ }
83
+ data[field + 'Print'] = temp;
84
+ }
85
+ }
86
+ return true;
87
+ }
88
+ catch (_b) {
89
+ return false;
90
+ }
91
+ });
92
+ }
93
+ }
94
+ LatexService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LatexService_Factory() { return new LatexService(i0.ɵɵinject(i1.CommonService), i0.ɵɵinject(i2.TemplateInstanceService), i0.ɵɵinject(i3.FileObjectService)); }, token: LatexService, providedIn: "root" });
95
+ LatexService.decorators = [
96
+ { type: Injectable, args: [{
97
+ providedIn: "root",
98
+ },] }
99
+ ];
100
+ LatexService.ctorParameters = () => [
101
+ { type: CommonService },
102
+ { type: TemplateInstanceService },
103
+ { type: FileObjectService }
104
+ ];
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF0ZXguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9zZXJ2aWNlcy9sYXRleC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFLckUsTUFBTSxPQUFPLFlBQVk7SUFFckIsWUFDWSxjQUE2QixFQUM3Qix3QkFBaUQsRUFDakQsa0JBQXFDO1FBRnJDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDakQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtJQUVqRCxDQUFDO0lBQ0QseUJBQXlCO0lBQ25CLGdCQUFnQixDQUFDLElBQVEsRUFBRSxPQUFXLEVBQUUsTUFBZ0IsRUFBRSxRQUFpQixFQUFFLGlCQUFpQixHQUFHLEtBQUs7OztZQUN4RyxJQUFJO2dCQUNBLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO29CQUN4QixNQUFNLE9BQU8sR0FBRywrQ0FBK0MsQ0FBQztvQkFDaEUsTUFBTSxZQUFZLEdBQUcsdUNBQXVDLENBQUM7b0JBQzdELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksaUJBQWlCLEVBQUU7d0JBQ25FLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFD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LENBQUM7NkJBQ3RGO3lCQUNKO3dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUNoQztpQkFDSjtnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNmO1lBQUMsV0FBTTtnQkFDSixPQUFPLEtBQUssQ0FBQzthQUNoQjs7S0FDSjs7OztZQXJGSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQUxRLGFBQWE7WUFDYix1QkFBdUI7WUFGdkIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGaWxlT2JqZWN0U2VydmljZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZVwiO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gXCIuL2NvbW1vbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZUluc3RhbmNlU2VydmljZSB9IGZyb20gXCIuL3RlbXBsYXRlaW5zdGFuY2Uuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIExhdGV4U2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2U6IFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2VcbiAgICAgICAgKSB7XG4gICAgfVxuICAgIC8vIHJlcGxhY2UgbGF0ZXggdG8gaW1hZ2VcbiAgICBhc3luYyByZXBsYWNlTGF0ZXhEYXRhKGRhdGE6YW55LCBvbGREYXRhOmFueSwgZmllbGRzOiBzdHJpbmdbXSwgZm9udFNpemU/OiBudW1iZXIsIGlnbm9yZUNoZWNrRWRpdGVkID0gZmFsc2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IC9cXFxcXFwoLio/XFxcXFxcKXxcXCRcXCQuKj9cXCRcXCR8XFwkLio/XFwkfFxcXFxcXFsuKj9cXFxcXFxdL2dtO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5DaGlsZCA9IC9cXFxcXFwofFxcXFxcXCl8XFwkXFwkfFxcJFxcJHxcXCR8XFwkfFxcXFxcXFt8XFxcXFxcXS9nbTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtmaWVsZF0gJiYgZGF0YVtmaWVsZF0gIT0gb2xkRGF0YVtmaWVsZF0gfHwgaWdub3JlQ2hlY2tFZGl0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBkYXRhW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbHN0TGF0ZXggPSBkYXRhW2ZpZWxkXS5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbHN0TGF0ZXhEaXN0aW50ID0gbHN0TGF0ZXg/LmZpbHRlcigoY3VycmVudCwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZihjdXJyZW50KSA9PT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWxzdExhdGV4RGlzdGludD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkICsgJ1ByaW50J10gPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxhdGV4SXRlbSBvZiBsc3RMYXRleERpc3RpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhdGV4ID0gbGF0ZXhJdGVtLnJlcGxhY2UocGF0dGVybkNoaWxkLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCB0aGlzLl90ZW1wbGF0ZUluc3RhbmNlU2VydmljZS5sYVRleFRvQmFzZTY0SW1hZ2UobGF0ZXgsIGZvbnRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZTY0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlTmFtZSA9ICdsYXRleC5wbmcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VCbG9iID0gdGhpcy5fY29tbW9uU2VydmljZS5kYXRhVVJJdG9CbG9iKGJhc2U2NC5kYXRhLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VGaWxlID0gbmV3IEZpbGUoW2ltYWdlQmxvYl0sIGltYWdlTmFtZSwgeyB0eXBlOiAnaW1hZ2UvcG5nJyB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkRmlsZSA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLnVwbG9hZFdpdGhCeXRlQXJyYXkoaW1hZ2VGaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXBsb2FkRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByZUluZGV4ID0gdGVtcC5pbmRleE9mKGxhdGV4SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsc3RMYXRleFNhbWUgPSBsc3RMYXRleC5maWx0ZXIoeCA9PiB4ID09IGxhdGV4SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxzdExhdGV4U2FtZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRlbXAuaW5kZXhPZihsYXRleEl0ZW0sIHByZUluZGV4ICsgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxpZ25DZW50ZXIgPSBsYXRleEl0ZW0ubWF0Y2goL1xcJFxcJHxcXCRcXCR8XFxcXFxcW3xcXFxcXFxdL2dtKT8ubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2UgPSBgPGltZyBzcmM9XCIke3RoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEZpbGUpfVwiID5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9udFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBgPGltZyBzcmM9XCIke3RoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEZpbGUpfVwiIGhlaWdodD1cIjE2LjMycHhcIj5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxpZ25DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4T2ZQYXJhZ3JhcGggPSB0ZW1wLnN1YnN0cmluZygwLCBpbmRleCkubGFzdEluZGV4T2YoJzxwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0SW5kZXhPZlBhcmFncmFwaCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlID0gYDxwIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPjxpbWcgc3JjPVwiJHt0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRVcmxJbWFnZSh1cGxvYWRGaWxlKX1cIiA+PC9wPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBgPHAgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PGltZyBzcmM9XCIke3RoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEZpbGUpfVwiIGhlaWdodD1cIjE2LjMycHhcIiA+PC9wPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IGA8aW1nIHNyYz1cIiR7dGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXJsSW1hZ2UodXBsb2FkRmlsZSl9XCIgPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBgPGltZyBzcmM9XCIke3RoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKHVwbG9hZEZpbGUpfVwiIGhlaWdodD1cIjE2LjMycHhcIiA+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlSW5kZXggPSB0ZW1wLnN1YnN0cmluZygwLCBpbmRleCkubGFzdEluZGV4T2YoJzxwIHN0eWxlPScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXAuc3Vic3RyaW5nKDAsIGxhc3RJbmRleE9mUGFyYWdyYXBoICsgMikgKyAnIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiJyArIHRlbXAuc3Vic3RyaW5nKGxhc3RJbmRleE9mUGFyYWdyYXBoICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wLnN1YnN0cmluZygwLCBzdHlsZUluZGV4ICsgMTApICsgJ3RleHQtYWxpZ246IGNlbnRlcjsnICsgdGVtcC5zdWJzdHJpbmcoc3R5bGVJbmRleCArIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHRlbXAuaW5kZXhPZihsYXRleEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wLnN1YnN0cmluZygwLCBpbmRleCkgKyBpbWFnZSArIHRlbXAuc3Vic3RyaW5nKGluZGV4ICsgbGF0ZXhJdGVtLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVtmaWVsZCArICdQcmludCddID0gdGVtcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=