suneditor 2.47.0 → 2.47.2

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.
@@ -1,242 +0,0 @@
1
- /*
2
- * wysiwyg web editor
3
- *
4
- * suneditor.js
5
- * Copyright 2017 JiHong Lee.
6
- * MIT license.
7
- */
8
- "use strict";
9
-
10
- import dialog from "../modules/dialog";
11
-
12
-
13
- function insertAt(parent, child, index) {
14
- if (!index) index = 0;
15
- if (index >= parent.children.length) {
16
- parent.appendChild(child);
17
- } else {
18
- parent.insertBefore(child, parent.children[index]);
19
- }
20
- }
21
-
22
- export default {
23
- name: "mention",
24
- display: "dialog",
25
-
26
- renderItem: function(item) {
27
- return `<span>${item}</span>`;
28
- },
29
-
30
- getItems: function(term) {
31
- return Promise.resolve(
32
- ["overwite", "the", "mention", "plugin", "getItems", "method"].filter(
33
- (w) => w.includes(term.toLowerCase())
34
- )
35
- );
36
- },
37
-
38
- renderList: function(term) {
39
- const { mention } = this.context;
40
- let promise = Promise.resolve();
41
- if (mention.term !== term) {
42
- mention.focussed = 0;
43
- mention.term = term;
44
- promise = mention.getItems(term).then((items) => {
45
- mention._items = items;
46
-
47
- Object.keys(mention._itemElements).forEach((id) => {
48
- if (!items.find((i) => mention.getId(i) === id)) {
49
- const child = mention._itemElements[id];
50
- child.parentNode.removeChild(child);
51
- delete mention._itemElements[id];
52
- }
53
- });
54
-
55
- items.forEach((item, idx) => {
56
- const id = mention.getId(item);
57
- if (!mention._itemElements[id]) {
58
- const el = this.util.createElement("LI");
59
- el.setAttribute("data-mention", id);
60
- this.util.addClass(el, 'se-mention-item');
61
- el.innerHTML = mention.renderItem(item);
62
- el.addEventListener("click", () => {
63
- mention._addMention(item);
64
- });
65
- insertAt(mention._list, el, idx);
66
- mention._itemElements[id] = el;
67
- }
68
- });
69
- });
70
- }
71
-
72
- promise.then(() => {
73
- const current = mention._list.querySelectorAll(".se-mention-item")[
74
- mention.focussed
75
- ];
76
- if (current && !this.util.hasClass(current, "se-mention-active")) {
77
- const prev = mention._list.querySelector(".se-mention-active");
78
- if (prev) this.util.removeClass(prev, "se-mention-active");
79
- this.util.addClass(current, "se-mention-active");
80
- }
81
- });
82
- },
83
-
84
- setDialog: function(core) {
85
- const mention_dialog = core.util.createElement("DIV");
86
- const lang = core.lang;
87
- mention_dialog.className = "se-dialog-content";
88
- mention_dialog.style.display = "none";
89
- const html = `
90
- <form class="se-dialog-form">
91
- <div class="se-dialog-header">
92
- <button type="button" data-command="close" class="se-btn se-dialog-close" title="${lang.dialogBox.close}" aria-label="${lang.dialogBox.close}">
93
- ${core.icons.cancel}
94
- </button>
95
- <span class="se-modal-title">${lang.dialogBox.mentionBox.title}</span>
96
- </div>
97
- <div class="se-dialog-body">
98
- <input class="se-input-form se-mention-search" type="text" placeholder="${lang.dialogBox.browser.search}" />
99
- <ul class="se-mention-list">
100
- </ul>
101
- </div>
102
- </form>
103
- `;
104
- mention_dialog.innerHTML = html;
105
- return mention_dialog;
106
- },
107
-
108
- getId(mention) {
109
- return mention;
110
- },
111
-
112
- getValue(mention) {
113
- return `@${mention}`;
114
- },
115
-
116
- getLinkHref(/*mention*/) {
117
- return "";
118
- },
119
-
120
- open: function() {
121
- const { mention } = this.context;
122
- this.plugins.dialog.open.call(
123
- this,
124
- "mention",
125
- "mention" === this.currentControllerName
126
- );
127
- mention._search.focus();
128
- mention.renderList("");
129
- },
130
-
131
- on: function(update) {
132
- if (update) return;
133
- this.plugins.mention.init.call(this);
134
- },
135
-
136
- init: function() {
137
- const { mention } = this.context;
138
- mention._search.value = "";
139
- mention.focussed = 0;
140
- mention._items = [];
141
- mention._itemElements = {};
142
- mention._list.innerHTML = "";
143
- delete mention.term;
144
- },
145
-
146
- onKeyPress: function(e) {
147
- const { mention } = this.context;
148
- switch (e.key) {
149
- case "ArrowDown":
150
- mention.focussed += 1;
151
- e.preventDefault();
152
- e.stopPropagation();
153
- break;
154
-
155
- case "ArrowUp":
156
- if (mention.focussed > 0) {
157
- mention.focussed -= 1;
158
- }
159
- e.preventDefault();
160
- e.stopPropagation();
161
- break;
162
-
163
- case "Enter":
164
- mention._addMention();
165
- e.preventDefault();
166
- e.stopPropagation();
167
- break;
168
-
169
- default:
170
- }
171
- },
172
-
173
- onKeyUp: function(e) {
174
- const { mention } = this.context;
175
- mention.renderList(e.target.value);
176
- },
177
-
178
- getMentions: function(core) {
179
- const { mentions, getId } = core.context.mention;
180
- return mentions.filter((mention) => {
181
- const id = getId(mention);
182
- return core.context.element.wysiwyg.querySelector(
183
- `[data-mention="${id}"]`
184
- );
185
- });
186
- },
187
-
188
- _addMention: function(item) {
189
- const { mention } = this.context;
190
- const new_mention = item || mention._items[mention.focussed];
191
- if (new_mention) {
192
- if (
193
- !mention.mentions.find(
194
- (m) => mention.getId(m) === mention.getId(new_mention)
195
- )
196
- ) {
197
- mention.mentions.push(new_mention);
198
- }
199
- const el = this.util.createElement("A");
200
- el.href = mention.getLinkHref(new_mention);
201
- el.target = "_blank";
202
- el.innerHTML = mention.getValue(new_mention);
203
- el.setAttribute("data-mention", mention.getId(new_mention));
204
- this.insertNode(el, null, false);
205
- const spacer = this.util.createElement("SPAN");
206
- spacer.innerHTML = " ";
207
- this.insertNode(spacer, el, false);
208
- }
209
- this.plugins.dialog.close.call(this);
210
- },
211
- add: function(core) {
212
- core.addModule([dialog]);
213
- this.title = core.lang.toolbar.mention;
214
- const _dialog = this.setDialog(core);
215
- core.getMentions = this.getMentions(core);
216
-
217
- const _search = _dialog.querySelector(".se-mention-search");
218
- _search.addEventListener("keyup", this.onKeyUp.bind(core));
219
- _search.addEventListener("keydown", this.onKeyPress.bind(core));
220
- const _list = _dialog.querySelector(".se-mention-list");
221
-
222
- core.context.mention = {
223
- _addMention: this._addMention.bind(core),
224
- _itemElements: {},
225
- _items: [],
226
- _list,
227
- _search,
228
- focussed: 0,
229
- getId: this.getId.bind(core),
230
- getItems: this.getItems,
231
- getLinkHref: this.getLinkHref.bind(core),
232
- getValue: this.getValue.bind(core),
233
- mentions: [],
234
- modal: _dialog,
235
- open: this.open.bind(core),
236
- renderItem: this.renderItem,
237
- renderList: this.renderList.bind(core),
238
- };
239
- core.context.dialog.modal.appendChild(_dialog);
240
- },
241
- action: function() {},
242
- };