suneditor 2.44.2 → 2.44.4
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/LICENSE.txt +20 -20
- package/README.md +1585 -1585
- package/dist/css/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +2 -2
- package/package.json +71 -71
- package/src/assets/css/suneditor-contents.css +556 -556
- package/src/assets/css/suneditor.css +0 -0
- package/src/assets/defaultIcons.js +103 -103
- package/src/lang/Lang.d.ts +143 -143
- package/src/lang/ckb.d.ts +4 -4
- package/src/lang/ckb.js +187 -187
- package/src/lang/da.d.ts +4 -4
- package/src/lang/da.js +191 -191
- package/src/lang/de.d.ts +4 -4
- package/src/lang/de.js +187 -187
- package/src/lang/en.d.ts +4 -4
- package/src/lang/en.js +187 -187
- package/src/lang/es.d.ts +4 -4
- package/src/lang/es.js +187 -187
- package/src/lang/fr.d.ts +4 -4
- package/src/lang/fr.js +188 -188
- package/src/lang/he.d.ts +4 -4
- package/src/lang/he.js +188 -188
- package/src/lang/index.d.ts +22 -21
- package/src/lang/index.js +25 -24
- package/src/lang/it.d.ts +4 -4
- package/src/lang/it.js +188 -188
- package/src/lang/ja.d.ts +4 -4
- package/src/lang/ja.js +187 -187
- package/src/lang/ko.d.ts +4 -4
- package/src/lang/ko.js +187 -187
- package/src/lang/lv.d.ts +4 -4
- package/src/lang/lv.js +187 -187
- package/src/lang/nl.d.ts +4 -4
- package/src/lang/nl.js +187 -187
- package/src/lang/pl.d.ts +4 -4
- package/src/lang/pl.js +187 -187
- package/src/lang/pt_br.d.ts +4 -4
- package/src/lang/pt_br.js +189 -189
- package/src/lang/ro.d.ts +4 -4
- package/src/lang/ro.js +187 -187
- package/src/lang/ru.d.ts +4 -4
- package/src/lang/ru.js +187 -187
- package/src/lang/se.d.ts +4 -4
- package/src/lang/se.js +191 -191
- package/src/lang/ua.d.ts +5 -5
- package/src/lang/ua.js +188 -188
- package/src/lang/ur.d.ts +5 -0
- package/src/lang/ur.js +188 -0
- package/src/lang/zh_cn.d.ts +4 -4
- package/src/lang/zh_cn.js +187 -187
- package/src/lib/constructor.js +1 -2
- package/src/lib/context.d.ts +42 -42
- package/src/lib/context.js +0 -0
- package/src/lib/core.d.ts +1101 -1101
- package/src/lib/core.js +220 -99
- package/src/lib/history.d.ts +48 -48
- package/src/lib/history.js +218 -218
- package/src/lib/util.d.ts +677 -677
- package/src/lib/util.js +38 -12
- package/src/options.d.ts +608 -608
- package/src/plugins/CommandPlugin.d.ts +7 -7
- package/src/plugins/DialogPlugin.d.ts +19 -19
- package/src/plugins/FileBrowserPlugin.d.ts +29 -29
- package/src/plugins/Module.d.ts +14 -14
- package/src/plugins/Plugin.d.ts +41 -41
- package/src/plugins/SubmenuPlugin.d.ts +7 -7
- package/src/plugins/command/blockquote.d.ts +4 -4
- package/src/plugins/command/blockquote.js +46 -46
- package/src/plugins/dialog/audio.d.ts +4 -4
- package/src/plugins/dialog/audio.js +556 -554
- package/src/plugins/dialog/image.d.ts +4 -4
- package/src/plugins/dialog/image.js +1122 -1107
- package/src/plugins/dialog/link.d.ts +4 -4
- package/src/plugins/dialog/link.js +223 -223
- package/src/plugins/dialog/math.d.ts +4 -4
- package/src/plugins/dialog/math.js +294 -294
- package/src/plugins/dialog/mention.d.ts +5 -5
- package/src/plugins/dialog/mention.js +242 -242
- package/src/plugins/dialog/video.d.ts +4 -4
- package/src/plugins/dialog/video.js +983 -981
- package/src/plugins/fileBrowser/imageGallery.d.ts +4 -4
- package/src/plugins/fileBrowser/imageGallery.js +63 -63
- package/src/plugins/index.d.ts +79 -79
- package/src/plugins/index.js +32 -32
- package/src/plugins/modules/_anchor.js +461 -462
- package/src/plugins/modules/_colorPicker.d.ts +59 -59
- package/src/plugins/modules/_colorPicker.js +0 -0
- package/src/plugins/modules/_notice.d.ts +20 -20
- package/src/plugins/modules/_notice.js +72 -72
- package/src/plugins/modules/_selectMenu.js +118 -118
- package/src/plugins/modules/component.d.ts +24 -24
- package/src/plugins/modules/component.js +82 -82
- package/src/plugins/modules/dialog.d.ts +27 -27
- package/src/plugins/modules/dialog.js +174 -174
- package/src/plugins/modules/fileBrowser.d.ts +41 -41
- package/src/plugins/modules/fileBrowser.js +373 -373
- package/src/plugins/modules/fileManager.d.ts +66 -66
- package/src/plugins/modules/fileManager.js +325 -324
- package/src/plugins/modules/index.d.ts +10 -10
- package/src/plugins/modules/index.js +8 -8
- package/src/plugins/modules/resizing.d.ts +153 -153
- package/src/plugins/modules/resizing.js +895 -895
- package/src/plugins/submenu/align.d.ts +4 -4
- package/src/plugins/submenu/align.js +160 -160
- package/src/plugins/submenu/font.d.ts +4 -4
- package/src/plugins/submenu/font.js +120 -120
- package/src/plugins/submenu/fontColor.d.ts +4 -4
- package/src/plugins/submenu/fontColor.js +0 -0
- package/src/plugins/submenu/fontSize.d.ts +4 -4
- package/src/plugins/submenu/fontSize.js +112 -112
- package/src/plugins/submenu/formatBlock.d.ts +4 -4
- package/src/plugins/submenu/formatBlock.js +273 -273
- package/src/plugins/submenu/hiliteColor.d.ts +4 -4
- package/src/plugins/submenu/hiliteColor.js +0 -0
- package/src/plugins/submenu/horizontalRule.d.ts +4 -4
- package/src/plugins/submenu/horizontalRule.js +98 -98
- package/src/plugins/submenu/lineHeight.d.ts +4 -4
- package/src/plugins/submenu/lineHeight.js +104 -104
- package/src/plugins/submenu/list.d.ts +4 -4
- package/src/plugins/submenu/list.js +456 -455
- package/src/plugins/submenu/paragraphStyle.d.ts +4 -4
- package/src/plugins/submenu/paragraphStyle.js +135 -135
- package/src/plugins/submenu/table.d.ts +4 -4
- package/src/plugins/submenu/template.d.ts +4 -4
- package/src/plugins/submenu/template.js +71 -71
- package/src/plugins/submenu/textStyle.d.ts +4 -4
- package/src/plugins/submenu/textStyle.js +167 -167
- package/src/suneditor.d.ts +9 -9
- package/src/suneditor.js +75 -75
- package/src/suneditor_build.js +17 -17
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SubmenuPlugin } from '../SubmenuPlugin';
|
|
2
|
-
|
|
3
|
-
declare const paragraphStyle: SubmenuPlugin;
|
|
4
|
-
|
|
1
|
+
import { SubmenuPlugin } from '../SubmenuPlugin';
|
|
2
|
+
|
|
3
|
+
declare const paragraphStyle: SubmenuPlugin;
|
|
4
|
+
|
|
5
5
|
export default paragraphStyle;
|
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* wysiwyg web editor
|
|
3
|
-
*
|
|
4
|
-
* suneditor.js
|
|
5
|
-
* Copyright 2017 JiHong Lee.
|
|
6
|
-
* MIT license.
|
|
7
|
-
*/
|
|
8
|
-
'use strict';
|
|
9
|
-
|
|
10
|
-
export default {
|
|
11
|
-
name: 'paragraphStyle',
|
|
12
|
-
display: 'submenu',
|
|
13
|
-
add: function (core, targetElement) {
|
|
14
|
-
const context = core.context;
|
|
15
|
-
context.paragraphStyle = {
|
|
16
|
-
_classList: null
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
/** set submenu */
|
|
20
|
-
let listDiv = this.setSubmenu(core);
|
|
21
|
-
|
|
22
|
-
/** add event listeners */
|
|
23
|
-
listDiv.querySelector('ul').addEventListener('click', this.pickUp.bind(core));
|
|
24
|
-
|
|
25
|
-
context.paragraphStyle._classList = listDiv.querySelectorAll('li button');
|
|
26
|
-
|
|
27
|
-
/** append target button menu */
|
|
28
|
-
core.initMenuTarget(this.name, targetElement, listDiv);
|
|
29
|
-
|
|
30
|
-
/** empty memory */
|
|
31
|
-
listDiv = null;
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
setSubmenu: function (core) {
|
|
35
|
-
const option = core.options;
|
|
36
|
-
const listDiv = core.util.createElement('DIV');
|
|
37
|
-
listDiv.className = 'se-submenu se-list-layer se-list-format';
|
|
38
|
-
|
|
39
|
-
const menuLang = core.lang.menu;
|
|
40
|
-
const defaultList = {
|
|
41
|
-
spaced: {
|
|
42
|
-
name: menuLang.spaced,
|
|
43
|
-
class: '__se__p-spaced',
|
|
44
|
-
_class: ''
|
|
45
|
-
},
|
|
46
|
-
bordered: {
|
|
47
|
-
name: menuLang.bordered,
|
|
48
|
-
class: '__se__p-bordered',
|
|
49
|
-
_class: ''
|
|
50
|
-
},
|
|
51
|
-
neon: {
|
|
52
|
-
name: menuLang.neon,
|
|
53
|
-
class: '__se__p-neon',
|
|
54
|
-
_class: ''
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const paragraphStyles = !option.paragraphStyles || option.paragraphStyles.length === 0 ? ['spaced', 'bordered', 'neon'] : option.paragraphStyles;
|
|
58
|
-
|
|
59
|
-
let list = '<div class="se-list-inner"><ul class="se-list-basic">';
|
|
60
|
-
for (let i = 0, len = paragraphStyles.length, p, name, attrs, _class; i < len; i++) {
|
|
61
|
-
p = paragraphStyles[i];
|
|
62
|
-
|
|
63
|
-
if (typeof p === 'string') {
|
|
64
|
-
const defaultStyle = defaultList[p.toLowerCase()];
|
|
65
|
-
if (!defaultStyle) continue;
|
|
66
|
-
p = defaultStyle;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
name = p.name;
|
|
70
|
-
attrs = p.class ? ' class="' + p.class + '"' : '';
|
|
71
|
-
_class = p._class;
|
|
72
|
-
|
|
73
|
-
list += '<li>' +
|
|
74
|
-
'<button type="button" class="se-btn-list' + (_class ? ' ' + _class: '') + '" data-value="' + p.class + '" title="' + name + '" aria-label="' + name + '">' +
|
|
75
|
-
'<div' + attrs + '>' + name + '</div>' +
|
|
76
|
-
'</button></li>';
|
|
77
|
-
}
|
|
78
|
-
list += '</ul></div>';
|
|
79
|
-
|
|
80
|
-
listDiv.innerHTML = list;
|
|
81
|
-
|
|
82
|
-
return listDiv;
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* @Override submenu
|
|
87
|
-
*/
|
|
88
|
-
on: function () {
|
|
89
|
-
const paragraphContext = this.context.paragraphStyle;
|
|
90
|
-
const paragraphList = paragraphContext._classList;
|
|
91
|
-
const currentFormat = this.util.getFormatElement(this.getSelectionNode());
|
|
92
|
-
|
|
93
|
-
for (let i = 0, len = paragraphList.length; i < len; i++) {
|
|
94
|
-
if (this.util.hasClass(currentFormat, paragraphList[i].getAttribute('data-value'))) {
|
|
95
|
-
this.util.addClass(paragraphList[i], 'active');
|
|
96
|
-
} else {
|
|
97
|
-
this.util.removeClass(paragraphList[i], 'active');
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
|
|
102
|
-
pickUp: function (e) {
|
|
103
|
-
e.preventDefault();
|
|
104
|
-
e.stopPropagation();
|
|
105
|
-
|
|
106
|
-
let target = e.target;
|
|
107
|
-
let value = null;
|
|
108
|
-
|
|
109
|
-
while (!/^UL$/i.test(target.tagName)) {
|
|
110
|
-
value = target.getAttribute('data-value');
|
|
111
|
-
if (value) break;
|
|
112
|
-
target = target.parentNode;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (!value) return;
|
|
116
|
-
|
|
117
|
-
let selectedFormsts = this.getSelectedElements();
|
|
118
|
-
if (selectedFormsts.length === 0) {
|
|
119
|
-
this.getRange_addLine(this.getRange(), null);
|
|
120
|
-
selectedFormsts = this.getSelectedElements();
|
|
121
|
-
if (selectedFormsts.length === 0) return;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// change format class
|
|
125
|
-
const toggleClass = this.util.hasClass(target, 'active') ? this.util.removeClass.bind(this.util) : this.util.addClass.bind(this.util);
|
|
126
|
-
for (let i = 0, len = selectedFormsts.length; i < len; i++) {
|
|
127
|
-
toggleClass(selectedFormsts[i], value);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
this.submenuOff();
|
|
131
|
-
|
|
132
|
-
// history stack
|
|
133
|
-
this.history.push(false);
|
|
134
|
-
}
|
|
135
|
-
};
|
|
1
|
+
/*
|
|
2
|
+
* wysiwyg web editor
|
|
3
|
+
*
|
|
4
|
+
* suneditor.js
|
|
5
|
+
* Copyright 2017 JiHong Lee.
|
|
6
|
+
* MIT license.
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
export default {
|
|
11
|
+
name: 'paragraphStyle',
|
|
12
|
+
display: 'submenu',
|
|
13
|
+
add: function (core, targetElement) {
|
|
14
|
+
const context = core.context;
|
|
15
|
+
context.paragraphStyle = {
|
|
16
|
+
_classList: null
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** set submenu */
|
|
20
|
+
let listDiv = this.setSubmenu(core);
|
|
21
|
+
|
|
22
|
+
/** add event listeners */
|
|
23
|
+
listDiv.querySelector('ul').addEventListener('click', this.pickUp.bind(core));
|
|
24
|
+
|
|
25
|
+
context.paragraphStyle._classList = listDiv.querySelectorAll('li button');
|
|
26
|
+
|
|
27
|
+
/** append target button menu */
|
|
28
|
+
core.initMenuTarget(this.name, targetElement, listDiv);
|
|
29
|
+
|
|
30
|
+
/** empty memory */
|
|
31
|
+
listDiv = null;
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
setSubmenu: function (core) {
|
|
35
|
+
const option = core.options;
|
|
36
|
+
const listDiv = core.util.createElement('DIV');
|
|
37
|
+
listDiv.className = 'se-submenu se-list-layer se-list-format';
|
|
38
|
+
|
|
39
|
+
const menuLang = core.lang.menu;
|
|
40
|
+
const defaultList = {
|
|
41
|
+
spaced: {
|
|
42
|
+
name: menuLang.spaced,
|
|
43
|
+
class: '__se__p-spaced',
|
|
44
|
+
_class: ''
|
|
45
|
+
},
|
|
46
|
+
bordered: {
|
|
47
|
+
name: menuLang.bordered,
|
|
48
|
+
class: '__se__p-bordered',
|
|
49
|
+
_class: ''
|
|
50
|
+
},
|
|
51
|
+
neon: {
|
|
52
|
+
name: menuLang.neon,
|
|
53
|
+
class: '__se__p-neon',
|
|
54
|
+
_class: ''
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const paragraphStyles = !option.paragraphStyles || option.paragraphStyles.length === 0 ? ['spaced', 'bordered', 'neon'] : option.paragraphStyles;
|
|
58
|
+
|
|
59
|
+
let list = '<div class="se-list-inner"><ul class="se-list-basic">';
|
|
60
|
+
for (let i = 0, len = paragraphStyles.length, p, name, attrs, _class; i < len; i++) {
|
|
61
|
+
p = paragraphStyles[i];
|
|
62
|
+
|
|
63
|
+
if (typeof p === 'string') {
|
|
64
|
+
const defaultStyle = defaultList[p.toLowerCase()];
|
|
65
|
+
if (!defaultStyle) continue;
|
|
66
|
+
p = defaultStyle;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
name = p.name;
|
|
70
|
+
attrs = p.class ? ' class="' + p.class + '"' : '';
|
|
71
|
+
_class = p._class;
|
|
72
|
+
|
|
73
|
+
list += '<li>' +
|
|
74
|
+
'<button type="button" class="se-btn-list' + (_class ? ' ' + _class: '') + '" data-value="' + p.class + '" title="' + name + '" aria-label="' + name + '">' +
|
|
75
|
+
'<div' + attrs + '>' + name + '</div>' +
|
|
76
|
+
'</button></li>';
|
|
77
|
+
}
|
|
78
|
+
list += '</ul></div>';
|
|
79
|
+
|
|
80
|
+
listDiv.innerHTML = list;
|
|
81
|
+
|
|
82
|
+
return listDiv;
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @Override submenu
|
|
87
|
+
*/
|
|
88
|
+
on: function () {
|
|
89
|
+
const paragraphContext = this.context.paragraphStyle;
|
|
90
|
+
const paragraphList = paragraphContext._classList;
|
|
91
|
+
const currentFormat = this.util.getFormatElement(this.getSelectionNode());
|
|
92
|
+
|
|
93
|
+
for (let i = 0, len = paragraphList.length; i < len; i++) {
|
|
94
|
+
if (this.util.hasClass(currentFormat, paragraphList[i].getAttribute('data-value'))) {
|
|
95
|
+
this.util.addClass(paragraphList[i], 'active');
|
|
96
|
+
} else {
|
|
97
|
+
this.util.removeClass(paragraphList[i], 'active');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
pickUp: function (e) {
|
|
103
|
+
e.preventDefault();
|
|
104
|
+
e.stopPropagation();
|
|
105
|
+
|
|
106
|
+
let target = e.target;
|
|
107
|
+
let value = null;
|
|
108
|
+
|
|
109
|
+
while (!/^UL$/i.test(target.tagName)) {
|
|
110
|
+
value = target.getAttribute('data-value');
|
|
111
|
+
if (value) break;
|
|
112
|
+
target = target.parentNode;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (!value) return;
|
|
116
|
+
|
|
117
|
+
let selectedFormsts = this.getSelectedElements();
|
|
118
|
+
if (selectedFormsts.length === 0) {
|
|
119
|
+
this.getRange_addLine(this.getRange(), null);
|
|
120
|
+
selectedFormsts = this.getSelectedElements();
|
|
121
|
+
if (selectedFormsts.length === 0) return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// change format class
|
|
125
|
+
const toggleClass = this.util.hasClass(target, 'active') ? this.util.removeClass.bind(this.util) : this.util.addClass.bind(this.util);
|
|
126
|
+
for (let i = 0, len = selectedFormsts.length; i < len; i++) {
|
|
127
|
+
toggleClass(selectedFormsts[i], value);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
this.submenuOff();
|
|
131
|
+
|
|
132
|
+
// history stack
|
|
133
|
+
this.history.push(false);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SubmenuPlugin } from '../SubmenuPlugin';
|
|
2
|
-
|
|
3
|
-
declare const table: SubmenuPlugin;
|
|
4
|
-
|
|
1
|
+
import { SubmenuPlugin } from '../SubmenuPlugin';
|
|
2
|
+
|
|
3
|
+
declare const table: SubmenuPlugin;
|
|
4
|
+
|
|
5
5
|
export default table;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SubmenuPlugin } from '../SubmenuPlugin';
|
|
2
|
-
|
|
3
|
-
declare const template: SubmenuPlugin;
|
|
4
|
-
|
|
1
|
+
import { SubmenuPlugin } from '../SubmenuPlugin';
|
|
2
|
+
|
|
3
|
+
declare const template: SubmenuPlugin;
|
|
4
|
+
|
|
5
5
|
export default template;
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* wysiwyg web editor
|
|
3
|
-
*
|
|
4
|
-
* suneditor.js
|
|
5
|
-
* Copyright 2017 JiHong Lee.
|
|
6
|
-
* MIT license.
|
|
7
|
-
*/
|
|
8
|
-
'use strict';
|
|
9
|
-
|
|
10
|
-
export default {
|
|
11
|
-
name: 'template',
|
|
12
|
-
display: 'submenu',
|
|
13
|
-
add: function (core, targetElement) {
|
|
14
|
-
const context = core.context;
|
|
15
|
-
context.template = {
|
|
16
|
-
selectedIndex: -1
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
/** set submenu */
|
|
20
|
-
let templateDiv = this.setSubmenu(core);
|
|
21
|
-
|
|
22
|
-
/** add event listeners */
|
|
23
|
-
templateDiv.querySelector('ul').addEventListener('click', this.pickup.bind(core));
|
|
24
|
-
|
|
25
|
-
/** append target button menu */
|
|
26
|
-
core.initMenuTarget(this.name, targetElement, templateDiv);
|
|
27
|
-
|
|
28
|
-
/** empty memory */
|
|
29
|
-
templateDiv = null;
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
setSubmenu: function (core) {
|
|
33
|
-
const templateList = core.options.templates;
|
|
34
|
-
if (!templateList || templateList.length === 0) {
|
|
35
|
-
throw Error('[SUNEDITOR.plugins.template.fail] To use the "template" plugin, please define the "templates" option.');
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const listDiv = core.util.createElement('DIV');
|
|
39
|
-
listDiv.className = 'se-list-layer';
|
|
40
|
-
|
|
41
|
-
let list = '<div class="se-submenu se-list-inner">' +
|
|
42
|
-
'<ul class="se-list-basic">';
|
|
43
|
-
for (let i = 0, len = templateList.length, t; i < len; i++) {
|
|
44
|
-
t = templateList[i];
|
|
45
|
-
list += '<li><button type="button" class="se-btn-list" data-value="' + i + '" title="' + t.name + '" aria-label="' + t.name + '">' + t.name + '</button></li>';
|
|
46
|
-
}
|
|
47
|
-
list += '</ul></div>';
|
|
48
|
-
|
|
49
|
-
listDiv.innerHTML = list;
|
|
50
|
-
|
|
51
|
-
return listDiv;
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
pickup: function (e) {
|
|
55
|
-
if (!/^BUTTON$/i.test(e.target.tagName)) return false;
|
|
56
|
-
|
|
57
|
-
e.preventDefault();
|
|
58
|
-
e.stopPropagation();
|
|
59
|
-
|
|
60
|
-
this.context.template.selectedIndex = e.target.getAttribute('data-value') * 1;
|
|
61
|
-
const temp = this.options.templates[this.context.template.selectedIndex];
|
|
62
|
-
|
|
63
|
-
if (temp.html) {
|
|
64
|
-
this.setContents(temp.html);
|
|
65
|
-
} else {
|
|
66
|
-
this.submenuOff();
|
|
67
|
-
throw Error('[SUNEDITOR.template.fail] cause : "templates[i].html not found"');
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
this.submenuOff();
|
|
71
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* wysiwyg web editor
|
|
3
|
+
*
|
|
4
|
+
* suneditor.js
|
|
5
|
+
* Copyright 2017 JiHong Lee.
|
|
6
|
+
* MIT license.
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
export default {
|
|
11
|
+
name: 'template',
|
|
12
|
+
display: 'submenu',
|
|
13
|
+
add: function (core, targetElement) {
|
|
14
|
+
const context = core.context;
|
|
15
|
+
context.template = {
|
|
16
|
+
selectedIndex: -1
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** set submenu */
|
|
20
|
+
let templateDiv = this.setSubmenu(core);
|
|
21
|
+
|
|
22
|
+
/** add event listeners */
|
|
23
|
+
templateDiv.querySelector('ul').addEventListener('click', this.pickup.bind(core));
|
|
24
|
+
|
|
25
|
+
/** append target button menu */
|
|
26
|
+
core.initMenuTarget(this.name, targetElement, templateDiv);
|
|
27
|
+
|
|
28
|
+
/** empty memory */
|
|
29
|
+
templateDiv = null;
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
setSubmenu: function (core) {
|
|
33
|
+
const templateList = core.options.templates;
|
|
34
|
+
if (!templateList || templateList.length === 0) {
|
|
35
|
+
throw Error('[SUNEDITOR.plugins.template.fail] To use the "template" plugin, please define the "templates" option.');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const listDiv = core.util.createElement('DIV');
|
|
39
|
+
listDiv.className = 'se-list-layer';
|
|
40
|
+
|
|
41
|
+
let list = '<div class="se-submenu se-list-inner">' +
|
|
42
|
+
'<ul class="se-list-basic">';
|
|
43
|
+
for (let i = 0, len = templateList.length, t; i < len; i++) {
|
|
44
|
+
t = templateList[i];
|
|
45
|
+
list += '<li><button type="button" class="se-btn-list" data-value="' + i + '" title="' + t.name + '" aria-label="' + t.name + '">' + t.name + '</button></li>';
|
|
46
|
+
}
|
|
47
|
+
list += '</ul></div>';
|
|
48
|
+
|
|
49
|
+
listDiv.innerHTML = list;
|
|
50
|
+
|
|
51
|
+
return listDiv;
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
pickup: function (e) {
|
|
55
|
+
if (!/^BUTTON$/i.test(e.target.tagName)) return false;
|
|
56
|
+
|
|
57
|
+
e.preventDefault();
|
|
58
|
+
e.stopPropagation();
|
|
59
|
+
|
|
60
|
+
this.context.template.selectedIndex = e.target.getAttribute('data-value') * 1;
|
|
61
|
+
const temp = this.options.templates[this.context.template.selectedIndex];
|
|
62
|
+
|
|
63
|
+
if (temp.html) {
|
|
64
|
+
this.setContents(temp.html);
|
|
65
|
+
} else {
|
|
66
|
+
this.submenuOff();
|
|
67
|
+
throw Error('[SUNEDITOR.template.fail] cause : "templates[i].html not found"');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this.submenuOff();
|
|
71
|
+
}
|
|
72
72
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SubmenuPlugin } from '../SubmenuPlugin';
|
|
2
|
-
|
|
3
|
-
declare const textStyle: SubmenuPlugin;
|
|
4
|
-
|
|
1
|
+
import { SubmenuPlugin } from '../SubmenuPlugin';
|
|
2
|
+
|
|
3
|
+
declare const textStyle: SubmenuPlugin;
|
|
4
|
+
|
|
5
5
|
export default textStyle;
|