suneditor 3.0.0-beta.2 → 3.0.0-beta.20
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/CONTRIBUTING.md +186 -184
- package/LICENSE +21 -21
- package/README.md +157 -180
- package/dist/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +126 -123
- package/src/assets/design/color.css +131 -121
- package/src/assets/design/index.css +3 -3
- package/src/assets/design/size.css +37 -35
- package/src/assets/design/typography.css +37 -37
- package/src/assets/icons/defaultIcons.js +247 -232
- package/src/assets/suneditor-contents.css +779 -778
- package/src/assets/suneditor.css +43 -35
- package/src/core/base/eventHandlers/handler_toolbar.js +135 -135
- package/src/core/base/eventHandlers/handler_ww_clipboard.js +56 -56
- package/src/core/base/eventHandlers/handler_ww_dragDrop.js +115 -113
- package/src/core/base/eventHandlers/handler_ww_key_input.js +1200 -1200
- package/src/core/base/eventHandlers/handler_ww_mouse.js +194 -194
- package/src/core/base/eventManager.js +1550 -1484
- package/src/core/base/history.js +355 -355
- package/src/core/class/char.js +163 -162
- package/src/core/class/component.js +856 -842
- package/src/core/class/format.js +3433 -3422
- package/src/core/class/html.js +1927 -1890
- package/src/core/class/menu.js +357 -346
- package/src/core/class/nodeTransform.js +424 -424
- package/src/core/class/offset.js +858 -891
- package/src/core/class/selection.js +710 -620
- package/src/core/class/shortcuts.js +98 -98
- package/src/core/class/toolbar.js +438 -430
- package/src/core/class/ui.js +424 -422
- package/src/core/class/viewer.js +750 -750
- package/src/core/editor.js +1810 -1708
- package/src/core/section/actives.js +268 -241
- package/src/core/section/constructor.js +1348 -1661
- package/src/core/section/context.js +102 -102
- package/src/core/section/documentType.js +582 -561
- package/src/core/section/options.js +367 -0
- package/src/core/util/instanceCheck.js +59 -0
- package/src/editorInjector/_classes.js +36 -36
- package/src/editorInjector/_core.js +92 -92
- package/src/editorInjector/index.js +75 -75
- package/src/events.js +634 -622
- package/src/helper/clipboard.js +59 -59
- package/src/helper/converter.js +586 -564
- package/src/helper/dom/domCheck.js +304 -304
- package/src/helper/dom/domQuery.js +677 -669
- package/src/helper/dom/domUtils.js +618 -557
- package/src/helper/dom/index.js +12 -12
- package/src/helper/env.js +249 -240
- package/src/helper/index.js +25 -25
- package/src/helper/keyCodeMap.js +183 -183
- package/src/helper/numbers.js +72 -72
- package/src/helper/unicode.js +47 -47
- package/src/langs/ckb.js +231 -231
- package/src/langs/cs.js +231 -231
- package/src/langs/da.js +231 -231
- package/src/langs/de.js +231 -231
- package/src/langs/en.js +230 -230
- package/src/langs/es.js +231 -231
- package/src/langs/fa.js +231 -231
- package/src/langs/fr.js +231 -231
- package/src/langs/he.js +231 -231
- package/src/langs/hu.js +230 -230
- package/src/langs/index.js +28 -28
- package/src/langs/it.js +231 -231
- package/src/langs/ja.js +230 -230
- package/src/langs/km.js +230 -230
- package/src/langs/ko.js +230 -230
- package/src/langs/lv.js +231 -231
- package/src/langs/nl.js +231 -231
- package/src/langs/pl.js +231 -231
- package/src/langs/pt_br.js +231 -231
- package/src/langs/ro.js +231 -231
- package/src/langs/ru.js +231 -231
- package/src/langs/se.js +231 -231
- package/src/langs/tr.js +231 -231
- package/src/langs/uk.js +231 -231
- package/src/langs/ur.js +231 -231
- package/src/langs/zh_cn.js +231 -231
- package/src/modules/ApiManager.js +191 -191
- package/src/modules/Browser.js +669 -667
- package/src/modules/ColorPicker.js +364 -362
- package/src/modules/Controller.js +474 -454
- package/src/modules/Figure.js +1620 -1617
- package/src/modules/FileManager.js +359 -359
- package/src/modules/HueSlider.js +577 -565
- package/src/modules/Modal.js +346 -346
- package/src/modules/ModalAnchorEditor.js +643 -643
- package/src/modules/SelectMenu.js +549 -549
- package/src/modules/_DragHandle.js +17 -17
- package/src/modules/index.js +14 -14
- package/src/plugins/browser/audioGallery.js +83 -83
- package/src/plugins/browser/fileBrowser.js +103 -103
- package/src/plugins/browser/fileGallery.js +83 -83
- package/src/plugins/browser/imageGallery.js +81 -81
- package/src/plugins/browser/videoGallery.js +103 -103
- package/src/plugins/command/blockquote.js +61 -60
- package/src/plugins/command/exportPDF.js +134 -134
- package/src/plugins/command/fileUpload.js +456 -456
- package/src/plugins/command/list_bulleted.js +149 -148
- package/src/plugins/command/list_numbered.js +152 -151
- package/src/plugins/dropdown/align.js +157 -155
- package/src/plugins/dropdown/backgroundColor.js +108 -104
- package/src/plugins/dropdown/font.js +141 -137
- package/src/plugins/dropdown/fontColor.js +109 -105
- package/src/plugins/dropdown/formatBlock.js +170 -178
- package/src/plugins/dropdown/hr.js +152 -152
- package/src/plugins/dropdown/layout.js +83 -83
- package/src/plugins/dropdown/lineHeight.js +131 -130
- package/src/plugins/dropdown/list.js +123 -122
- package/src/plugins/dropdown/paragraphStyle.js +138 -138
- package/src/plugins/dropdown/table.js +4110 -4000
- package/src/plugins/dropdown/template.js +83 -83
- package/src/plugins/dropdown/textStyle.js +149 -149
- package/src/plugins/field/mention.js +242 -242
- package/src/plugins/index.js +120 -120
- package/src/plugins/input/fontSize.js +414 -410
- package/src/plugins/input/pageNavigator.js +71 -70
- package/src/plugins/modal/audio.js +677 -677
- package/src/plugins/modal/drawing.js +537 -531
- package/src/plugins/modal/embed.js +886 -886
- package/src/plugins/modal/image.js +1377 -1376
- package/src/plugins/modal/link.js +248 -240
- package/src/plugins/modal/math.js +563 -563
- package/src/plugins/modal/video.js +1226 -1226
- package/src/plugins/popup/anchor.js +224 -222
- package/src/suneditor.js +114 -107
- package/src/themes/dark.css +132 -122
- package/src/typedef.js +132 -130
- package/types/assets/icons/defaultIcons.d.ts +8 -0
- package/types/core/base/eventManager.d.ts +29 -4
- package/types/core/class/char.d.ts +2 -1
- package/types/core/class/component.d.ts +1 -2
- package/types/core/class/format.d.ts +8 -1
- package/types/core/class/html.d.ts +8 -0
- package/types/core/class/menu.d.ts +8 -0
- package/types/core/class/offset.d.ts +24 -26
- package/types/core/class/selection.d.ts +2 -0
- package/types/core/class/toolbar.d.ts +6 -0
- package/types/core/class/ui.d.ts +1 -1
- package/types/core/editor.d.ts +34 -12
- package/types/core/section/constructor.d.ts +5 -638
- package/types/core/section/documentType.d.ts +12 -2
- package/types/core/section/options.d.ts +740 -0
- package/types/core/util/instanceCheck.d.ts +50 -0
- package/types/editorInjector/_core.d.ts +5 -5
- package/types/editorInjector/index.d.ts +2 -2
- package/types/events.d.ts +2 -0
- package/types/helper/converter.d.ts +9 -0
- package/types/helper/dom/domQuery.d.ts +5 -5
- package/types/helper/dom/domUtils.d.ts +8 -0
- package/types/helper/env.d.ts +6 -1
- package/types/helper/index.d.ts +4 -1
- package/types/index.d.ts +122 -120
- package/types/langs/_Lang.d.ts +194 -194
- package/types/modules/ColorPicker.d.ts +5 -1
- package/types/modules/Controller.d.ts +8 -4
- package/types/modules/Figure.d.ts +2 -1
- package/types/modules/HueSlider.d.ts +4 -1
- package/types/modules/SelectMenu.d.ts +1 -1
- package/types/plugins/command/blockquote.d.ts +1 -0
- package/types/plugins/command/list_bulleted.d.ts +1 -0
- package/types/plugins/command/list_numbered.d.ts +1 -0
- package/types/plugins/dropdown/align.d.ts +1 -0
- package/types/plugins/dropdown/backgroundColor.d.ts +1 -0
- package/types/plugins/dropdown/font.d.ts +1 -0
- package/types/plugins/dropdown/fontColor.d.ts +1 -0
- package/types/plugins/dropdown/formatBlock.d.ts +3 -2
- package/types/plugins/dropdown/lineHeight.d.ts +1 -0
- package/types/plugins/dropdown/list.d.ts +1 -0
- package/types/plugins/dropdown/table.d.ts +6 -0
- package/types/plugins/input/fontSize.d.ts +1 -0
- package/types/plugins/modal/drawing.d.ts +4 -0
- package/types/plugins/modal/link.d.ts +32 -15
- package/types/suneditor.d.ts +13 -9
- package/types/typedef.d.ts +8 -0
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
import EditorInjector from '../../editorInjector';
|
|
2
|
-
import { dom, env } from '../../helper';
|
|
3
|
-
import { ApiManager } from '../../modules';
|
|
4
|
-
|
|
5
|
-
const { _w, _d } = env;
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @class
|
|
9
|
-
* @description Export PDF plugin
|
|
10
|
-
*/
|
|
11
|
-
class ExportPDF extends EditorInjector {
|
|
12
|
-
static key = 'exportPDF';
|
|
13
|
-
static type = 'command';
|
|
14
|
-
static className = 'se-component-enabled';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @constructor
|
|
18
|
-
* @param {__se__EditorCore} editor - The root editor instance
|
|
19
|
-
* @param {Object} pluginOptions - plugin options
|
|
20
|
-
* @param {string} pluginOptions.apiUrl - server request url
|
|
21
|
-
* @param {string} pluginOptions.fileName - file name
|
|
22
|
-
*/
|
|
23
|
-
constructor(editor, pluginOptions) {
|
|
24
|
-
super(editor);
|
|
25
|
-
// plugin basic properties
|
|
26
|
-
this.title = this.lang.exportPDF;
|
|
27
|
-
this.icon = 'PDF';
|
|
28
|
-
|
|
29
|
-
// plugin options
|
|
30
|
-
this.apiUrl = pluginOptions.apiUrl;
|
|
31
|
-
this.fileName = pluginOptions.fileName || 'suneditor-pdf';
|
|
32
|
-
|
|
33
|
-
// option check
|
|
34
|
-
if (!this.apiUrl) {
|
|
35
|
-
console.warn('[SUNEDITOR.plugins.exportPDF.error] Requires exportPDF."apiUrl" options.');
|
|
36
|
-
} else {
|
|
37
|
-
this.apiManager = new ApiManager(this, {
|
|
38
|
-
method: 'POST',
|
|
39
|
-
url: this.apiUrl,
|
|
40
|
-
headers: {
|
|
41
|
-
'Content-Type': 'application/json'
|
|
42
|
-
},
|
|
43
|
-
responseType: 'blob'
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* @editorMethod Editor.core
|
|
50
|
-
* @description Executes the main execution method of the plugin.
|
|
51
|
-
* - It is executed by clicking a toolbar "command" button or calling an API.
|
|
52
|
-
* @returns {Promise<void>}
|
|
53
|
-
*/
|
|
54
|
-
async action() {
|
|
55
|
-
if (!this.apiUrl) {
|
|
56
|
-
console.warn('[SUNEDITOR.plugins.exportPDF.error] Requires exportPDF."apiUrl" options.');
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
this.ui.showLoading();
|
|
61
|
-
let ww = null;
|
|
62
|
-
|
|
63
|
-
try {
|
|
64
|
-
const standardWW = this.editor.frameContext.get('documentTypePageMirror') || this.editor.frameContext.get('wysiwygFrame');
|
|
65
|
-
const editableDiv = dom.utils.createElement('div', { class: standardWW.className }, standardWW.innerHTML);
|
|
66
|
-
ww = dom.utils.createElement('div', { style: `position: absolute; top: -10000px; left: -10000px; width: 21cm; columns: 21cm; height: auto;` }, editableDiv);
|
|
67
|
-
|
|
68
|
-
const innerPadding = this._w.getComputedStyle(standardWW).padding;
|
|
69
|
-
const inlineWW = dom.utils.applyInlineStylesAll(editableDiv, true, this.options.get('allUsedStyles'));
|
|
70
|
-
inlineWW.style.padding = inlineWW.style.paddingTop = inlineWW.style.paddingBottom = inlineWW.style.paddingLeft = inlineWW.style.paddingRight = '0';
|
|
71
|
-
ww.innerHTML = `
|
|
72
|
-
<style>
|
|
73
|
-
@page {
|
|
74
|
-
size: A4;
|
|
75
|
-
margin: ${innerPadding};
|
|
76
|
-
}
|
|
77
|
-
</style>
|
|
78
|
-
${inlineWW.outerHTML}`;
|
|
79
|
-
|
|
80
|
-
_d.body.appendChild(ww);
|
|
81
|
-
|
|
82
|
-
// before event
|
|
83
|
-
if ((await this.triggerEvent('onExportPDFBefore', { target: ww })) === false) return;
|
|
84
|
-
|
|
85
|
-
// at server
|
|
86
|
-
await this._createByServer(ww);
|
|
87
|
-
return;
|
|
88
|
-
} catch (error) {
|
|
89
|
-
console.error('[SUNEDITOR.plugins.exportPDF.error]', error.message);
|
|
90
|
-
} finally {
|
|
91
|
-
dom.utils.removeItem(ww);
|
|
92
|
-
this.ui.hideLoading();
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* @private
|
|
98
|
-
* @description Sends the editor content to the server for PDF generation.
|
|
99
|
-
* @param {HTMLElement} ww - A temporary container holding the formatted editor content.
|
|
100
|
-
* @returns {Promise<void>} Resolves when the PDF file is successfully downloaded.
|
|
101
|
-
* @throws {Error} Throws an error if the server response indicates a failure.
|
|
102
|
-
*/
|
|
103
|
-
async _createByServer(ww) {
|
|
104
|
-
const data = {
|
|
105
|
-
fileName: this.fileName,
|
|
106
|
-
htmlContent: ww.innerHTML
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
const xhr = await this.apiManager.asyncCall({ data: JSON.stringify(data) });
|
|
110
|
-
|
|
111
|
-
if (xhr.status !== 200) {
|
|
112
|
-
const res = !xhr.responseText ? xhr : JSON.parse(xhr.responseText);
|
|
113
|
-
throw Error(`[SUNEDITOR.plugins.exportPDF.error] ${res.errorMessage}`);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const blob = new Blob([xhr.response], { type: 'application/pdf' });
|
|
117
|
-
const contentDisposition = xhr.getResponseHeader('Content-Disposition');
|
|
118
|
-
const downloadUrl = URL.createObjectURL(blob);
|
|
119
|
-
const filename = (contentDisposition.match(/filename="([^"]+)/) || [])[1] || this.fileName + '.pdf';
|
|
120
|
-
const a = dom.utils.createElement('A', { href: downloadUrl, download: filename, style: 'display: none;' }, null);
|
|
121
|
-
|
|
122
|
-
try {
|
|
123
|
-
_d.body.appendChild(a);
|
|
124
|
-
a.click();
|
|
125
|
-
} finally {
|
|
126
|
-
_w.setTimeout(() => {
|
|
127
|
-
dom.utils.removeItem(a);
|
|
128
|
-
URL.revokeObjectURL(downloadUrl);
|
|
129
|
-
}, 100);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export default ExportPDF;
|
|
1
|
+
import EditorInjector from '../../editorInjector';
|
|
2
|
+
import { dom, env } from '../../helper';
|
|
3
|
+
import { ApiManager } from '../../modules';
|
|
4
|
+
|
|
5
|
+
const { _w, _d } = env;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @class
|
|
9
|
+
* @description Export PDF plugin
|
|
10
|
+
*/
|
|
11
|
+
class ExportPDF extends EditorInjector {
|
|
12
|
+
static key = 'exportPDF';
|
|
13
|
+
static type = 'command';
|
|
14
|
+
static className = 'se-component-enabled';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @constructor
|
|
18
|
+
* @param {__se__EditorCore} editor - The root editor instance
|
|
19
|
+
* @param {Object} pluginOptions - plugin options
|
|
20
|
+
* @param {string} pluginOptions.apiUrl - server request url
|
|
21
|
+
* @param {string} pluginOptions.fileName - file name
|
|
22
|
+
*/
|
|
23
|
+
constructor(editor, pluginOptions) {
|
|
24
|
+
super(editor);
|
|
25
|
+
// plugin basic properties
|
|
26
|
+
this.title = this.lang.exportPDF;
|
|
27
|
+
this.icon = 'PDF';
|
|
28
|
+
|
|
29
|
+
// plugin options
|
|
30
|
+
this.apiUrl = pluginOptions.apiUrl;
|
|
31
|
+
this.fileName = pluginOptions.fileName || 'suneditor-pdf';
|
|
32
|
+
|
|
33
|
+
// option check
|
|
34
|
+
if (!this.apiUrl) {
|
|
35
|
+
console.warn('[SUNEDITOR.plugins.exportPDF.error] Requires exportPDF."apiUrl" options.');
|
|
36
|
+
} else {
|
|
37
|
+
this.apiManager = new ApiManager(this, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
url: this.apiUrl,
|
|
40
|
+
headers: {
|
|
41
|
+
'Content-Type': 'application/json'
|
|
42
|
+
},
|
|
43
|
+
responseType: 'blob'
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @editorMethod Editor.core
|
|
50
|
+
* @description Executes the main execution method of the plugin.
|
|
51
|
+
* - It is executed by clicking a toolbar "command" button or calling an API.
|
|
52
|
+
* @returns {Promise<void>}
|
|
53
|
+
*/
|
|
54
|
+
async action() {
|
|
55
|
+
if (!this.apiUrl) {
|
|
56
|
+
console.warn('[SUNEDITOR.plugins.exportPDF.error] Requires exportPDF."apiUrl" options.');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
this.ui.showLoading();
|
|
61
|
+
let ww = null;
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
const standardWW = this.editor.frameContext.get('documentTypePageMirror') || this.editor.frameContext.get('wysiwygFrame');
|
|
65
|
+
const editableDiv = dom.utils.createElement('div', { class: standardWW.className }, standardWW.innerHTML);
|
|
66
|
+
ww = dom.utils.createElement('div', { style: `position: absolute; top: -10000px; left: -10000px; width: 21cm; columns: 21cm; height: auto;` }, editableDiv);
|
|
67
|
+
|
|
68
|
+
const innerPadding = this._w.getComputedStyle(standardWW).padding;
|
|
69
|
+
const inlineWW = dom.utils.applyInlineStylesAll(editableDiv, true, this.options.get('allUsedStyles'));
|
|
70
|
+
inlineWW.style.padding = inlineWW.style.paddingTop = inlineWW.style.paddingBottom = inlineWW.style.paddingLeft = inlineWW.style.paddingRight = '0';
|
|
71
|
+
ww.innerHTML = `
|
|
72
|
+
<style>
|
|
73
|
+
@page {
|
|
74
|
+
size: A4;
|
|
75
|
+
margin: ${innerPadding};
|
|
76
|
+
}
|
|
77
|
+
</style>
|
|
78
|
+
${inlineWW.outerHTML}`;
|
|
79
|
+
|
|
80
|
+
_d.body.appendChild(ww);
|
|
81
|
+
|
|
82
|
+
// before event
|
|
83
|
+
if ((await this.triggerEvent('onExportPDFBefore', { target: ww })) === false) return;
|
|
84
|
+
|
|
85
|
+
// at server
|
|
86
|
+
await this._createByServer(ww);
|
|
87
|
+
return;
|
|
88
|
+
} catch (error) {
|
|
89
|
+
console.error('[SUNEDITOR.plugins.exportPDF.error]', error.message);
|
|
90
|
+
} finally {
|
|
91
|
+
dom.utils.removeItem(ww);
|
|
92
|
+
this.ui.hideLoading();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @private
|
|
98
|
+
* @description Sends the editor content to the server for PDF generation.
|
|
99
|
+
* @param {HTMLElement} ww - A temporary container holding the formatted editor content.
|
|
100
|
+
* @returns {Promise<void>} Resolves when the PDF file is successfully downloaded.
|
|
101
|
+
* @throws {Error} Throws an error if the server response indicates a failure.
|
|
102
|
+
*/
|
|
103
|
+
async _createByServer(ww) {
|
|
104
|
+
const data = {
|
|
105
|
+
fileName: this.fileName,
|
|
106
|
+
htmlContent: ww.innerHTML
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const xhr = await this.apiManager.asyncCall({ data: JSON.stringify(data) });
|
|
110
|
+
|
|
111
|
+
if (xhr.status !== 200) {
|
|
112
|
+
const res = !xhr.responseText ? xhr : JSON.parse(xhr.responseText);
|
|
113
|
+
throw Error(`[SUNEDITOR.plugins.exportPDF.error] ${res.errorMessage}`);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const blob = new Blob([xhr.response], { type: 'application/pdf' });
|
|
117
|
+
const contentDisposition = xhr.getResponseHeader('Content-Disposition');
|
|
118
|
+
const downloadUrl = URL.createObjectURL(blob);
|
|
119
|
+
const filename = (contentDisposition.match(/filename="([^"]+)/) || [])[1] || this.fileName + '.pdf';
|
|
120
|
+
const a = dom.utils.createElement('A', { href: downloadUrl, download: filename, style: 'display: none;' }, null);
|
|
121
|
+
|
|
122
|
+
try {
|
|
123
|
+
_d.body.appendChild(a);
|
|
124
|
+
a.click();
|
|
125
|
+
} finally {
|
|
126
|
+
_w.setTimeout(() => {
|
|
127
|
+
dom.utils.removeItem(a);
|
|
128
|
+
URL.revokeObjectURL(downloadUrl);
|
|
129
|
+
}, 100);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export default ExportPDF;
|