qms-angular 1.0.72 → 1.0.73

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 (134) hide show
  1. package/bundles/qms-angular.umd.js +509 -116
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +2 -2
  4. package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.module.js +1 -3
  5. package/esm2015/lib/components/select-include-children/select-include-children.component.js +112 -45
  6. package/esm2015/lib/components/tree/tree.component.js +10 -14
  7. package/esm2015/lib/model/en.js +19 -2
  8. package/esm2015/lib/model/no.js +19 -2
  9. package/esm2015/lib/qms-ckeditor-components/common/classes/qmsUploadAdapter.js +89 -0
  10. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +3 -1
  11. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
  12. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-video-tree.model.js +4 -0
  13. package/esm2015/lib/qms-ckeditor-components/common/models/wproofreader-config.model.js +6 -0
  14. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.js +38 -0
  15. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +22 -3
  16. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +9 -8
  17. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +4 -1
  18. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +3 -4
  19. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +160 -10
  20. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +7 -3
  21. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +4 -1
  22. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-upload.service.js +20 -0
  23. package/esm2015/qms-angular.js +6 -4
  24. package/fesm2015/qms-angular.js +475 -95
  25. package/fesm2015/qms-angular.js.map +1 -1
  26. package/lib/components/select-include-children/select-include-children.component.d.ts +2 -1
  27. package/lib/model/en.d.ts +17 -0
  28. package/lib/model/no.d.ts +17 -0
  29. package/lib/qms-ckeditor-components/common/classes/qmsUploadAdapter.d.ts +18 -0
  30. package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +2 -0
  31. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +4 -0
  32. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-video-tree.model.d.ts +5 -0
  33. package/lib/qms-ckeditor-components/common/models/wproofreader-config.model.d.ts +25 -0
  34. package/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.d.ts +15 -0
  35. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +4 -1
  36. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +2 -1
  37. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +15 -1
  38. package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +2 -0
  39. package/lib/qms-ckeditor-components/services/qms-ckeditor-upload.service.d.ts +5 -0
  40. package/lib.theme.scss +1 -0
  41. package/package.json +1 -1
  42. package/qms-angular.d.ts +5 -3
  43. package/qms-angular.metadata.json +1 -1
  44. package/src/assets/images/ckeditor5.svg +1 -0
  45. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  46. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  47. package/src/assets/qms-ckeditor-plugin/build/translations/az.js +1 -1
  48. package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -1
  49. package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -1
  50. package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -1
  51. package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -1
  52. package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -1
  53. package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -1
  54. package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -1
  55. package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -1
  56. package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -1
  57. package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -1
  58. package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -1
  59. package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -1
  60. package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -1
  61. package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -1
  62. package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -1
  63. package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -1
  64. package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -1
  65. package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -1
  66. package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -1
  67. package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -1
  68. package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -1
  69. package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
  70. package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -1
  71. package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -1
  72. package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -1
  73. package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -1
  74. package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -1
  75. package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -1
  76. package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -1
  77. package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -1
  78. package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -1
  79. package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -1
  80. package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -1
  81. package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -1
  82. package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -1
  83. package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -1
  84. package/src/assets/qms-ckeditor-plugin/package-lock.json +23 -0
  85. package/src/assets/qms-ckeditor-plugin/package.json +2 -0
  86. package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +16 -4
  87. package/src/assets/qms-ckeditor-plugin/src/plugins/aboutckeditor/aboutckeditor.js +28 -0
  88. package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/bpmndialogcommand.js +74 -0
  89. package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +5 -68
  90. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +4 -0
  91. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +21 -0
  92. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapcommand.js +1 -0
  93. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +1 -1
  94. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkcommand.js +131 -176
  95. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkdialogcommand.js +88 -0
  96. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkediting.js +2 -0
  97. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkui.js +41 -32
  98. package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/tableofcontents.js +14 -0
  99. package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/tableofcontentscommand.js +87 -0
  100. package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/tableofcontentsediting.js +59 -0
  101. package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/tableofcontentsui.js +35 -0
  102. package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/utils.js +62 -0
  103. package/src/assets/qms-ckeditor-plugin/src/plugins/template/loadtemplatedialogcommand.js +14 -0
  104. package/src/assets/qms-ckeditor-plugin/src/plugins/template/qmsCKEditorLoadTemplatePlugin.js +10 -12
  105. package/src/assets/qms-ckeditor-plugin/src/plugins/template/qmsCKEdtiorTemplatePlugin.js +10 -7
  106. package/src/assets/qms-ckeditor-plugin/src/plugins/template/templatedialogcommand.js +9 -0
  107. package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestamp.js +15 -18
  108. package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestampcommand.js +17 -0
  109. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/removetooltipcommand.js +42 -26
  110. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltip.js +3 -3
  111. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipcommand.js +75 -0
  112. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipdialogcommand.js +68 -0
  113. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipediting.js +206 -131
  114. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipui.js +424 -136
  115. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/ui/actionsview.js +67 -12
  116. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/utils.js +17 -55
  117. package/src/assets/qms-ckeditor-plugin/src/plugins/video/autovideo.js +1 -5
  118. package/src/assets/qms-ckeditor-plugin/src/plugins/video/video/videoediting.js +5 -2
  119. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/browsevideodialogcommand.js +25 -0
  120. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/uploadvideocommand.js +3 -16
  121. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/videouploadediting.js +4 -0
  122. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/videouploadui.js +12 -23
  123. package/src/assets/qms-ckeditor-plugin/src/themes/icons/information.svg +1 -50
  124. package/src/assets/qms-ckeditor-plugin/src/themes/icons/table-excel.svg +44 -0
  125. package/src/assets/qms-ckeditor-plugin/src/themes/icons/timestamp.svg +1 -1
  126. package/src/assets/qms-ckeditor-plugin/src/themes/icons/tooltip.svg +1 -0
  127. package/src/assets/qms-ckeditor-plugin/src/themes/styles/heading.css +54 -0
  128. package/src/assets/qms-ckeditor-plugin/src/themes/styles/tooltip.css +11 -53
  129. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.scss +16 -0
  130. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.scss +26 -23
  131. package/src/themes/core/_range-slider.scss +10 -12
  132. package/esm2015/lib/qms-ckeditor-components/common/classes/uploadAdapter.js +0 -26
  133. package/lib/qms-ckeditor-components/common/classes/uploadAdapter.d.ts +0 -5
  134. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/inserttooltipcommand.js +0 -88
@@ -40,8 +40,10 @@ import { CKEditorModule as CKEditorModule$1 } from '@ckeditor/ckeditor5-angular'
40
40
  import { __awaiter } from 'tslib';
41
41
  import * as $$1 from 'jquery';
42
42
  import * as _ from 'lodash';
43
+ import { Buffer } from 'buffer';
43
44
  import { MatTooltipModule } from '@angular/material/tooltip';
44
45
  import { MatTabsModule } from '@angular/material/tabs';
46
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
45
47
  import { MatBadgeModule } from '@angular/material/badge';
46
48
  import { MatToolbarModule } from '@angular/material/toolbar';
47
49
  import { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';
@@ -188,7 +190,24 @@ const en = {
188
190
  "INVALID_URL": "Invalid URL",
189
191
  "REQUIRED_URL": "URL is required",
190
192
  "CLOSE": "Close",
191
- "DOCUMENT_PROCESS": "Document / Process"
193
+ "DOCUMENT_PROCESS": "Document / Process",
194
+ "UPLOAD_FILE_NOT_VALID_FORMAT": "The file uploaded is invalid format. Supported file formats: {0}",
195
+ "UPLOAD_FILE_OVERSIZE": "The file uploaded is over the limit size. The limit size is {0}MB",
196
+ "UPLOAD_FILE_FAILED": "Failed to upload file.",
197
+ "ASSISTIVE_TEXT": "Assistive text",
198
+ "WORDS": "Words",
199
+ "CHARACTERS": "Characters",
200
+ "SELECT_VIDEO_FROM_ARCHIVE": "Select video from the archive"
201
+ },
202
+ "ABOUT": {
203
+ "ABOUT_CKEDITOR": "About CKEditor",
204
+ "CKEDITOR5_VERSION": "CKEditor 5 version",
205
+ "FOR_LICENSING_INFORMATION_PLEASE_VISIT_OUR_WEBSITE": "For licensing information please visit our website",
206
+ "ALL_RIGHTS_RESERVED": "All rights reserved",
207
+ "CHECK": "Check",
208
+ "FOR_HELP": "for help",
209
+ "CKEDITOR_USERS_GUIDE": "CKEditor User's Guide",
210
+ "COPYRIGHT": "Copyright ©"
192
211
  },
193
212
  "BPMN": {
194
213
  "DEFAULT": "Default",
@@ -468,7 +487,24 @@ const no = {
468
487
  "INVALID_URL": "Ugyldig URL",
469
488
  "REQUIRED_URL": "URL er påkrevd",
470
489
  "CLOSE": "Close",
471
- "DOCUMENT_PROCESS": "Dokument / Prosess"
490
+ "DOCUMENT_PROCESS": "Dokument / Prosess",
491
+ "UPLOAD_FILE_NOT_VALID_FORMAT": "Filen som er lastet opp er ugyldig format. Støttede filformater: {0}",
492
+ "UPLOAD_FILE_OVERSIZE": "Filen som er lastet opp er over grensestørrelsen. Grensestørrelsen er {0}MB",
493
+ "UPLOAD_FILE_FAILED": "Kunne ikke laste opp filen.",
494
+ "ASSISTIVE_TEXT": "Hjelpende tekst",
495
+ "WORDS": "Ord",
496
+ "CHARACTERS": "Tegn",
497
+ "SELECT_VIDEO_FROM_ARCHIVE": "Velg video fra arkivet"
498
+ },
499
+ "ABOUT": {
500
+ "ABOUT_CKEDITOR": "Om CKEditor",
501
+ "CKEDITOR5_VERSION": "CKEditor 5 versjon",
502
+ "FOR_LICENSING_INFORMATION_PLEASE_VISIT_OUR_WEBSITE": "For lisensieringsinformasjon, besøk vår nettside",
503
+ "ALL_RIGHTS_RESERVED": "Alle rettigheter er forbeholdt",
504
+ "CHECK": "Se",
505
+ "FOR_HELP": "for hjelp",
506
+ "CKEDITOR_USERS_GUIDE": "brukerhåndboken for CKEditor",
507
+ "COPYRIGHT": "Opphavsrett ©"
472
508
  },
473
509
  "BPMN": {
474
510
  "DEFAULT": "Standard",
@@ -4448,15 +4484,12 @@ class TreeComponent {
4448
4484
  this.treeControl.dataNodes[i].disabled = false;
4449
4485
  }
4450
4486
  if (this.disabledList.length) {
4451
- for (let i = 0; i < this.treeControl.dataNodes.length; i++) {
4452
- this.disabledList.forEach(x => {
4453
- var _a;
4454
- if (x.id === this.treeControl.dataNodes[i].id
4455
- && (!x.parentId || x.parentId === ((_a = this.treeControl.dataNodes[i]) === null || _a === void 0 ? void 0 : _a.parentId))) {
4456
- this.treeControl.dataNodes[i].disabled = true;
4457
- }
4458
- });
4459
- }
4487
+ this.disabledList.forEach(x => {
4488
+ const index = this.treeControl.dataNodes.findIndex(node => node.id === x.id && (!x.parentId || x.parentId === node.parentId));
4489
+ if (index >= 0) {
4490
+ this.treeControl.dataNodes[index].disabled = true;
4491
+ }
4492
+ });
4460
4493
  }
4461
4494
  //Selected node with select one
4462
4495
  if (this.disabledList.length && this.treeConfig.selectOne) {
@@ -4490,7 +4523,6 @@ class TreeComponent {
4490
4523
  }
4491
4524
  else {
4492
4525
  this.idCheckIcon = '';
4493
- this.treeControl.collapseAll();
4494
4526
  this.cdRef.detectChanges();
4495
4527
  }
4496
4528
  }
@@ -4923,7 +4955,7 @@ class TreeComponent {
4923
4955
  }
4924
4956
  }
4925
4957
  getNodeId(node) {
4926
- return `_${node.parentId ? node.parentId : ''}_${node.id}_${node.level}`;
4958
+ return `_${node.parentId ? node.parentId.toLowerCase() : ''}_${node.id.toLowerCase()}_${node.level}`;
4927
4959
  }
4928
4960
  getNodeByIdAndParentId(nodeId, parentId) {
4929
4961
  return this.treeControl.dataNodes.find(x => {
@@ -4934,13 +4966,13 @@ class TreeComponent {
4934
4966
  this.treeControl.expand(node);
4935
4967
  }
4936
4968
  idToCheckSelectOne(id, parentId) {
4937
- return parentId ? `${id}-${parentId}` : `${id}`;
4969
+ return `${id}-${parentId}`;
4938
4970
  }
4939
4971
  }
4940
4972
  TreeComponent.decorators = [
4941
4973
  { type: Component, args: [{
4942
4974
  selector: 'qms-tree',
4943
- template: "<mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"tree__container\"\r\n>\r\n <mat-tree-node\r\n class=\"tree-branch\"\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n >\r\n <!-- form thu 1 - child -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"node.name && showCheckBox && !onlyCheckBoxForChild && !onlyFolder\"\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"checklistSelection.isSelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n >\r\n </mat-checkbox>\r\n\r\n <!-- form thu 2 -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"node.name && showCheckBox && onlyCheckBoxForChild && !onlyFolder\"\r\n class=\"ml-10 checklist-leaf-node\"\r\n [checked]=\"checklistSelection.isSelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n ></mat-checkbox>\r\n <div\r\n class=\"expand-node\"\r\n *ngIf=\"node.name && !onlyFolder\"\r\n [class.bgSelected]=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n (click)=\"selectNode(node)\"\r\n [id]=\"getNodeId(node)\"\r\n >\r\n <div class=\"expand-node__text\">\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.name && !onlyCheckBoxForChild\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n >\r\n {{ itemIcon }}\r\n </mat-icon>\r\n\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.svg\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"itemIconSvg\"\r\n >\r\n </mat-icon>\r\n\r\n <img\r\n *ngIf=\"displayType === itemIconType.path\"\r\n class=\"mat-icon\"\r\n [src]=\"itemIconPath\"\r\n />\r\n\r\n <img\r\n *ngIf=\"displayType === itemIconType.base64\"\r\n class=\"mat-icon image-base64\"\r\n [src]=\"getImagePath()\"\r\n />\r\n\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.none\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"getItemIcon(node)\"\r\n ></mat-icon>\r\n <span\r\n class=\"text-node\"\r\n [class.select-one-checked]=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >{{ node.name }}</span\r\n >\r\n </div>\r\n <mat-icon\r\n class=\"select-one-checked\"\r\n *ngIf=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >done</mat-icon\r\n >\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding>\r\n <!-- form thu 1 - parent -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"node.name && showCheckBox && !onlyCheckBoxForChild\"\r\n [checked]=\"descendantsAllSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n ></mat-checkbox>\r\n <button\r\n class=\"button-boder\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [disableRipple]=\"!node.hasChild\"\r\n [attr.aria-label]=\"'toggle ' + node.filename\"\r\n *ngIf=\"node.name\"\r\n >\r\n <mat-icon\r\n *ngIf=\"openIcon && closeIcon\"\r\n class=\"mat-icon-rtl-mirror\"\r\n [ngStyle]=\"{\r\n color: treeControl.isExpanded(node) ? openIconColor : closeIconColor\r\n }\"\r\n >{{ getNodeIcon(node) }}</mat-icon\r\n >\r\n <mat-icon\r\n *ngIf=\"!openIcon || !closeIcon\"\r\n class=\"mat-icon-rtl-mirror\"\r\n [ngClass]=\"{\r\n 'open-icon': treeControl.isExpanded(node),\r\n 'not-department-icon': moduleId !== dataType.document\r\n }\"\r\n [svgIcon]=\"getNodeIcon(node)\"\r\n >\r\n </mat-icon>\r\n </button>\r\n <span\r\n *ngIf=\"expandOnTitleClick\"\r\n matTreeNodeToggle\r\n class=\"text-node-parent\"\r\n style=\"cursor: pointer\"\r\n (click)=\"onExpandNode(node)\"\r\n [ngStyle]=\"{\r\n color: treeControl.isExpanded(node) ? openIconColor : '#000000'\r\n }\"\r\n >\r\n <span>{{ node.name }}</span>\r\n </span>\r\n <span\r\n *ngIf=\"!expandOnTitleClick\"\r\n class=\"text-node-parent\"\r\n (click)=\"selectFolderNode(node)\"\r\n style=\"cursor: pointer\"\r\n [id]=\"getNodeId(node)\"\r\n >\r\n <span\r\n [class.select-one-checked]=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >{{ node.name }}</span\r\n >\r\n <mat-icon\r\n class=\"select-one-checked\"\r\n *ngIf=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >done</mat-icon\r\n >\r\n </span>\r\n </mat-tree-node>\r\n</mat-tree>\r\n",
4975
+ template: "<mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"tree__container\"\r\n>\r\n <mat-tree-node\r\n class=\"tree-branch\"\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n >\r\n <!-- form thu 1 - child -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"node.name && showCheckBox && !onlyCheckBoxForChild && !onlyFolder\"\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"checklistSelection.isSelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n >\r\n </mat-checkbox>\r\n\r\n <!-- form thu 2 -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"node.name && showCheckBox && onlyCheckBoxForChild && !onlyFolder\"\r\n class=\"ml-10 checklist-leaf-node\"\r\n [checked]=\"checklistSelection.isSelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n ></mat-checkbox>\r\n <div\r\n class=\"expand-node\"\r\n *ngIf=\"node.name && !onlyFolder\"\r\n [class.bgSelected]=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n (click)=\"selectNode(node)\"\r\n [id]=\"getNodeId(node)\"\r\n >\r\n <div class=\"expand-node__text\">\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.name && !onlyCheckBoxForChild\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n >\r\n {{ itemIcon }}\r\n </mat-icon>\r\n\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.svg\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"itemIconSvg\"\r\n >\r\n </mat-icon>\r\n\r\n <img\r\n *ngIf=\"displayType === itemIconType.path\"\r\n class=\"mat-icon\"\r\n [src]=\"itemIconPath\"\r\n />\r\n\r\n <img\r\n *ngIf=\"displayType === itemIconType.base64\"\r\n class=\"mat-icon image-base64\"\r\n [src]=\"getImagePath()\"\r\n />\r\n\r\n <mat-icon\r\n *ngIf=\"displayType === itemIconType.none\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n [svgIcon]=\"getItemIcon(node)\"\r\n ></mat-icon>\r\n <span\r\n class=\"text-node\"\r\n [class.select-one-checked]=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >{{ node.name }}</span\r\n >\r\n </div>\r\n <mat-icon\r\n class=\"select-one-checked\"\r\n *ngIf=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >done</mat-icon\r\n >\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding>\r\n <!-- form thu 1 - parent -->\r\n <mat-checkbox\r\n qms-group-options\r\n [disabled]=\"node.disabled\"\r\n color=\"default\"\r\n *ngIf=\"node.name && showCheckBox && !onlyCheckBoxForChild\"\r\n [checked]=\"descendantsAllSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"todoItemSelectionToggle(node)\"\r\n ></mat-checkbox>\r\n <button\r\n class=\"button-boder\"\r\n mat-icon-button\r\n matTreeNodeToggle\r\n [disableRipple]=\"!node.hasChild\"\r\n [attr.aria-label]=\"'toggle ' + node.filename\"\r\n *ngIf=\"node.name\"\r\n >\r\n <mat-icon\r\n *ngIf=\"openIcon && closeIcon\"\r\n class=\"mat-icon-rtl-mirror\"\r\n [ngStyle]=\"{\r\n color: treeControl.isExpanded(node) ? openIconColor : closeIconColor\r\n }\"\r\n >{{ getNodeIcon(node) }}</mat-icon\r\n >\r\n <mat-icon\r\n *ngIf=\"!openIcon || !closeIcon\"\r\n class=\"mat-icon-rtl-mirror\"\r\n [ngClass]=\"{\r\n 'open-icon': treeControl.isExpanded(node),\r\n 'not-department-icon': moduleId !== dataType.document\r\n }\"\r\n [svgIcon]=\"getNodeIcon(node)\"\r\n >\r\n </mat-icon>\r\n </button>\r\n <span\r\n *ngIf=\"expandOnTitleClick\"\r\n matTreeNodeToggle\r\n class=\"text-node-parent\"\r\n style=\"cursor: pointer\"\r\n (click)=\"onExpandNode(node)\"\r\n [id]=\"getNodeId(node)\"\r\n [ngStyle]=\"{\r\n color: treeControl.isExpanded(node) ? openIconColor : '#000000'\r\n }\"\r\n >\r\n <span>{{ node.name }}</span>\r\n </span>\r\n <span\r\n *ngIf=\"!expandOnTitleClick\"\r\n class=\"text-node-parent\"\r\n (click)=\"selectFolderNode(node)\"\r\n style=\"cursor: pointer\"\r\n [id]=\"getNodeId(node)\"\r\n >\r\n <span\r\n [class.select-one-checked]=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >{{ node.name }}</span\r\n >\r\n <mat-icon\r\n class=\"select-one-checked\"\r\n *ngIf=\"\r\n treeConfig.selectOne &&\r\n idCheckIcon == idToCheckSelectOne(node.id, node.parentId)\r\n \"\r\n >done</mat-icon\r\n >\r\n </span>\r\n </mat-tree-node>\r\n</mat-tree>\r\n",
4944
4976
  encapsulation: ViewEncapsulation.None,
4945
4977
  styles: ["@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFWJ0bbck.woff2) format(\"woff2\");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFUZ0bbck.woff2) format(\"woff2\");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFWZ0bbck.woff2) format(\"woff2\");unicode-range:U+1f??}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFVp0bbck.woff2) format(\"woff2\");unicode-range:U+0370-03ff}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFWp0bbck.woff2) format(\"woff2\");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01a0-01a1,U+01af-01b0,U+1ea0-1ef9,U+20ab}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFW50bbck.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Open Sans;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/opensans/v20/mem8YaGs126MiZpBA-UFVZ0b.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCFPrEHJA.woff2) format(\"woff2\");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCMPrEHJA.woff2) format(\"woff2\");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCHPrEHJA.woff2) format(\"woff2\");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01a0-01a1,U+01af-01b0,U+1ea0-1ef9,U+20ab}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCGPrEHJA.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Raleway;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v19/1Ptxg8zYS_SKggPN4iEgvnHyvveLxVvaorCIPrE.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.tree__container{font-family:Open Sans;font-style:normal;font-weight:400;font-size:.875rem;line-height:19px;color:#323232}.tree__container .mat-tree-node{color:#000;min-height:0}.tree__container .mat-tree-node .mat-checkbox.qms-group-options{padding:0}.tree__container .mat-tree-node .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.tree__container .button{margin-left:6px}.tree__container .button:focus,.tree__container .button:hover{background-color:#009ef2;border-radius:2px;width:auto}.tree__container .button-boder:focus,.tree__container .button:focus{outline:0}.tree__container .button-folder-boder:focus{outline:0}.tree__container .button-folder-boder:focus,.tree__container .button-folder-boder:hover{background-color:#009ef2;border-radius:2px;width:auto}.tree__container .expand-node{margin-left:8px;min-height:32px;justify-content:space-between;width:100%}.tree__container .expand-node,.tree__container .expand-node .expand-node__text{display:flex;align-items:center}.tree__container .expand-node .mat-icon{color:rgba(0,0,0,.6);margin-right:17px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.tree__container .expand-node .mat-icon svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.tree__container .expand-node.bgSelected .select-one-checked{color:#1954a9}.tree__container .text-node-parent{width:100%;display:flex;align-items:center;justify-content:space-between;margin-left:10px;cursor:pointer}.tree__container .text-node-parent.active-item{color:#1954a9!important}.tree__container .text-node-parent .select-one-checked{color:#1954a9}.tree__container .mr-11{margin-right:11px}.tree__container .ml-10{margin-left:10px}.tree__container .tree-branch:hover{background-color:#e5eefb}.tree__container .image-base64{width:20px;height:20px}.tree__container .mat-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}::ng-deep .mat-tree .mat-checkbox.qms-group-options{padding:0}::ng-deep .mat-tree .mat-checkbox.qms-group-options.mat-checkbox-checked{background-color:transparent}::ng-deep .mat-tree .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:0}svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.open-icon.not-department-icon svg path,.open-icon svg path:first-child{fill:#1954a9}.mat-checkbox.mat-checkbox-disabled.qms-group-options.mat-checkbox-checked .mat-checkbox-background{background-color:#e0e0e0!important}"]
4946
4978
  },] }
@@ -7402,6 +7434,9 @@ class QMSCKEditorTreeService extends QMSCKEditorBaseService {
7402
7434
  getProcessList() {
7403
7435
  return this.get('ckeditorTree/GetProcessList');
7404
7436
  }
7437
+ getUploadVideoList(folderId = null) {
7438
+ return this.get('ckeditorTree/GetUploadVideoList', { folderId });
7439
+ }
7405
7440
  }
7406
7441
  QMSCKEditorTreeService.ɵprov = i0.ɵɵdefineInjectable({ factory: function QMSCKEditorTreeService_Factory() { return new QMSCKEditorTreeService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(QMSCKEditorGlobalService)); }, token: QMSCKEditorTreeService, providedIn: "root" });
7407
7442
  QMSCKEditorTreeService.decorators = [
@@ -7834,6 +7869,9 @@ class QMSCKEditorLinkComponent extends QMSCKEditorBaseComponent {
7834
7869
  this.anchorByName = url.substr(hashIndex + 1, url.length - hashIndex);
7835
7870
  this.anchorTitle = this.data.title;
7836
7871
  }
7872
+ else if (typeId === LinkType.url) {
7873
+ //selectedProtocol
7874
+ }
7837
7875
  }
7838
7876
  onSelectedLinkType() {
7839
7877
  if (this.selectedLink === LinkType.anchorText) {
@@ -8459,24 +8497,87 @@ QMSCKEditorLoadTemplateComponent.ctorParameters = () => [
8459
8497
  { type: String, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
8460
8498
  ];
8461
8499
 
8462
- class UploadAdapter {
8463
- constructor(loader) {
8500
+ class QmsUploadAdapter {
8501
+ constructor(loader, config) {
8464
8502
  this.loader = loader;
8503
+ this.config = config;
8504
+ this.config.imageUploadTypes = this.config.imageUploadTypes || 'png,jpeg,jpg';
8505
+ this.config.maxFileSizeMB = this.config.maxFileSizeMB || 2;
8506
+ if (this.config.imageUploadTypes.indexOf('jpeg') > -1) {
8507
+ this.config.imageUploadTypes += ',jpg';
8508
+ }
8509
+ else if (this.config.imageUploadTypes.indexOf('jpg') > -1) {
8510
+ this.config.imageUploadTypes += ',jpeg';
8511
+ }
8512
+ }
8513
+ abort() {
8514
+ if (this.xhr) {
8515
+ this.xhr.abort();
8516
+ }
8517
+ }
8518
+ _initRequest() {
8519
+ const xhr = this.xhr = new XMLHttpRequest();
8520
+ xhr.open('POST', `${this.config.apiUrl}ckeditorUpload/UploadImage`, true);
8521
+ xhr.responseType = 'json';
8522
+ }
8523
+ _initListeners(resolve, reject, filename) {
8524
+ const xhr = this.xhr;
8525
+ const loader = this.loader;
8526
+ const genericErrorText = `${this.config.LANG.QMSCKEDITOR.FAILED_TO_UPLOAD_FILE}: ${filename}.`;
8527
+ xhr.addEventListener('error', () => reject(genericErrorText));
8528
+ xhr.addEventListener('abort', () => reject());
8529
+ xhr.addEventListener('load', () => {
8530
+ const response = xhr.response;
8531
+ if (!response || response.error) {
8532
+ return reject(response && response.error ? response.error.message : genericErrorText);
8533
+ }
8534
+ resolve({ default: response });
8535
+ });
8536
+ if (xhr.upload) {
8537
+ xhr.upload.addEventListener('progress', evt => {
8538
+ if (evt.lengthComputable) {
8539
+ loader.uploadTotal = evt.total;
8540
+ loader.uploaded = evt.loaded;
8541
+ }
8542
+ });
8543
+ }
8544
+ }
8545
+ _sendRequest(file) {
8546
+ const data = new FormData();
8547
+ data.append('file', file, file.name);
8548
+ data.append('name', file.name);
8549
+ this.xhr.send(data);
8550
+ }
8551
+ _getExtension(file) {
8552
+ if (!file.name) {
8553
+ return '';
8554
+ }
8555
+ const filenames = file.name.toLowerCase().split('.');
8556
+ if (filenames.length < 1) {
8557
+ return '';
8558
+ }
8559
+ return filenames[1];
8465
8560
  }
8466
8561
  upload() {
8467
8562
  return this.loader.file
8468
8563
  .then((file) => {
8469
8564
  return new Promise((resolve, reject) => {
8470
- const myReader = new FileReader();
8471
- myReader.onloadend = () => {
8472
- resolve({ default: myReader.result });
8565
+ const reader = new FileReader();
8566
+ reader.readAsArrayBuffer(file);
8567
+ reader.onload = () => {
8568
+ const fileExtension = this._getExtension(file);
8569
+ if (this.config.imageUploadTypes.indexOf(fileExtension) > -1) {
8570
+ if (file.size > (this.config.maxFileSizeMB * 1024 * 1024)) {
8571
+ reject(`${this.config.LANG.QMSCKEDITOR.UPLOAD_FILE_OVERSIZE}`.replace('{0}', this.config.maxFileSizeMB.toString()));
8572
+ }
8573
+ this._initRequest();
8574
+ this._initListeners(resolve, reject, file.name);
8575
+ this._sendRequest(file);
8576
+ }
8577
+ else {
8578
+ reject(`${this.config.LANG.QMSCKEDITOR.UPLOAD_FILE_NOT_VALID_FORMAT}`.replace('{0}', this.config.imageUploadTypes));
8579
+ }
8473
8580
  };
8474
- // if (file.size > 512000) {
8475
- // const msg = `${file.name} is more than 500kb. Sorry, it has to be less than or equal to 500kb`;
8476
- // QMSCKEditorToastService.error(msg);
8477
- // reject();
8478
- // }
8479
- myReader.readAsDataURL(file);
8480
8581
  });
8481
8582
  })
8482
8583
  .catch((error) => {
@@ -8504,7 +8605,9 @@ CKEditorEventConst.QMSCK_ABOUT_CKEDITOR_PLUGIN_MSG = "QMSCK_ABOUT_CKEDITOR_PLUGI
8504
8605
  CKEditorEventConst.QMSCK_FLOWCHART_PLUGIN_MSG = 'QMSCK_FLOWCHART_PLUGIN_MSG';
8505
8606
  CKEditorEventConst.QMSCK_FLOWCHART_PLUGIN_RESP = 'QMSCK_FLOWCHART_PLUGIN_RESP';
8506
8607
  CKEditorEventConst.QMSCK_FLOWCHART = 'flowchart';
8507
- CKEditorEventConst.QMSCK_TOGGLE_TOOLBAR_MSG = 'QMSCK_TOGGLE_TOOLBAR_MSG';
8608
+ CKEditorEventConst.QMSCK_TOGGLE_TOOLBAR_MSG = 'QMSCK_TOGGLE_TOOLBAR_MSG';
8609
+ CKEditorEventConst.QMSCK_BROWSE_VIDEO_MSG = 'QMSCK_BROWSE_VIDEO_MSG';
8610
+ CKEditorEventConst.QMSCK_BROWSE_VIDEO_RESP = 'QMSCK_BROWSE_VIDEO_RESP';
8508
8611
 
8509
8612
  var IFRAME_SRC = '//cdn.iframe.ly/api/iframe';
8510
8613
  var API_KEY = 'b499e92e857f435c39c14d';
@@ -12587,6 +12690,21 @@ CKEditorLinkConst.DOCUMENT_PARTIAL_URL = '/document/';
12587
12690
  CKEditorLinkConst.AREA_PARTIAL_URL = '/area/detail/';
12588
12691
  CKEditorLinkConst.PROCESS_PARTIAL_URL = '/process-detail/';
12589
12692
 
12693
+ class QMSCKEditorUploadService extends QMSCKEditorBaseService {
12694
+ uploadImage(file) {
12695
+ const formData = new FormData();
12696
+ formData.append('name', file.name);
12697
+ formData.append('file', file);
12698
+ return this.post('ckeditorUpload/UploadImage', formData);
12699
+ }
12700
+ }
12701
+ QMSCKEditorUploadService.ɵprov = i0.ɵɵdefineInjectable({ factory: function QMSCKEditorUploadService_Factory() { return new QMSCKEditorUploadService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(QMSCKEditorGlobalService)); }, token: QMSCKEditorUploadService, providedIn: "root" });
12702
+ QMSCKEditorUploadService.decorators = [
12703
+ { type: Injectable, args: [{
12704
+ providedIn: 'root'
12705
+ },] }
12706
+ ];
12707
+
12590
12708
  class ILink {
12591
12709
  constructor() {
12592
12710
  this.target = TargetTypeName.new;
@@ -12598,13 +12716,14 @@ class ILink {
12598
12716
  }
12599
12717
  }
12600
12718
  class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
12601
- constructor(dialog, translate, bmpnService, bpmnApiService, linkService, dialogRef, data) {
12719
+ constructor(dialog, translate, bmpnService, bpmnApiService, linkService, uploadService, dialogRef, data) {
12602
12720
  super();
12603
12721
  this.dialog = dialog;
12604
12722
  this.translate = translate;
12605
12723
  this.bmpnService = bmpnService;
12606
12724
  this.bpmnApiService = bpmnApiService;
12607
12725
  this.linkService = linkService;
12726
+ this.uploadService = uploadService;
12608
12727
  this.dialogRef = dialogRef;
12609
12728
  this.data = data;
12610
12729
  this.expandedPanel = true;
@@ -12760,6 +12879,19 @@ class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
12760
12879
  });
12761
12880
  });
12762
12881
  }
12882
+ dataUrlToFile(dataUrl, filename) {
12883
+ const arr = dataUrl.split(',');
12884
+ if (arr.length < 2) {
12885
+ return undefined;
12886
+ }
12887
+ const mimeArr = arr[0].match(/:(.*?);/);
12888
+ if (!mimeArr || mimeArr.length < 2) {
12889
+ return undefined;
12890
+ }
12891
+ const mime = mimeArr[1];
12892
+ const buff = Buffer.from(arr[1], 'base64');
12893
+ return new File([buff], filename, { type: mime });
12894
+ }
12763
12895
  getImageContent(paper) {
12764
12896
  return __awaiter(this, void 0, void 0, function* () {
12765
12897
  return new Promise((resolve) => {
@@ -12778,8 +12910,10 @@ class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
12778
12910
  const graphObject = graph.toJSON();
12779
12911
  const id = yield this.saveImageContent(graphObject);
12780
12912
  const imageContent = 'data:image/png;base64,' + (yield this.getImageContent(paper));
12913
+ const file = this.dataUrlToFile(imageContent, `${CKEditorEventConst.QMSCK_BPMN}#${id}`);
12914
+ const imageUrl = yield this.uploadService.uploadImage(file).toPromise();
12781
12915
  const imagemap = this.toImageMap(id, graphObject.cells, clientRect);
12782
- const result = { key: `${CKEditorEventConst.QMSCK_BPMN}#${id}`, values: imageContent, imagemap: imagemap };
12916
+ const result = { key: `${CKEditorEventConst.QMSCK_BPMN}#${id}`, values: imageUrl, imagemap: imagemap };
12783
12917
  this.dialogRef.close(result);
12784
12918
  });
12785
12919
  }
@@ -13330,6 +13464,7 @@ QMSCKEditorBpmnComponent.ctorParameters = () => [
13330
13464
  { type: BpmnService },
13331
13465
  { type: QMSCKEditorBpmnApiService },
13332
13466
  { type: QMSCKEditorLinkService },
13467
+ { type: QMSCKEditorUploadService },
13333
13468
  { type: MatDialogRef },
13334
13469
  { type: QMSCKEditorBpmnData, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
13335
13470
  ];
@@ -15360,6 +15495,7 @@ class QMSCKEditorImageMapComponent extends QMSCKEditorBaseComponent {
15360
15495
  this.anchorText = '';
15361
15496
  //anchorByName = '';
15362
15497
  this.advisoryTitle = '';
15498
+ this.isImageLoading = false;
15363
15499
  this.isUrlProcessing = false;
15364
15500
  this.naturalImageWidth = 0;
15365
15501
  this.naturalImageHeight = 0;
@@ -15491,8 +15627,10 @@ class QMSCKEditorImageMapComponent extends QMSCKEditorBaseComponent {
15491
15627
  }
15492
15628
  ngAfterViewInit() {
15493
15629
  if (this.myImageRef) {
15630
+ this.isImageLoading = true;
15494
15631
  this.imageListeners.push(this.renderer.listen(this.myImageRef.nativeElement, 'load', () => {
15495
15632
  this.onImageLoad();
15633
+ this.isImageLoading = false;
15496
15634
  }));
15497
15635
  }
15498
15636
  // Avoid drag&drop of the image
@@ -15527,9 +15665,9 @@ class QMSCKEditorImageMapComponent extends QMSCKEditorBaseComponent {
15527
15665
  }
15528
15666
  });
15529
15667
  }
15530
- parseLinkUrl(url, defaultProtocolName) {
15668
+ parseLinkUrl(url) {
15531
15669
  const protocol = this.protocolRegex.exec(url);
15532
- if (protocol) {
15670
+ if (!!protocol) {
15533
15671
  this.processedUrl = url.substr(protocol[0].length);
15534
15672
  this.url = this.processedUrl;
15535
15673
  this.selectedProtocol = protocol[0].toLowerCase();
@@ -15542,9 +15680,7 @@ class QMSCKEditorImageMapComponent extends QMSCKEditorBaseComponent {
15542
15680
  else {
15543
15681
  this.processedUrl = url;
15544
15682
  this.url = this.processedUrl;
15545
- if (!!this.selectedProtocol) {
15546
- this.selectedProtocol = defaultProtocolName || ProtocolTypeName.http;
15547
- }
15683
+ this.selectedProtocol = ProtocolTypeName.other;
15548
15684
  }
15549
15685
  }
15550
15686
  onSelectArea(area) {
@@ -15813,8 +15949,8 @@ class QMSCKEditorImageMapComponent extends QMSCKEditorBaseComponent {
15813
15949
  QMSCKEditorImageMapComponent.decorators = [
15814
15950
  { type: Component, args: [{
15815
15951
  selector: 'app-qmsck-imagemap',
15816
- template: "<div id=\"qmsckeditor-imagemap\" class=\"qmsckeditor qmsckeditor__imagemap__container\">\r\n <div id=\"qmsckeditor-imagemap-header\">\r\n <span id=\"qmsckeditor-imagemap-header_001\" mat-icon-button class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-imagemap-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-imagemap_002_001\">\r\n {{ LANG.QMSCKEDITOR.IMAGE_MAP_PROPERTIES }}\r\n </h2>\r\n </div>\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-content\">\r\n <div id=\"qmsckeditor-imagemap-content_001\" class=\"col-12 mt-1 pl-2 pr-2\">\r\n <mat-expansion-panel id=\"qmsckeditor-imagemap-panel\" [expanded]=\"true\" (opened)=\"(true)\" (closed)=\"(false)\">\r\n <div id=\"qmsckeditor-imagemap-panel_001\">\r\n <div id=\"qmsckeditor-imagemap-panel_001_001\" class=\"qmsckeditor__imagemap__information\">\r\n <form [formGroup]=\"imageMapFormGroup\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <mat-button-toggle-group [(ngModel)]=\"selectedMode\" formControlName=\"modeList\"\r\n (change)=\"onModeChange($event)\">\r\n <mat-button-toggle *ngFor=\"let mode of modes\" [value]=\"mode.id\"\r\n [matTooltip]=\"mode.name\">\r\n <mat-icon color=\"red\" [svgIcon]=\"mode.icon\" aria-hidden=\"true\">\r\n </mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <span style=\"margin-left: 15px;\" #myStatus></span>\r\n </div>\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.ZOOM }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedZoom\" formControlName=\"zoomList\"\r\n (ngModelChange)=\"onZoomChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let zoomType of zoomTypes\" [value]=\"zoomType.id\">\r\n {{ zoomType.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.LINK_TYPE }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedLinkType\" formControlName=\"linkTypeList\"\r\n (ngModelChange)=\"onLinkTypeChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let link of linkTypes\" [value]=\"link.id\">\r\n {{ link.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-3\" *ngIf=\"selectedLinkType === 0\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.TARGET }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedTarget\" formControlName=\"targetList\"\r\n (ngModelChange)=\"onTargetChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let target of targets\" [value]=\"target.id\">\r\n {{ target.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\"\r\n *ngIf=\"selectedLinkType === 1\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.ANCHOR_BY_NAME }}</mat-label>\r\n <mat-select [(ngModel)]=\"anchorText\" formControlName=\"anchorTextList\"\r\n (ngModelChange)=\"onAnchorTextChange()\">\r\n <mat-option *ngFor=\"let editorAnchor of editorAnchors\"\r\n [value]=\"editorAnchor.anchorValue\" disableOptionCentering>\r\n {{ editorAnchor.viewValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\"\r\n *ngIf=\"selectedLinkType === 0\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.PROTOCOL }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedProtocol\" formControlName=\"protocolList\"\r\n (ngModelChange)=\"onProtocolChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let protocol of protocols\" [value]=\"protocol.id\">\r\n {{ protocol.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-5\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.LINK_URL }}</mat-label>\r\n <input matInput [(ngModel)]=\"url\" name=\"url\" formControlName=\"url\"\r\n (ngModelChange)=\"onUrlChange()\" (keyup)=\"onUrlKeyup()\" />\r\n <mat-error *ngIf=\"imageMapFormGroup.get('url').hasError('required')\">{{\r\n LANG.QMSCKEDITOR.REQUIRED_URL }}\r\n </mat-error>\r\n <mat-error *ngIf=\"imageMapFormGroup.get('url').hasError('invalidURL')\">{{\r\n LANG.QMSCKEDITOR.INVALID_URL }}</mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"row button__groups\">\r\n <div class=\"col-6\">\r\n <button class=\"save\" mat-stroked-button (click)=\"attachment()\">\r\n {{ LANG.QMSCKEDITOR.ATTACHMENT }}\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"save\" mat-stroked-button (click)=\"eHandbook(false, false)\">\r\n {{ LANG.QMSCKEDITOR.HANDBOOK }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-panel_001_002\" class=\"qmsckeditor__imagemap__map\">\r\n <img #myImage [src]=\"imageMapData.imageUrl\">\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-panel_001_003\" class=\"qmsckeditor button__groups row mr-0 ml-0 mt-4\">\r\n <div class=\"col-4 pr-0\">\r\n <button class=\"save\" mat-flat-button (click)=\"removeMap()\">\r\n {{ LANG.QMSCKEDITOR.REMOVE_MAP }}\r\n </button>\r\n </div>\r\n <div class=\"col-4 pr-0\">\r\n <button class=\"save\" mat-flat-button (click)=\"save()\">\r\n {{ LANG.QMSCKEDITOR.SAVE }}\r\n </button>\r\n </div>\r\n <div class=\"col-4 pl-0\">\r\n <button class=\"cancel\" mat-flat-button (click)=\"cancel()\">\r\n {{ LANG.QMSCKEDITOR.CANCEL }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n</div>",
15817
- styles: [".mt5{margin-top:5px!important}.mt10{margin-top:10px!important}.mt7{margin-top:7px!important}.mt15{margin-top:15px!important}.mt20{margin-top:20px!important}.mt30{margin-top:30px!important}.mt40{margin-top:40px!important}.ml2{margin-left:2px!important}.ml3{margin-left:3px!important}.ml5{margin-left:5px!important}.ml15{margin-left:15px!important}.ml10{margin-left:10px!important}.ml12{margin-left:12px!important}.ml16{margin-left:16px!important}.ml-auto{margin-left:auto!important}.ml-25{margin-left:-25px!important}.mr5{margin-right:5px!important}.mr12{margin-right:12px!important}.mr15{margin-right:15px!important}.mb5{margin-bottom:5px!important}.mb10{margin-bottom:10px!important}.mb15{margin-bottom:15px!important}.pt8{padding-top:8px!important}.pt10{padding-top:10px!important}.pt15{padding-top:15px!important}.pt16{padding-top:16px!important}.pl15{padding-left:15px!important}.pl0{padding-left:0!important}.pr0{padding-right:0!important}.pr15{padding-right:15px!important}.fs12{font-size:12px}.fs14{font-size:14px!important}.fs16{font-size:16px!important}.fs22{font-size:22px!important}.fw500{font-weight:500!important}.italic-text{font-style:italic}.display-flex{display:flex}.qmsckeditor{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.qmsckeditor h2{font-size:20px;font-weight:400}.qmsckeditor .mat-dialog-content{padding:0}.qmsckeditor .mat-icon{color:#909497}.qmsckeditor__fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;background:#fff;overflow-y:auto;max-height:100vh;overflow-x:hidden}.qmsckeditor__cursor{cursor:pointer}.qmsckeditor__notallowed{cursor:not-allowed}.qmsckeditor.button__close,.qmsckeditor.button__done{float:right;top:-24px;right:-24px;cursor:pointer}.qmsckeditor.button__done{margin-right:20px}.qmsckeditor.button__done .mat-icon{color:#28a745;font-weight:700}.qmsckeditor.button__groups button{min-height:40px;width:100%;border-radius:4px;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px}.qmsckeditor.button__groups .save{background:#f8f9f9}.qmsckeditor.button__groups .save:hover{background:#e5e7e9}.qmsckeditor.button__groups .save:disabled{cursor:not-allowed}.qmsckeditor.button__groups .cancel{background:#f8f9f9}.qmsckeditor.button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.button__groups .cancel:disabled{cursor:not-allowed}.qmsckeditor.button__groups .delete{background:#f8f9f9}.qmsckeditor.button__groups .delete:hover{background:#e5e7e9}.qmsckeditor.button__groups .delete:disabled{cursor:not-allowed}.qmsckeditor.confirm__button__groups button{min-height:36px;border-radius:4px;width:auto;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px}.qmsckeditor.confirm__button__groups .confirm{background:#f8f9f9}.qmsckeditor.confirm__button__groups .confirm:hover{background:#e5e7e9}.qmsckeditor.confirm__button__groups .cancel{background:#f8f9f9}.qmsckeditor.confirm__button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.template-content.height{min-height:420px;max-height:520px;overflow:auto}.qmsckeditor.template-content.title{margin-left:-9px}.qmsckeditor.link__content.height{min-height:400px;max-height:520px}.qmsckeditor.card{margin-bottom:10px;min-height:60px;box-shadow:none;border:1px solid #e5e5e5}.qmsckeditor.card .title{font-weight:700}.qmsckeditor.card .content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.qmsckeditor.card .material-icons{font-size:20px}.qmsckeditor.tooltip-content.height{min-height:400px;max-height:472px;overflow:auto}.qmsckeditor.save__as__template.height{height:125px}.ck-content .ck-horizontal-line,.ck-content .page-break{width:100%}.ck-content hr{background:#ccc}.qmsckeditor__imagemap__container .mat-form-field{width:100%}.qmsckeditor__imagemap__container .qmsckeditor__imagemap__information{position:relative}.qmsckeditor__imagemap__container .qmsckeditor__imagemap__map{overflow:auto;width:800px;min-height:371px;position:relative;max-height:460px}.qmsckeditor__imagemap__container .mat-button-toggle-checked{border:1px solid #000!important}.qmsckeditor__imagemap__container .hidden{visibility:hidden}"]
15952
+ template: "<div id=\"qmsckeditor-imagemap\" class=\"qmsckeditor qmsckeditor__imagemap__container\">\r\n <div id=\"qmsckeditor-imagemap-header\">\r\n <span id=\"qmsckeditor-imagemap-header_001\" mat-icon-button class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-imagemap-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-imagemap_002_001\">\r\n {{ LANG.QMSCKEDITOR.IMAGE_MAP_PROPERTIES }}\r\n </h2>\r\n </div>\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-content\">\r\n <div id=\"qmsckeditor-imagemap-content_001\" class=\"col-12 mt-1 pl-2 pr-2\">\r\n <mat-expansion-panel id=\"qmsckeditor-imagemap-panel\" [expanded]=\"true\" (opened)=\"(true)\" (closed)=\"(false)\">\r\n <div id=\"qmsckeditor-imagemap-panel_001\">\r\n <div id=\"qmsckeditor-imagemap-panel_001_001\" class=\"qmsckeditor__imagemap__information\">\r\n <form [formGroup]=\"imageMapFormGroup\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <mat-button-toggle-group [(ngModel)]=\"selectedMode\" formControlName=\"modeList\"\r\n (change)=\"onModeChange($event)\">\r\n <mat-button-toggle *ngFor=\"let mode of modes\" [value]=\"mode.id\"\r\n [matTooltip]=\"mode.name\">\r\n <mat-icon color=\"red\" [svgIcon]=\"mode.icon\" aria-hidden=\"true\">\r\n </mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <span style=\"margin-left: 15px;\" #myStatus></span>\r\n </div>\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.ZOOM }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedZoom\" formControlName=\"zoomList\"\r\n (ngModelChange)=\"onZoomChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let zoomType of zoomTypes\" [value]=\"zoomType.id\">\r\n {{ zoomType.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.LINK_TYPE }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedLinkType\" formControlName=\"linkTypeList\"\r\n (ngModelChange)=\"onLinkTypeChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let link of linkTypes\" [value]=\"link.id\">\r\n {{ link.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-3\" *ngIf=\"selectedLinkType === 0\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.TARGET }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedTarget\" formControlName=\"targetList\"\r\n (ngModelChange)=\"onTargetChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let target of targets\" [value]=\"target.id\">\r\n {{ target.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\"\r\n *ngIf=\"selectedLinkType === 1\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.ANCHOR_BY_NAME }}</mat-label>\r\n <mat-select [(ngModel)]=\"anchorText\" formControlName=\"anchorTextList\"\r\n (ngModelChange)=\"onAnchorTextChange()\">\r\n <mat-option *ngFor=\"let editorAnchor of editorAnchors\"\r\n [value]=\"editorAnchor.anchorValue\" disableOptionCentering>\r\n {{ editorAnchor.viewValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\"\r\n *ngIf=\"selectedLinkType === 0\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.PROTOCOL }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedProtocol\" formControlName=\"protocolList\"\r\n (ngModelChange)=\"onProtocolChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let protocol of protocols\" [value]=\"protocol.id\">\r\n {{ protocol.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-5\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.LINK_URL }}</mat-label>\r\n <input matInput [(ngModel)]=\"url\" name=\"url\" formControlName=\"url\"\r\n (ngModelChange)=\"onUrlChange()\" (keyup)=\"onUrlKeyup()\" />\r\n <mat-error *ngIf=\"imageMapFormGroup.get('url').hasError('required')\">{{\r\n LANG.QMSCKEDITOR.REQUIRED_URL }}\r\n </mat-error>\r\n <mat-error *ngIf=\"imageMapFormGroup.get('url').hasError('invalidURL')\">{{\r\n LANG.QMSCKEDITOR.INVALID_URL }}</mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"row button__groups\">\r\n <div class=\"col-6\">\r\n <button class=\"save\" mat-stroked-button (click)=\"attachment()\">\r\n {{ LANG.QMSCKEDITOR.ATTACHMENT }}\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"save\" mat-stroked-button (click)=\"eHandbook(false, false)\">\r\n {{ LANG.QMSCKEDITOR.HANDBOOK }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-panel_001_002\" class=\"qmsckeditor__imagemap__map\">\r\n <img #myImage [src]=\"imageMapData.imageUrl\">\r\n <mat-spinner diameter=\"40\" mode=\"indeterminate\" *ngIf=\"isImageLoading\"></mat-spinner>\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-panel_001_003\" class=\"qmsckeditor button__groups row mr-0 ml-0 mt-4\">\r\n <div class=\"col-4 pr-0\">\r\n <button class=\"save\" mat-flat-button (click)=\"removeMap()\">\r\n {{ LANG.QMSCKEDITOR.REMOVE_MAP }}\r\n </button>\r\n </div>\r\n <div class=\"col-4 pr-0\">\r\n <button class=\"save\" mat-flat-button (click)=\"save()\">\r\n {{ LANG.QMSCKEDITOR.SAVE }}\r\n </button>\r\n </div>\r\n <div class=\"col-4 pl-0\">\r\n <button class=\"cancel\" mat-flat-button (click)=\"cancel()\">\r\n {{ LANG.QMSCKEDITOR.CANCEL }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n</div>\r\n",
15953
+ styles: [".mt5{margin-top:5px!important}.mt10{margin-top:10px!important}.mt7{margin-top:7px!important}.mt15{margin-top:15px!important}.mt20{margin-top:20px!important}.mt30{margin-top:30px!important}.mt40{margin-top:40px!important}.ml2{margin-left:2px!important}.ml3{margin-left:3px!important}.ml5{margin-left:5px!important}.ml15{margin-left:15px!important}.ml10{margin-left:10px!important}.ml12{margin-left:12px!important}.ml16{margin-left:16px!important}.ml-auto{margin-left:auto!important}.ml-25{margin-left:-25px!important}.mr5{margin-right:5px!important}.mr12{margin-right:12px!important}.mr15{margin-right:15px!important}.mb5{margin-bottom:5px!important}.mb10{margin-bottom:10px!important}.mb15{margin-bottom:15px!important}.pt8{padding-top:8px!important}.pt10{padding-top:10px!important}.pt15{padding-top:15px!important}.pt16{padding-top:16px!important}.pl15{padding-left:15px!important}.pl0{padding-left:0!important}.pr0{padding-right:0!important}.pr15{padding-right:15px!important}.fs12{font-size:12px}.fs14{font-size:14px!important}.fs16{font-size:16px!important}.fs22{font-size:22px!important}.fw500{font-weight:500!important}.italic-text{font-style:italic}.display-flex{display:flex}.qmsckeditor{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.qmsckeditor h2{font-size:20px;font-weight:400}.qmsckeditor .mat-dialog-content{padding:0}.qmsckeditor .mat-icon{color:#909497}.qmsckeditor__fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;background:#fff;overflow-y:auto;max-height:100vh;overflow-x:hidden}.qmsckeditor__cursor{cursor:pointer}.qmsckeditor__notallowed{cursor:not-allowed}.qmsckeditor.button__close,.qmsckeditor.button__done{float:right;top:-24px;right:-24px;cursor:pointer}.qmsckeditor.button__done{margin-right:20px}.qmsckeditor.button__done .mat-icon{color:#28a745;font-weight:700}.qmsckeditor.button__groups button{min-height:40px;width:100%;border-radius:4px;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px}.qmsckeditor.button__groups .save{background:#f8f9f9}.qmsckeditor.button__groups .save:hover{background:#e5e7e9}.qmsckeditor.button__groups .save:disabled{cursor:not-allowed}.qmsckeditor.button__groups .cancel{background:#f8f9f9}.qmsckeditor.button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.button__groups .cancel:disabled{cursor:not-allowed}.qmsckeditor.button__groups .delete{background:#f8f9f9}.qmsckeditor.button__groups .delete:hover{background:#e5e7e9}.qmsckeditor.button__groups .delete:disabled{cursor:not-allowed}.qmsckeditor.confirm__button__groups button{min-height:36px;border-radius:4px;width:auto;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px}.qmsckeditor.confirm__button__groups .confirm{background:#f8f9f9}.qmsckeditor.confirm__button__groups .confirm:hover{background:#e5e7e9}.qmsckeditor.confirm__button__groups .cancel{background:#f8f9f9}.qmsckeditor.confirm__button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.template-content.height{min-height:420px;max-height:520px;overflow:auto}.qmsckeditor.template-content.title{margin-left:-9px}.qmsckeditor.link__content.height{min-height:400px;max-height:520px}.qmsckeditor.card{margin-bottom:10px;min-height:60px;box-shadow:none;border:1px solid #e5e5e5}.qmsckeditor.card .title{font-weight:700}.qmsckeditor.card .content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.qmsckeditor.card .material-icons{font-size:20px}.qmsckeditor.tooltip-content.height{min-height:400px;max-height:472px;overflow:auto}.qmsckeditor.save__as__template.height{height:125px}.ck-content .ck-horizontal-line,.ck-content .page-break{width:100%}.ck-content hr{background:#ccc}::ng-deep .qmsckeditor__imagemap__container .mat-form-field{width:100%}::ng-deep .qmsckeditor__imagemap__container .qmsckeditor__imagemap__information{position:relative}::ng-deep .qmsckeditor__imagemap__container .qmsckeditor__imagemap__map{overflow:auto;width:800px;min-height:371px;position:relative;max-height:460px;display:flex;justify-content:center;align-items:flex-start}::ng-deep .qmsckeditor__imagemap__container .mat-button-toggle-checked{border:1px solid #000!important}::ng-deep .qmsckeditor__imagemap__container .hidden{visibility:hidden}"]
15818
15954
  },] }
15819
15955
  ];
15820
15956
  QMSCKEditorImageMapComponent.ctorParameters = () => [
@@ -15860,7 +15996,7 @@ class QMSCKEditorTooltipComponent extends QMSCKEditorBaseComponent {
15860
15996
  this.LANG = this.translate.getObjectLang(res);
15861
15997
  }
15862
15998
  });
15863
- this.editorConfig = CKEditorCommonFunctions.getCKEditorConfiguration(',heading,|,fontsize,fontfamily,fontColor,fontBackgroundColor,|,bold,italic,underline,strikethrough,|,alignment,|,bulletedList,numberedList,|,outdent,indent,|,subscript,superscript,|,undo,redo,|,specialCharacters,blockQuote,insertTable,|,link,anchor,|,timestamp,|,removeformat');
15999
+ this.editorConfig = CKEditorCommonFunctions.getCKEditorConfiguration('heading,|,fontsize,fontfamily,fontColor,fontBackgroundColor,|,bold,italic,underline,strikethrough,|,alignment,|,bulletedList,numberedList,|,outdent,indent,|,subscript,superscript,|,undo,redo,|,specialCharacters,blockQuote,insertTable,|,link,anchor,|,timestamp,|,removeformat');
15864
16000
  }
15865
16001
  ngAfterViewChecked() {
15866
16002
  this.cdr.detectChanges();
@@ -15896,7 +16032,7 @@ class QMSCKEditorTooltipComponent extends QMSCKEditorBaseComponent {
15896
16032
  QMSCKEditorTooltipComponent.decorators = [
15897
16033
  { type: Component, args: [{
15898
16034
  selector: 'app-qmsck-tooltip',
15899
- template: "<div\r\n id=\"qmsckeditor-tooltip\"\r\n class=\"qmsckeditor qmsckeditor__tooltip__container\"\r\n>\r\n <div id=\"qmsckeditor-tooltip-header\">\r\n <span\r\n id=\"qmsckeditor-tooltip-header_001\"\r\n mat-icon-button\r\n class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-tooltip-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-tooltip_002_001\">\r\n {{ LANG.QMSCKEDITOR.INSERT_TOOLTIP }}\r\n </h2>\r\n </div>\r\n </div>\r\n <form [formGroup]=\"tooltipFormGroup\">\r\n <div\r\n id=\"qmsckeditor-tooltip-content\"\r\n class=\"qmsckeditor tooltip-content height\"\r\n >\r\n <div id=\"qmsckeditor-tooltip-content_001\" class=\"col-12 mt-1 pl-2 pr-2\">\r\n <mat-expansion-panel\r\n id=\"qmsckeditor-tooltip-panel\"\r\n [expanded]=\"true\"\r\n (opened)=\"(true)\"\r\n (closed)=\"(false)\"\r\n >\r\n <div id=\"qmsckeditor-tooltip-panel_001\">\r\n <div id=\"qmsckeditor-tooltip-panel_001_001\">\r\n <mat-form-field class=\"col-12 pl-0 pr-0\" appearance=\"fill\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.TITLE }}</mat-label>\r\n <input\r\n matInput\r\n [(ngModel)]=\"tooltip.text\"\r\n formControlName=\"title\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n <div id=\"qmsckeditor-tooltip-panel_001_002\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.CONTENT }}</mat-label>\r\n <div class=\"qmsckeditor_container col-12 pl-0 pr-0\">\r\n <ckeditor\r\n class=\"qms-ckeditor\"\r\n [(editor)]=\"editor\"\r\n [config]=\"editorConfig\"\r\n (ready)=\"onReady($event)\"\r\n [(ngModel)]=\"tooltip.content\"\r\n (change)=\"onChanged($event)\"\r\n (blur)=\"onBlur($event)\"\r\n formControlName=\"content\"\r\n >\r\n </ckeditor>\r\n </div>\r\n </div>\r\n <div\r\n id=\"qmsckeditor-tooltip-panel_001_003\"\r\n class=\"qmsckeditor button__groups row mr-0 ml-0 mt-4\"\r\n >\r\n <div class=\"col-6 pr-0\">\r\n <button\r\n class=\"save\"\r\n mat-flat-button\r\n (click)=\"saveTooltip()\"\r\n [disabled]=\"tooltipFormGroup.invalid\"\r\n >\r\n {{ LANG.QMSCKEDITOR.SAVE }}\r\n </button>\r\n </div>\r\n <div class=\"col-6 pl-0\">\r\n <button\r\n class=\"cancel\"\r\n mat-flat-button\r\n (click)=\"cancelTooltip()\"\r\n >\r\n {{ LANG.QMSCKEDITOR.CANCEL }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n",
16035
+ template: "<div id=\"qmsckeditor-tooltip\" class=\"qmsckeditor qmsckeditor__tooltip__container\">\r\n <div id=\"qmsckeditor-tooltip-header\">\r\n <span id=\"qmsckeditor-tooltip-header_001\" mat-icon-button class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-tooltip-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-tooltip_002_001\">\r\n {{ LANG.QMSCKEDITOR.INSERT_TOOLTIP }}\r\n </h2>\r\n </div>\r\n </div>\r\n <form [formGroup]=\"tooltipFormGroup\">\r\n <div id=\"qmsckeditor-tooltip-content\" class=\"qmsckeditor tooltip-content height\">\r\n <div id=\"qmsckeditor-tooltip-content_001\" class=\"col-12 mt-1 pl-2 pr-2\">\r\n <mat-expansion-panel id=\"qmsckeditor-tooltip-panel\" [expanded]=\"true\" (opened)=\"(true)\" (closed)=\"(false)\">\r\n <div id=\"qmsckeditor-tooltip-panel_001\">\r\n <div id=\"qmsckeditor-tooltip-panel_001_001\">\r\n <mat-form-field class=\"col-12 pl-0 pr-0\" appearance=\"fill\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.TITLE }}</mat-label>\r\n <input matInput [(ngModel)]=\"tooltip.text\" formControlName=\"title\" />\r\n </mat-form-field>\r\n </div>\r\n <div id=\"qmsckeditor-tooltip-panel_001_002\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.CONTENT }}</mat-label>\r\n <div class=\"qmsckeditor_container col-12 pl-0 pr-0\">\r\n <ckeditor class=\"qms-ckeditor\" [(editor)]=\"editor\" [config]=\"editorConfig\" (ready)=\"onReady($event)\"\r\n [(ngModel)]=\"tooltip.content\" (change)=\"onChanged($event)\" (blur)=\"onBlur($event)\"\r\n formControlName=\"content\">\r\n </ckeditor>\r\n </div>\r\n </div>\r\n <div id=\"qmsckeditor-tooltip-panel_001_003\" class=\"qmsckeditor button__groups row mr-0 ml-0 mt-4\">\r\n <div class=\"col-6 pr-0\">\r\n <button class=\"save\" mat-flat-button (click)=\"saveTooltip()\" [disabled]=\"tooltipFormGroup.invalid\">\r\n {{ LANG.QMSCKEDITOR.SAVE }}\r\n </button>\r\n </div>\r\n <div class=\"col-6 pl-0\">\r\n <button class=\"cancel\" mat-flat-button (click)=\"cancelTooltip()\">\r\n {{ LANG.QMSCKEDITOR.CANCEL }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n </form>\r\n</div>",
15900
16036
  styles: [".mt5{margin-top:5px!important}.mt10{margin-top:10px!important}.mt7{margin-top:7px!important}.mt15{margin-top:15px!important}.mt20{margin-top:20px!important}.mt30{margin-top:30px!important}.mt40{margin-top:40px!important}.ml2{margin-left:2px!important}.ml3{margin-left:3px!important}.ml5{margin-left:5px!important}.ml15{margin-left:15px!important}.ml10{margin-left:10px!important}.ml12{margin-left:12px!important}.ml16{margin-left:16px!important}.ml-auto{margin-left:auto!important}.ml-25{margin-left:-25px!important}.mr5{margin-right:5px!important}.mr12{margin-right:12px!important}.mr15{margin-right:15px!important}.mb5{margin-bottom:5px!important}.mb10{margin-bottom:10px!important}.mb15{margin-bottom:15px!important}.pt8{padding-top:8px!important}.pt10{padding-top:10px!important}.pt15{padding-top:15px!important}.pt16{padding-top:16px!important}.pl15{padding-left:15px!important}.pl0{padding-left:0!important}.pr0{padding-right:0!important}.pr15{padding-right:15px!important}.fs12{font-size:12px}.fs14{font-size:14px!important}.fs16{font-size:16px!important}.fs22{font-size:22px!important}.fw500{font-weight:500!important}.italic-text{font-style:italic}.display-flex{display:flex}.qmsckeditor{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.qmsckeditor h2{font-size:20px;font-weight:400}.qmsckeditor .mat-dialog-content{padding:0}.qmsckeditor .mat-icon{color:#909497}.qmsckeditor__fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;background:#fff;overflow-y:auto;max-height:100vh;overflow-x:hidden}.qmsckeditor__cursor{cursor:pointer}.qmsckeditor__notallowed{cursor:not-allowed}.qmsckeditor.button__close,.qmsckeditor.button__done{float:right;top:-24px;right:-24px;cursor:pointer}.qmsckeditor.button__done{margin-right:20px}.qmsckeditor.button__done .mat-icon{color:#28a745;font-weight:700}.qmsckeditor.button__groups button{min-height:40px;width:100%;border-radius:4px;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px}.qmsckeditor.button__groups .save{background:#f8f9f9}.qmsckeditor.button__groups .save:hover{background:#e5e7e9}.qmsckeditor.button__groups .save:disabled{cursor:not-allowed}.qmsckeditor.button__groups .cancel{background:#f8f9f9}.qmsckeditor.button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.button__groups .cancel:disabled{cursor:not-allowed}.qmsckeditor.button__groups .delete{background:#f8f9f9}.qmsckeditor.button__groups .delete:hover{background:#e5e7e9}.qmsckeditor.button__groups .delete:disabled{cursor:not-allowed}.qmsckeditor.confirm__button__groups button{min-height:36px;border-radius:4px;width:auto;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px}.qmsckeditor.confirm__button__groups .confirm{background:#f8f9f9}.qmsckeditor.confirm__button__groups .confirm:hover{background:#e5e7e9}.qmsckeditor.confirm__button__groups .cancel{background:#f8f9f9}.qmsckeditor.confirm__button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.template-content.height{min-height:420px;max-height:520px;overflow:auto}.qmsckeditor.template-content.title{margin-left:-9px}.qmsckeditor.link__content.height{min-height:400px;max-height:520px}.qmsckeditor.card{margin-bottom:10px;min-height:60px;box-shadow:none;border:1px solid #e5e5e5}.qmsckeditor.card .title{font-weight:700}.qmsckeditor.card .content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.qmsckeditor.card .material-icons{font-size:20px}.qmsckeditor.tooltip-content.height{min-height:400px;max-height:472px;overflow:auto}.qmsckeditor.save__as__template.height{height:125px}.ck-content .ck-horizontal-line,.ck-content .page-break{width:100%}.ck-content hr{background:#ccc}.qmsckeditor__tooltip__container .mat-form-field{width:100%}.qmsckeditor__tooltip__container textarea.mat-input-element{min-height:150px}"]
15901
16037
  },] }
15902
16038
  ];
@@ -15907,15 +16043,49 @@ QMSCKEditorTooltipComponent.ctorParameters = () => [
15907
16043
  { type: QMSCKEditorTooltip, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
15908
16044
  ];
15909
16045
 
15910
- //import { CKEditor5 } from '@ckeditor/ckeditor5-angular/ckeditor';
16046
+ class QMSCKEditorAboutComponent extends QMSCKEditorBaseComponent {
16047
+ constructor(translate, dialogRef, data) {
16048
+ super();
16049
+ this.translate = translate;
16050
+ this.dialogRef = dialogRef;
16051
+ this.data = data;
16052
+ this.currentVersion = data;
16053
+ }
16054
+ ngOnInit() {
16055
+ this.translate.getLanguageSubject$.pipe(takeUntil(this.ngUnsubcribe)).subscribe((res) => {
16056
+ if (res) {
16057
+ this.LANG = this.translate.getObjectLang(res);
16058
+ }
16059
+ });
16060
+ this.currentYear = new Date().getFullYear();
16061
+ }
16062
+ onCloseDialog() {
16063
+ this.dialogRef.close();
16064
+ }
16065
+ }
16066
+ QMSCKEditorAboutComponent.decorators = [
16067
+ { type: Component, args: [{
16068
+ selector: 'app-about-ckeditor',
16069
+ template: "<div id=\"qmsckeditor-about\" class=\"qmsckeditor qmsckeditor__about__container\">\r\n <div id=\"qmsckeditor-about-header\">\r\n <span id=\"qmsckeditor-about-header_001\" mat-icon-button class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-about-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-about_002_001\">\r\n {{ LANG.ABOUT.ABOUT_CKEDITOR }}\r\n </h2>\r\n </div>\r\n </div>\r\n <div id=\"qmsckeditor-about-content\">\r\n <div class=\"col-12 qmsckeditor__about__logo__container\">\r\n <img class=\"qmsckeditor__about__logo\" src=\"../../../../assets/images/ckeditor5.svg\" alt=\"CKEditor logo\">\r\n </div>\r\n <div class=\"col-12\">\r\n <p>{{LANG.ABOUT.CKEDITOR5_VERSION}} {{currentVersion}}.<br><a target=\"_blank\"\r\n href=\"https://ckeditor.com/\">https://ckeditor.com</a></p>\r\n <p>{{LANG.ABOUT.CHECK}} <a target=\"_blank\"\r\n href=\"https://ckeditor.com/docs/\">{{LANG.ABOUT.CKEDITOR_USERS_GUIDE}}</a> {{LANG.ABOUT.FOR_HELP}}.\r\n </p>\r\n <p>{{LANG.ABOUT.FOR_LICENSING_INFORMATION_PLEASE_VISIT_OUR_WEBSITE}}:<br><a target=\"_blank\"\r\n href=\"https://ckeditor.com/legal/ckeditor-oss-license/\">https://ckeditor.com/legal/ckeditor-oss-license/</a>\r\n </p>\r\n <p>{{LANG.ABOUT.COPYRIGHT}} 2003-{{currentYear}}, <a target=\"_blank\"\r\n href=\"https://cksource.com/\">CKSource</a> - Frederico Knabben.\r\n <br>{{LANG.ABOUT.ALL_RIGHTS_RESERVED}}.\r\n </p>\r\n </div>\r\n <div class=\"col-12\">\r\n <button mat-stroked-button class=\"qmsckeditor__about__button\" (click)=\"onCloseDialog()\">\r\n {{ LANG.QMSCKEDITOR.CLOSE }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>",
16070
+ styles: [".mt5{margin-top:5px!important}.mt10{margin-top:10px!important}.mt7{margin-top:7px!important}.mt15{margin-top:15px!important}.mt20{margin-top:20px!important}.mt30{margin-top:30px!important}.mt40{margin-top:40px!important}.ml2{margin-left:2px!important}.ml3{margin-left:3px!important}.ml5{margin-left:5px!important}.ml15{margin-left:15px!important}.ml10{margin-left:10px!important}.ml12{margin-left:12px!important}.ml16{margin-left:16px!important}.ml-auto{margin-left:auto!important}.ml-25{margin-left:-25px!important}.mr5{margin-right:5px!important}.mr12{margin-right:12px!important}.mr15{margin-right:15px!important}.mb5{margin-bottom:5px!important}.mb10{margin-bottom:10px!important}.mb15{margin-bottom:15px!important}.pt8{padding-top:8px!important}.pt10{padding-top:10px!important}.pt15{padding-top:15px!important}.pt16{padding-top:16px!important}.pl15{padding-left:15px!important}.pl0{padding-left:0!important}.pr0{padding-right:0!important}.pr15{padding-right:15px!important}.fs12{font-size:12px}.fs14{font-size:14px!important}.fs16{font-size:16px!important}.fs22{font-size:22px!important}.fw500{font-weight:500!important}.italic-text{font-style:italic}.display-flex{display:flex}.qmsckeditor{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.qmsckeditor h2{font-size:20px;font-weight:400}.qmsckeditor .mat-dialog-content{padding:0}.qmsckeditor .mat-icon{color:#909497}.qmsckeditor__fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;background:#fff;overflow-y:auto;max-height:100vh;overflow-x:hidden}.qmsckeditor__cursor{cursor:pointer}.qmsckeditor__notallowed{cursor:not-allowed}.qmsckeditor.button__close,.qmsckeditor.button__done{float:right;top:-24px;right:-24px;cursor:pointer}.qmsckeditor.button__done{margin-right:20px}.qmsckeditor.button__done .mat-icon{color:#28a745;font-weight:700}.qmsckeditor.button__groups button{min-height:40px;width:100%;border-radius:4px;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px}.qmsckeditor.button__groups .save{background:#f8f9f9}.qmsckeditor.button__groups .save:hover{background:#e5e7e9}.qmsckeditor.button__groups .save:disabled{cursor:not-allowed}.qmsckeditor.button__groups .cancel{background:#f8f9f9}.qmsckeditor.button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.button__groups .cancel:disabled{cursor:not-allowed}.qmsckeditor.button__groups .delete{background:#f8f9f9}.qmsckeditor.button__groups .delete:hover{background:#e5e7e9}.qmsckeditor.button__groups .delete:disabled{cursor:not-allowed}.qmsckeditor.confirm__button__groups button{min-height:36px;border-radius:4px;width:auto;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px}.qmsckeditor.confirm__button__groups .confirm{background:#f8f9f9}.qmsckeditor.confirm__button__groups .confirm:hover{background:#e5e7e9}.qmsckeditor.confirm__button__groups .cancel{background:#f8f9f9}.qmsckeditor.confirm__button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.template-content.height{min-height:420px;max-height:520px;overflow:auto}.qmsckeditor.template-content.title{margin-left:-9px}.qmsckeditor.link__content.height{min-height:400px;max-height:520px}.qmsckeditor.card{margin-bottom:10px;min-height:60px;box-shadow:none;border:1px solid #e5e5e5}.qmsckeditor.card .title{font-weight:700}.qmsckeditor.card .content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.qmsckeditor.card .material-icons{font-size:20px}.qmsckeditor.tooltip-content.height{min-height:400px;max-height:472px;overflow:auto}.qmsckeditor.save__as__template.height{height:125px}.ck-content .ck-horizontal-line,.ck-content .page-break{width:100%}.ck-content hr{background:#ccc}.qmsckeditor__about__container .qmsckeditor__about__logo__container{display:flex;justify-content:center;margin-bottom:10px}.qmsckeditor__about__container .qmsckeditor__about__logo{height:64px}.qmsckeditor__about__container .qmsckeditor__about__button{float:right}"]
16071
+ },] }
16072
+ ];
16073
+ QMSCKEditorAboutComponent.ctorParameters = () => [
16074
+ { type: TranslateLibraryService },
16075
+ { type: MatDialogRef },
16076
+ { type: String, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
16077
+ ];
16078
+
15911
16079
  class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
15912
16080
  /**
15913
16081
  * Constructor
15914
16082
  */
15915
- constructor(dialog, globalService, qmsCKEditorFullscreenComponent, renderer, elRef) {
16083
+ constructor(dialog, translate, globalService, treeService, qmsCKEditorFullscreenComponent, renderer, elRef) {
15916
16084
  super();
15917
16085
  this.dialog = dialog;
16086
+ this.translate = translate;
15918
16087
  this.globalService = globalService;
16088
+ this.treeService = treeService;
15919
16089
  this.qmsCKEditorFullscreenComponent = qmsCKEditorFullscreenComponent;
15920
16090
  this.renderer = renderer;
15921
16091
  this.elRef = elRef;
@@ -15944,9 +16114,15 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
15944
16114
  case this.ckEditorEventConst.QMSCK_BPMN_PLUGIN_MSG:
15945
16115
  this.bpmnEventHandling(event.data.value);
15946
16116
  break;
16117
+ case this.ckEditorEventConst.QMSCK_ABOUT_CKEDITOR_PLUGIN_MSG:
16118
+ this.aboutCKEditorEventHandling(event.data.value);
16119
+ break;
15947
16120
  case this.ckEditorEventConst.QMSCK_TOGGLE_TOOLBAR_MSG:
15948
16121
  this.toggleToolbarEventHandling();
15949
16122
  break;
16123
+ case this.ckEditorEventConst.QMSCK_BROWSE_VIDEO_MSG:
16124
+ this.browseVideoEventHandling(event.data.value);
16125
+ break;
15950
16126
  default:
15951
16127
  break;
15952
16128
  }
@@ -15954,6 +16130,11 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
15954
16130
  ngOnInit() {
15955
16131
  this.name = 'CKEditor custom build';
15956
16132
  this.ckEditor = this.qmsckPlugin.pluginObject;
16133
+ this.translate.getLanguageSubject$.pipe(takeUntil(this.ngUnsubcribe)).subscribe((res) => {
16134
+ if (res) {
16135
+ this.LANG = this.translate.getObjectLang(res);
16136
+ }
16137
+ });
15957
16138
  this.ckeditorConfig = CKEditorCommonFunctions.getCKEditorConfiguration(this.qmsckPlugin.itemToolbar);
15958
16139
  this.globalService.setApiUrl(this.qmsckData.apiUrl);
15959
16140
  if (this.isEnabledMathtypeConfig()) {
@@ -15965,6 +16146,12 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
15965
16146
  if (this.isEnabledToggleToolbar()) {
15966
16147
  this.addToggleToolbarConfig();
15967
16148
  }
16149
+ if (this.isEnabledWProofreader()) {
16150
+ this.addWProofreaderConfig();
16151
+ }
16152
+ if (this.isEnabledTOCToolbar()) {
16153
+ this.addToggleTOCConfig();
16154
+ }
15968
16155
  if (this.isEnabledFullScreenConfig()) {
15969
16156
  this.addFullScreenConfig();
15970
16157
  }
@@ -15985,6 +16172,23 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
15985
16172
  this.renderer.addClass(this.elRef.nativeElement, 'ck-disabled');
15986
16173
  }
15987
16174
  }
16175
+ isEnabledWProofreader() {
16176
+ const pattern = /(wproofreader)/gmi;
16177
+ return !!this.qmsckData.wproofreader
16178
+ && !!this.qmsckData.wproofreader.srcUrl
16179
+ && !!this.qmsckPlugin.itemToolbar
16180
+ && this.qmsckPlugin.itemToolbar.search(pattern) > -1;
16181
+ }
16182
+ addWProofreaderConfig() {
16183
+ const wproofreaderConfig = {
16184
+ wproofreader: Object.assign({}, this.qmsckData.wproofreader)
16185
+ };
16186
+ if (!this.qmsckData.wproofreader.serviceId || this.qmsckData.wproofreader.serviceId.length == 0) {
16187
+ //Fallback value of serviceId property to demo serviceId
16188
+ this.qmsckData.wproofreader.serviceId = '1:KpkvQ2-6KNUj-L1W3u2-C9j0K1-Zv2tY1-CfDOx-WfGRg2-qXtci-YyyE34-j09H42-b0aCt3-d9a';
16189
+ }
16190
+ this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, wproofreaderConfig);
16191
+ }
15988
16192
  isEnabledToggleToolbar() {
15989
16193
  const pattern = /(toggleToolbar)/gmi;
15990
16194
  return !!this.qmsckData.toggleToolbar
@@ -16014,6 +16218,21 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
16014
16218
  };
16015
16219
  this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, fullScreenConfig);
16016
16220
  }
16221
+ isEnabledTOCToolbar() {
16222
+ const pattern = /(tableOfContents)/gmi;
16223
+ return !!this.qmsckData.tableOfContentHeadings
16224
+ && !!this.qmsckPlugin.itemToolbar
16225
+ && this.qmsckPlugin.itemToolbar.search(pattern) > -1;
16226
+ }
16227
+ addToggleTOCConfig() {
16228
+ const items = this.qmsckData.tableOfContentHeadings.split(',');
16229
+ const tableOfContents = {
16230
+ tableOfContents: {
16231
+ supportedHeadings: items
16232
+ }
16233
+ };
16234
+ this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, tableOfContents);
16235
+ }
16017
16236
  isEnabledTimestampConfig() {
16018
16237
  const pattern = /(timestamp)/gmi;
16019
16238
  return !!this.qmsckData.timestampFormat
@@ -16075,17 +16294,20 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
16075
16294
  this.initEditor(editor);
16076
16295
  }
16077
16296
  initEditor(editor) {
16297
+ const imageUploadTypes = editor.config.get('image.upload.types');
16298
+ const maxFileSizeMB = this.qmsckData.maxFileSizeMB;
16299
+ const config = { apiUrl: this.qmsckData.apiUrl, LANG: this.LANG, imageUploadTypes, maxFileSizeMB };
16300
+ editor.plugins.get("FileRepository").createUploadAdapter = (loader) => {
16301
+ return new QmsUploadAdapter(loader, config);
16302
+ };
16078
16303
  editor.ui
16079
16304
  .getEditableElement()
16080
16305
  .parentElement.insertBefore(editor.ui.view.toolbar.element, editor.ui.getEditableElement());
16081
- editor.plugins.get('FileRepository').createUploadAdapter = (loader) => {
16082
- return new UploadAdapter(loader);
16083
- };
16084
16306
  // Apped Wordcount to CKeditor
16085
16307
  editor.plugins.get('WordCount').on('update', (evt, stats) => {
16086
16308
  // Prints the current content statistics.
16087
16309
  const wordsBox = document.querySelector('.wordcount-content');
16088
- wordsBox.textContent = `Words: ${stats.words} / Characters: ${stats.characters}`;
16310
+ wordsBox.textContent = `${this.LANG.QMSCKEDITOR.WORDS}: ${stats.words} / ${this.LANG.QMSCKEDITOR.CHARACTERS}: ${stats.characters}`;
16089
16311
  });
16090
16312
  }
16091
16313
  /**
@@ -16170,7 +16392,7 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
16170
16392
  data.ckEditor = this.qmsckPlugin.pluginObject;
16171
16393
  const dialogTemplate = this.dialog.open(QMSCKEditorTooltipComponent, {
16172
16394
  width: '650px',
16173
- height: '550px',
16395
+ height: '555px',
16174
16396
  data,
16175
16397
  disableClose: true
16176
16398
  });
@@ -16245,6 +16467,21 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
16245
16467
  }
16246
16468
  });
16247
16469
  }
16470
+ /*
16471
+ About CKEditor
16472
+ */
16473
+ aboutCKEditorEventHandling(version) {
16474
+ const dialogTemplate = this.dialog.open(QMSCKEditorAboutComponent, {
16475
+ width: '500px',
16476
+ data: version,
16477
+ disableClose: true
16478
+ });
16479
+ dialogTemplate
16480
+ .afterClosed()
16481
+ .pipe(takeUntil(this.ngUnsubcribe))
16482
+ .subscribe((result) => {
16483
+ });
16484
+ }
16248
16485
  /*
16249
16486
  Toolbar toggle
16250
16487
  */
@@ -16303,11 +16540,84 @@ class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
16303
16540
  }
16304
16541
  }
16305
16542
  }
16543
+ /**
16544
+ * Browse Video
16545
+ */
16546
+ browseVideoEventHandling(value) {
16547
+ this.treeService
16548
+ .getUploadVideoList()
16549
+ .pipe(takeUntil(this.ngUnsubcribe))
16550
+ .subscribe((response) => {
16551
+ const videos = response || [];
16552
+ const config = {
16553
+ allowSelectFolder: false,
16554
+ areaOfCurrentProcess: '',
16555
+ showCheckBox: true,
16556
+ allowMultipleCheck: value.allowMultipleFiles,
16557
+ onlyCheckBoxForChild: true,
16558
+ moduleId: DataType$2.document,
16559
+ openIcon: 'folder_open',
16560
+ openIconColor: '#1954A9',
16561
+ closeIcon: 'folder_filled',
16562
+ closeIconColor: '#4acaff',
16563
+ itemIcon: 'insert_drive_file',
16564
+ itemIconPath: '',
16565
+ itemIconBase64: '',
16566
+ singleSelectedNode: true,
16567
+ expandAll: true
16568
+ };
16569
+ const data = new PopupData();
16570
+ data.moduleId = 2;
16571
+ data.moduleName = this.LANG.QMSCKEDITOR.SELECT_VIDEO_FROM_ARCHIVE;
16572
+ data.treeData1 = videos.map((item) => {
16573
+ return {
16574
+ rootId: item.rootId,
16575
+ parentId: item.parentId,
16576
+ rootName: item.rootName,
16577
+ subName: item.subName,
16578
+ childId: item.childId,
16579
+ childName: item.childName,
16580
+ statusId: item.statusId,
16581
+ displayId: item.displayId,
16582
+ contentType: item.contentType,
16583
+ url: item.url
16584
+ };
16585
+ });
16586
+ data.treeData2 = [];
16587
+ data.treeConfig1 = config;
16588
+ const dialogRef = this.dialog.open(RelatedPopupComponent, {
16589
+ minWidth: '450px',
16590
+ maxWidth: '800px',
16591
+ minHeight: '620px',
16592
+ data,
16593
+ panelClass: 'qmsckeditor-browse-video-popup'
16594
+ });
16595
+ setTimeout(() => {
16596
+ const searchBox = window.document.querySelector('.qmsckeditor-browse-video-popup #qmslib_related_popup_search');
16597
+ if (searchBox) {
16598
+ searchBox.style.display = 'none';
16599
+ }
16600
+ }, 100);
16601
+ dialogRef
16602
+ .afterClosed()
16603
+ .subscribe((result) => {
16604
+ if (result) {
16605
+ const ids = result.reduce((result, item) => {
16606
+ result[item.id.toString()] = item.id;
16607
+ return result;
16608
+ }, {});
16609
+ const urls = videos.filter(i => i.childId && !!ids[i.childId.toString()]).map(i => i.url);
16610
+ const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_BROWSE_VIDEO_RESP, { detail: { urls: urls } });
16611
+ window.dispatchEvent(evt);
16612
+ }
16613
+ });
16614
+ });
16615
+ }
16306
16616
  }
16307
16617
  QMSCKEditorComponent.decorators = [
16308
16618
  { type: Component, args: [{
16309
16619
  selector: 'qms-ckeditor',
16310
- template: "<div id=\"qmsckeditor\" class=\"qmsckeditor_container\">\r\n <ckeditor class=\"qms-ckeditor\" [tagName]=\"ckTagname\" [(editor)]=\"ckEditor\" [config]=\"ckeditorConfig\"\r\n (ready)=\"onReady($event)\" [(ngModel)]=\"qmsckContentInput\" (change)=\"onChanged($event)\" (blur)=\"onBlur($event)\"\r\n [disabled]=\"isDisabled\">\r\n </ckeditor>\r\n <div class=\"sub-container\">\r\n <div class=\"\">\r\n <span>Assistive text</span>\r\n </div>\r\n <div class=\"wordcount-content\"></div>\r\n </div>\r\n</div>",
16620
+ template: "<div id=\"qmsckeditor\" class=\"qmsckeditor_container\">\r\n <ckeditor class=\"qms-ckeditor\" [tagName]=\"ckTagname\" [(editor)]=\"ckEditor\" [config]=\"ckeditorConfig\"\r\n (ready)=\"onReady($event)\" [(ngModel)]=\"qmsckContentInput\" (change)=\"onChanged($event)\" (blur)=\"onBlur($event)\"\r\n [disabled]=\"isDisabled\">\r\n </ckeditor>\r\n <div class=\"sub-container\">\r\n <div class=\"\">\r\n <span>{{LANG.QMSCKEDITOR.ASSISTIVE_TEXT}}</span>\r\n </div>\r\n <div class=\"wordcount-content\"></div>\r\n </div>\r\n</div>\r\n",
16311
16621
  providers: [
16312
16622
  QMSCKEditorFullscreenComponent,
16313
16623
  {
@@ -16328,7 +16638,9 @@ QMSCKEditorComponent.decorators = [
16328
16638
  ];
16329
16639
  QMSCKEditorComponent.ctorParameters = () => [
16330
16640
  { type: MatDialog },
16641
+ { type: TranslateLibraryService },
16331
16642
  { type: QMSCKEditorGlobalService },
16643
+ { type: QMSCKEditorTreeService },
16332
16644
  { type: QMSCKEditorFullscreenComponent },
16333
16645
  { type: Renderer2 },
16334
16646
  { type: ElementRef }
@@ -16364,7 +16676,8 @@ QMSCKEditorModule.decorators = [
16364
16676
  QMSCKEditorTooltipComponent,
16365
16677
  QMSCKEditorImageMapComponent,
16366
16678
  QMSCKEditorBpmnComponent,
16367
- SaveTemplateComponent
16679
+ SaveTemplateComponent,
16680
+ QMSCKEditorAboutComponent
16368
16681
  ],
16369
16682
  imports: [
16370
16683
  CKEditorModule$1,
@@ -16390,8 +16703,9 @@ QMSCKEditorModule.decorators = [
16390
16703
  MatAutocompleteModule,
16391
16704
  ScrollingModule,
16392
16705
  HttpClientModule,
16393
- SharedModule,
16394
16706
  MatTabsModule,
16707
+ MatProgressBarModule,
16708
+ SharedModule
16395
16709
  ],
16396
16710
  providers: [],
16397
16711
  exports: [QMSCKEditorComponent],
@@ -17250,10 +17564,10 @@ class SelectIncludeChildrenPopUpComponent {
17250
17564
  appIconService.registerRiskIcon(iconRegistry, domSanitizer);
17251
17565
  }
17252
17566
  ngAfterViewInit() {
17567
+ this.initTree(this.checkedNodeList);
17253
17568
  if (this.editItem) {
17254
17569
  this.focusEditItem(this.editItem);
17255
17570
  }
17256
- this.initTree(this.checkedNodeList);
17257
17571
  }
17258
17572
  ngOnDestroy() {
17259
17573
  this.ngUnsubscribe.next();
@@ -17299,16 +17613,60 @@ class SelectIncludeChildrenPopUpComponent {
17299
17613
  this.selectedOptions.push(element);
17300
17614
  if (element.type === SelectOptionTypes.IncludeChildren) {
17301
17615
  this.selectedOptions = this.selectedOptions.concat(element.children);
17616
+ if (!this.includeChildren) {
17617
+ this.disabledList = [...this.disabledList, element];
17618
+ this.disabledList = [...this.disabledList, ...element.children.map(x => {
17619
+ return {
17620
+ id: x.id,
17621
+ itemName: x.itemName,
17622
+ children: [],
17623
+ parentId: x.parentId,
17624
+ type: x.type,
17625
+ noSelectedChildren: 0,
17626
+ noChildren: 0
17627
+ };
17628
+ })];
17629
+ }
17630
+ }
17631
+ else {
17632
+ if (this.includeChildren) {
17633
+ this.disabledList = [...this.disabledList, element];
17634
+ }
17302
17635
  }
17303
17636
  this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
17304
17637
  });
17305
17638
  }
17306
17639
  }
17307
17640
  focusEditItem(selectedOption) {
17308
- const node = this.dataTrees.toArray()[0].getNodeByIdAndParentId(selectedOption.id, selectedOption.parentId);
17641
+ let parent;
17642
+ let parentList = [];
17643
+ parent = this.treeData.find(x => x.rootId === selectedOption.parentId);
17644
+ if (parent) {
17645
+ parentList.push({
17646
+ id: parent.rootId,
17647
+ itemName: parent.rootName,
17648
+ parentId: parent.parentId,
17649
+ type: SelectOptionTypes.IncludeChildren
17650
+ });
17651
+ parentList = this.getParentLineOfNode(parentList, parent);
17652
+ }
17653
+ let node;
17654
+ if (parentList.length > 0) {
17655
+ parentList.forEach(parent => {
17656
+ node = this.dataTrees.toArray()[0].getNodeByIdAndParentId(parent.id, parent.parentId);
17657
+ if (node) {
17658
+ this.dataTrees.toArray()[0].expandNode(node);
17659
+ const element = document.getElementById(`_${node.parentId ? node.parentId.toLowerCase() : ''}_${node.id.toLowerCase()}_${node.level}`);
17660
+ if (element) {
17661
+ element.scrollIntoView(false);
17662
+ }
17663
+ }
17664
+ });
17665
+ }
17666
+ node = this.dataTrees.toArray()[0].getNodeByIdAndParentId(selectedOption.id, selectedOption.parentId);
17309
17667
  if (node) {
17310
17668
  this.dataTrees.toArray()[0].expandNode(node);
17311
- const element = document.getElementById(`_${node.parentId ? node.parentId : ''}_${node.id}_${node.level}`);
17669
+ const element = document.getElementById(`_${node.parentId ? node.parentId.toLowerCase() : ''}_${node.id.toLowerCase()}_${node.level}`);
17312
17670
  if (element) {
17313
17671
  element.scrollIntoView(false);
17314
17672
  }
@@ -17319,7 +17677,7 @@ class SelectIncludeChildrenPopUpComponent {
17319
17677
  if (index >= 0) {
17320
17678
  if (this.checkedNodeList[index].type === SelectOptionTypes.IncludeChildren) {
17321
17679
  this.removeIncludeChildren(item);
17322
- this.refactorSelectList(item);
17680
+ this.deleteNodeFromSelectedNode(item);
17323
17681
  }
17324
17682
  else {
17325
17683
  let position = this.selectedOptions.findIndex(x => x.id === item.id && x.parentId === item.parentId);
@@ -17327,8 +17685,9 @@ class SelectIncludeChildrenPopUpComponent {
17327
17685
  this.selectedOptions.splice(position, 1);
17328
17686
  }
17329
17687
  }
17688
+ this.focusEditItem(this.checkedNodeList[index]);
17689
+ this.enableSelectedNode(this.checkedNodeList[index]);
17330
17690
  this.checkedNodeList.splice(index, 1);
17331
- this.enableSelectedNode({ id: item.id, parentId: item.parentId, itemName: item.name, type: SelectOptionTypes.IncludeChildren });
17332
17691
  this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
17333
17692
  }
17334
17693
  }
@@ -17360,7 +17719,7 @@ class SelectIncludeChildrenPopUpComponent {
17360
17719
  this.checkedNodeList.push({
17361
17720
  id: item.id,
17362
17721
  itemName: item.itemName,
17363
- type: SelectOptionTypes.SelectOne,
17722
+ type: item.type,
17364
17723
  parentId: item.parentId,
17365
17724
  children: [],
17366
17725
  noChildren: 0,
@@ -17369,6 +17728,15 @@ class SelectIncludeChildrenPopUpComponent {
17369
17728
  }
17370
17729
  }
17371
17730
  this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
17731
+ this.focusEditItem({
17732
+ id: item.id,
17733
+ itemName: item.itemName,
17734
+ type: item.type,
17735
+ parentId: item.parentId,
17736
+ children: [],
17737
+ noChildren: 0,
17738
+ noSelectedChildren: 0
17739
+ });
17372
17740
  }
17373
17741
  getItemIconType(item) {
17374
17742
  if (item.itemIcon && item.itemIcon.length)
@@ -17439,12 +17807,29 @@ class SelectIncludeChildrenPopUpComponent {
17439
17807
  });
17440
17808
  }
17441
17809
  removeIncludeChildren(item) {
17810
+ const index = this.checkedNodeList.findIndex(x => x.id.toLowerCase() === item.id.toLowerCase() && x.parentId.toLowerCase() === x.parentId.toLowerCase() && x.type === SelectOptionTypes.IncludeChildren);
17811
+ if (index >= 0) {
17812
+ let listChildren = this.checkedNodeList[index].children;
17813
+ const itemIndex = this.selectedOptions.findIndex(node => node.id.toLowerCase() === item.id.toLowerCase() && node.parentId.toLowerCase() === item.parentId.toLowerCase());
17814
+ if (itemIndex >= 0) {
17815
+ this.enableSelectedNode(this.checkedNodeList[index]);
17816
+ this.selectedOptions.splice(itemIndex, 1);
17817
+ }
17818
+ listChildren.forEach(x => {
17819
+ const index = this.selectedOptions.findIndex(node => node.id.toLowerCase() === x.id.toLowerCase() && node.parentId.toLowerCase() === x.parentId.toLowerCase());
17820
+ if (index >= 0) {
17821
+ this.selectedOptions.splice(index, 1);
17822
+ this.disabledList = this.disabledList.filter(node => !(x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase()));
17823
+ }
17824
+ });
17825
+ return;
17826
+ }
17442
17827
  let listChildren = [];
17443
17828
  listChildren = this.getAllChildrenNodeRecursive(listChildren, item);
17444
17829
  const itemIndex = this.selectedOptions.findIndex(node => node.id === item.id && node.parentId === item.parentId);
17445
17830
  if (itemIndex >= 0) {
17446
- this.enableSelectedNode(this.selectedOptions[itemIndex]);
17447
17831
  this.selectedOptions.splice(itemIndex, 1);
17832
+ this.disabledList = this.disabledList.filter(x => !(x.id === item.id && x.parentId === item.parentId));
17448
17833
  }
17449
17834
  listChildren.forEach(x => {
17450
17835
  const index = this.selectedOptions.findIndex(node => node.id === x.id && node.parentId === x.parentId);
@@ -17563,7 +17948,7 @@ class SelectIncludeChildrenPopUpComponent {
17563
17948
  }
17564
17949
  }
17565
17950
  this.checkedNodeList = this.checkedNodeList.filter(x => x.id !== node.id || x.parentId !== node.parentId);
17566
- this.refactorSelectList(node);
17951
+ this.deleteNodeFromSelectedNode(node);
17567
17952
  }
17568
17953
  else {
17569
17954
  const itemIndex = this.selectedOptions.findIndex(item => node.id === item.id && node.parentId === item.parentId);
@@ -17636,6 +18021,16 @@ class SelectIncludeChildrenPopUpComponent {
17636
18021
  });
17637
18022
  }
17638
18023
  refactorSelectList(node) {
18024
+ this.combineNodes({
18025
+ id: node.id,
18026
+ itemName: node.name,
18027
+ type: SelectOptionTypes.IncludeChildren,
18028
+ parentId: node.parentId
18029
+ });
18030
+ }
18031
+ deleteNodeFromSelectedNode(node) {
18032
+ let children = [];
18033
+ children = this.getAllChildrenNodeRecursive(children, node);
17639
18034
  let parent;
17640
18035
  let parentList = [];
17641
18036
  parent = this.treeData.find(x => x.rootId === node.parentId);
@@ -17648,30 +18043,23 @@ class SelectIncludeChildrenPopUpComponent {
17648
18043
  });
17649
18044
  parentList = this.getParentLineOfNode(parentList, parent);
17650
18045
  }
18046
+ let parentIndex = -1;
17651
18047
  if (parentList.length > 0) {
17652
- const selectedParentList = parentList.filter(x => this.selectedOptions
17653
- .findIndex(selectedNode => x.id === selectedNode.id && x.parentId === selectedNode.parentId) >= 0);
17654
- if (selectedParentList.length > 0) {
17655
- const highestSelectedNode = selectedParentList[selectedParentList.length - 1];
17656
- this.combineNodes(highestSelectedNode);
17657
- this.disabledList = this.disabledList.filter(x => !(x.id === highestSelectedNode.id && x.parentId === highestSelectedNode.parentId));
17658
- }
17659
- else {
17660
- this.combineNodes({
17661
- id: node.id,
17662
- itemName: node.name,
17663
- type: SelectOptionTypes.IncludeChildren,
17664
- parentId: node.parentId
17665
- });
17666
- this.disabledList = this.disabledList.filter(x => !(x.id === node.id && x.parentId === node.parentId));
17667
- }
17668
- }
17669
- else {
17670
- this.combineNodes({
17671
- id: node.id,
17672
- itemName: node.name,
17673
- type: SelectOptionTypes.IncludeChildren,
17674
- parentId: node.parentId
18048
+ parentList.forEach(parent => {
18049
+ parentIndex = this.checkedNodeList.findIndex(x => x.id.toLowerCase() === parent.id.toLowerCase() && x.parentId.toLowerCase() === parent.parentId.toLowerCase());
18050
+ if (parentIndex >= 0) {
18051
+ const index = this.checkedNodeList[parentIndex].children.findIndex(x => x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase());
18052
+ if (index >= 0) {
18053
+ this.checkedNodeList[parentIndex].children.splice(index, 1);
18054
+ }
18055
+ children.forEach(child => {
18056
+ const index = this.checkedNodeList[parentIndex].children.findIndex(x => x.id.toLowerCase() === child.id.toLowerCase() && x.parentId.toLowerCase() === child.parentId.toLowerCase());
18057
+ if (index >= 0) {
18058
+ this.checkedNodeList[parentIndex].children.splice(index, 1);
18059
+ }
18060
+ });
18061
+ this.checkedNodeList[parentIndex].noSelectedChildren = this.checkedNodeList[parentIndex].children.length;
18062
+ }
17675
18063
  });
17676
18064
  }
17677
18065
  }
@@ -17715,7 +18103,7 @@ class SelectIncludeChildrenPopUpComponent {
17715
18103
  this.checkedNodeList[selectedNodeIndex].children = nodeList;
17716
18104
  this.checkedNodeList[selectedNodeIndex].noChildren = children.length;
17717
18105
  this.checkedNodeList[selectedNodeIndex].noSelectedChildren = nodeList.length;
17718
- this.checkedNodeList[selectedNodeIndex].type = children.length === 0 ? SelectOptionTypes.SelectOne : SelectOptionTypes.IncludeChildren;
18106
+ this.checkedNodeList[selectedNodeIndex].type = SelectOptionTypes.IncludeChildren;
17719
18107
  }
17720
18108
  }
17721
18109
  getParentLineOfNode(listParent, node) {
@@ -17739,7 +18127,7 @@ class SelectIncludeChildrenPopUpComponent {
17739
18127
  return {
17740
18128
  id: x.id,
17741
18129
  name: x.itemName,
17742
- parentId: node.id,
18130
+ parentId: x.parentId,
17743
18131
  level: 0,
17744
18132
  expandable: true,
17745
18133
  hasChild: true,
@@ -17771,18 +18159,11 @@ class SelectIncludeChildrenPopUpComponent {
17771
18159
  }
17772
18160
  }
17773
18161
  enableSelectedNode(node) {
17774
- let children = [];
17775
- children = this.getAllChildrenNodeRecursive(children, {
17776
- id: node.id,
17777
- name: node.itemName,
17778
- parentId: node.parentId,
17779
- level: 0,
17780
- expandable: true,
17781
- hasChild: true,
17782
- disabled: false
17783
- });
17784
- this.disabledList = this.disabledList.filter(x => children.filter(child => (x.id === child.id && x.parentId === child.parentId)).length === 0);
17785
18162
  this.disabledList = this.disabledList.filter(x => !(x.id === node.id && x.parentId === node.parentId));
18163
+ if (node.type === SelectOptionTypes.IncludeChildren) {
18164
+ let children = node.children;
18165
+ this.disabledList = this.disabledList.filter(x => children.filter(child => (x.id === child.id && x.parentId === child.parentId)).length === 0);
18166
+ }
17786
18167
  }
17787
18168
  }
17788
18169
  SelectIncludeChildrenPopUpComponent.decorators = [
@@ -20515,7 +20896,7 @@ class QMSNavigationDrawerComponent {
20515
20896
  QMSNavigationDrawerComponent.decorators = [
20516
20897
  { type: Component, args: [{
20517
20898
  selector: 'app-qms-navigation-drawer',
20518
- template: "<mat-tree class=\"qms-navigation-drawer-container\" [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\" [cdkDropListDisabled]=\"dragDropListDisabled\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" (mouseover)=\"onOver(node)\" matTreeNodePadding matTreeNodePaddingIndent=\"34\"\r\n cdkDrag [cdkDragData]=\"node\" (mouseenter)=\"dragHover(node)\" (mouseleave)=\"dragHoverEnd()\"\r\n (cdkDragStarted)=\"dragStart()\" (cdkDragReleased)=\"dragEnd()\"\r\n [ngClass]=\"{'expand-node' : treeControl.isExpanded(node), 'collapse-node': !treeControl.isExpanded(node), 'active': activeNode == node.id}\">\r\n <div *ngIf=\"!node.isReadOnly\" (click)=\"onClickNode(node.id)\" class=\"tree-content\">\r\n <div class=\"span-text\" mode=\"dark\" position=\"below\">{{ node.name }}</div>\r\n <button tabindex=\"-1\" class=\"button-icon collapse-expand-icon space-icon\" mat-icon-button>\r\n <img class=\"img-icon\" [src]=\"faIconPath\" alt=\"\" />\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\"\r\n *ngIf=\"showFavoriteIcon && (node.id === hoverNode.id || node.favorite)\"\r\n (click)=\"addFavoriteNode(node.id, $event)\" (mouseenter)=\"setHoverFavorite(node.id)\"\r\n (mouseleave)=\"setHoverFavorite(null)\" [ngClass]=\"{'btn-favorite': (node.id === hoverNode.id && showAddIcon)}\"\r\n matTooltip=\"{{!node.favorite ? addFavoriteTooltip : deleteFavoriteTooltip}}\" mode=\"dark\" position=\"below\"\r\n mat-icon-button>\r\n <mat-icon class=\"mat-icon-rtl-mirror blur-icon\" [class.favorite]=\"true\"\r\n [class.not-favorite]=\"!node.favorite && node.id === hoverNode.id && isHover\">\r\n {{node.favorite && node.id === hoverNode.id && isHover ? 'star_rate_outline' : ''}}\r\n {{!node.favorite && node.id === hoverNode.id && isHover ? 'star_border' : ''}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" *ngIf=\"node.id === hoverNode.id && showAddIcon\"\r\n matTooltip=\"{{addNodeTooltip}}\" (click)=\"addNewNode(node.id, $event)\" mode=\"dark\" position=\"below\"\r\n mat-icon-button>\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n add\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </mat-tree-node>\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" (mouseover)=\"onOver(node)\" matTreeNodePadding\r\n matTreeNodePaddingIndent=\"34\" cdkDrag [cdkDragData]=\"node\" (mouseenter)=\"dragHover(node)\"\r\n (mouseleave)=\"dragHoverEnd()\" (cdkDragStarted)=\"dragStart()\" (cdkDragReleased)=\"dragEnd()\"\r\n [ngClass]=\"\r\n {'expand-node' : treeControl.isExpanded(node), 'collapse-node': !treeControl.isExpanded(node), 'active': activeNode == node.id}\">\r\n <div *ngIf=\"!node.isReadOnly\" (click)=\"onClickNode(node.id)\" class=\"tree-content\"\r\n (keydown)=\"onKeyDownNode($event, node)\">\r\n <span class=\"span-text\" mode=\"dark\" position=\"below\">{{ node.name }}</span>\r\n <button tabindex=\"-1\" class=\"button-icon space-icon collapse-expand-icon\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'toggle ' + node.name\" (click)=\"onClickToggleNode(node)\">\r\n <mat-icon class=\"mat-icon-rtl-mirror arrow-icon left-icon\">\r\n {{treeControl.isExpanded(node) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\"\r\n matTooltip=\"{{!node.favorite ? addFavoriteTooltip : deleteFavoriteTooltip}}\"\r\n *ngIf=\"showFavoriteIcon && (node.id === hoverNode.id || node.favorite)\"\r\n (click)=\"addFavoriteNode(node.id, $event)\"\r\n [ngClass]=\"{'btn-favorite': (node.id === hoverNode.id && showAddIcon)}\" (mouseenter)=\"setHoverFavorite(node.id)\"\r\n (mouseleave)=\"setHoverFavorite(null)\" mode=\"dark\" position=\"below\" mat-icon-button>\r\n <mat-icon class=\"mat-icon-rtl-mirror blur-icon\" [class.favorite]=\"true\"\r\n [class.not-favorite]=\"!node.favorite && node.id === hoverNode.id && isHover\">\r\n {{node.favorite && node.id === hoverNode.id && isHover ? 'star_rate_outline' : ''}}\r\n {{!node.favorite && node.id === hoverNode.id && isHover ? 'star_border' : ''}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" *ngIf=\"node.id === hoverNode.id && showAddIcon\"\r\n matTooltip=\"{{addNodeTooltip}}\" (click)=\"addNewNode(node.id, $event)\" mat-icon-button>\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n add\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </mat-tree-node>\r\n</mat-tree>",
20899
+ template: "<mat-tree class=\"qms-navigation-drawer-container\" [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\" [cdkDropListDisabled]=\"dragDropListDisabled\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" (mouseover)=\"onOver(node)\" matTreeNodePadding matTreeNodePaddingIndent=\"34\"\r\n cdkDrag [cdkDragData]=\"node\" (mouseenter)=\"dragHover(node)\" (mouseleave)=\"dragHoverEnd()\"\r\n (cdkDragStarted)=\"dragStart()\" (cdkDragReleased)=\"dragEnd()\"\r\n [ngClass]=\"{'expand-node' : treeControl.isExpanded(node), 'collapse-node': !treeControl.isExpanded(node), 'active': activeNode == node.id}\">\r\n <div *ngIf=\"!node.isReadOnly\" (click)=\"onClickNode(node.id)\" class=\"tree-content\">\r\n <div class=\"span-text\" mode=\"dark\" position=\"below\">{{ node.name }}</div>\r\n <button tabindex=\"-1\" class=\"button-icon collapse-expand-icon space-icon\" qms-btn-icon>\r\n <img class=\"img-icon\" [src]=\"faIconPath\" alt=\"\" />\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" \r\n *ngIf=\"showFavoriteIcon && (node.id === hoverNode.id || node.favorite)\"\r\n (click)=\"addFavoriteNode(node.id, $event)\" (mouseenter)=\"setHoverFavorite(node.id)\"\r\n (mouseleave)=\"setHoverFavorite(null)\" [ngClass]=\"{'btn-favorite': (node.id === hoverNode.id && isHover)}\"\r\n matTooltip=\"{{!node.favorite ? addFavoriteTooltip : deleteFavoriteTooltip}}\" mode=\"dark\" position=\"below\"\r\n qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror blur-icon\" [class.favorite]=\"true\"\r\n [class.not-favorite]=\"!node.favorite && node.id === hoverNode.id && isHover\">\r\n {{node.favorite && node.id === hoverNode.id && isHover ? 'star_rate_outline' : ''}}\r\n {{!node.favorite && node.id === hoverNode.id && isHover ? 'star_border' : ''}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" *ngIf=\"node.id === hoverNode.id && isHover\"\r\n matTooltip=\"{{addNodeTooltip}}\" (click)=\"addNewNode(node.id, $event)\" mode=\"dark\" position=\"below\"\r\n qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n add\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </mat-tree-node>\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" (mouseover)=\"onOver(node)\" matTreeNodePadding\r\n matTreeNodePaddingIndent=\"34\" cdkDrag [cdkDragData]=\"node\" (mouseenter)=\"dragHover(node)\"\r\n (mouseleave)=\"dragHoverEnd()\" (cdkDragStarted)=\"dragStart()\" (cdkDragReleased)=\"dragEnd()\"\r\n [ngClass]=\"\r\n {'expand-node' : treeControl.isExpanded(node), 'collapse-node': !treeControl.isExpanded(node), 'active': activeNode == node.id}\">\r\n <div *ngIf=\"!node.isReadOnly\" (click)=\"onClickNode(node.id)\" class=\"tree-content\"\r\n (keydown)=\"onKeyDownNode($event, node)\">\r\n <span class=\"span-text\" mode=\"dark\" position=\"below\">{{ node.name }}</span>\r\n <button tabindex=\"-1\" class=\"button-icon space-icon collapse-expand-icon\" qms-btn-icon matTreeNodeToggle\r\n [attr.aria-label]=\"'toggle ' + node.name\" (click)=\"onClickToggleNode(node)\">\r\n <mat-icon class=\"mat-icon-rtl-mirror arrow-icon left-icon\">\r\n {{treeControl.isExpanded(node) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" \r\n matTooltip=\"{{!node.favorite ? addFavoriteTooltip : deleteFavoriteTooltip}}\"\r\n *ngIf=\"showFavoriteIcon && (node.id === hoverNode.id || node.favorite)\"\r\n (click)=\"addFavoriteNode(node.id, $event)\"\r\n [ngClass]=\"{'btn-favorite': (node.id === hoverNode.id && isHover)}\" (mouseenter)=\"setHoverFavorite(node.id)\"\r\n (mouseleave)=\"setHoverFavorite(null)\" mode=\"dark\" position=\"below\" qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror blur-icon\" [class.favorite]=\"true\"\r\n [class.not-favorite]=\"!node.favorite && node.id === hoverNode.id && isHover\">\r\n {{node.favorite && node.id === hoverNode.id && isHover ? 'star_rate_outline' : ''}}\r\n {{!node.favorite && node.id === hoverNode.id && isHover ? 'star_border' : ''}}\r\n </mat-icon>\r\n </button>\r\n <button tabindex=\"-1\" class=\"button-icon add-icon\" *ngIf=\"node.id === hoverNode.id && isHover\" \r\n matTooltip=\"{{addNodeTooltip}}\" (click)=\"addNewNode(node.id, $event)\" qms-btn-icon>\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n add\r\n </mat-icon>\r\n </button>\r\n </div>\r\n </mat-tree-node>\r\n</mat-tree>",
20519
20900
  styles: ["::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node{width:272px!important;height:48px!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node{min-height:34px;margin:16px 0;padding-right:34px}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.active{background-color:#f2f7fd}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content{width:100%;position:relative;cursor:pointer}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .arrow-icon{color:#00324e}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .collapse-expand-icon{color:#3e57b7}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .collapse-expand-icon:hover{background:rgba(0,0,0,.08)}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .add-icon{color:#3e57b7}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .add-icon:hover{background:rgba(0,0,0,.08)}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .left-icon{color:#919191}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.expand-node{padding-left:0;position:static;height:32px;left:calc(50% - 216px/2);top:0;font-family:Open Sans;font-style:normal;font-weight:400;font-size:14px;line-height:19px;display:flex;align-items:center;color:#1954a9;flex:none;order:0;align-self:stretch;flex-grow:1}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.expand-node ::ng-deep mat-icon{color:#1954a9}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.collapse-node{position:static;height:32px;left:calc(50% - 176px/2);top:0;font-family:Open Sans;font-style:normal;font-weight:400;font-size:14px;line-height:19px;display:flex;align-items:center;color:#323232;flex:none;order:0;align-self:stretch;flex-grow:1}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .button-icon{width:30px;height:30px;line-height:30px!important;border-radius:50%}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .button-icon:hover{border-radius:50%}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .img-icon{max-height:25px;max-width:25px}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .add-icon{position:absolute;top:-2px;right:-34px}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .add-icon mat-icon{top:3px;right:3px;border-radius:50%}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .favorite{color:#b13514}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .not-favorite{color:rgba(0,0,0,.6)!important}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .btn-favorite{right:-5px;color:unset}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .space-icon{position:absolute;top:-5px;left:0}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .span-text{position:relative;overflow:hidden;text-overflow:ellipsis;padding-left:42px;max-width:calc(100% - 56px);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node .tree-content .span-text:after{content:\"\";display:block;clear:both}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node:first-child{margin:0}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.collapse-node:hover{background:#00000014}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.collapse-node:active{background:#0000001f}::ng-deep mat-tree.qms-navigation-drawer-container .mat-tree-node.expand-node:active{background:#f2f7fd}"]
20520
20901
  },] }
20521
20902
  ];
@@ -20550,7 +20931,6 @@ QMSNavigationDrawerModule.decorators = [
20550
20931
  CommonModule,
20551
20932
  MatIconModule,
20552
20933
  MatToolbarModule,
20553
- MatButtonModule,
20554
20934
  QMSButtonModule,
20555
20935
  MatTooltipModule,
20556
20936
  DragDropModule,
@@ -20765,5 +21145,5 @@ QmsPaginatorModule.decorators = [
20765
21145
  * Generated bundle index. Do not edit.
20766
21146
  */
20767
21147
 
20768
- export { AutocompleteOffDirective, BREADCRUMB_DROPDOWN_ICON, BUTTON_TOGGLE_DEFAULT_OPTIONS, BUTTON_TOGGLE_GROUP, BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, BannerType, BpmnService, BreadcrumbNode, ButtonToggleChange, CHECKLIST_ICON, CKEditorEventConst, CKEditorModule, CdkDetailRowDirective, ConfirmDialog, DEPARTMENT_FOLDER_ICON, DEPARTMENT_FOLDER_OUTLINED_ICON, DEVIATION_ICON, DOCUMENT_DEPARTMENT_ICON, DOCUMENT_ENTERPRISE_ICON, DOCUMENT_ICON, DOCUMENT_LOCAL_ICON, DOCUMENT_REGIONAL_ICON, DataType$1 as DataType, DateFormatPipe, DocumentNodeType$1 as DocumentNodeType, ENTERPRISE_FOLDER_ICON, ENTERPRISE_FOLDER_OUTLINED_ICON, FileErrorType, FlowChartConst, FlowchartViewMode, ISelectOneItem, InformationCoverItem, KEYBOARD_DOWN_ICON, KEYBOARD_UP_ICON, LOCAL_FOLDER_ICON, LOCAL_FOLDER_OUTLINED_ICON, LinkAnchor, LinkType, MarginDirective, ModuleType$1 as ModuleType, NORMAL_FOLDER_ICON, NORMAL_FOLDER_OUTLINED_ICON, NewTreeComponent, NewTreeModel, PROCESS_AREA_ICON, PROCESS_AREA_OUTLINED_ICON, PROCESS_ICON, PaginationSize, PopupData, ProtocolType, ProtocolTypeName, QMSAnchor, QMSAppBar, QMSAppIconModule, QMSAttachmentListDirective, QMSBreadcrumb, QMSBreadcrumbDirectionIconDirective, QMSBreadcrumbItemDirective, QMSBreadcrumbModule, QMSButton, QMSButtonIcon, QMSButtonModule, QMSButtonToggle, QMSButtonToggleGroup, QMSCKEditorBaseComponent, QMSCKEditorBaseService, QMSCKEditorBpmn, QMSCKEditorBpmnApiService, QMSCKEditorBpmnComponent, QMSCKEditorBpmnTemplate, QMSCKEditorComponent, QMSCKEditorConfirmComponent, QMSCKEditorData, QMSCKEditorDialogData, QMSCKEditorDocumentType, QMSCKEditorFlowchart, QMSCKEditorFlowchartService, QMSCKEditorFullscreenComponent, QMSCKEditorGlobalService, QMSCKEditorInjector, QMSCKEditorLinkAnchorDocument, QMSCKEditorLinkComponent, QMSCKEditorLinkService, QMSCKEditorLoadTemplateComponent, QMSCKEditorModule, QMSCKEditorPlugin, QMSCKEditorRelatedComponent, QMSCKEditorRelation, QMSCKEditorSaveAsTemplate, QMSCKEditorTemplate, QMSCKEditorTemplateService, QMSCKEditorToastService, QMSCKEditorTreeComponent, QMSCKEdtiorInputData, QMSChipBodyDirective, QMSChipInputChipListDirective, QMSChipInputDirective, QMSChipInputSelectDropWDownDirective, QMSChipInputSelectFieldDirective, QMSChipInputSelectTriggerDirective, QMSCollapseGroupDirective, QMSComment, QMSConfirmDialog, QMSDialogConfig, QMSDrawerContentDirective, QMSDrawerDirective, QMSDrawerHeaderActionDirective, QMSDrawerHeaderDirective, QMSDropdownMenuItem, QMSEditFileNameDialog, QMSEditFileNameDialogModule, QMSFileAttachment, QMSFileUploadDirective, QMSFileUploadDisplayDirective, QMSFileUploadMultipleDirective, QMSFileUploadMultipleDisplayDirective, QMSFileUploadMultipleSelectorDirective, QMSFileUploadSelectorDirective, QMSFormDialog, QMSFormFieldDatePickerDirective, QMSFormFieldDirective, QMSFormFieldTextareaDirective, QMSGroupOptionDirective, QMSIconRegistryService, QMSInputChipDirective, QMSInputClearDirective, QMSList, QMSListExpansion, QMSListExpansionHeader, QMSListHeader, QMSListItem, QMSListLeadingIcon, QMSListLine, QMSListModule, QMSNavigationDrawerComponent, QMSNavigationDrawerModule, QMSNewTreeModule, QMSPaginatorComponent, QMSProcessDocumentItem, QMSRangeSliderDirective, QMSRangeSliderLockUpDirective, QMSRangeSliderModule, QMSRelatedGlobalService, QMSRelatedModule, QMSRichText, QMSRichTextModule, QMSRowDetailDirective, QMSRowExpandDirective, QMSScrolableAttachmentListDirective, QMSScrollbarDirective, QMSSearchFieldDirective, QMSSelectGlobalService, QMSSelectIncludeChildrenModule, QMSSelectOneGlobalService, QMSSelectOneModule, QMSSelectProcessDocumentGlobalService, QMSSelectProcessDocumentModule, QMSSnackbarConfig, QMSSuffixDirective, QMSSuffixFieldDirective, QMSTabGroupAdvancedDirective, QMSTabGroupDirective, QMSTabLabelDirective, QMSTabModule, QMSTableAction, QMSTableActionBlock, QMSTableChildrenDirective, QMSTableDirective, QMSTableExpandDirective, QMSTableModule, QMSTextBlockDirective, QMSTextBlockLine, QMSToolTipComponent, QMSToolTipRendererDirective, QMSTooltipImageDirective, QMSTooltipModule, QMSTreeModule, QMSUploadFileErrorDialog, QMSUploadFileErrorDialogModule, QMSUploadingFileGuard, QmsAngularComponent, QmsAngularModule, QmsAngularService, QmsAppBarComponent, QmsAppBarModule, QmsBadgesComponent, QmsBadgesModule, QmsBannerComponent, QmsBannerConfirmButton, QmsBannerConfirmButtonClick, QmsBannerConfirmComponent, QmsBannerConfirmModule, QmsBannerContent, QmsBannerLoadingComponent, QmsBannerLoadingModule, QmsBannerModule, QmsPaginatorModule, QmsReportContentPortraitComponent, QmsReportCoverPortraitComponent, QmsReportModule, QmsStatusDropdownComponent, QmsStatusDropdownModule, QmsStatusDropdownOption, QmsStatusDropdownType, QmsStepperComponent, QmsStepperModule, REGIONAL_FOLDER_ICON, REGIONAL_FOLDER_OUTLINED_ICON, RISK_ICON, RelatedConst, RelatedContentComponent, RelatedItemType, RelatedListComponent, RelatedPopupComponent, Result, RiskAnalysis, RiskAnalysisComponent, RiskDanger, RiskListComponent, RiskResult, RiskResultComponent, SaveTemplateComponent, ScrollToSelectedDirective, SelectConst, SelectDialog, SelectIncludeChildrenPopUpComponent, SelectOneDialog, SelectOnePopupData, SelectOption, SelectOptionTypes, SelectPopupData, SelectProcessDocumentPopupComponent, SelectProcessDocumentPopupData, SelectedOption, SelectedProcessDocumentItem, SharedModule, ShowHideSearchResultConst, SideNav, SideNavItem, SidenavComponent, TargetType, TargetTypeName, TranslateLibraryService, TreeComponent, TreeConfig, TreeFlatNode, TreeModel, TreeNode$1 as TreeNode, UploadErrorData, en, mixinColor, no, notExceedSize, requiredFileType, ɵ1, SharedMaterialModule as ɵa, QMSCKEditorTemplateComponent as ɵb, QMSCKEditorTreeService as ɵc, LinkAttachmentComponent as ɵd, QMSCKEditorTooltipComponent as ɵe, QMSCKEditorTooltip as ɵf, QMSCKEditorImageMapComponent as ɵg, QMSCKEditorImageMap as ɵh, QMSCKEditorBpmnData as ɵi };
21148
+ export { AutocompleteOffDirective, BREADCRUMB_DROPDOWN_ICON, BUTTON_TOGGLE_DEFAULT_OPTIONS, BUTTON_TOGGLE_GROUP, BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, BannerType, BpmnService, BreadcrumbNode, ButtonToggleChange, CHECKLIST_ICON, CKEditorEventConst, CKEditorModule, CdkDetailRowDirective, ConfirmDialog, DEPARTMENT_FOLDER_ICON, DEPARTMENT_FOLDER_OUTLINED_ICON, DEVIATION_ICON, DOCUMENT_DEPARTMENT_ICON, DOCUMENT_ENTERPRISE_ICON, DOCUMENT_ICON, DOCUMENT_LOCAL_ICON, DOCUMENT_REGIONAL_ICON, DataType$1 as DataType, DateFormatPipe, DocumentNodeType$1 as DocumentNodeType, ENTERPRISE_FOLDER_ICON, ENTERPRISE_FOLDER_OUTLINED_ICON, FileErrorType, FlowChartConst, FlowchartViewMode, ISelectOneItem, InformationCoverItem, KEYBOARD_DOWN_ICON, KEYBOARD_UP_ICON, LOCAL_FOLDER_ICON, LOCAL_FOLDER_OUTLINED_ICON, LinkAnchor, LinkType, MarginDirective, ModuleType$1 as ModuleType, NORMAL_FOLDER_ICON, NORMAL_FOLDER_OUTLINED_ICON, NewTreeComponent, NewTreeModel, PROCESS_AREA_ICON, PROCESS_AREA_OUTLINED_ICON, PROCESS_ICON, PaginationSize, PopupData, ProtocolType, ProtocolTypeName, QMSAnchor, QMSAppBar, QMSAppIconModule, QMSAttachmentListDirective, QMSBreadcrumb, QMSBreadcrumbDirectionIconDirective, QMSBreadcrumbItemDirective, QMSBreadcrumbModule, QMSButton, QMSButtonIcon, QMSButtonModule, QMSButtonToggle, QMSButtonToggleGroup, QMSCKEditorBaseComponent, QMSCKEditorBaseService, QMSCKEditorBpmn, QMSCKEditorBpmnApiService, QMSCKEditorBpmnComponent, QMSCKEditorBpmnTemplate, QMSCKEditorComponent, QMSCKEditorConfirmComponent, QMSCKEditorData, QMSCKEditorDialogData, QMSCKEditorDocumentType, QMSCKEditorFlowchart, QMSCKEditorFlowchartService, QMSCKEditorFullscreenComponent, QMSCKEditorGlobalService, QMSCKEditorInjector, QMSCKEditorLinkAnchorDocument, QMSCKEditorLinkComponent, QMSCKEditorLinkService, QMSCKEditorLoadTemplateComponent, QMSCKEditorModule, QMSCKEditorPlugin, QMSCKEditorRelatedComponent, QMSCKEditorRelation, QMSCKEditorSaveAsTemplate, QMSCKEditorTemplate, QMSCKEditorTemplateService, QMSCKEditorToastService, QMSCKEditorTreeComponent, QMSCKEdtiorInputData, QMSChipBodyDirective, QMSChipInputChipListDirective, QMSChipInputDirective, QMSChipInputSelectDropWDownDirective, QMSChipInputSelectFieldDirective, QMSChipInputSelectTriggerDirective, QMSCollapseGroupDirective, QMSComment, QMSConfirmDialog, QMSDialogConfig, QMSDrawerContentDirective, QMSDrawerDirective, QMSDrawerHeaderActionDirective, QMSDrawerHeaderDirective, QMSDropdownMenuItem, QMSEditFileNameDialog, QMSEditFileNameDialogModule, QMSFileAttachment, QMSFileUploadDirective, QMSFileUploadDisplayDirective, QMSFileUploadMultipleDirective, QMSFileUploadMultipleDisplayDirective, QMSFileUploadMultipleSelectorDirective, QMSFileUploadSelectorDirective, QMSFormDialog, QMSFormFieldDatePickerDirective, QMSFormFieldDirective, QMSFormFieldTextareaDirective, QMSGroupOptionDirective, QMSIconRegistryService, QMSInputChipDirective, QMSInputClearDirective, QMSList, QMSListExpansion, QMSListExpansionHeader, QMSListHeader, QMSListItem, QMSListLeadingIcon, QMSListLine, QMSListModule, QMSNavigationDrawerComponent, QMSNavigationDrawerModule, QMSNewTreeModule, QMSPaginatorComponent, QMSProcessDocumentItem, QMSRangeSliderDirective, QMSRangeSliderLockUpDirective, QMSRangeSliderModule, QMSRelatedGlobalService, QMSRelatedModule, QMSRichText, QMSRichTextModule, QMSRowDetailDirective, QMSRowExpandDirective, QMSScrolableAttachmentListDirective, QMSScrollbarDirective, QMSSearchFieldDirective, QMSSelectGlobalService, QMSSelectIncludeChildrenModule, QMSSelectOneGlobalService, QMSSelectOneModule, QMSSelectProcessDocumentGlobalService, QMSSelectProcessDocumentModule, QMSSnackbarConfig, QMSSuffixDirective, QMSSuffixFieldDirective, QMSTabGroupAdvancedDirective, QMSTabGroupDirective, QMSTabLabelDirective, QMSTabModule, QMSTableAction, QMSTableActionBlock, QMSTableChildrenDirective, QMSTableDirective, QMSTableExpandDirective, QMSTableModule, QMSTextBlockDirective, QMSTextBlockLine, QMSToolTipComponent, QMSToolTipRendererDirective, QMSTooltipImageDirective, QMSTooltipModule, QMSTreeModule, QMSUploadFileErrorDialog, QMSUploadFileErrorDialogModule, QMSUploadingFileGuard, QmsAngularComponent, QmsAngularModule, QmsAngularService, QmsAppBarComponent, QmsAppBarModule, QmsBadgesComponent, QmsBadgesModule, QmsBannerComponent, QmsBannerConfirmButton, QmsBannerConfirmButtonClick, QmsBannerConfirmComponent, QmsBannerConfirmModule, QmsBannerContent, QmsBannerLoadingComponent, QmsBannerLoadingModule, QmsBannerModule, QmsPaginatorModule, QmsReportContentPortraitComponent, QmsReportCoverPortraitComponent, QmsReportModule, QmsStatusDropdownComponent, QmsStatusDropdownModule, QmsStatusDropdownOption, QmsStatusDropdownType, QmsStepperComponent, QmsStepperModule, REGIONAL_FOLDER_ICON, REGIONAL_FOLDER_OUTLINED_ICON, RISK_ICON, RelatedConst, RelatedContentComponent, RelatedItemType, RelatedListComponent, RelatedPopupComponent, Result, RiskAnalysis, RiskAnalysisComponent, RiskDanger, RiskListComponent, RiskResult, RiskResultComponent, SaveTemplateComponent, ScrollToSelectedDirective, SelectConst, SelectDialog, SelectIncludeChildrenPopUpComponent, SelectOneDialog, SelectOnePopupData, SelectOption, SelectOptionTypes, SelectPopupData, SelectProcessDocumentPopupComponent, SelectProcessDocumentPopupData, SelectedOption, SelectedProcessDocumentItem, SharedModule, ShowHideSearchResultConst, SideNav, SideNavItem, SidenavComponent, TargetType, TargetTypeName, TranslateLibraryService, TreeComponent, TreeConfig, TreeFlatNode, TreeModel, TreeNode$1 as TreeNode, UploadErrorData, en, mixinColor, no, notExceedSize, requiredFileType, ɵ1, SharedMaterialModule as ɵa, QMSCKEditorTreeService as ɵb, QMSCKEditorTemplateComponent as ɵc, LinkAttachmentComponent as ɵd, QMSCKEditorTooltipComponent as ɵe, QMSCKEditorTooltip as ɵf, QMSCKEditorImageMapComponent as ɵg, QMSCKEditorImageMap as ɵh, QMSCKEditorUploadService as ɵi, QMSCKEditorBpmnData as ɵj, QMSCKEditorAboutComponent as ɵk };
20769
21149
  //# sourceMappingURL=qms-angular.js.map