forked from codex-team/editor.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcodex.ts
132 lines (113 loc) · 2.83 KB
/
codex.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
'use strict';
import {EditorConfig} from '../types';
declare const VERSION: string;
/**
* Apply polyfills
*/
import '@babel/register';
import 'components/polyfills';
import Core from './components/core';
/**
* Editor.js
*
* Short Description (눈_눈;)
* @version 2.0
*
* @licence Apache-2.0
* @author CodeX-Team <https://ifmo.su>
*/
export default class EditorJS {
/**
* Promise that resolves when core modules are ready and UI is rendered on the page
*/
public isReady: Promise<void>;
/**
* Stores destroy method implementation.
* Clear heap occupied by Editor and remove UI components from the DOM.
*/
public destroy: () => void;
/** Editor version */
static get version(): string {
return VERSION;
}
/**
* @constructor
*
* @param {EditorConfig|String|undefined} [configuration] - user configuration
*/
public constructor(configuration?: EditorConfig|string) {
/**
* Set default onReady function
*/
let onReady = () => {};
/**
* If `onReady` was passed in `configuration` then redefine onReady function
*/
if (typeof configuration === 'object' && typeof configuration.onReady === 'function') {
onReady = configuration.onReady;
}
/**
* Create a Editor.js instance
*/
const editor = new Core(configuration);
/**
* We need to export isReady promise in the constructor
* as it can be used before other API methods are exported
* @type {Promise<void>}
*/
this.isReady = editor.isReady.then(() => {
this.exportAPI(editor);
onReady();
});
}
/**
* Export external API methods
*
* @param editor
*/
public exportAPI(editor: Core): void {
const fieldsToExport = [ 'configuration' ];
const destroy = () => {
editor.moduleInstances.Listeners.removeAll();
editor.moduleInstances.UI.destroy();
editor.moduleInstances.ModificationsObserver.destroy();
editor = null;
for (const field in this) {
if (this.hasOwnProperty(field)) {
delete this[field];
}
}
Object.setPrototypeOf(this, null);
};
fieldsToExport.forEach((field) => {
this[field] = editor[field];
});
this.destroy = destroy;
Object.setPrototypeOf(this, editor.moduleInstances.API.methods);
delete this.exportAPI;
const shorthands = {
blocks: {
clear: 'clear',
render: 'render',
},
caret: {
focus: 'focus',
},
events: {
on: 'on',
off: 'off',
emit: 'emit',
},
saver: {
save: 'save',
},
};
Object.entries(shorthands)
.forEach(([key, methods]) => {
Object.entries(methods)
.forEach(([name, alias]) => {
this[alias] = editor.moduleInstances.API.methods[key][name];
});
});
}
}