@sd-angular/core 1.2.93 → 1.2.96
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.
- package/bundles/sd-angular-core-editor.umd.js +11 -20
- package/bundles/sd-angular-core-editor.umd.js.map +1 -1
- package/bundles/sd-angular-core-editor.umd.min.js +2 -2
- package/bundles/sd-angular-core-editor.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.js +1 -1
- package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
- package/editor/sd-angular-core-editor.metadata.json +1 -1
- package/editor/src/lib/editor.component.d.ts +1 -6
- package/editor/src/lib/editor.model.d.ts +4 -2
- package/esm2015/editor/src/lib/editor.component.js +8 -19
- package/esm2015/editor/src/lib/editor.model.js +2 -2
- package/esm2015/grid-material/src/lib/components/popup-export/popup-export.component.js +2 -2
- package/fesm2015/sd-angular-core-editor.js +8 -18
- package/fesm2015/sd-angular-core-editor.js.map +1 -1
- package/fesm2015/sd-angular-core-grid-material.js +1 -1
- package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.2.93.tgz → sd-angular-core-1.2.96.tgz} +0 -0
|
@@ -4,14 +4,13 @@ import { FormControl, Validators, NgForm, FormsModule, ReactiveFormsModule } fro
|
|
|
4
4
|
import { __classPrivateFieldSet, __classPrivateFieldGet } from 'tslib';
|
|
5
5
|
import { v4 } from 'uuid';
|
|
6
6
|
import { Subscription } from 'rxjs';
|
|
7
|
-
import { SdApiService, SdApiModule } from '@sd-angular/core/api';
|
|
8
7
|
import 'quill-mention';
|
|
9
8
|
import { SdLabelDefDirective } from '@sd-angular/core/common';
|
|
10
|
-
import { SdLoadingService } from '@sd-angular/core/loading';
|
|
11
9
|
import { CommonModule } from '@angular/common';
|
|
12
10
|
import { SdTranslateModule } from '@sd-angular/core/translate';
|
|
13
11
|
import { SdButtonModule } from '@sd-angular/core/button';
|
|
14
12
|
import { SdTextareaModule } from '@sd-angular/core/textarea';
|
|
13
|
+
import { SdApiModule } from '@sd-angular/core/api';
|
|
15
14
|
|
|
16
15
|
const EDITOR_CONFIG = new InjectionToken('editor.configuration');
|
|
17
16
|
|
|
@@ -122,11 +121,9 @@ const PROMOTION_FORM = {
|
|
|
122
121
|
|
|
123
122
|
var _name, _subscription, _model, _form, _updateValidator, _quill, _initUploadImage;
|
|
124
123
|
class SdEditor {
|
|
125
|
-
constructor(ngZone, ref,
|
|
124
|
+
constructor(ngZone, ref, configuration) {
|
|
126
125
|
this.ngZone = ngZone;
|
|
127
126
|
this.ref = ref;
|
|
128
|
-
this.sdApiService = sdApiService;
|
|
129
|
-
this.loadingService = loadingService;
|
|
130
127
|
this.configuration = configuration;
|
|
131
128
|
_name.set(this, `N${v4()}`);
|
|
132
129
|
this.id = `I${v4()}`;
|
|
@@ -204,7 +201,6 @@ class SdEditor {
|
|
|
204
201
|
}
|
|
205
202
|
}
|
|
206
203
|
};
|
|
207
|
-
this.customButtonFileSVG = '<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/><path d="M20.41,8.41l-4.83-4.83C15.21,3.21,14.7,3,14.17,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V9.83 C21,9.3,20.79,8.79,20.41,8.41z M7,7h7v2H7V7z M17,17H7v-2h10V17z M17,13H7v-2h10V13z"/></g></svg>';
|
|
208
204
|
this.sdChange = new EventEmitter();
|
|
209
205
|
this.timerLoadQuillToolbar = null;
|
|
210
206
|
_updateValidator.set(this, () => {
|
|
@@ -376,31 +372,27 @@ class SdEditor {
|
|
|
376
372
|
const interval = setInterval(() => {
|
|
377
373
|
if (document.querySelector(qlKey)) {
|
|
378
374
|
clearInterval(interval);
|
|
379
|
-
document.querySelector(qlKey).innerHTML =
|
|
375
|
+
document.querySelector(qlKey).innerHTML = action.icon;
|
|
380
376
|
const customAction = document.querySelector(qlKey);
|
|
381
377
|
if (customAction.getAttribute('listener') !== '1') {
|
|
382
378
|
customAction.setAttribute('listener', '1');
|
|
379
|
+
if (action.tooltip) {
|
|
380
|
+
customAction.setAttribute('title', action.tooltip);
|
|
381
|
+
}
|
|
383
382
|
customAction.addEventListener('click', (e) => {
|
|
384
383
|
const cursorPosition = localStorage.getItem('quillRange');
|
|
385
384
|
const element = e.currentTarget; // Lấy element của action được click
|
|
386
385
|
const toolbar = element.closest('.ql-formats').closest('.ql-toolbar'); // Lấy toolbar element
|
|
387
386
|
const id = toolbar.closest('quill-editor').id; // Lấy id của editor để phục vụ loading
|
|
388
387
|
const loadingId = `#box-${id}`; // id của editor;
|
|
389
|
-
|
|
388
|
+
action.click(e, {
|
|
390
389
|
qlKey,
|
|
391
390
|
element,
|
|
391
|
+
loadingId,
|
|
392
392
|
cursorPosition: JSON.parse(cursorPosition),
|
|
393
393
|
quill: __classPrivateFieldGet(this, _quill),
|
|
394
394
|
args: this.args
|
|
395
395
|
});
|
|
396
|
-
if (func instanceof Promise) {
|
|
397
|
-
__classPrivateFieldGet(this, _quill).enable(false);
|
|
398
|
-
this.loadingService.start(loadingId);
|
|
399
|
-
func.finally(() => {
|
|
400
|
-
__classPrivateFieldGet(this, _quill).enable(true);
|
|
401
|
-
this.loadingService.stop(loadingId);
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
396
|
});
|
|
405
397
|
}
|
|
406
398
|
}
|
|
@@ -528,8 +520,6 @@ SdEditor.decorators = [
|
|
|
528
520
|
SdEditor.ctorParameters = () => [
|
|
529
521
|
{ type: NgZone },
|
|
530
522
|
{ type: ChangeDetectorRef },
|
|
531
|
-
{ type: SdApiService },
|
|
532
|
-
{ type: SdLoadingService },
|
|
533
523
|
{ type: undefined, decorators: [{ type: Inject, args: [EDITOR_CONFIG,] }, { type: Optional }] }
|
|
534
524
|
];
|
|
535
525
|
SdEditor.propDecorators = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-editor.js","sources":["../../../../projects/sd-core/editor/src/lib/editor.model.ts","../../../../projects/sd-core/editor/src/lib/constant.ts","../../../../projects/sd-core/editor/src/lib/editor.component.ts","../../../../projects/sd-core/editor/src/lib/editor.module.ts","../../../../projects/sd-core/editor/src/public-api.ts","../../../../projects/sd-core/editor/sd-angular-core-editor.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\r\nimport Quill from \"quill\";\r\nexport interface SdEditorAction {\r\n key: string;\r\n icon: string;\r\n click: (event: any, args: SdEditorActionArgs) => void | Promise<void>\r\n}\r\nexport interface SdEditorActionArgs {\r\n qlKey: string;\r\n element: HTMLElement;\r\n quill: Quill;\r\n cursorPosition: {\r\n index: number;\r\n length: number;\r\n },\r\n args?: any\r\n}\r\nexport interface IEditorConfiguration {\r\n uploadImage?: (formData: FormData, args?: any) => Promise<string>;\r\n actions?: SdEditorAction[];\r\n}\r\n\r\nexport const EDITOR_CONFIG = new InjectionToken<IEditorConfiguration>('editor.configuration');","export const Constants = {\r\n ARE_YOU_WANT_TO_DELETE: 'Are you sure you want to delete?',\r\n ACTIVE: 'active',\r\n IN_ACTIVE: 'inactive',\r\n APPROVE: 'approve',\r\n UN_APPROVE: 'unapprove',\r\n ACCEPT_SIZE_IMAGE: 'Logo only accept image with size <= 2MB',\r\n ACCEPT_TYPE_IMAGE:\r\n 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon',\r\n PAGE_TYPE_NEW: 'new',\r\n PAGE_TYPE_EDIT: 'edit',\r\n SAVE: 'saveOb',\r\n SAVE_AND_CONTINUE: 'saveAndContOb',\r\n IMAGE_SIZE: 2048000,\r\n SUCCESS: 'Success',\r\n IMPORT_SUCCESSFULLY: 'Import successfully!',\r\n ERROR: 'Error',\r\n FAILED: 'fail',\r\n FILE: 'file',\r\n NONE: 'none',\r\n NOT_EXIST_ID_OR_LINK: 'This ID/Link is not existing',\r\n FEATURE_IS_PENDING: 'This feature is pending',\r\n NOT_SUPPORT_FILE_IMAGE: 'File upload is not supported.',\r\n NOT_SUPPORT_FILE_IMPORT: 'File import is not supported.',\r\n NETWORK_ERROR: 'Network Error',\r\n SORT_BY: [\r\n {\r\n value: 0,\r\n name: 'Created Date'\r\n },\r\n {\r\n value: 1,\r\n name: 'Title'\r\n }\r\n ],\r\n DESC: [\r\n {\r\n value: true,\r\n name: 'Descending'\r\n },\r\n {\r\n value: false,\r\n name: 'Ascending'\r\n }\r\n ],\r\n FORM_ERRORS: {\r\n Id: '',\r\n textSearch: '',\r\n ImportLogId: '',\r\n SortBy: '',\r\n Reverse: '',\r\n },\r\n VALIDATION_MESSAGES: {}\r\n};\r\n\r\nexport const PROMOTION_PERMISSIONS = ['ListPromotion', 'AddNewPromotion', 'EditPromotion',\r\n 'ActiveOrInactivePromotion', 'RemovePromotion', 'ImportPromotion', 'ExportPromotion'];\r\n\r\nexport const ValidateMessageConstants = {\r\n TITLE_REQUIRED: 'Title is required',\r\n TITLE_MAXLENGTH: 'Title is not more than 55 characters',\r\n TITLE_PATTERN: 'Title is required',\r\n\r\n CREATED_AT_REQUIRED: 'Created At is required',\r\n\r\n SHOW_ON_HOME_REQUIRED: 'Show On Home is required',\r\n\r\n DISPLAY_NUMBER_REQUIRED: 'Display Number is required',\r\n\r\n CONTENT_TYPE_REQUIRED: 'Content Type is required',\r\n\r\n DISCOUNT_PERCENT_REQUIRED: 'Discount percent is required',\r\n DISCOUNT_PERCENT_MAX: 'Max discount percent is 100, cannot input greater',\r\n DISCOUNT_PERCENT_MIN: 'Min discount percent is 0, cannot input lower'\r\n};\r\n\r\nexport const PROMOTION_FORM = {\r\n FORM_ERRORS: {\r\n title: '',\r\n createdAt: '',\r\n displayNumber: '',\r\n showOnHome: '',\r\n discountPercent: '',\r\n isActive: '',\r\n ctaLabelName: '',\r\n ctaDeepLink: '',\r\n tags: ''\r\n },\r\n VALIDATION_MESSAGES: {\r\n title: {\r\n required: ValidateMessageConstants.TITLE_REQUIRED,\r\n maxlength: ValidateMessageConstants.TITLE_MAXLENGTH,\r\n pattern: ValidateMessageConstants.TITLE_PATTERN\r\n },\r\n createdAt: {\r\n required: ValidateMessageConstants.CREATED_AT_REQUIRED\r\n },\r\n showOnHome: {\r\n required: ValidateMessageConstants.SHOW_ON_HOME_REQUIRED\r\n },\r\n displayNumber: {\r\n required: ValidateMessageConstants.DISPLAY_NUMBER_REQUIRED\r\n },\r\n discountPercent: {\r\n required: ValidateMessageConstants.DISCOUNT_PERCENT_REQUIRED,\r\n max: ValidateMessageConstants.DISCOUNT_PERCENT_MAX,\r\n min: ValidateMessageConstants.DISCOUNT_PERCENT_MIN\r\n },\r\n tags: {\r\n required: ValidateMessageConstants.CONTENT_TYPE_REQUIRED\r\n }\r\n }\r\n};\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { ContentChange, QuillEditorComponent, SelectionChange } from 'ngx-quill';\r\nimport * as uuid from 'uuid';\r\nimport { FormControl, FormGroup, NgForm, ValidatorFn, Validators } from '@angular/forms';\r\nimport { Constants } from './constant';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdApiService } from '@sd-angular/core/api';\r\nimport 'quill-mention';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\nimport { SdLoadingService } from \"@sd-angular/core/loading\";\r\nimport { EDITOR_CONFIG, IEditorConfiguration } from './editor.model';\r\nimport Quill from 'quill';\r\n\r\n@Component({\r\n selector: 'sd-editor',\r\n templateUrl: './editor.component.html',\r\n styleUrls: ['./editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdEditor implements OnInit, AfterViewInit, OnDestroy {\r\n #name = `N${uuid.v4()}`;\r\n id: string = `I${uuid.v4()}`;\r\n #subscription = new Subscription();\r\n @ViewChild('editor') editor: QuillEditorComponent;\r\n @Input() label: string;\r\n #model: string;\r\n @Input() set model(val: string) {\r\n this.#model = val;\r\n this.modelHTML = val;\r\n this.formControl.setValue(this.#model, {\r\n emitEvent: false\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n required = false;\r\n\r\n @Input() set pRequired(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n\r\n minlength: number;\r\n\r\n @Input('minlength') set _minlength(val: number) {\r\n this.minlength = +val;\r\n this.#updateValidator();\r\n }\r\n\r\n maxlength: number;\r\n\r\n @Input('maxlength') set _maxlength(val: number) {\r\n this.maxlength = +val;\r\n this.#updateValidator();\r\n }\r\n\r\n @Output() modelChange = new EventEmitter<string>();\r\n\r\n @Input() placeholder: string = '';\r\n\r\n @Input() styles: any = { height: '250px' };\r\n\r\n @Input() args: any;\r\n\r\n formControl = new FormControl();\r\n\r\n @Input() domain = '';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n\r\n @Input() toolbar: any;\r\n @Input() enableHTMLButton = false;\r\n showHtmlEditor = false;\r\n modelHTML: string;\r\n\r\n quillEvent: any;\r\n @Input() mentionValues: { id: string, value: string, link?: string }[];\r\n @Input() hashTagValues: { id: string, value: string, link?: string }[];\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n quillConfig = {\r\n // toolbar: '.toolbar',\r\n toolbar: {\r\n container: [\r\n ['bold', 'italic', 'underline', 'strike'], // toggled buttons\r\n ['blockquote', 'code-block'],\r\n\r\n [{ 'header': 1 }, { 'header': 2 }], // custom button values\r\n [{ 'list': 'ordered' }, { 'list': 'bullet' }],\r\n [{ 'script': 'sub' }, { 'script': 'super' }], // superscript/subscript\r\n [{ 'indent': '-1' }, { 'indent': '+1' }], // outdent/indent\r\n [{ 'direction': 'rtl' }], // text direction\r\n\r\n [{ 'size': ['small', false, 'large', 'huge'] }], // custom dropdown\r\n [{ 'header': [1, 2, 3, 4, 5, 6, false] }],\r\n\r\n [{ 'color': [] }, { 'background': [] }], // dropdown with defaults from theme\r\n [{ 'font': [] }],\r\n [{ 'align': [] }],\r\n\r\n ['clean'], // remove formatting button\r\n\r\n ['link', 'image', 'video'] // link and image, video\r\n ]\r\n },\r\n mention: {\r\n allowedChars: /^[A-Za-z0-9\\sÅÄÖåäö._-]*$/,\r\n mentionDenotationChars: ['@', '#'],\r\n source: (searchTerm, renderList, mentionChar) => {\r\n if ((this.mentionValues && mentionChar === '@') || (this.hashTagValues && mentionChar === '#')) {\r\n let values;\r\n if (mentionChar === '@') {\r\n values = this.mentionValues;\r\n } else if (mentionChar === '#') {\r\n values = this.hashTagValues;\r\n } else {\r\n values = [];\r\n }\r\n\r\n if (searchTerm.length === 0) {\r\n renderList(values, searchTerm);\r\n } else {\r\n const matches = [];\r\n // tslint:disable-next-line:prefer-for-of\r\n for (let i = 0; i < values.length; i++) {\r\n // tslint:disable-next-line:no-bitwise\r\n if (~values[i].value.toLowerCase().indexOf(searchTerm.toLowerCase())) {\r\n matches.push(values[i]);\r\n }\r\n }\r\n renderList(matches, searchTerm);\r\n }\r\n }\r\n },\r\n },\r\n keyboard: {\r\n bindings: {\r\n enter: {\r\n key: 13,\r\n handler: (range, context) => {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n customButtonFileSVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g><rect fill=\"none\" height=\"24\" width=\"24\"/><path d=\"M20.41,8.41l-4.83-4.83C15.21,3.21,14.7,3,14.17,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V9.83 C21,9.3,20.79,8.79,20.41,8.41z M7,7h7v2H7V7z M17,17H7v-2h10V17z M17,13H7v-2h10V13z\"/></g></svg>';\r\n @Output() sdChange = new EventEmitter<string>();\r\n timerLoadQuillToolbar = null;\r\n constructor(\r\n private ngZone: NgZone,\r\n private ref: ChangeDetectorRef,\r\n private sdApiService: SdApiService,\r\n private loadingService: SdLoadingService,\r\n @Inject(EDITOR_CONFIG) @Optional() private configuration: IEditorConfiguration,\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.#form?.addControl(this.#name, this.formControl);\r\n\r\n if (this.toolbar) {\r\n this.quillConfig.toolbar.container = this.toolbar;\r\n }\r\n\r\n for (const action of (this.configuration?.actions || [])) {\r\n if (this.quillConfig.toolbar.container.toString().includes(action.key)) {\r\n const qlKey = `button.ql-${action.key}`\r\n const interval = setInterval(() => {\r\n if (document.querySelector(qlKey)) {\r\n clearInterval(interval);\r\n document.querySelector(qlKey).innerHTML = this.customButtonFileSVG;\r\n const customAction = document.querySelector(qlKey);\r\n if (customAction.getAttribute('listener') !== '1') {\r\n customAction.setAttribute('listener', '1');\r\n customAction.addEventListener('click', (e) => {\r\n const cursorPosition = localStorage.getItem('quillRange');\r\n const element = e.currentTarget as HTMLElement; // Lấy element của action được click\r\n const toolbar = element.closest('.ql-formats').closest('.ql-toolbar'); // Lấy toolbar element\r\n const id = toolbar.closest('quill-editor').id; // Lấy id của editor để phục vụ loading\r\n const loadingId = `#box-${id}`; // id của editor;\r\n const func = action.click(e, {\r\n qlKey,\r\n element,\r\n cursorPosition: JSON.parse(cursorPosition),\r\n quill: this.#quill,\r\n args: this.args\r\n });\r\n \r\n if(func instanceof Promise) {\r\n this.#quill.enable(false);\r\n this.loadingService.start(loadingId);\r\n func.finally(() => {\r\n this.#quill.enable(true);\r\n this.loadingService.stop(loadingId);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n // if (this.quillConfig.toolbar.container.toString().includes('customFile')) {\r\n // this.timerLoadQuillToolbar = setInterval(() => {\r\n // if (document.querySelector('button.ql-customFile')) {\r\n // clearInterval(this.timerLoadQuillToolbar);\r\n // document.querySelector('button.ql-customFile').innerHTML = this.customButtonFileSVG;\r\n // const customButton = document.querySelector('button.ql-customFile');\r\n // if (customButton.getAttribute('listener') !== '1') {\r\n // customButton.setAttribute('listener', '1');\r\n // customButton.addEventListener('click', this.customFileHandler);\r\n // }\r\n // }\r\n // }, 1000);\r\n // }\r\n\r\n this.ref.markForCheck();\r\n }\r\n\r\n // customFileHandler = (e) => {\r\n // const customButton = e.currentTarget;\r\n // const quillToolbar = customButton.closest('.ql-formats').closest('.ql-toolbar');\r\n // const quillBox = quillToolbar.closest('.ql-formats')\r\n // let fileInput: HTMLInputElement = quillToolbar.querySelector('input.ql-customFile[type=file]');\r\n // if (fileInput == null) {\r\n // fileInput = document.createElement('input');\r\n // fileInput.setAttribute('type', Constants.FILE);\r\n // fileInput.setAttribute('accept', '*');\r\n // fileInput.classList.add('ql-customFile');\r\n // fileInput.addEventListener('change', () => {\r\n // const files = fileInput.files;\r\n // if (!files || !files.length) {\r\n // return;\r\n // }\r\n\r\n // const formData = new FormData();\r\n // formData.append(Constants.FILE, files[0]);\r\n // let range = localStorage.getItem('quillRange');\r\n // if (range) {\r\n // range = JSON.parse(range);\r\n // }\r\n // this.quillEvent.enable(false);\r\n // this.#uploadFile(formData, this.quillEvent, range, fileInput, quillToolbar.closest('quill-editor').id);\r\n // });\r\n // quillToolbar.appendChild(fileInput);\r\n // }\r\n // fileInput.click();\r\n // }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.formControl.valueChanges.subscribe((val) => {\r\n this.modelChange.emit(val);\r\n this.sdChange.emit(val);\r\n }));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.minlength > 0) {\r\n validators.push(Validators.minLength(this.minlength));\r\n }\r\n if (this.maxlength > 0) {\r\n validators.push(Validators.maxLength(this.maxlength));\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n }\r\n #quill: Quill;\r\n editorInit = (quill: Quill) => {\r\n this.#quill = quill;\r\n this.quillEvent = quill;\r\n // const txtArea = document.createElement('textarea');\r\n // txtArea.style.cssText =\r\n // 'width: 100%;margin: 0px;background: rgb(29, 29, 29);' +\r\n // 'box-sizing: border-box;color: rgb(204, 204, 204);' +\r\n // 'font-size: 15px;outline: none;padding: 20px;' +\r\n // 'line-height: 24px;font-family: Consolas, Menlo, Monaco, "Courier New", monospace;' +\r\n // 'position: absolute;top: 0;bottom: 0;border: none;display:none';\r\n\r\n // const htmlEditor = quill.addContainer('ql-custom');\r\n // htmlEditor.appendChild(txtArea);\r\n\r\n // const myEditor = quill.container;\r\n // quill.on('text-change', (delta, oldDelta, source) => {\r\n // const html = myEditor.children[0].innerHTML;\r\n // txtArea.value = html;\r\n // // if (quill.getLength() > this.maxlength) {\r\n // // quill.deleteText(this.maxlength, quill.getLength());\r\n // // }\r\n // // this.formControl.setValue(html);\r\n // });\r\n const self = this;\r\n this.#initUploadImage(quill);\r\n // this.ngZone.runOutsideAngular(() => {\r\n // quill.getModule('toolbar').addHandler('image', function () {\r\n // let fileInput = this.container.querySelector('input.ql-image[type=file]');\r\n\r\n // if (fileInput == null) {\r\n // fileInput = document.createElement('input');\r\n // fileInput.setAttribute('type', Constants.FILE);\r\n // fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\r\n // fileInput.classList.add('ql-image');\r\n // fileInput.addEventListener('change', () => {\r\n // const files = fileInput.files;\r\n // const range = this.quill.getSelection(true);\r\n // if (!files || !files.length) {\r\n // return;\r\n // }\r\n\r\n // const formData = new FormData();\r\n // formData.append(Constants.FILE, files[0]);\r\n\r\n // this.quill.enable(false);\r\n\r\n // self.#uploadImage(formData, quill, range, fileInput);\r\n // });\r\n // this.container.appendChild(fileInput);\r\n // }\r\n // fileInput.click();\r\n // });\r\n\r\n // });\r\n this.ref.markForCheck();\r\n }\r\n\r\n #initUploadImage = (quill: Quill) => {\r\n const self = this;\r\n this.ngZone.runOutsideAngular(() => {\r\n quill.getModule('toolbar').addHandler('image', function () {\r\n let fileInput = this.container.querySelector('input.ql-image[type=file]');\r\n if (fileInput == null) {\r\n fileInput = document.createElement('input');\r\n fileInput.setAttribute('type', Constants.FILE);\r\n fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\r\n fileInput.classList.add('ql-image');\r\n fileInput.addEventListener('change', () => {\r\n const files = fileInput.files;\r\n const range = this.quill.getSelection(true);\r\n if (!files || !files.length) {\r\n return;\r\n }\r\n const formData = new FormData();\r\n formData.append(Constants.FILE, files[0]);\r\n this.quill.enable(false);\r\n // self.#uploadImage(formData, quill, range, fileInput);\r\n self.configuration?.uploadImage(formData, self.args).then(url => {\r\n self.ngZone.runOutsideAngular(() => {\r\n quill.enable(true);\r\n // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (url || '')\r\n + '\"><img src=\"' + (url || '') + '\" alt=\"c-image-editor-quill\"></a>', 'user');\r\n // quill.insertText();\r\n const content = quill.getContents();\r\n quill.setContents(content);\r\n quill.setSelection(range.index + 1, 'user');\r\n fileInput.value = '';\r\n });\r\n });\r\n });\r\n this.container.appendChild(fileInput);\r\n }\r\n fileInput.click();\r\n });\r\n\r\n });\r\n }\r\n\r\n onModelChange = (val: string) => {\r\n this.formControl.setValue(val);\r\n this.modelHTML = val;\r\n this.ref.markForCheck();\r\n }\r\n\r\n onClickShowHtmlEditor = () => {\r\n this.showHtmlEditor = !this.showHtmlEditor;\r\n this.ref.markForCheck();\r\n }\r\n\r\n // #uploadImage = (formData, quill, range, fileInput) => {\r\n // if (!this.urlUploadImage) {\r\n // this.urlUploadImage = '/partner/v2/merchandise/file/uploaduserfile';\r\n // }\r\n // // this.domain = 'https://api-commerce-qc.vinid.dev';\r\n // this.sdApiService.post(this.urlUploadImage, formData).then((resp: any) => {\r\n // this.ngZone.runOutsideAngular(() => {\r\n // quill.enable(true);\r\n // // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n // quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '')\r\n // + '\"><img src=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '') + '\" alt=\"c-image-editor-quill\"></a>', 'user');\r\n // // quill.insertText();\r\n // const content = quill.getContents();\r\n // quill.setContents(content);\r\n // quill.setSelection(range.index + 1, 'user');\r\n // fileInput.value = '';\r\n // });\r\n // });\r\n // this.ref.markForCheck();\r\n // }\r\n\r\n // #uploadFile = (formData, quill, range, fileInput, loadingID) => {\r\n // if (!this.urlUploadFile) {\r\n // this.urlUploadFile = '/partner/v2/merchandise/file/uploaduserfile';\r\n // }\r\n // // this.domain = 'https://api-commerce-qc.vinid.dev';\r\n // this.loadingService.start('#box-' + loadingID);\r\n // this.sdApiService.post(this.urlUploadFile, formData).then((resp: any) => {\r\n // this.ngZone.runOutsideAngular(() => {\r\n // quill.enable(true);\r\n // // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n // quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '')\r\n // + '\">' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '') + '</a>', 'user');\r\n // // quill.insertText();\r\n // const content = quill.getContents();\r\n // quill.setContents(content);\r\n // quill.setSelection(range.index + 1, 'user');\r\n // fileInput.value = '';\r\n // });\r\n // this.loadingService.stop('#box-' + loadingID);\r\n // }).catch((er) => {\r\n // this.loadingService.stop('#box-' + loadingID);\r\n // });\r\n // this.ref.markForCheck();\r\n // }\r\n\r\n onSelectionChanged(e: SelectionChange) {\r\n // localStorage.setItem('quillRange', e.range ? JSON.stringify(e.range) : (e.oldRange ? JSON.stringify(e.oldRange) : null));\r\n localStorage.setItem('quillRange', e.editor.getSelection() ? JSON.stringify(e.editor.getSelection()) : null);\r\n }\r\n\r\n onContentChanged(e: ContentChange) {\r\n localStorage.setItem('quillRange', JSON.stringify({\r\n index: (e.editor.getLength() ? e.editor.getLength() - 1 : 0),\r\n length: 0\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SdEditor } from './editor.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport {SdButtonModule} from '@sd-angular/core/button';\r\nimport {SdTextareaModule} from '@sd-angular/core/textarea';\r\nimport {SdApiModule, SdApiService} from '@sd-angular/core/api';\r\n\r\n@NgModule({\r\n declarations: [SdEditor],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n QuillModule.forRoot(),\r\n SdTranslateModule,\r\n SdButtonModule,\r\n SdTextareaModule,\r\n SdApiModule\r\n ],\r\n exports: [SdEditor],\r\n providers: [],\r\n})\r\nexport class SdEditorModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/editor.model';\r\nexport * from './lib/editor.module';\r\nexport * from './lib/constant';\r\nexport * from './lib/editor.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-editor.js","sources":["../../../../projects/sd-core/editor/src/lib/editor.model.ts","../../../../projects/sd-core/editor/src/lib/constant.ts","../../../../projects/sd-core/editor/src/lib/editor.component.ts","../../../../projects/sd-core/editor/src/lib/editor.module.ts","../../../../projects/sd-core/editor/src/public-api.ts","../../../../projects/sd-core/editor/sd-angular-core-editor.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport Quill from 'quill';\r\nexport interface SdEditorAction {\r\n key: string;\r\n icon: string;\r\n tooltip: string;\r\n click: (event: any, args: SdEditorActionArgs) => void | Promise<void>;\r\n}\r\nexport interface SdEditorActionArgs {\r\n qlKey: string;\r\n element: HTMLElement;\r\n loadingId: string;\r\n quill: Quill;\r\n cursorPosition: {\r\n index: number;\r\n length: number;\r\n };\r\n args?: any;\r\n}\r\nexport interface IEditorConfiguration {\r\n uploadImage?: (formData: FormData, args?: any) => Promise<string>;\r\n actions?: SdEditorAction[];\r\n}\r\n\r\nexport const EDITOR_CONFIG = new InjectionToken<IEditorConfiguration>('editor.configuration');\r\n","export const Constants = {\r\n ARE_YOU_WANT_TO_DELETE: 'Are you sure you want to delete?',\r\n ACTIVE: 'active',\r\n IN_ACTIVE: 'inactive',\r\n APPROVE: 'approve',\r\n UN_APPROVE: 'unapprove',\r\n ACCEPT_SIZE_IMAGE: 'Logo only accept image with size <= 2MB',\r\n ACCEPT_TYPE_IMAGE:\r\n 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon',\r\n PAGE_TYPE_NEW: 'new',\r\n PAGE_TYPE_EDIT: 'edit',\r\n SAVE: 'saveOb',\r\n SAVE_AND_CONTINUE: 'saveAndContOb',\r\n IMAGE_SIZE: 2048000,\r\n SUCCESS: 'Success',\r\n IMPORT_SUCCESSFULLY: 'Import successfully!',\r\n ERROR: 'Error',\r\n FAILED: 'fail',\r\n FILE: 'file',\r\n NONE: 'none',\r\n NOT_EXIST_ID_OR_LINK: 'This ID/Link is not existing',\r\n FEATURE_IS_PENDING: 'This feature is pending',\r\n NOT_SUPPORT_FILE_IMAGE: 'File upload is not supported.',\r\n NOT_SUPPORT_FILE_IMPORT: 'File import is not supported.',\r\n NETWORK_ERROR: 'Network Error',\r\n SORT_BY: [\r\n {\r\n value: 0,\r\n name: 'Created Date'\r\n },\r\n {\r\n value: 1,\r\n name: 'Title'\r\n }\r\n ],\r\n DESC: [\r\n {\r\n value: true,\r\n name: 'Descending'\r\n },\r\n {\r\n value: false,\r\n name: 'Ascending'\r\n }\r\n ],\r\n FORM_ERRORS: {\r\n Id: '',\r\n textSearch: '',\r\n ImportLogId: '',\r\n SortBy: '',\r\n Reverse: '',\r\n },\r\n VALIDATION_MESSAGES: {}\r\n};\r\n\r\nexport const PROMOTION_PERMISSIONS = ['ListPromotion', 'AddNewPromotion', 'EditPromotion',\r\n 'ActiveOrInactivePromotion', 'RemovePromotion', 'ImportPromotion', 'ExportPromotion'];\r\n\r\nexport const ValidateMessageConstants = {\r\n TITLE_REQUIRED: 'Title is required',\r\n TITLE_MAXLENGTH: 'Title is not more than 55 characters',\r\n TITLE_PATTERN: 'Title is required',\r\n\r\n CREATED_AT_REQUIRED: 'Created At is required',\r\n\r\n SHOW_ON_HOME_REQUIRED: 'Show On Home is required',\r\n\r\n DISPLAY_NUMBER_REQUIRED: 'Display Number is required',\r\n\r\n CONTENT_TYPE_REQUIRED: 'Content Type is required',\r\n\r\n DISCOUNT_PERCENT_REQUIRED: 'Discount percent is required',\r\n DISCOUNT_PERCENT_MAX: 'Max discount percent is 100, cannot input greater',\r\n DISCOUNT_PERCENT_MIN: 'Min discount percent is 0, cannot input lower'\r\n};\r\n\r\nexport const PROMOTION_FORM = {\r\n FORM_ERRORS: {\r\n title: '',\r\n createdAt: '',\r\n displayNumber: '',\r\n showOnHome: '',\r\n discountPercent: '',\r\n isActive: '',\r\n ctaLabelName: '',\r\n ctaDeepLink: '',\r\n tags: ''\r\n },\r\n VALIDATION_MESSAGES: {\r\n title: {\r\n required: ValidateMessageConstants.TITLE_REQUIRED,\r\n maxlength: ValidateMessageConstants.TITLE_MAXLENGTH,\r\n pattern: ValidateMessageConstants.TITLE_PATTERN\r\n },\r\n createdAt: {\r\n required: ValidateMessageConstants.CREATED_AT_REQUIRED\r\n },\r\n showOnHome: {\r\n required: ValidateMessageConstants.SHOW_ON_HOME_REQUIRED\r\n },\r\n displayNumber: {\r\n required: ValidateMessageConstants.DISPLAY_NUMBER_REQUIRED\r\n },\r\n discountPercent: {\r\n required: ValidateMessageConstants.DISCOUNT_PERCENT_REQUIRED,\r\n max: ValidateMessageConstants.DISCOUNT_PERCENT_MAX,\r\n min: ValidateMessageConstants.DISCOUNT_PERCENT_MIN\r\n },\r\n tags: {\r\n required: ValidateMessageConstants.CONTENT_TYPE_REQUIRED\r\n }\r\n }\r\n};\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {ContentChange, QuillEditorComponent, SelectionChange} from 'ngx-quill';\r\nimport * as uuid from 'uuid';\r\nimport {FormControl, FormGroup, NgForm, ValidatorFn, Validators} from '@angular/forms';\r\nimport {Constants} from './constant';\r\nimport {Subscription} from 'rxjs';\r\nimport {SdApiService} from '@sd-angular/core/api';\r\nimport 'quill-mention';\r\nimport {SdLabelDefDirective} from '@sd-angular/core/common';\r\nimport {SdLoadingService} from \"@sd-angular/core/loading\";\r\nimport {EDITOR_CONFIG, IEditorConfiguration} from './editor.model';\r\nimport Quill from 'quill';\r\n\r\n@Component({\r\n selector: 'sd-editor',\r\n templateUrl: './editor.component.html',\r\n styleUrls: ['./editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdEditor implements OnInit, AfterViewInit, OnDestroy {\r\n #name = `N${uuid.v4()}`;\r\n id: string = `I${uuid.v4()}`;\r\n #subscription = new Subscription();\r\n @ViewChild('editor') editor: QuillEditorComponent;\r\n @Input() label: string;\r\n #model: string;\r\n @Input() set model(val: string) {\r\n this.#model = val;\r\n this.modelHTML = val;\r\n this.formControl.setValue(this.#model, {\r\n emitEvent: false\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n required = false;\r\n\r\n @Input() set pRequired(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n\r\n minlength: number;\r\n\r\n @Input('minlength') set _minlength(val: number) {\r\n this.minlength = +val;\r\n this.#updateValidator();\r\n }\r\n\r\n maxlength: number;\r\n\r\n @Input('maxlength') set _maxlength(val: number) {\r\n this.maxlength = +val;\r\n this.#updateValidator();\r\n }\r\n\r\n @Output() modelChange = new EventEmitter<string>();\r\n\r\n @Input() placeholder: string = '';\r\n\r\n @Input() styles: any = {height: '250px'};\r\n\r\n @Input() args: any;\r\n\r\n formControl = new FormControl();\r\n\r\n @Input() domain = '';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n\r\n @Input() toolbar: any;\r\n @Input() enableHTMLButton = false;\r\n showHtmlEditor = false;\r\n modelHTML: string;\r\n\r\n quillEvent: any;\r\n @Input() mentionValues: { id: string, value: string, link?: string }[];\r\n @Input() hashTagValues: { id: string, value: string, link?: string }[];\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n quillConfig = {\r\n // toolbar: '.toolbar',\r\n toolbar: {\r\n container: [\r\n ['bold', 'italic', 'underline', 'strike'], // toggled buttons\r\n ['blockquote', 'code-block'],\r\n\r\n [{'header': 1}, {'header': 2}], // custom button values\r\n [{'list': 'ordered'}, {'list': 'bullet'}],\r\n [{'script': 'sub'}, {'script': 'super'}], // superscript/subscript\r\n [{'indent': '-1'}, {'indent': '+1'}], // outdent/indent\r\n [{'direction': 'rtl'}], // text direction\r\n\r\n [{'size': ['small', false, 'large', 'huge']}], // custom dropdown\r\n [{'header': [1, 2, 3, 4, 5, 6, false]}],\r\n\r\n [{'color': []}, {'background': []}], // dropdown with defaults from theme\r\n [{'font': []}],\r\n [{'align': []}],\r\n\r\n ['clean'], // remove formatting button\r\n\r\n ['link', 'image', 'video'] // link and image, video\r\n ]\r\n },\r\n mention: {\r\n allowedChars: /^[A-Za-z0-9\\sÅÄÖåäö._-]*$/,\r\n mentionDenotationChars: ['@', '#'],\r\n source: (searchTerm, renderList, mentionChar) => {\r\n if ((this.mentionValues && mentionChar === '@') || (this.hashTagValues && mentionChar === '#')) {\r\n let values;\r\n if (mentionChar === '@') {\r\n values = this.mentionValues;\r\n } else if (mentionChar === '#') {\r\n values = this.hashTagValues;\r\n } else {\r\n values = [];\r\n }\r\n\r\n if (searchTerm.length === 0) {\r\n renderList(values, searchTerm);\r\n } else {\r\n const matches = [];\r\n // tslint:disable-next-line:prefer-for-of\r\n for (let i = 0; i < values.length; i++) {\r\n // tslint:disable-next-line:no-bitwise\r\n if (~values[i].value.toLowerCase().indexOf(searchTerm.toLowerCase())) {\r\n matches.push(values[i]);\r\n }\r\n }\r\n renderList(matches, searchTerm);\r\n }\r\n }\r\n },\r\n },\r\n keyboard: {\r\n bindings: {\r\n enter: {\r\n key: 13,\r\n handler: (range, context) => {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n @Output() sdChange = new EventEmitter<string>();\r\n timerLoadQuillToolbar = null;\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private ref: ChangeDetectorRef,\r\n @Inject(EDITOR_CONFIG) @Optional() private configuration: IEditorConfiguration,\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.#form?.addControl(this.#name, this.formControl);\r\n\r\n if (this.toolbar) {\r\n this.quillConfig.toolbar.container = this.toolbar;\r\n }\r\n\r\n for (const action of (this.configuration?.actions || [])) {\r\n if (this.quillConfig.toolbar.container.toString().includes(action.key)) {\r\n const qlKey = `button.ql-${action.key}`;\r\n const interval = setInterval(() => {\r\n if (document.querySelector(qlKey)) {\r\n clearInterval(interval);\r\n document.querySelector(qlKey).innerHTML = action.icon;\r\n const customAction = document.querySelector(qlKey);\r\n if (customAction.getAttribute('listener') !== '1') {\r\n customAction.setAttribute('listener', '1');\r\n if (action.tooltip) {\r\n customAction.setAttribute('title', action.tooltip);\r\n }\r\n customAction.addEventListener('click', (e) => {\r\n const cursorPosition = localStorage.getItem('quillRange');\r\n const element = e.currentTarget as HTMLElement; // Lấy element của action được click\r\n const toolbar = element.closest('.ql-formats').closest('.ql-toolbar'); // Lấy toolbar element\r\n const id = toolbar.closest('quill-editor').id; // Lấy id của editor để phục vụ loading\r\n const loadingId = `#box-${id}`; // id của editor;\r\n action.click(e, {\r\n qlKey,\r\n element,\r\n loadingId,\r\n cursorPosition: JSON.parse(cursorPosition),\r\n quill: this.#quill,\r\n args: this.args\r\n });\r\n });\r\n }\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n // if (this.quillConfig.toolbar.container.toString().includes('customFile')) {\r\n // this.timerLoadQuillToolbar = setInterval(() => {\r\n // if (document.querySelector('button.ql-customFile')) {\r\n // clearInterval(this.timerLoadQuillToolbar);\r\n // document.querySelector('button.ql-customFile').innerHTML = this.customButtonFileSVG;\r\n // const customButton = document.querySelector('button.ql-customFile');\r\n // if (customButton.getAttribute('listener') !== '1') {\r\n // customButton.setAttribute('listener', '1');\r\n // customButton.addEventListener('click', this.customFileHandler);\r\n // }\r\n // }\r\n // }, 1000);\r\n // }\r\n\r\n this.ref.markForCheck();\r\n }\r\n\r\n // customFileHandler = (e) => {\r\n // const customButton = e.currentTarget;\r\n // const quillToolbar = customButton.closest('.ql-formats').closest('.ql-toolbar');\r\n // const quillBox = quillToolbar.closest('.ql-formats')\r\n // let fileInput: HTMLInputElement = quillToolbar.querySelector('input.ql-customFile[type=file]');\r\n // if (fileInput == null) {\r\n // fileInput = document.createElement('input');\r\n // fileInput.setAttribute('type', Constants.FILE);\r\n // fileInput.setAttribute('accept', '*');\r\n // fileInput.classList.add('ql-customFile');\r\n // fileInput.addEventListener('change', () => {\r\n // const files = fileInput.files;\r\n // if (!files || !files.length) {\r\n // return;\r\n // }\r\n\r\n // const formData = new FormData();\r\n // formData.append(Constants.FILE, files[0]);\r\n // let range = localStorage.getItem('quillRange');\r\n // if (range) {\r\n // range = JSON.parse(range);\r\n // }\r\n // this.quillEvent.enable(false);\r\n // this.#uploadFile(formData, this.quillEvent, range, fileInput, quillToolbar.closest('quill-editor').id);\r\n // });\r\n // quillToolbar.appendChild(fileInput);\r\n // }\r\n // fileInput.click();\r\n // }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.formControl.valueChanges.subscribe((val) => {\r\n this.modelChange.emit(val);\r\n this.sdChange.emit(val);\r\n }));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.minlength > 0) {\r\n validators.push(Validators.minLength(this.minlength));\r\n }\r\n if (this.maxlength > 0) {\r\n validators.push(Validators.maxLength(this.maxlength));\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n }\r\n #quill: Quill;\r\n editorInit = (quill: Quill) => {\r\n this.#quill = quill;\r\n this.quillEvent = quill;\r\n // const txtArea = document.createElement('textarea');\r\n // txtArea.style.cssText =\r\n // 'width: 100%;margin: 0px;background: rgb(29, 29, 29);' +\r\n // 'box-sizing: border-box;color: rgb(204, 204, 204);' +\r\n // 'font-size: 15px;outline: none;padding: 20px;' +\r\n // 'line-height: 24px;font-family: Consolas, Menlo, Monaco, "Courier New", monospace;' +\r\n // 'position: absolute;top: 0;bottom: 0;border: none;display:none';\r\n\r\n // const htmlEditor = quill.addContainer('ql-custom');\r\n // htmlEditor.appendChild(txtArea);\r\n\r\n // const myEditor = quill.container;\r\n // quill.on('text-change', (delta, oldDelta, source) => {\r\n // const html = myEditor.children[0].innerHTML;\r\n // txtArea.value = html;\r\n // // if (quill.getLength() > this.maxlength) {\r\n // // quill.deleteText(this.maxlength, quill.getLength());\r\n // // }\r\n // // this.formControl.setValue(html);\r\n // });\r\n const self = this;\r\n this.#initUploadImage(quill);\r\n // this.ngZone.runOutsideAngular(() => {\r\n // quill.getModule('toolbar').addHandler('image', function () {\r\n // let fileInput = this.container.querySelector('input.ql-image[type=file]');\r\n\r\n // if (fileInput == null) {\r\n // fileInput = document.createElement('input');\r\n // fileInput.setAttribute('type', Constants.FILE);\r\n // fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\r\n // fileInput.classList.add('ql-image');\r\n // fileInput.addEventListener('change', () => {\r\n // const files = fileInput.files;\r\n // const range = this.quill.getSelection(true);\r\n // if (!files || !files.length) {\r\n // return;\r\n // }\r\n\r\n // const formData = new FormData();\r\n // formData.append(Constants.FILE, files[0]);\r\n\r\n // this.quill.enable(false);\r\n\r\n // self.#uploadImage(formData, quill, range, fileInput);\r\n // });\r\n // this.container.appendChild(fileInput);\r\n // }\r\n // fileInput.click();\r\n // });\r\n\r\n // });\r\n this.ref.markForCheck();\r\n }\r\n\r\n #initUploadImage = (quill: Quill) => {\r\n const self = this;\r\n this.ngZone.runOutsideAngular(() => {\r\n quill.getModule('toolbar').addHandler('image', function () {\r\n let fileInput = this.container.querySelector('input.ql-image[type=file]');\r\n if (fileInput == null) {\r\n fileInput = document.createElement('input');\r\n fileInput.setAttribute('type', Constants.FILE);\r\n fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\r\n fileInput.classList.add('ql-image');\r\n fileInput.addEventListener('change', () => {\r\n const files = fileInput.files;\r\n const range = this.quill.getSelection(true);\r\n if (!files || !files.length) {\r\n return;\r\n }\r\n const formData = new FormData();\r\n formData.append(Constants.FILE, files[0]);\r\n this.quill.enable(false);\r\n // self.#uploadImage(formData, quill, range, fileInput);\r\n self.configuration?.uploadImage(formData, self.args).then(url => {\r\n self.ngZone.runOutsideAngular(() => {\r\n quill.enable(true);\r\n // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (url || '')\r\n + '\"><img src=\"' + (url || '') + '\" alt=\"c-image-editor-quill\"></a>', 'user');\r\n // quill.insertText();\r\n const content = quill.getContents();\r\n quill.setContents(content);\r\n quill.setSelection(range.index + 1, 'user');\r\n fileInput.value = '';\r\n });\r\n });\r\n });\r\n this.container.appendChild(fileInput);\r\n }\r\n fileInput.click();\r\n });\r\n\r\n });\r\n }\r\n\r\n onModelChange = (val: string) => {\r\n this.formControl.setValue(val);\r\n this.modelHTML = val;\r\n this.ref.markForCheck();\r\n }\r\n\r\n onClickShowHtmlEditor = () => {\r\n this.showHtmlEditor = !this.showHtmlEditor;\r\n this.ref.markForCheck();\r\n }\r\n\r\n // #uploadImage = (formData, quill, range, fileInput) => {\r\n // if (!this.urlUploadImage) {\r\n // this.urlUploadImage = '/partner/v2/merchandise/file/uploaduserfile';\r\n // }\r\n // // this.domain = 'https://api-commerce-qc.vinid.dev';\r\n // this.sdApiService.post(this.urlUploadImage, formData).then((resp: any) => {\r\n // this.ngZone.runOutsideAngular(() => {\r\n // quill.enable(true);\r\n // // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n // quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '')\r\n // + '\"><img src=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '') + '\" alt=\"c-image-editor-quill\"></a>', 'user');\r\n // // quill.insertText();\r\n // const content = quill.getContents();\r\n // quill.setContents(content);\r\n // quill.setSelection(range.index + 1, 'user');\r\n // fileInput.value = '';\r\n // });\r\n // });\r\n // this.ref.markForCheck();\r\n // }\r\n\r\n // #uploadFile = (formData, quill, range, fileInput, loadingID) => {\r\n // if (!this.urlUploadFile) {\r\n // this.urlUploadFile = '/partner/v2/merchandise/file/uploaduserfile';\r\n // }\r\n // // this.domain = 'https://api-commerce-qc.vinid.dev';\r\n // this.loadingService.start('#box-' + loadingID);\r\n // this.sdApiService.post(this.urlUploadFile, formData).then((resp: any) => {\r\n // this.ngZone.runOutsideAngular(() => {\r\n // quill.enable(true);\r\n // // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n // quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '')\r\n // + '\">' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '') + '</a>', 'user');\r\n // // quill.insertText();\r\n // const content = quill.getContents();\r\n // quill.setContents(content);\r\n // quill.setSelection(range.index + 1, 'user');\r\n // fileInput.value = '';\r\n // });\r\n // this.loadingService.stop('#box-' + loadingID);\r\n // }).catch((er) => {\r\n // this.loadingService.stop('#box-' + loadingID);\r\n // });\r\n // this.ref.markForCheck();\r\n // }\r\n\r\n onSelectionChanged(e: SelectionChange) {\r\n // localStorage.setItem('quillRange', e.range ? JSON.stringify(e.range) : (e.oldRange ? JSON.stringify(e.oldRange) : null));\r\n localStorage.setItem('quillRange', e.editor.getSelection() ? JSON.stringify(e.editor.getSelection()) : null);\r\n }\r\n\r\n onContentChanged(e: ContentChange) {\r\n localStorage.setItem('quillRange', JSON.stringify({\r\n index: (e.editor.getLength() ? e.editor.getLength() - 1 : 0),\r\n length: 0\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SdEditor } from './editor.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport {SdButtonModule} from '@sd-angular/core/button';\r\nimport {SdTextareaModule} from '@sd-angular/core/textarea';\r\nimport {SdApiModule, SdApiService} from '@sd-angular/core/api';\r\n\r\n@NgModule({\r\n declarations: [SdEditor],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n QuillModule.forRoot(),\r\n SdTranslateModule,\r\n SdButtonModule,\r\n SdTextareaModule,\r\n SdApiModule\r\n ],\r\n exports: [SdEditor],\r\n providers: [],\r\n})\r\nexport class SdEditorModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/editor.model';\r\nexport * from './lib/editor.module';\r\nexport * from './lib/constant';\r\nexport * from './lib/editor.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
@@ -504,7 +504,7 @@ class SdPopupExport {
|
|
|
504
504
|
if (!column) {
|
|
505
505
|
return first;
|
|
506
506
|
}
|
|
507
|
-
if (column.type !== 'children') {
|
|
507
|
+
if (column.type !== 'children' && column.type !== 'children-col') {
|
|
508
508
|
return [...first, column];
|
|
509
509
|
}
|
|
510
510
|
const children = column.children.filter(e1 => e1.type !== 'image');
|