croco-html 0.1.1 → 0.1.3

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.
Files changed (183) hide show
  1. package/croco-html.d.ts +5 -0
  2. package/esm2020/croco-html.mjs +5 -0
  3. package/esm2020/lib/components/add-files-btn/add-files-btn.component.mjs +53 -0
  4. package/esm2020/lib/components/editor/external-video-block/external-video-block.component.mjs +45 -0
  5. package/esm2020/lib/components/editor/html-raw-editor/html-raw-editor.component.mjs +25 -0
  6. package/esm2020/lib/components/editor/image-editor/image-editor.component.mjs +50 -0
  7. package/esm2020/lib/components/editor/index.mjs +8 -0
  8. package/esm2020/lib/components/editor/main-editor/main-editor.component.mjs +76 -0
  9. package/esm2020/lib/components/editor/main-editor-block/main-editor-block.component.mjs +41 -0
  10. package/esm2020/lib/components/editor/text-editor/text-editor.component.mjs +34 -0
  11. package/esm2020/lib/components/editor/visual-editor/visual-editor.component.mjs +161 -0
  12. package/esm2020/lib/components/file-id-select/file-id-select.component.mjs +62 -0
  13. package/esm2020/lib/components/index.mjs +6 -0
  14. package/esm2020/lib/components/upload-files-btn/upload-files-btn.component.mjs +54 -0
  15. package/esm2020/lib/components/xml-tags/index.mjs +9 -0
  16. package/esm2020/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.mjs +43 -0
  17. package/esm2020/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.mjs +17 -0
  18. package/esm2020/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.mjs +18 -0
  19. package/esm2020/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.mjs +16 -0
  20. package/esm2020/lib/components/xml-tags/xml-tag-rich-text-view/xml-tag-rich-text-view.component.mjs +20 -0
  21. package/esm2020/lib/components/xml-tags/xml-tag-table-view/xml-tag-table-view.component.mjs +20 -0
  22. package/esm2020/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.mjs +17 -0
  23. package/esm2020/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.mjs +21 -0
  24. package/esm2020/lib/croco-html.module.mjs +90 -0
  25. package/esm2020/lib/extensions/AngularMaterialTableMethods.mjs +64 -0
  26. package/esm2020/lib/extensions/BodyTagsExtensions.mjs +120 -0
  27. package/esm2020/lib/extensions/BootstrapTableMethods.mjs +67 -0
  28. package/esm2020/lib/extensions/HtmlExtractionMethods.mjs +63 -0
  29. package/esm2020/lib/extensions/HtmlRawTagDataConsts.mjs +4 -0
  30. package/esm2020/lib/extensions/ImageMethods.mjs +24 -0
  31. package/esm2020/lib/extensions/InterfaceBlock.mjs +2 -0
  32. package/esm2020/lib/extensions/TableBuilder.mjs +35 -0
  33. package/esm2020/lib/extensions/TableMethods.mjs +108 -0
  34. package/esm2020/lib/extensions/TextMethods.mjs +29 -0
  35. package/esm2020/lib/extensions/TextSimpleMethods.mjs +77 -0
  36. package/esm2020/lib/extensions/VideoMethods.mjs +20 -0
  37. package/esm2020/lib/extensions/XmlExtensions.mjs +26 -0
  38. package/esm2020/lib/extensions/index.mjs +13 -0
  39. package/esm2020/lib/index.mjs +113 -0
  40. package/esm2020/lib/models/models.mjs +2 -0
  41. package/esm2020/lib/pipes/RichTextToHtmlPipe.mjs +26 -0
  42. package/esm2020/lib/pipes/TagToSpanPipe.mjs +16 -0
  43. package/esm2020/lib/pipes/ToHtmlBodyTagsPipe.mjs +17 -0
  44. package/esm2020/lib/pipes/index.mjs +5 -0
  45. package/esm2020/lib/pipes/to-preview.pipe.mjs +17 -0
  46. package/esm2020/lib/services/file-upload.service.mjs +40 -0
  47. package/esm2020/lib/services/files-query.service.mjs +27 -0
  48. package/esm2020/public-api.mjs +8 -0
  49. package/fesm2015/croco-html.mjs +1565 -0
  50. package/fesm2015/croco-html.mjs.map +1 -0
  51. package/fesm2020/croco-html.mjs +1568 -0
  52. package/fesm2020/croco-html.mjs.map +1 -0
  53. package/lib/components/add-files-btn/add-files-btn.component.d.ts +18 -0
  54. package/lib/components/editor/external-video-block/external-video-block.component.d.ts +19 -0
  55. package/lib/components/editor/html-raw-editor/html-raw-editor.component.d.ts +11 -0
  56. package/lib/components/editor/image-editor/image-editor.component.d.ts +20 -0
  57. package/lib/components/editor/index.d.ts +7 -0
  58. package/lib/components/editor/main-editor/main-editor.component.d.ts +28 -0
  59. package/lib/components/editor/main-editor-block/main-editor-block.component.d.ts +16 -0
  60. package/lib/components/editor/text-editor/text-editor.component.d.ts +14 -0
  61. package/lib/components/editor/visual-editor/visual-editor.component.d.ts +43 -0
  62. package/lib/components/file-id-select/file-id-select.component.d.ts +30 -0
  63. package/lib/components/index.d.ts +5 -0
  64. package/lib/components/upload-files-btn/upload-files-btn.component.d.ts +24 -0
  65. package/{src/lib/components/xml-tags/index.ts → lib/components/xml-tags/index.d.ts} +8 -8
  66. package/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.d.ts +17 -0
  67. package/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.d.ts +10 -0
  68. package/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.d.ts +10 -0
  69. package/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.d.ts +7 -0
  70. package/lib/components/xml-tags/xml-tag-rich-text-view/xml-tag-rich-text-view.component.d.ts +10 -0
  71. package/lib/components/xml-tags/xml-tag-table-view/xml-tag-table-view.component.d.ts +7 -0
  72. package/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.d.ts +10 -0
  73. package/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.d.ts +8 -0
  74. package/lib/croco-html.module.d.ts +60 -0
  75. package/lib/extensions/AngularMaterialTableMethods.d.ts +10 -0
  76. package/lib/extensions/BodyTagsExtensions.d.ts +10 -0
  77. package/lib/extensions/BootstrapTableMethods.d.ts +9 -0
  78. package/lib/extensions/HtmlExtractionMethods.d.ts +69 -0
  79. package/lib/extensions/HtmlRawTagDataConsts.d.ts +3 -0
  80. package/lib/extensions/ImageMethods.d.ts +17 -0
  81. package/lib/extensions/InterfaceBlock.d.ts +4 -0
  82. package/lib/extensions/TableBuilder.d.ts +5 -0
  83. package/lib/extensions/TableMethods.d.ts +58 -0
  84. package/lib/extensions/TextMethods.d.ts +19 -0
  85. package/lib/extensions/TextSimpleMethods.d.ts +23 -0
  86. package/lib/extensions/VideoMethods.d.ts +19 -0
  87. package/lib/extensions/XmlExtensions.d.ts +5 -0
  88. package/lib/extensions/index.d.ts +10 -0
  89. package/lib/index.d.ts +20 -0
  90. package/{src/lib/models/models.ts → lib/models/models.d.ts} +1 -2
  91. package/lib/pipes/RichTextToHtmlPipe.d.ts +8 -0
  92. package/lib/pipes/TagToSpanPipe.d.ts +7 -0
  93. package/lib/pipes/ToHtmlBodyTagsPipe.d.ts +8 -0
  94. package/{src/lib/pipes/index.ts → lib/pipes/index.d.ts} +0 -0
  95. package/lib/pipes/to-preview.pipe.d.ts +8 -0
  96. package/lib/services/file-upload.service.d.ts +23 -0
  97. package/lib/services/files-query.service.d.ts +42 -0
  98. package/package.json +34 -14
  99. package/{src/public-api.ts → public-api.d.ts} +0 -4
  100. package/karma.conf.js +0 -44
  101. package/ng-package.json +0 -7
  102. package/src/lib/components/add-files-btn/add-files-btn.component.css +0 -0
  103. package/src/lib/components/add-files-btn/add-files-btn.component.html +0 -14
  104. package/src/lib/components/add-files-btn/add-files-btn.component.ts +0 -61
  105. package/src/lib/components/editor/external-video-block/external-video-block.component.css +0 -0
  106. package/src/lib/components/editor/external-video-block/external-video-block.component.html +0 -27
  107. package/src/lib/components/editor/external-video-block/external-video-block.component.ts +0 -45
  108. package/src/lib/components/editor/html-raw-editor/html-raw-editor.component.css +0 -0
  109. package/src/lib/components/editor/html-raw-editor/html-raw-editor.component.html +0 -17
  110. package/src/lib/components/editor/html-raw-editor/html-raw-editor.component.ts +0 -22
  111. package/src/lib/components/editor/image-editor/image-editor.component.css +0 -7
  112. package/src/lib/components/editor/image-editor/image-editor.component.html +0 -54
  113. package/src/lib/components/editor/image-editor/image-editor.component.ts +0 -52
  114. package/src/lib/components/editor/index.ts +0 -7
  115. package/src/lib/components/editor/main-editor/main-editor.component.css +0 -48
  116. package/src/lib/components/editor/main-editor/main-editor.component.html +0 -39
  117. package/src/lib/components/editor/main-editor/main-editor.component.ts +0 -71
  118. package/src/lib/components/editor/main-editor-block/main-editor-block.component.css +0 -0
  119. package/src/lib/components/editor/main-editor-block/main-editor-block.component.html +0 -41
  120. package/src/lib/components/editor/main-editor-block/main-editor-block.component.ts +0 -39
  121. package/src/lib/components/editor/text-editor/text-editor.component.css +0 -0
  122. package/src/lib/components/editor/text-editor/text-editor.component.html +0 -39
  123. package/src/lib/components/editor/text-editor/text-editor.component.ts +0 -30
  124. package/src/lib/components/editor/visual-editor/visual-editor.component.css +0 -48
  125. package/src/lib/components/editor/visual-editor/visual-editor.component.html +0 -84
  126. package/src/lib/components/editor/visual-editor/visual-editor.component.ts +0 -180
  127. package/src/lib/components/file-id-select/file-id-select.component.css +0 -0
  128. package/src/lib/components/file-id-select/file-id-select.component.html +0 -39
  129. package/src/lib/components/file-id-select/file-id-select.component.ts +0 -75
  130. package/src/lib/components/index.ts +0 -5
  131. package/src/lib/components/upload-files-btn/upload-files-btn.component.css +0 -0
  132. package/src/lib/components/upload-files-btn/upload-files-btn.component.html +0 -2
  133. package/src/lib/components/upload-files-btn/upload-files-btn.component.ts +0 -57
  134. package/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.css +0 -15
  135. package/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.html +0 -8
  136. package/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.ts +0 -59
  137. package/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.css +0 -0
  138. package/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.html +0 -18
  139. package/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.ts +0 -19
  140. package/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.css +0 -0
  141. package/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.html +0 -25
  142. package/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.ts +0 -19
  143. package/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.css +0 -0
  144. package/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.html +0 -3
  145. package/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.ts +0 -14
  146. package/src/lib/components/xml-tags/xml-tag-rich-text-view/xml-tag-rich-text-view.component.css +0 -0
  147. package/src/lib/components/xml-tags/xml-tag-rich-text-view/xml-tag-rich-text-view.component.html +0 -2
  148. package/src/lib/components/xml-tags/xml-tag-rich-text-view/xml-tag-rich-text-view.component.ts +0 -19
  149. package/src/lib/components/xml-tags/xml-tag-table-view/xml-tag-table-view.component.css +0 -0
  150. package/src/lib/components/xml-tags/xml-tag-table-view/xml-tag-table-view.component.html +0 -9
  151. package/src/lib/components/xml-tags/xml-tag-table-view/xml-tag-table-view.component.ts +0 -15
  152. package/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.css +0 -0
  153. package/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.html +0 -21
  154. package/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.ts +0 -18
  155. package/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.css +0 -4
  156. package/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.html +0 -44
  157. package/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.ts +0 -17
  158. package/src/lib/croco-html.module.ts +0 -22
  159. package/src/lib/extensions/AngularMaterialTableMethods.ts +0 -87
  160. package/src/lib/extensions/BodyTagsExtensions.ts +0 -151
  161. package/src/lib/extensions/BootstrapTableMethods.ts +0 -87
  162. package/src/lib/extensions/HtmlExtractionMethods.ts +0 -78
  163. package/src/lib/extensions/HtmlRawTagDataConsts.ts +0 -3
  164. package/src/lib/extensions/ImageMethods.ts +0 -37
  165. package/src/lib/extensions/InterfaceBlock.ts +0 -5
  166. package/src/lib/extensions/TableBuilder.ts +0 -50
  167. package/src/lib/extensions/TableMethods.ts +0 -175
  168. package/src/lib/extensions/TextMethods.ts +0 -51
  169. package/src/lib/extensions/TextSimpleMethods.ts +0 -120
  170. package/src/lib/extensions/VideoMethods.ts +0 -31
  171. package/src/lib/extensions/XmlExtensions.ts +0 -26
  172. package/src/lib/extensions/index.ts +0 -12
  173. package/src/lib/index.ts +0 -119
  174. package/src/lib/pipes/RichTextToHtmlPipe.ts +0 -25
  175. package/src/lib/pipes/TagToSpanPipe.ts +0 -10
  176. package/src/lib/pipes/ToHtmlBodyTagsPipe.ts +0 -14
  177. package/src/lib/pipes/to-preview.pipe.ts +0 -12
  178. package/src/lib/services/file-upload.service.ts +0 -56
  179. package/src/lib/services/files-query.service.ts +0 -72
  180. package/src/test.ts +0 -28
  181. package/tsconfig.lib.json +0 -20
  182. package/tsconfig.lib.prod.json +0 -10
  183. package/tsconfig.spec.json +0 -17
@@ -1,87 +0,0 @@
1
- import { InterfaceBlock } from "./InterfaceBlock";
2
- import { FileImageTag, FileImageTagDataConsts } from './ImageMethods';
3
- import { TableData, TableHeaderData, TableRowData } from './TableMethods';
4
- import { SimpleTextTag, TextTag } from './TextSimpleMethods';
5
-
6
- export class BootstrapTableMethods {
7
-
8
- static BuildTable(data: TableData): string {
9
- let result = `<table class="table table-bordered">`;
10
- result += this.BuildHeader(data.header);
11
- result += this.BuildBody(data.rows);
12
- result += "</table>";
13
-
14
- return result;
15
- }
16
-
17
- static BuildHeader(data: TableHeaderData) {
18
- if (data === null) {
19
- return "";
20
- }
21
-
22
- let result = "<thead>";
23
- result += "<tr>";
24
- for (let index = 0; index < data.columns.length; index++) {
25
- result += `<th>${data.columns[index]}</th>`;
26
- }
27
- result += "</tr>";
28
-
29
- result += "</thead>";
30
-
31
- return result;
32
- }
33
-
34
- static BuildBody(rows: TableRowData[]) {
35
- let result = "<tbody>";
36
-
37
- for (let i = 0; i < rows.length; i++) {
38
- const row = rows[i];
39
-
40
- result += "<tr>";
41
- for (let j = 0; j < row.columns.length; j++) {
42
- const col = row.columns[j];
43
-
44
- result += `<td class="align-middle">${this.BuildInnerTags(col.data.children)}</td>`;
45
- }
46
- result += "</tr>";
47
- }
48
-
49
- result += "</tbody>";
50
- return result;
51
- }
52
-
53
- static BuildInnerTags(tags: InterfaceBlock[]) {
54
- let result = "";
55
- for (let i = 0; i < tags.length; i++) {
56
- result += this.BuildInnerTag(tags[i]);
57
- }
58
-
59
- return result;
60
- }
61
-
62
- static BuildInnerTag(data: InterfaceBlock): string {
63
- if (data.type === FileImageTagDataConsts.TagName) {
64
- let fileImageTag = data as FileImageTag;
65
- return `<img src=${fileImageTag.data.src} class="mx-auto d-block img-fluid" />`;
66
- }
67
- else if(data.type === TextTag){
68
-
69
- let simpleTextTag = data as SimpleTextTag;
70
-
71
- var map = {
72
- ["left"]: "text-start",
73
- ["center"]: "text-center",
74
- ["right"]: "text-end"
75
- };
76
-
77
- if(!simpleTextTag.data.validationResult.isSucceeded){
78
- return `<span>Ошибка в тексте ${simpleTextTag.data.validationResult.message}</span>`;
79
- }
80
-
81
- return `<div class="${map[simpleTextTag.data.horizontalAlignment]}"><span>${simpleTextTag.data.html}</span></div>`;
82
- }
83
- else {
84
- return `<p>Тег ${data.type} не поддерживается</p>`;
85
- }
86
- }
87
- }
@@ -1,78 +0,0 @@
1
- import { ImageMethods } from "./ImageMethods";
2
- import { InterfaceBlock } from "./InterfaceBlock";
3
- import { TableMethods } from "./TableMethods";
4
- import { TextMethods } from "./TextMethods";
5
- import { GenericTextTag, TextSimpleMethods } from "./TextSimpleMethods";
6
- import { ExternalVideoTagDataConsts, VideoMethods } from "./VideoMethods";
7
-
8
- export class HtmlExtractionMethods {
9
-
10
-
11
- static ExtractHeaderTag(elem: HTMLElement, tagName: string): GenericTextTag {
12
-
13
- var data: GenericTextTag = TextSimpleMethods.ExtractTextTag(elem);
14
- data.type = tagName;
15
-
16
- return data;
17
- }
18
-
19
- static Extractors = {
20
- ["TEXT"]: (elem: HTMLElement) => TextSimpleMethods.ExtractTextTag(elem),
21
- ["FILE-IMAGE"]: (elem: HTMLElement) => ImageMethods.ExtractImage(elem),
22
- ["TABLE"]: (elem: HTMLElement) => TableMethods.getTableFromHtmlTag(elem as HTMLTableElement),
23
- ["RICH-TEXT"]: (elem: HTMLElement) => TextMethods.ExtractRichTextData(elem),
24
- ["HTML-RAW"]: (elem: HTMLElement) => ({
25
- type: "html-raw",
26
- data: {
27
- innerHTML: elem.innerHTML
28
- }
29
- }),
30
- ["H1"]: (elem: HTMLElement) => HtmlExtractionMethods.ExtractHeaderTag(elem, "h1"),
31
- ["H2"]: (elem: HTMLElement) => HtmlExtractionMethods.ExtractHeaderTag(elem, "h2"),
32
- ["H3"]: (elem: HTMLElement) => HtmlExtractionMethods.ExtractHeaderTag(elem, "h3"),
33
- ["H4"]: (elem: HTMLElement) => HtmlExtractionMethods.ExtractHeaderTag(elem, "h4"),
34
- ["H5"]: (elem: HTMLElement) => HtmlExtractionMethods.ExtractHeaderTag(elem, "h5"),
35
- ["H6"]: (elem: HTMLElement) => HtmlExtractionMethods.ExtractHeaderTag(elem, "h6"),
36
- [ExternalVideoTagDataConsts.TagName.toUpperCase()]: (elem: HTMLElement) => VideoMethods.ExtractExternalVideoTag(elem)
37
- };
38
-
39
- static transformHtmlElementToBlocks(element: HTMLElement): InterfaceBlock[] {
40
- var data: InterfaceBlock[] = [];
41
-
42
- for (let i = 0; i < element.children.length; i++) {
43
- var elem = element.children.item(i) as HTMLElement;
44
-
45
- if (!HtmlExtractionMethods.Extractors.hasOwnProperty(elem.tagName)) {
46
- data.push({
47
- type: "unsupported-tag",
48
- data: {
49
- tagString: elem.outerHTML
50
- }
51
- });
52
- }
53
- else {
54
- var extractor = HtmlExtractionMethods.Extractors[elem.tagName];
55
- var result = extractor(elem);
56
- data.push(result);
57
- }
58
- }
59
-
60
- return data;
61
- }
62
-
63
- static transformHtmlStringToBlocks(value: string): InterfaceBlock[] {
64
-
65
- if (value === undefined) {
66
- return [];
67
- }
68
-
69
- value = value
70
- .replace('\n', '')
71
- .replace('\t', '');
72
-
73
- var div = document.createElement("div");
74
- div.innerHTML = value;
75
-
76
- return this.transformHtmlElementToBlocks(div);
77
- }
78
- }
@@ -1,3 +0,0 @@
1
- export class HtmlRawTagDataConsts {
2
- static TagName = "html-raw";
3
- }
@@ -1,37 +0,0 @@
1
- export class FileImageTagDataConsts {
2
- static TagName = "file-image";
3
- static FileIdAttrName = "file-id";
4
- }
5
-
6
- export interface FileImageTag{
7
- type: string;
8
- data: FileImageTagData;
9
- }
10
-
11
- export interface FileImageTagData{
12
- src: string;
13
- fileId: number;
14
- }
15
-
16
- export class ImageMethods {
17
-
18
- public static buildUrl(fileId: number):string{
19
- return `/FileCopies/Images/Medium/${fileId}.jpg`;
20
- }
21
-
22
- public static buildSmallUrl(fileId: number):string{
23
- return `/FileCopies/Images/Small/${fileId}.jpg`;
24
- }
25
-
26
- public static ExtractImage(elem: HTMLElement): FileImageTag {
27
- let fileId = +elem.getAttribute(FileImageTagDataConsts.FileIdAttrName);
28
- let src = ImageMethods.buildUrl(fileId);
29
- return {
30
- type: FileImageTagDataConsts.TagName,
31
- data: {
32
- src,
33
- fileId: fileId,
34
- }
35
- };
36
- }
37
- }
@@ -1,5 +0,0 @@
1
-
2
- export interface InterfaceBlock {
3
- type: string;
4
- data: any;
5
- }
@@ -1,50 +0,0 @@
1
- import { XmlExtensions } from './XmlExtensions';
2
-
3
- export class TableBuilder {
4
- static getTableMarkUp(rows: number, cols: number, generateHeaders: boolean): string {
5
- rows = +rows;
6
- cols = +cols;
7
-
8
- let result = "<table>";
9
-
10
- if(generateHeaders){
11
- result += TableBuilder.getTableHeaderMarkUp(cols);
12
- }
13
-
14
- result += TableBuilder.getTableBodyMarkUp(cols, rows);
15
- result += "</table>";
16
-
17
- return XmlExtensions.formatXml(result);
18
- }
19
-
20
- static getTableHeaderMarkUp(cols: number): string {
21
-
22
- let result = "<thead><tr>";
23
-
24
- for (let i = 0; i < cols; i++) {
25
- result += `<th>Колонка #${i + 1}</th>`;
26
- }
27
-
28
- result += "</tr></thead>";
29
-
30
- return result;
31
- }
32
-
33
- static getTableBodyMarkUp(cols: number, rows: number): string {
34
-
35
- let result = "<tbody>";
36
-
37
- for (let row = 0; row < rows; row++) {
38
- result += "<tr>";
39
- for (let i = 0; i < cols; i++) {
40
-
41
- result += `<td>Ряд№${row + 1} Колонка #${i + 1}</td>`;
42
- }
43
- result += "</tr>";
44
- }
45
-
46
- result += "</tbody>";
47
-
48
- return result;
49
- }
50
- }
@@ -1,175 +0,0 @@
1
- import { AngularMaterialTableMethods } from './AngularMaterialTableMethods';
2
- import { BootstrapTableMethods } from './BootstrapTableMethods';
3
- import { HtmlExtractionMethods } from './HtmlExtractionMethods';
4
- import { InterfaceBlock } from "./InterfaceBlock";
5
- import { TextSimpleMethods } from './TextSimpleMethods';
6
-
7
- export interface BaseApiResponse {
8
- isSucceeded: boolean;
9
- message: string;
10
- }
11
-
12
- export interface TableHeaderData{
13
- type: "table-header";
14
- columns: string[];
15
- }
16
-
17
- export interface TableRowColumnData {
18
- type: "table-row-column-data";
19
- data: {
20
- text: string;
21
- children: InterfaceBlock[];
22
- }
23
- }
24
-
25
- export interface TableRowData {
26
- type: "table-row-column";
27
- columns: TableRowColumnData[];
28
- }
29
-
30
- export interface TableData{
31
- header: TableHeaderData,
32
- rows: TableRowData[]
33
- }
34
-
35
- export interface TableTagData{
36
- type: "table";
37
- data: TableData;
38
- }
39
-
40
- export class TableTypes{
41
- static readonly TableRowColumnData = "table-row-column-data";
42
- static readonly Table = "table";
43
- static readonly TableRowColumn = "table-row-column";
44
- }
45
-
46
- export class TableMethods {
47
-
48
- static getTableFromHtmlTag(tableTag: HTMLTableElement) {
49
- let tableData : TableData = {
50
- header: TableMethods.getHeader(tableTag),
51
- rows: TableMethods.getTableRows(tableTag)
52
- };
53
-
54
- var result = {
55
- type: TableTypes.Table,
56
- data: tableData,
57
- validationResult: this.checkTable(tableData),
58
- bootstrapHtml: ""
59
- }
60
-
61
- if(!result.validationResult){
62
- return result;
63
- }
64
- result.bootstrapHtml = BootstrapTableMethods.BuildTable(result.data);
65
-
66
- var angularMaterialTableDataCheck = AngularMaterialTableMethods.checkAngularMaterialTableData(tableData);
67
-
68
- if (!angularMaterialTableDataCheck.isSucceeded) {
69
- return {
70
- ...result,
71
- angularMaterialTableDataCheck
72
- };
73
- }
74
-
75
- return {
76
- ...result,
77
- angularMaterialTableDataCheck,
78
- html: tableTag.outerHTML,
79
- angularMaterialTableData: AngularMaterialTableMethods.getAngularMaterialTableData(tableData.header.columns, tableData.rows),
80
- };
81
- }
82
-
83
- static checkTable(tableData: TableData) : BaseApiResponse{
84
-
85
- let rows = tableData.rows;
86
-
87
- let prevRowCount = -1;
88
- for (let i = 0; i < rows.length; i++) {
89
- const row = rows[i];
90
-
91
- if (row.columns.length !== prevRowCount && prevRowCount != -1) {
92
- return {
93
- isSucceeded: false,
94
- message: `Ошибка при обработке разметки таблицы. `
95
- + `Количество колонок в каждой строке таблицы должно соотвествовать друг другу. `
96
- + `В строке таблицы №${i + 1} количество колонок = ${row.columns.length}, а в строке выше ${prevRowCount}.`
97
- };
98
- }
99
- prevRowCount = row.columns.length;
100
- }
101
-
102
- return {
103
- isSucceeded: true,
104
- message: "Ok"
105
- }
106
- }
107
-
108
-
109
- static getHeader(tableTag: HTMLTableElement) : TableHeaderData {
110
- let header = tableTag.tHead;
111
-
112
- if(header === null){
113
- return null;
114
- }
115
-
116
- let tr = header.children.item(0);
117
-
118
- let headerColumns: string[] = [];
119
-
120
- for (let j = 0; j < tr.children.length; j++) {
121
- const jElement = tr.children.item(j) as HTMLElement;
122
-
123
- headerColumns.push(jElement.innerHTML);
124
- }
125
-
126
- return {
127
- type: "table-header",
128
- columns: headerColumns
129
- };
130
- }
131
-
132
- static getTableRows(tableTag: HTMLTableElement): Array<TableRowData> {
133
- let tBody = tableTag.tBodies.item(0);
134
-
135
- let rows: TableRowData[] = [];
136
-
137
- for (let i = 0; i < tBody.children.length; i++) {
138
- const iElement = tBody.children.item(i);
139
-
140
- let rowColumns: TableRowColumnData[] = [];
141
-
142
- for (let j = 0; j < iElement.children.length; j++) {
143
- const jElement = iElement.children.item(j) as HTMLElement;
144
-
145
- let children = HtmlExtractionMethods.transformHtmlElementToBlocks(jElement);
146
-
147
- if(children.length === 0){
148
- var textTag = document.createElement("p");
149
- textTag.innerHTML = jElement.innerHTML;
150
-
151
- var textElem = TextSimpleMethods.ExtractTextTag(textTag);
152
-
153
- children.push(textElem);
154
- }
155
-
156
- var result:TableRowColumnData = {
157
- type: TableTypes.TableRowColumnData,
158
- data: {
159
- text: jElement.innerHTML,
160
- children
161
- }
162
- };
163
-
164
- rowColumns.push(result);
165
- }
166
-
167
- rows.push({
168
- type: TableTypes.TableRowColumn,
169
- columns: rowColumns
170
- });
171
- }
172
-
173
- return rows;
174
- }
175
- }
@@ -1,51 +0,0 @@
1
- export interface TextBlock{
2
- type: "text-block" | "text-sup-block" | "text-sub-block";
3
- data: {
4
- text: string;
5
- }
6
- }
7
-
8
- export interface LineBreakBlock {
9
- type: "line-break";
10
- }
11
-
12
- export interface RichTextData{
13
- type: "rich-text"
14
- data: {
15
- children: Array<TextBlock | LineBreakBlock>;
16
- }
17
- }
18
-
19
- export class TextMethods {
20
-
21
- static textTags = ["text", "h1", "h2", "h3", "h4", "h5", "h6"];
22
-
23
- static ExtractRichTextData(elem: HTMLElement): RichTextData {
24
-
25
- let children: Array<TextBlock | LineBreakBlock> = [];
26
- for (let i = 0; i < elem.children.length; i++) {
27
- const child = elem.children.item(i);
28
-
29
- if (child.tagName === "text-block".toUpperCase()) {
30
- children.push({
31
- type: "text-block",
32
- data: {
33
- text: child.innerHTML
34
- }
35
- });
36
- }
37
- else if (child.tagName === "line-break".toUpperCase()) {
38
- children.push({
39
- type: "line-break"
40
- });
41
- }
42
- }
43
-
44
- return {
45
- type: "rich-text",
46
- data: {
47
- children
48
- }
49
- };
50
- }
51
- }
@@ -1,120 +0,0 @@
1
- import { BaseApiResponse } from "./TableMethods";
2
-
3
- export const TextTag = "text";
4
-
5
- export interface SimpleTextTag {
6
- type: "text",
7
- data: SimpleTextTagData
8
- }
9
-
10
- export interface GenericTextTag {
11
- type: string,
12
- data: SimpleTextTagData
13
- }
14
-
15
- export interface SimpleTextTagData {
16
- textTagName: string;
17
- text: string,
18
- html: string,
19
- horizontalAlignment: "left" | "right" | "center",
20
- validationResult: BaseApiResponse
21
- }
22
-
23
- export class TextSimpleMethods {
24
-
25
- static supportedTags = ["sup", "sub", "strong", "b", "i"];
26
-
27
- static ExtractTextTag(elem: HTMLElement): SimpleTextTag {
28
- var hAlignValue = elem.getAttribute("h-align") ?? "left" as any;
29
-
30
- var data: SimpleTextTagData = {
31
- textTagName: elem.tagName.toLowerCase(),
32
- text: elem.innerText.trim().replace('\n\t', ''),
33
- html: elem.innerHTML.trim().replace('\n\t', ''),
34
- horizontalAlignment: hAlignValue,
35
- validationResult: {
36
- isSucceeded: true,
37
- message: "Ok"
38
- }
39
- };
40
-
41
- let result: SimpleTextTag = {
42
- type: TextTag,
43
- data: data
44
- };
45
-
46
- if(result.data.text === '\n'){
47
- result.data.text = '';
48
- }
49
- if(result.data.html === '\n'){
50
- result.data.html = '';
51
- }
52
-
53
- var alignmentVals = ["left", "right", "center"];
54
-
55
- if (alignmentVals.indexOf(hAlignValue) < 0) {
56
-
57
- result.data.validationResult = {
58
- isSucceeded: false,
59
- message: `Недопустимое значение атрибута h-align. Допустимые значения: ${alignmentVals.join(', ')}. `
60
- + 'Данный тег можно не указывать, по-умолчанию будет применено выравнивание слева.'
61
- };
62
- }
63
-
64
- var html = result.data.html;
65
- var htmlValidation = this.ValidateTextHtml(html);
66
-
67
- if(!htmlValidation.isSucceeded){
68
- result.data.validationResult = htmlValidation;
69
- }
70
-
71
- return result;
72
- }
73
-
74
- static ValidateTextHtml(html: string) : BaseApiResponse{
75
-
76
- var p = document.createElement("p");
77
- p.innerHTML = html;
78
-
79
- for (let i = 0; i < p.children.length; i++) {
80
- const element = p.children.item(i);
81
-
82
- var validationResult = this.ValidateTag(element);
83
-
84
- if(!validationResult.isSucceeded){
85
- return validationResult;
86
- }
87
- }
88
-
89
- return {
90
- isSucceeded:true,
91
- message: `Ok`
92
- }
93
- }
94
-
95
- static ValidateTag(element : Element): BaseApiResponse{
96
- let lowerTag = element.tagName.toLowerCase();
97
-
98
- if(!this.supportedTags.includes(lowerTag)){
99
- return {
100
- isSucceeded: false,
101
- message: `Тег <${lowerTag}> не поддерживается внутри тега <text>`
102
- }
103
- }
104
-
105
- for (let i = 0; i < element.children.length; i++) {
106
- const nElement = element.children.item(i);
107
-
108
- var innerValidationResult = this.ValidateTag(nElement);
109
-
110
- if(!innerValidationResult.isSucceeded){
111
- return innerValidationResult;
112
- }
113
- }
114
-
115
- return {
116
- isSucceeded: true,
117
- message: "Ok"
118
- };
119
- }
120
- }
@@ -1,31 +0,0 @@
1
- export class ExternalVideoTagDataConsts {
2
- static TagName = "external-video";
3
- static VideoTypeAttrName = "type";
4
- static LinkAttrName = "link";
5
- }
6
-
7
- export class ExternalVideoSupportedTypes{
8
- static Youtube = "youtube"
9
- }
10
-
11
- export interface ExternalVideoTag{
12
- type: string;
13
- data: ExternalVideoTagData;
14
- }
15
-
16
- export interface ExternalVideoTagData{
17
- type: string;
18
- link: string;
19
- }
20
-
21
- export class VideoMethods {
22
- static ExtractExternalVideoTag(elem: HTMLElement): ExternalVideoTag{
23
- return {
24
- type: ExternalVideoTagDataConsts.TagName,
25
- data:{
26
- type: elem.getAttribute(ExternalVideoTagDataConsts.VideoTypeAttrName),
27
- link: elem.getAttribute(ExternalVideoTagDataConsts.LinkAttrName)
28
- }
29
- };
30
- }
31
- }
@@ -1,26 +0,0 @@
1
- export class XmlExtensions{
2
- public static formatXml(xml:string, tab:string = '\t'):string { // tab = optional indent value, default is tab (\t)
3
- var formatted = '', indent= '';
4
- tab = tab || '\t';
5
- xml.split(/>\s*</).forEach(function(node) {
6
- if (node.match( /^\/\w/ )) indent = indent.substring(tab.length); // decrease indent by one 'tab'
7
- formatted += indent + '<' + node + '>\r\n';
8
- if (node.match( /^<?\w[^>]*[^\/]$/ )) indent += tab; // increase indent
9
- });
10
- return formatted.substring(1, formatted.length-3);
11
- }
12
-
13
- public static tagsToLower(xml: string): string{
14
- xml = this.replaceTagToLower(xml, "Body");
15
- xml = this.replaceTagToLower(xml, "Image");
16
- xml = this.replaceTagToLower(xml, "Text");
17
-
18
- return xml;
19
- }
20
-
21
- static replaceTagToLower(xml: string, tag: string) : string{
22
- return xml
23
- .replace(new RegExp(`<${tag}`, 'g'), `<${tag.toLowerCase()}`)
24
- .replace(new RegExp(`</${tag}>`, 'g'), `</${tag.toLowerCase()}>`);
25
- }
26
- }
@@ -1,12 +0,0 @@
1
- export * from './AngularMaterialTableMethods'
2
- export * from './BodyTagsExtensions'
3
- export * from './BootstrapTableMethods'
4
- // export * from './HtmlExtractionMethods'
5
- // export * from './HtmlRawTagDataConsts'
6
- export * from './ImageMethods'
7
- export * from './TableBuilder'
8
- export * from './TableMethods'
9
- export * from './TextMethods'
10
- export * from './TextSimpleMethods'
11
- export * from './VideoMethods'
12
- export * from './XmlExtensions'