|
1
|
|
|
class EditorManager { |
|
2
|
|
|
constructor(mix) { |
|
3
|
|
|
this.mix = mix; |
|
4
|
|
|
|
|
5
|
|
|
this.KNOWN_EDITORS = [ |
|
6
|
|
|
'TinyMce', |
|
7
|
|
|
'Medium', |
|
8
|
|
|
'Markdown', |
|
9
|
|
|
'Ck' |
|
10
|
|
|
]; |
|
11
|
|
|
} |
|
12
|
|
|
|
|
13
|
|
|
/** |
|
14
|
|
|
* Assemble required editors. |
|
15
|
|
|
*/ |
|
16
|
|
|
enable(editors) { |
|
17
|
|
|
if (!Array.isArray(editors)) { |
|
18
|
|
|
editors = Array.from(arguments); |
|
19
|
|
|
} |
|
20
|
|
|
|
|
21
|
|
|
editors.forEach((editor) => { |
|
22
|
|
|
if (this.KNOWN_EDITORS.indexOf(editor) === -1) { |
|
23
|
|
|
throw new Error(`Unknown editor: ${editor}`); |
|
24
|
|
|
} |
|
25
|
|
|
}); |
|
26
|
|
|
|
|
27
|
|
|
(editors || ['Medium']).forEach((editor) => { |
|
28
|
|
|
const method = `handle${editor}Editor`; |
|
29
|
|
|
|
|
30
|
|
|
this[method](); |
|
31
|
|
|
}); |
|
32
|
|
|
} |
|
33
|
|
|
|
|
34
|
|
|
/** |
|
35
|
|
|
* Assembles TinyMCE editor |
|
36
|
|
|
* |
|
37
|
|
|
* @requires `tinymce@^4.6.4` package |
|
38
|
|
|
* @note npm i tinymce@^4.6.4 --save-dev |
|
39
|
|
|
*/ |
|
40
|
|
|
handleTinyMceEditor() { |
|
41
|
|
|
this.mix.copy('node_modules/tinymce/skins', 'build/editors/skins'); |
|
42
|
|
|
this.mix.js('resources/js/editors/tinymce.js', 'build/editors/tinymce.js'); |
|
43
|
|
|
} |
|
44
|
|
|
|
|
45
|
|
|
/** |
|
46
|
|
|
* Assembles CK editor |
|
47
|
|
|
* |
|
48
|
|
|
* @requires `ckeditor@^4.7.0` package |
|
49
|
|
|
* @note npm i ckeditor@^4.7.0 --save-dev |
|
50
|
|
|
*/ |
|
51
|
|
|
handleCkEditor() { |
|
52
|
|
|
this.mix.copy([ |
|
53
|
|
|
'node_modules/ckeditor/config.js', |
|
54
|
|
|
'node_modules/ckeditor/styles.js', |
|
55
|
|
|
'node_modules/ckeditor/contents.css' |
|
56
|
|
|
], 'build/editors'); |
|
57
|
|
|
this.mix.copy('node_modules/ckeditor/lang/en.js', 'build/editors/lang/en.js'); |
|
58
|
|
|
this.mix.copy('node_modules/ckeditor/skins', 'build/editors/skins'); |
|
59
|
|
|
this.mix.copy('node_modules/ckeditor/plugins', 'build/editors/plugins'); |
|
60
|
|
|
|
|
61
|
|
|
this.mix.js('resources/js/editors/ckeditor.js', 'build/editors/ckeditor.js'); |
|
62
|
|
|
} |
|
63
|
|
|
|
|
64
|
|
|
/** |
|
65
|
|
|
* Assembles Medium editor. |
|
66
|
|
|
* |
|
67
|
|
|
* @requires `medium-editor@^5.23.1` package |
|
68
|
|
|
* @note npm i medium-editor@^5.23.1 --save-dev |
|
69
|
|
|
*/ |
|
70
|
|
|
handleMediumEditor() { |
|
71
|
|
|
this.mix.js('resources/js/editors/medium.js', 'build/editors/medium.js'); |
|
72
|
|
|
this.mix.sass('resources/sass/editors/medium.scss', 'build/editors/medium.css'); |
|
73
|
|
|
} |
|
74
|
|
|
|
|
75
|
|
|
/** |
|
76
|
|
|
* Assembles Markdown editor. |
|
77
|
|
|
* |
|
78
|
|
|
* @requires `simplemde` package |
|
79
|
|
|
* @note npm i simplemde --save-dev |
|
80
|
|
|
*/ |
|
81
|
|
|
handleMarkdownEditor() { |
|
82
|
|
|
this.mix.js('resources/js/editors/markdown.js', 'build/editors/markdown.js'); |
|
83
|
|
|
this.mix.sass('resources/sass/editors/markdown.scss', 'build/editors/markdown.css'); |
|
84
|
|
|
} |
|
85
|
|
|
} |
|
86
|
|
|
|
|
87
|
|
|
module.exports = EditorManager; |