ngx-axis-appforge 0.0.50 → 0.0.52
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/axis-components/edit-table/index.d.ts +1 -0
- package/axis-components/rich-text-editor/design/index.d.ts +5 -0
- package/axis-components/rich-text-editor/index.d.ts +27 -0
- package/axis-components/table/index.d.ts +5 -8
- package/axis-components/table-helper/index.d.ts +13 -1
- package/axis-components/transfer/index.d.ts +1 -0
- package/axis-components-covers/rate.svg +2 -2
- package/axis-components-covers/rich-text-editor.png +0 -0
- package/fesm2022/ngx-axis-appforge-axis-components-button.mjs +2 -2
- package/fesm2022/ngx-axis-appforge-axis-components-button.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-design.mjs +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-design.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-edit-table.mjs +1 -0
- package/fesm2022/ngx-axis-appforge-axis-components-edit-table.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-form-item.mjs +2 -2
- package/fesm2022/ngx-axis-appforge-axis-components-form-item.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-form.mjs +2 -2
- package/fesm2022/ngx-axis-appforge-axis-components-form.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-rich-text-editor-design.mjs +76 -0
- package/fesm2022/ngx-axis-appforge-axis-components-rich-text-editor-design.mjs.map +1 -0
- package/fesm2022/ngx-axis-appforge-axis-components-rich-text-editor.mjs +139 -0
- package/fesm2022/ngx-axis-appforge-axis-components-rich-text-editor.mjs.map +1 -0
- package/fesm2022/ngx-axis-appforge-axis-components-table-design.mjs +36 -10
- package/fesm2022/ngx-axis-appforge-axis-components-table-design.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-table-helper.mjs +107 -17
- package/fesm2022/ngx-axis-appforge-axis-components-table-helper.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-table.mjs +29 -14
- package/fesm2022/ngx-axis-appforge-axis-components-table.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-transfer.mjs +1 -0
- package/fesm2022/ngx-axis-appforge-axis-components-transfer.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components-upload.mjs +19 -13
- package/fesm2022/ngx-axis-appforge-axis-components-upload.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-axis-components.mjs +19 -2
- package/fesm2022/ngx-axis-appforge-axis-components.mjs.map +1 -1
- package/fesm2022/ngx-axis-appforge-core.mjs +76 -4
- package/fesm2022/ngx-axis-appforge-core.mjs.map +1 -1
- package/package.json +132 -122
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, inject, computed, ViewChild, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { ValueAccessOptions, ValueAccess, AXIS_FILE_BASE_URL_TOKEN } from 'ngx-axis-appforge/core';
|
|
4
|
+
import * as i1 from '@angular/forms';
|
|
5
|
+
import { FormsModule } from '@angular/forms';
|
|
6
|
+
import * as i2 from '@tinymce/tinymce-angular';
|
|
7
|
+
import { EditorModule, EditorComponent, TINYMCE_SCRIPT_SRC } from '@tinymce/tinymce-angular';
|
|
8
|
+
import { BehaviorSubject } from 'rxjs';
|
|
9
|
+
import { HttpClient, HttpResponse, HttpEventType } from '@angular/common/http';
|
|
10
|
+
|
|
11
|
+
class RichTextEditorOptions extends ValueAccessOptions {
|
|
12
|
+
fileUploadUrl = signal("", ...(ngDevMode ? [{ debugName: "fileUploadUrl" }] : []));
|
|
13
|
+
fileUploadFormName = signal("file", ...(ngDevMode ? [{ debugName: "fileUploadFormName" }] : []));
|
|
14
|
+
fileUploadResponseFn = signal("", ...(ngDevMode ? [{ debugName: "fileUploadResponseFn" }] : []));
|
|
15
|
+
tinymceOptions = signal(undefined, ...(ngDevMode ? [{ debugName: "tinymceOptions" }] : []));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
class RichTextEditor extends ValueAccess {
|
|
19
|
+
options = new RichTextEditorOptions();
|
|
20
|
+
fileBaseUrl = inject(AXIS_FILE_BASE_URL_TOKEN, { optional: true }) ?? "";
|
|
21
|
+
http = inject(HttpClient);
|
|
22
|
+
editor;
|
|
23
|
+
editorConfig = computed(() => {
|
|
24
|
+
return Object.assign({}, this.defaultEditorConfig, this.options.tinymceOptions());
|
|
25
|
+
}, ...(ngDevMode ? [{ debugName: "editorConfig" }] : []));
|
|
26
|
+
filePickerCallback(callback, value, meta) {
|
|
27
|
+
const input = document.createElement('input');
|
|
28
|
+
input.setAttribute('type', 'file');
|
|
29
|
+
let accept;
|
|
30
|
+
switch (meta['filetype']) {
|
|
31
|
+
case "image":
|
|
32
|
+
accept = "image/*";
|
|
33
|
+
break;
|
|
34
|
+
case "media":
|
|
35
|
+
accept = "video/*,audio/*";
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
accept = "*/*";
|
|
39
|
+
}
|
|
40
|
+
input.setAttribute('accept', accept);
|
|
41
|
+
input.onchange = (e) => {
|
|
42
|
+
const file = e?.target?.files?.[0];
|
|
43
|
+
if (file) {
|
|
44
|
+
const reader = new FileReader();
|
|
45
|
+
reader.onload = () => {
|
|
46
|
+
if (reader.result) {
|
|
47
|
+
const id = 'blobid' + (new Date()).getTime();
|
|
48
|
+
const blobCache = this.editor.editor.editorUpload.blobCache;
|
|
49
|
+
const base64 = reader.result?.toString()?.split(',')[1];
|
|
50
|
+
const blobInfo = blobCache.create(id, file, base64);
|
|
51
|
+
blobCache.add(blobInfo);
|
|
52
|
+
callback(blobInfo.blobUri(), { title: file.name });
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
reader.readAsDataURL(file);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
input.click();
|
|
59
|
+
}
|
|
60
|
+
uploadHandler(blobInfo, progress) {
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const formData = new FormData();
|
|
63
|
+
formData.append(this.options.fileUploadFormName(), blobInfo.blob(), blobInfo.filename());
|
|
64
|
+
this.http.post(this.options.fileUploadUrl(), formData, { reportProgress: true, observe: 'events' }).subscribe(event => {
|
|
65
|
+
if (event instanceof HttpResponse) {
|
|
66
|
+
if (this.options.fileUploadResponseFn()) {
|
|
67
|
+
const res = this.runFn(this.options.fileUploadResponseFn(), { apiResponse: event.body });
|
|
68
|
+
const { success, errmsg, url } = res;
|
|
69
|
+
if (success) {
|
|
70
|
+
resolve(this.getUrl(url));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
reject(errmsg || "上传失败");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (event.type == HttpEventType.UploadProgress) {
|
|
78
|
+
progress(Math.floor(event.loaded / event.total * 100));
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
getUrl(url) {
|
|
84
|
+
if (url.startsWith("http")) {
|
|
85
|
+
return url;
|
|
86
|
+
}
|
|
87
|
+
else if (this.fileBaseUrl instanceof BehaviorSubject) {
|
|
88
|
+
return this.fileBaseUrl.value + url;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
return this.fileBaseUrl + url;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
defaultEditorConfig = {
|
|
95
|
+
base_url: "/tinymce",
|
|
96
|
+
suffix: '.min',
|
|
97
|
+
language: 'zh_CN',
|
|
98
|
+
skin: (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'oxide-dark' : 'oxide'),
|
|
99
|
+
content_css: (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'default'),
|
|
100
|
+
promotion: false,
|
|
101
|
+
onboarding: false,
|
|
102
|
+
branding: false,
|
|
103
|
+
plugins: 'preview importcss searchreplace autolink directionality code visualblocks visualchars fullscreen image link media codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons accordion',
|
|
104
|
+
menubar: 'file edit view insert format tools table help',
|
|
105
|
+
toolbar: "undo redo | blocks fontfamily fontsize | bold italic underline strikethrough | align numlist bullist | link image | table media | lineheight outdent indent| forecolor backcolor removeformat | charmap emoticons | accordion accordionremove | code fullscreen preview | print | pagebreak anchor codesample | ltr rtl",
|
|
106
|
+
hidden_input: false,
|
|
107
|
+
file_picker_callback: this.filePickerCallback.bind(this),
|
|
108
|
+
images_upload_handler: this.uploadHandler.bind(this),
|
|
109
|
+
convert_urls: false,
|
|
110
|
+
image_advtab: true,
|
|
111
|
+
importcss_append: true,
|
|
112
|
+
image_caption: true,
|
|
113
|
+
images_reuse_filename: true,
|
|
114
|
+
quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable',
|
|
115
|
+
noneditable_class: 'mceNonEditable',
|
|
116
|
+
toolbar_mode: 'sliding',
|
|
117
|
+
contextmenu: 'link image table',
|
|
118
|
+
};
|
|
119
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RichTextEditor, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
120
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: RichTextEditor, isStandalone: true, selector: "axis-rich-text-editor", providers: [
|
|
121
|
+
{ provide: TINYMCE_SCRIPT_SRC, useValue: 'tinymce/tinymce.min.js' }
|
|
122
|
+
], viewQueries: [{ propertyName: "editor", first: true, predicate: EditorComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<editor style=\"height: 100%;\" [init]=\"editorConfig()\" licenseKey=\"gpl\" [(ngModel)]=\"value\" (ngModelChange)=\"onChange?.($event)\"></editor>", styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i2.EditorComponent, selector: "editor", inputs: ["cloudChannel", "apiKey", "licenseKey", "init", "id", "initialValue", "outputFormat", "inline", "tagName", "plugins", "toolbar", "modelEvents", "allowedEvents", "ignoreEvents", "readonly", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
123
|
+
}
|
|
124
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: RichTextEditor, decorators: [{
|
|
125
|
+
type: Component,
|
|
126
|
+
args: [{ selector: 'axis-rich-text-editor', imports: [FormsModule, EditorModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
127
|
+
{ provide: TINYMCE_SCRIPT_SRC, useValue: 'tinymce/tinymce.min.js' }
|
|
128
|
+
], template: "<editor style=\"height: 100%;\" [init]=\"editorConfig()\" licenseKey=\"gpl\" [(ngModel)]=\"value\" (ngModelChange)=\"onChange?.($event)\"></editor>", styles: [":host{display:block;width:100%}\n"] }]
|
|
129
|
+
}], propDecorators: { editor: [{
|
|
130
|
+
type: ViewChild,
|
|
131
|
+
args: [EditorComponent, { static: true }]
|
|
132
|
+
}] } });
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Generated bundle index. Do not edit.
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
export { RichTextEditor };
|
|
139
|
+
//# sourceMappingURL=ngx-axis-appforge-axis-components-rich-text-editor.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-axis-appforge-axis-components-rich-text-editor.mjs","sources":["../../../axis-components/rich-text-editor/rich-text-editor.options.ts","../../../axis-components/rich-text-editor/rich-text-editor.ts","../../../axis-components/rich-text-editor/rich-text-editor.html","../../../axis-components/rich-text-editor/ngx-axis-appforge-axis-components-rich-text-editor.ts"],"sourcesContent":["import { signal } from \"@angular/core\";\nimport { ValueAccessOptions } from \"ngx-axis-appforge/core\";\n\nexport class RichTextEditorOptions extends ValueAccessOptions {\n\n readonly fileUploadUrl = signal(\"\");\n readonly fileUploadFormName = signal(\"file\");\n readonly fileUploadResponseFn = signal(\"\");\n readonly tinymceOptions = signal<any>(undefined);\n}","import { ChangeDetectionStrategy, Component, computed, inject, ViewChild } from '@angular/core';\nimport { RichTextEditorOptions } from './rich-text-editor.options';\nimport { AXIS_FILE_BASE_URL_TOKEN, ValueAccess } from 'ngx-axis-appforge/core';\nimport { FormsModule } from '@angular/forms';\nimport { EditorComponent, EditorModule, TINYMCE_SCRIPT_SRC } from '@tinymce/tinymce-angular';\nimport { RawEditorOptions } from 'tinymce';\nimport { BehaviorSubject } from 'rxjs';\nimport { HttpClient, HttpEventType, HttpResponse } from '@angular/common/http';\n\n@Component({\n selector: 'axis-rich-text-editor',\n imports: [FormsModule, EditorModule],\n templateUrl: './rich-text-editor.html',\n styleUrl: './rich-text-editor.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: TINYMCE_SCRIPT_SRC, useValue: 'tinymce/tinymce.min.js' }\n ]\n})\nexport class RichTextEditor extends ValueAccess<RichTextEditorOptions> {\n\n override options: RichTextEditorOptions = new RichTextEditorOptions();\n private readonly fileBaseUrl = inject(AXIS_FILE_BASE_URL_TOKEN, { optional: true }) ?? \"\";\n private readonly http = inject(HttpClient);\n\n @ViewChild(EditorComponent, { static: true })\n editor!: EditorComponent;\n\n editorConfig = computed(() => {\n return Object.assign({}, this.defaultEditorConfig, this.options.tinymceOptions());\n })\n\n filePickerCallback(callback: (value: string, meta?: Record<string, any>) => void, value: string, meta: Record<string, any>) {\n const input = document.createElement('input');\n input.setAttribute('type', 'file');\n let accept;\n switch (meta['filetype']) {\n case \"image\":\n accept = \"image/*\";\n break;\n case \"media\":\n accept = \"video/*,audio/*\";\n break;\n default:\n accept = \"*/*\";\n }\n input.setAttribute('accept', accept);\n input.onchange = (e) => {\n const file = (e?.target as HTMLInputElement | undefined)?.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = () => {\n if (reader.result) {\n const id = 'blobid' + (new Date()).getTime();\n const blobCache = this.editor.editor.editorUpload.blobCache;\n const base64 = reader.result?.toString()?.split(',')[1];\n const blobInfo = blobCache.create(id, file, base64);\n blobCache.add(blobInfo);\n callback(blobInfo.blobUri(), { title: file.name });\n }\n }\n reader.readAsDataURL(file);\n }\n };\n\n input.click();\n }\n\n uploadHandler(blobInfo: any, progress: any): Promise<string> {\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append(this.options.fileUploadFormName(), blobInfo.blob(), blobInfo.filename());\n this.http.post(this.options.fileUploadUrl(), formData, { reportProgress: true, observe: 'events' }).subscribe(event => {\n if (event instanceof HttpResponse) {\n if (this.options.fileUploadResponseFn()) {\n const res = this.runFn(this.options.fileUploadResponseFn(), { apiResponse: event.body });\n const { success, errmsg, url } = res;\n if (success) {\n resolve(this.getUrl(url));\n } else {\n reject(errmsg || \"上传失败\");\n }\n }\n } else if (event.type == HttpEventType.UploadProgress) {\n progress(Math.floor(event.loaded / event.total! * 100));\n }\n });\n });\n }\n\n getUrl(url: string): string {\n if (url.startsWith(\"http\")) {\n return url;\n } else if (this.fileBaseUrl instanceof BehaviorSubject) {\n return this.fileBaseUrl.value + url;\n } else {\n return this.fileBaseUrl + url;\n }\n }\n\n\n defaultEditorConfig: RawEditorOptions = {\n base_url: \"/tinymce\",\n suffix: '.min',\n language: 'zh_CN',\n skin: (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'oxide-dark' : 'oxide'),\n content_css: (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'default'),\n promotion: false,\n onboarding: false,\n branding: false,\n plugins: 'preview importcss searchreplace autolink directionality code visualblocks visualchars fullscreen image link media codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons accordion',\n menubar: 'file edit view insert format tools table help',\n toolbar: \"undo redo | blocks fontfamily fontsize | bold italic underline strikethrough | align numlist bullist | link image | table media | lineheight outdent indent| forecolor backcolor removeformat | charmap emoticons | accordion accordionremove | code fullscreen preview | print | pagebreak anchor codesample | ltr rtl\",\n hidden_input: false,\n file_picker_callback: this.filePickerCallback.bind(this),\n images_upload_handler: this.uploadHandler.bind(this),\n convert_urls: false,\n image_advtab: true,\n importcss_append: true,\n image_caption: true,\n images_reuse_filename: true,\n quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable',\n noneditable_class: 'mceNonEditable',\n toolbar_mode: 'sliding',\n contextmenu: 'link image table',\n }\n}\n","<editor style=\"height: 100%;\" [init]=\"editorConfig()\" licenseKey=\"gpl\" [(ngModel)]=\"value\" (ngModelChange)=\"onChange?.($event)\"></editor>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './rich-text-editor';\n"],"names":[],"mappings":"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"}
|