1 /** |
1 (function () { |
2 * plugin.js |
2 var lists = (function () { |
3 * |
3 'use strict'; |
4 * Copyright, Moxiecode Systems AB |
4 |
5 * Released under LGPL License. |
5 var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); |
6 * |
6 |
7 * License: http://www.tinymce.com/license |
7 var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils'); |
8 * Contributing: http://www.tinymce.com/contributing |
8 |
9 */ |
9 var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); |
10 |
10 |
11 /*global tinymce:true */ |
11 var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK'); |
12 /*eslint consistent-this:0 */ |
12 |
13 |
13 var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager'); |
14 tinymce.PluginManager.add('lists', function(editor) { |
14 |
15 var self = this; |
15 var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools'); |
16 |
16 |
17 function isListNode(node) { |
17 var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); |
18 return node && (/^(OL|UL|DL)$/).test(node.nodeName); |
18 |
19 } |
19 var isTextNode = function (node) { |
20 |
20 return node && node.nodeType === 3; |
21 function isFirstChild(node) { |
21 }; |
22 return node.parentNode.firstChild == node; |
22 var isListNode = function (node) { |
23 } |
23 return node && /^(OL|UL|DL)$/.test(node.nodeName); |
24 |
24 }; |
25 function isLastChild(node) { |
25 var isListItemNode = function (node) { |
26 return node.parentNode.lastChild == node; |
26 return node && /^(LI|DT|DD)$/.test(node.nodeName); |
27 } |
27 }; |
28 |
28 var isTableCellNode = function (node) { |
29 function isTextBlock(node) { |
29 return node && /^(TH|TD)$/.test(node.nodeName); |
30 return node && !!editor.schema.getTextBlockElements()[node.nodeName]; |
30 }; |
31 } |
31 var isBr = function (node) { |
32 |
32 return node && node.nodeName === 'BR'; |
33 editor.on('init', function() { |
33 }; |
34 var dom = editor.dom, selection = editor.selection; |
34 var isFirstChild = function (node) { |
35 |
35 return node.parentNode.firstChild === node; |
36 /** |
36 }; |
37 * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with |
37 var isLastChild = function (node) { |
38 * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans |
38 return node.parentNode.lastChild === node; |
39 * added to them since they can be restored after a dom operation. |
39 }; |
40 * |
40 var isTextBlock = function (editor, node) { |
41 * So this: <p><b>|</b><b>|</b></p> |
41 return node && !!editor.schema.getTextBlockElements()[node.nodeName]; |
42 * becomes: <p><b><span data-mce-type="bookmark">|</span></b><b data-mce-type="bookmark">|</span></b></p> |
42 }; |
43 * |
43 var isBlock = function (node, blockElements) { |
44 * @param {DOMRange} rng DOM Range to get bookmark on. |
44 return node && node.nodeName in blockElements; |
45 * @return {Object} Bookmark object. |
45 }; |
46 */ |
46 var isBogusBr = function (dom, node) { |
47 function createBookmark(rng) { |
47 if (!isBr(node)) { |
48 var bookmark = {}; |
48 return false; |
49 |
49 } |
50 function setupEndPoint(start) { |
50 if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) { |
51 var offsetNode, container, offset; |
51 return true; |
52 |
52 } |
53 container = rng[start ? 'startContainer' : 'endContainer']; |
53 return false; |
54 offset = rng[start ? 'startOffset' : 'endOffset']; |
54 }; |
55 |
55 var isEmpty = function (dom, elm, keepBookmarks) { |
56 if (container.nodeType == 1) { |
56 var empty = dom.isEmpty(elm); |
57 offsetNode = dom.create('span', {'data-mce-type': 'bookmark'}); |
57 if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) { |
58 |
58 return false; |
59 if (container.hasChildNodes()) { |
59 } |
60 offset = Math.min(offset, container.childNodes.length - 1); |
60 return empty; |
61 |
61 }; |
62 if (start) { |
62 var isChildOfBody = function (dom, elm) { |
63 container.insertBefore(offsetNode, container.childNodes[offset]); |
63 return dom.isChildOf(elm, dom.getRoot()); |
64 } else { |
64 }; |
65 dom.insertAfter(offsetNode, container.childNodes[offset]); |
65 var $_okk1ogljjgweckx = { |
66 } |
66 isTextNode: isTextNode, |
67 } else { |
67 isListNode: isListNode, |
68 container.appendChild(offsetNode); |
68 isListItemNode: isListItemNode, |
69 } |
69 isTableCellNode: isTableCellNode, |
70 |
70 isBr: isBr, |
71 container = offsetNode; |
71 isFirstChild: isFirstChild, |
72 offset = 0; |
72 isLastChild: isLastChild, |
73 } |
73 isTextBlock: isTextBlock, |
74 |
74 isBlock: isBlock, |
75 bookmark[start ? 'startContainer' : 'endContainer'] = container; |
75 isBogusBr: isBogusBr, |
76 bookmark[start ? 'startOffset' : 'endOffset'] = offset; |
76 isEmpty: isEmpty, |
77 } |
77 isChildOfBody: isChildOfBody |
78 |
78 }; |
79 setupEndPoint(true); |
79 |
80 |
80 var getNormalizedEndPoint = function (container, offset) { |
81 if (!rng.collapsed) { |
81 var node = global$1.getNode(container, offset); |
82 setupEndPoint(); |
82 if ($_okk1ogljjgweckx.isListItemNode(container) && $_okk1ogljjgweckx.isTextNode(node)) { |
83 } |
83 var textNodeOffset = offset >= container.childNodes.length ? node.data.length : 0; |
84 |
84 return { |
85 return bookmark; |
85 container: node, |
86 } |
86 offset: textNodeOffset |
87 |
87 }; |
88 /** |
88 } |
89 * Moves the selection to the current bookmark and removes any selection container wrappers. |
89 return { |
90 * |
90 container: container, |
91 * @param {Object} bookmark Bookmark object to move selection to. |
91 offset: offset |
92 */ |
92 }; |
93 function moveToBookmark(bookmark) { |
93 }; |
94 function restoreEndPoint(start) { |
94 var normalizeRange = function (rng) { |
95 var container, offset, node; |
95 var outRng = rng.cloneRange(); |
96 |
96 var rangeStart = getNormalizedEndPoint(rng.startContainer, rng.startOffset); |
97 function nodeIndex(container) { |
97 outRng.setStart(rangeStart.container, rangeStart.offset); |
98 var node = container.parentNode.firstChild, idx = 0; |
98 var rangeEnd = getNormalizedEndPoint(rng.endContainer, rng.endOffset); |
99 |
99 outRng.setEnd(rangeEnd.container, rangeEnd.offset); |
100 while (node) { |
100 return outRng; |
101 if (node == container) { |
101 }; |
102 return idx; |
102 var $_a9cyhvgkjjgweckv = { |
103 } |
103 getNormalizedEndPoint: getNormalizedEndPoint, |
104 |
104 normalizeRange: normalizeRange |
105 // Skip data-mce-type=bookmark nodes |
105 }; |
106 if (node.nodeType != 1 || node.getAttribute('data-mce-type') != 'bookmark') { |
106 |
107 idx++; |
107 var DOM = global$6.DOM; |
108 } |
108 var createBookmark = function (rng) { |
109 |
109 var bookmark = {}; |
110 node = node.nextSibling; |
110 var setupEndPoint = function (start) { |
111 } |
111 var offsetNode, container, offset; |
112 |
112 container = rng[start ? 'startContainer' : 'endContainer']; |
113 return -1; |
113 offset = rng[start ? 'startOffset' : 'endOffset']; |
114 } |
114 if (container.nodeType === 1) { |
115 |
115 offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' }); |
116 container = node = bookmark[start ? 'startContainer' : 'endContainer']; |
116 if (container.hasChildNodes()) { |
117 offset = bookmark[start ? 'startOffset' : 'endOffset']; |
117 offset = Math.min(offset, container.childNodes.length - 1); |
118 |
118 if (start) { |
119 if (!container) { |
119 container.insertBefore(offsetNode, container.childNodes[offset]); |
120 return; |
120 } else { |
121 } |
121 DOM.insertAfter(offsetNode, container.childNodes[offset]); |
122 |
122 } |
123 if (container.nodeType == 1) { |
123 } else { |
124 offset = nodeIndex(container); |
124 container.appendChild(offsetNode); |
125 container = container.parentNode; |
125 } |
126 dom.remove(node); |
126 container = offsetNode; |
127 } |
127 offset = 0; |
128 |
128 } |
129 bookmark[start ? 'startContainer' : 'endContainer'] = container; |
129 bookmark[start ? 'startContainer' : 'endContainer'] = container; |
130 bookmark[start ? 'startOffset' : 'endOffset'] = offset; |
130 bookmark[start ? 'startOffset' : 'endOffset'] = offset; |
131 } |
131 }; |
132 |
132 setupEndPoint(true); |
133 restoreEndPoint(true); |
133 if (!rng.collapsed) { |
134 restoreEndPoint(); |
134 setupEndPoint(); |
135 |
135 } |
136 var rng = dom.createRng(); |
136 return bookmark; |
137 |
137 }; |
138 rng.setStart(bookmark.startContainer, bookmark.startOffset); |
138 var resolveBookmark = function (bookmark) { |
139 |
139 function restoreEndPoint(start) { |
140 if (bookmark.endContainer) { |
140 var container, offset, node; |
141 rng.setEnd(bookmark.endContainer, bookmark.endOffset); |
141 var nodeIndex = function (container) { |
142 } |
142 var node = container.parentNode.firstChild, idx = 0; |
143 |
143 while (node) { |
144 selection.setRng(rng); |
144 if (node === container) { |
145 } |
145 return idx; |
146 |
146 } |
147 function createNewTextBlock(contentNode, blockName) { |
147 if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') { |
148 var node, textBlock, fragment = dom.createFragment(), hasContentNode; |
148 idx++; |
149 var blockElements = editor.schema.getBlockElements(); |
149 } |
150 |
150 node = node.nextSibling; |
151 if (editor.settings.forced_root_block) { |
151 } |
152 blockName = blockName || editor.settings.forced_root_block; |
152 return -1; |
153 } |
153 }; |
154 |
154 container = node = bookmark[start ? 'startContainer' : 'endContainer']; |
155 if (blockName) { |
155 offset = bookmark[start ? 'startOffset' : 'endOffset']; |
156 textBlock = dom.create(blockName); |
156 if (!container) { |
157 |
157 return; |
158 if (textBlock.tagName === editor.settings.forced_root_block) { |
158 } |
159 dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs); |
159 if (container.nodeType === 1) { |
160 } |
160 offset = nodeIndex(container); |
161 |
161 container = container.parentNode; |
162 fragment.appendChild(textBlock); |
162 DOM.remove(node); |
163 } |
163 if (!container.hasChildNodes() && DOM.isBlock(container)) { |
164 |
164 container.appendChild(DOM.create('br')); |
165 if (contentNode) { |
165 } |
166 while ((node = contentNode.firstChild)) { |
166 } |
167 var nodeName = node.nodeName; |
167 bookmark[start ? 'startContainer' : 'endContainer'] = container; |
168 |
168 bookmark[start ? 'startOffset' : 'endOffset'] = offset; |
169 if (!hasContentNode && (nodeName != 'SPAN' || node.getAttribute('data-mce-type') != 'bookmark')) { |
169 } |
170 hasContentNode = true; |
170 restoreEndPoint(true); |
171 } |
171 restoreEndPoint(); |
172 |
172 var rng = DOM.createRng(); |
173 if (blockElements[nodeName]) { |
173 rng.setStart(bookmark.startContainer, bookmark.startOffset); |
174 fragment.appendChild(node); |
174 if (bookmark.endContainer) { |
175 textBlock = null; |
175 rng.setEnd(bookmark.endContainer, bookmark.endOffset); |
176 } else { |
176 } |
177 if (blockName) { |
177 return $_a9cyhvgkjjgweckv.normalizeRange(rng); |
178 if (!textBlock) { |
178 }; |
179 textBlock = dom.create(blockName); |
179 var $_2nx1i4gjjjgweckt = { |
180 fragment.appendChild(textBlock); |
180 createBookmark: createBookmark, |
181 } |
181 resolveBookmark: resolveBookmark |
182 |
182 }; |
183 textBlock.appendChild(node); |
183 |
184 } else { |
184 var DOM$1 = global$6.DOM; |
185 fragment.appendChild(node); |
185 var normalizeList = function (dom, ul) { |
186 } |
186 var sibling; |
187 } |
187 var parentNode = ul.parentNode; |
188 } |
188 if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) { |
189 } |
189 sibling = parentNode.previousSibling; |
190 |
190 if (sibling && sibling.nodeName === 'LI') { |
191 if (!editor.settings.forced_root_block) { |
191 sibling.appendChild(ul); |
192 fragment.appendChild(dom.create('br')); |
192 if ($_okk1ogljjgweckx.isEmpty(dom, parentNode)) { |
193 } else { |
193 DOM$1.remove(parentNode); |
194 // BR is needed in empty blocks on non IE browsers |
194 } |
195 if (!hasContentNode && (!tinymce.Env.ie || tinymce.Env.ie > 10)) { |
195 } else { |
196 textBlock.appendChild(dom.create('br', {'data-mce-bogus': '1'})); |
196 DOM$1.setStyle(parentNode, 'listStyleType', 'none'); |
197 } |
197 } |
198 } |
198 } |
199 |
199 if ($_okk1ogljjgweckx.isListNode(parentNode)) { |
200 return fragment; |
200 sibling = parentNode.previousSibling; |
201 } |
201 if (sibling && sibling.nodeName === 'LI') { |
202 |
202 sibling.appendChild(ul); |
203 function getSelectedListItems() { |
203 } |
204 return tinymce.grep(selection.getSelectedBlocks(), function(block) { |
204 } |
205 return /^(LI|DT|DD)$/.test(block.nodeName); |
205 }; |
206 }); |
206 var normalizeLists = function (dom, element) { |
207 } |
207 global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) { |
208 |
208 normalizeList(dom, ul); |
209 function splitList(ul, li, newBlock) { |
209 }); |
210 var tmpRng, fragment, bookmarks, node; |
210 }; |
211 |
211 var $_ekd4wzgmjjgwecl1 = { |
212 function removeAndKeepBookmarks(targetNode) { |
212 normalizeList: normalizeList, |
213 tinymce.each(bookmarks, function(node) { |
213 normalizeLists: normalizeLists |
214 targetNode.parentNode.insertBefore(node, li.parentNode); |
214 }; |
215 }); |
215 |
216 |
216 var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery'); |
217 dom.remove(targetNode); |
217 |
218 } |
218 var getParentList = function (editor) { |
219 |
219 var selectionStart = editor.selection.getStart(true); |
220 bookmarks = dom.select('span[data-mce-type="bookmark"]', ul); |
220 return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart)); |
221 newBlock = newBlock || createNewTextBlock(li); |
221 }; |
222 tmpRng = dom.createRng(); |
222 var isParentListSelected = function (parentList, selectedBlocks) { |
223 tmpRng.setStartAfter(li); |
223 return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList; |
224 tmpRng.setEndAfter(ul); |
224 }; |
225 fragment = tmpRng.extractContents(); |
225 var findSubLists = function (parentList) { |
226 |
226 return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) { |
227 for (node = fragment.firstChild; node; node = node.firstChild) { |
227 return $_okk1ogljjgweckx.isListNode(elm); |
228 if (node.nodeName == 'LI' && dom.isEmpty(node)) { |
228 }); |
229 dom.remove(node); |
229 }; |
230 break; |
230 var getSelectedSubLists = function (editor) { |
231 } |
231 var parentList = getParentList(editor); |
232 } |
232 var selectedBlocks = editor.selection.getSelectedBlocks(); |
233 |
233 if (isParentListSelected(parentList, selectedBlocks)) { |
234 if (!dom.isEmpty(fragment)) { |
234 return findSubLists(parentList); |
235 dom.insertAfter(fragment, ul); |
235 } else { |
236 } |
236 return global$5.grep(selectedBlocks, function (elm) { |
237 |
237 return $_okk1ogljjgweckx.isListNode(elm) && parentList !== elm; |
238 dom.insertAfter(newBlock, ul); |
238 }); |
239 |
239 } |
240 if (dom.isEmpty(li.parentNode)) { |
240 }; |
241 removeAndKeepBookmarks(li.parentNode); |
241 var findParentListItemsNodes = function (editor, elms) { |
242 } |
242 var listItemsElms = global$5.map(elms, function (elm) { |
243 |
243 var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm)); |
244 dom.remove(li); |
244 return parentLi ? parentLi : elm; |
245 |
245 }); |
246 if (dom.isEmpty(ul)) { |
246 return global$7.unique(listItemsElms); |
247 dom.remove(ul); |
247 }; |
248 } |
248 var getSelectedListItems = function (editor) { |
249 } |
249 var selectedBlocks = editor.selection.getSelectedBlocks(); |
250 |
250 return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) { |
251 function mergeWithAdjacentLists(listBlock) { |
251 return $_okk1ogljjgweckx.isListItemNode(block); |
252 var sibling, node; |
252 }); |
253 |
253 }; |
254 sibling = listBlock.nextSibling; |
254 var getClosestListRootElm = function (editor, elm) { |
255 if (sibling && isListNode(sibling) && sibling.nodeName == listBlock.nodeName) { |
255 var parentTableCell = editor.dom.getParents(elm, 'TD,TH'); |
256 while ((node = sibling.firstChild)) { |
256 var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody(); |
257 listBlock.appendChild(node); |
257 return root; |
258 } |
258 }; |
259 |
259 var $_3xb1cggnjjgwecl3 = { |
260 dom.remove(sibling); |
260 getParentList: getParentList, |
261 } |
261 getSelectedSubLists: getSelectedSubLists, |
262 |
262 getSelectedListItems: getSelectedListItems, |
263 sibling = listBlock.previousSibling; |
263 getClosestListRootElm: getClosestListRootElm |
264 if (sibling && isListNode(sibling) && sibling.nodeName == listBlock.nodeName) { |
264 }; |
265 while ((node = sibling.firstChild)) { |
265 |
266 listBlock.insertBefore(node, listBlock.firstChild); |
266 var global$8 = tinymce.util.Tools.resolve('tinymce.Env'); |
267 } |
267 |
268 |
268 var DOM$2 = global$6.DOM; |
269 dom.remove(sibling); |
269 var createNewTextBlock = function (editor, contentNode, blockName) { |
270 } |
270 var node, textBlock; |
271 } |
271 var fragment = DOM$2.createFragment(); |
272 |
272 var hasContentNode; |
273 /** |
273 var blockElements = editor.schema.getBlockElements(); |
274 * Normalizes the all lists in the specified element. |
274 if (editor.settings.forced_root_block) { |
275 */ |
275 blockName = blockName || editor.settings.forced_root_block; |
276 function normalizeList(element) { |
276 } |
277 tinymce.each(tinymce.grep(dom.select('ol,ul', element)), function(ul) { |
277 if (blockName) { |
278 var sibling, parentNode = ul.parentNode; |
278 textBlock = DOM$2.create(blockName); |
279 |
279 if (textBlock.tagName === editor.settings.forced_root_block) { |
280 // Move UL/OL to previous LI if it's the only child of a LI |
280 DOM$2.setAttribs(textBlock, editor.settings.forced_root_block_attrs); |
281 if (parentNode.nodeName == 'LI' && parentNode.firstChild == ul) { |
281 } |
282 sibling = parentNode.previousSibling; |
282 if (!$_okk1ogljjgweckx.isBlock(contentNode.firstChild, blockElements)) { |
283 if (sibling && sibling.nodeName == 'LI') { |
283 fragment.appendChild(textBlock); |
284 sibling.appendChild(ul); |
284 } |
285 |
285 } |
286 if (dom.isEmpty(parentNode)) { |
286 if (contentNode) { |
287 dom.remove(parentNode); |
287 while (node = contentNode.firstChild) { |
288 } |
288 var nodeName = node.nodeName; |
289 } |
289 if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) { |
290 } |
290 hasContentNode = true; |
291 |
291 } |
292 // Append OL/UL to previous LI if it's in a parent OL/UL i.e. old HTML4 |
292 if ($_okk1ogljjgweckx.isBlock(node, blockElements)) { |
293 if (isListNode(parentNode)) { |
293 fragment.appendChild(node); |
294 sibling = parentNode.previousSibling; |
294 textBlock = null; |
295 if (sibling && sibling.nodeName == 'LI') { |
295 } else { |
296 sibling.appendChild(ul); |
296 if (blockName) { |
297 } |
297 if (!textBlock) { |
298 } |
298 textBlock = DOM$2.create(blockName); |
299 }); |
299 fragment.appendChild(textBlock); |
300 } |
300 } |
301 |
301 textBlock.appendChild(node); |
302 function outdent(li) { |
302 } else { |
303 var ul = li.parentNode, ulParent = ul.parentNode, newBlock; |
303 fragment.appendChild(node); |
304 |
304 } |
305 function removeEmptyLi(li) { |
305 } |
306 if (dom.isEmpty(li)) { |
306 } |
307 dom.remove(li); |
307 } |
308 } |
308 if (!editor.settings.forced_root_block) { |
309 } |
309 fragment.appendChild(DOM$2.create('br')); |
310 |
310 } else { |
311 if (li.nodeName == 'DD') { |
311 if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) { |
312 dom.rename(li, 'DT'); |
312 textBlock.appendChild(DOM$2.create('br', { 'data-mce-bogus': '1' })); |
313 return true; |
313 } |
314 } |
314 } |
315 |
315 return fragment; |
316 if (isFirstChild(li) && isLastChild(li)) { |
316 }; |
317 if (ulParent.nodeName == "LI") { |
317 var $_kbc02gqjjgwecl9 = { createNewTextBlock: createNewTextBlock }; |
318 dom.insertAfter(li, ulParent); |
318 |
319 removeEmptyLi(ulParent); |
319 var DOM$3 = global$6.DOM; |
320 dom.remove(ul); |
320 var splitList = function (editor, ul, li, newBlock) { |
321 } else if (isListNode(ulParent)) { |
321 var tmpRng, fragment, bookmarks, node; |
322 dom.remove(ul, true); |
322 var removeAndKeepBookmarks = function (targetNode) { |
323 } else { |
323 global$5.each(bookmarks, function (node) { |
324 ulParent.insertBefore(createNewTextBlock(li), ul); |
324 targetNode.parentNode.insertBefore(node, li.parentNode); |
325 dom.remove(ul); |
325 }); |
326 } |
326 DOM$3.remove(targetNode); |
327 |
327 }; |
328 return true; |
328 bookmarks = DOM$3.select('span[data-mce-type="bookmark"]', ul); |
329 } else if (isFirstChild(li)) { |
329 newBlock = newBlock || $_kbc02gqjjgwecl9.createNewTextBlock(editor, li); |
330 if (ulParent.nodeName == "LI") { |
330 tmpRng = DOM$3.createRng(); |
331 dom.insertAfter(li, ulParent); |
331 tmpRng.setStartAfter(li); |
332 li.appendChild(ul); |
332 tmpRng.setEndAfter(ul); |
333 removeEmptyLi(ulParent); |
333 fragment = tmpRng.extractContents(); |
334 } else if (isListNode(ulParent)) { |
334 for (node = fragment.firstChild; node; node = node.firstChild) { |
335 ulParent.insertBefore(li, ul); |
335 if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) { |
336 } else { |
336 DOM$3.remove(node); |
337 ulParent.insertBefore(createNewTextBlock(li), ul); |
337 break; |
338 dom.remove(li); |
338 } |
339 } |
339 } |
340 |
340 if (!editor.dom.isEmpty(fragment)) { |
341 return true; |
341 DOM$3.insertAfter(fragment, ul); |
342 } else if (isLastChild(li)) { |
342 } |
343 if (ulParent.nodeName == "LI") { |
343 DOM$3.insertAfter(newBlock, ul); |
344 dom.insertAfter(li, ulParent); |
344 if ($_okk1ogljjgweckx.isEmpty(editor.dom, li.parentNode)) { |
345 } else if (isListNode(ulParent)) { |
345 removeAndKeepBookmarks(li.parentNode); |
346 dom.insertAfter(li, ul); |
346 } |
347 } else { |
347 DOM$3.remove(li); |
348 dom.insertAfter(createNewTextBlock(li), ul); |
348 if ($_okk1ogljjgweckx.isEmpty(editor.dom, ul)) { |
349 dom.remove(li); |
349 DOM$3.remove(ul); |
350 } |
350 } |
351 |
351 }; |
352 return true; |
352 var $_fikiq7gpjjgwecl5 = { splitList: splitList }; |
353 } else { |
353 |
354 if (ulParent.nodeName == 'LI') { |
354 var DOM$4 = global$6.DOM; |
355 ul = ulParent; |
355 var removeEmptyLi = function (dom, li) { |
356 newBlock = createNewTextBlock(li, 'LI'); |
356 if ($_okk1ogljjgweckx.isEmpty(dom, li)) { |
357 } else if (isListNode(ulParent)) { |
357 DOM$4.remove(li); |
358 newBlock = createNewTextBlock(li, 'LI'); |
358 } |
359 } else { |
359 }; |
360 newBlock = createNewTextBlock(li); |
360 var outdent = function (editor, li) { |
361 } |
361 var ul = li.parentNode; |
362 |
362 var ulParent, newBlock; |
363 splitList(ul, li, newBlock); |
363 if (ul) { |
364 normalizeList(ul.parentNode); |
364 ulParent = ul.parentNode; |
365 |
365 } else { |
366 return true; |
366 removeEmptyLi(editor.dom, li); |
367 } |
367 return true; |
368 |
368 } |
369 return false; |
369 if (ul === editor.getBody()) { |
370 } |
370 return true; |
371 |
371 } |
372 function indent(li) { |
372 if (li.nodeName === 'DD') { |
373 var sibling, newList; |
373 DOM$4.rename(li, 'DT'); |
374 |
374 return true; |
375 function mergeLists(from, to) { |
375 } |
376 var node; |
376 if ($_okk1ogljjgweckx.isFirstChild(li) && $_okk1ogljjgweckx.isLastChild(li)) { |
377 |
377 if (ulParent.nodeName === 'LI') { |
378 if (isListNode(from)) { |
378 DOM$4.insertAfter(li, ulParent); |
379 while ((node = li.lastChild.firstChild)) { |
379 removeEmptyLi(editor.dom, ulParent); |
380 to.appendChild(node); |
380 DOM$4.remove(ul); |
381 } |
381 } else if ($_okk1ogljjgweckx.isListNode(ulParent)) { |
382 |
382 DOM$4.remove(ul, true); |
383 dom.remove(from); |
383 } else { |
384 } |
384 ulParent.insertBefore($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul); |
385 } |
385 DOM$4.remove(ul); |
386 |
386 } |
387 if (li.nodeName == 'DT') { |
387 return true; |
388 dom.rename(li, 'DD'); |
388 } else if ($_okk1ogljjgweckx.isFirstChild(li)) { |
389 return true; |
389 if (ulParent.nodeName === 'LI') { |
390 } |
390 DOM$4.insertAfter(li, ulParent); |
391 |
391 li.appendChild(ul); |
392 sibling = li.previousSibling; |
392 removeEmptyLi(editor.dom, ulParent); |
393 |
393 } else if ($_okk1ogljjgweckx.isListNode(ulParent)) { |
394 if (sibling && isListNode(sibling)) { |
394 ulParent.insertBefore(li, ul); |
395 sibling.appendChild(li); |
395 } else { |
396 return true; |
396 ulParent.insertBefore($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul); |
397 } |
397 DOM$4.remove(li); |
398 |
398 } |
399 if (sibling && sibling.nodeName == 'LI' && isListNode(sibling.lastChild)) { |
399 return true; |
400 sibling.lastChild.appendChild(li); |
400 } else if ($_okk1ogljjgweckx.isLastChild(li)) { |
401 mergeLists(li.lastChild, sibling.lastChild); |
401 if (ulParent.nodeName === 'LI') { |
402 return true; |
402 DOM$4.insertAfter(li, ulParent); |
403 } |
403 } else if ($_okk1ogljjgweckx.isListNode(ulParent)) { |
404 |
404 DOM$4.insertAfter(li, ul); |
405 sibling = li.nextSibling; |
405 } else { |
406 |
406 DOM$4.insertAfter($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul); |
407 if (sibling && isListNode(sibling)) { |
407 DOM$4.remove(li); |
408 sibling.insertBefore(li, sibling.firstChild); |
408 } |
409 return true; |
409 return true; |
410 } |
410 } |
411 |
411 if (ulParent.nodeName === 'LI') { |
412 if (sibling && sibling.nodeName == 'LI' && isListNode(li.lastChild)) { |
412 ul = ulParent; |
413 return false; |
413 newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li, 'LI'); |
414 } |
414 } else if ($_okk1ogljjgweckx.isListNode(ulParent)) { |
415 |
415 newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li, 'LI'); |
416 sibling = li.previousSibling; |
416 } else { |
417 if (sibling && sibling.nodeName == 'LI') { |
417 newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li); |
418 newList = dom.create(li.parentNode.nodeName); |
418 } |
419 sibling.appendChild(newList); |
419 $_fikiq7gpjjgwecl5.splitList(editor, ul, li, newBlock); |
420 newList.appendChild(li); |
420 $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, ul.parentNode); |
421 mergeLists(li.lastChild, newList); |
421 return true; |
422 return true; |
422 }; |
423 } |
423 var outdentSelection = function (editor) { |
424 |
424 var listElements = $_3xb1cggnjjgwecl3.getSelectedListItems(editor); |
425 return false; |
425 if (listElements.length) { |
426 } |
426 var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng()); |
427 |
427 var i = void 0, y = void 0; |
428 function indentSelection() { |
428 var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true)); |
429 var listElements = getSelectedListItems(); |
429 i = listElements.length; |
430 |
430 while (i--) { |
431 if (listElements.length) { |
431 var node = listElements[i].parentNode; |
432 var bookmark = createBookmark(selection.getRng(true)); |
432 while (node && node !== root) { |
433 |
433 y = listElements.length; |
434 for (var i = 0; i < listElements.length; i++) { |
434 while (y--) { |
435 if (!indent(listElements[i]) && i === 0) { |
435 if (listElements[y] === node) { |
436 break; |
436 listElements.splice(i, 1); |
437 } |
437 break; |
438 } |
438 } |
439 |
439 } |
440 moveToBookmark(bookmark); |
440 node = node.parentNode; |
441 editor.nodeChanged(); |
441 } |
442 |
442 } |
443 return true; |
443 for (i = 0; i < listElements.length; i++) { |
444 } |
444 if (!outdent(editor, listElements[i]) && i === 0) { |
445 } |
445 break; |
446 |
446 } |
447 function outdentSelection() { |
447 } |
448 var listElements = getSelectedListItems(); |
448 editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark)); |
449 |
449 editor.nodeChanged(); |
450 if (listElements.length) { |
450 return true; |
451 var bookmark = createBookmark(selection.getRng(true)); |
451 } |
452 var i, y, root = editor.getBody(); |
452 }; |
453 |
453 var $_6pbactghjjgweckp = { |
454 i = listElements.length; |
454 outdent: outdent, |
455 while (i--) { |
455 outdentSelection: outdentSelection |
456 var node = listElements[i].parentNode; |
456 }; |
457 |
457 |
458 while (node && node != root) { |
458 var updateListStyle = function (dom, el, detail) { |
459 y = listElements.length; |
459 var type = detail['list-style-type'] ? detail['list-style-type'] : null; |
460 while (y--) { |
460 dom.setStyle(el, 'list-style-type', type); |
461 if (listElements[y] === node) { |
461 }; |
462 listElements.splice(i, 1); |
462 var setAttribs = function (elm, attrs) { |
463 break; |
463 global$5.each(attrs, function (value, key) { |
464 } |
464 elm.setAttribute(key, value); |
465 } |
465 }); |
466 |
466 }; |
467 node = node.parentNode; |
467 var updateListAttrs = function (dom, el, detail) { |
468 } |
468 setAttribs(el, detail['list-attributes']); |
469 } |
469 global$5.each(dom.select('li', el), function (li) { |
470 |
470 setAttribs(li, detail['list-item-attributes']); |
471 for (i = 0; i < listElements.length; i++) { |
471 }); |
472 if (!outdent(listElements[i]) && i === 0) { |
472 }; |
473 break; |
473 var updateListWithDetails = function (dom, el, detail) { |
474 } |
474 updateListStyle(dom, el, detail); |
475 } |
475 updateListAttrs(dom, el, detail); |
476 |
476 }; |
477 moveToBookmark(bookmark); |
477 var removeStyles = function (dom, element, styles) { |
478 editor.nodeChanged(); |
478 global$5.each(styles, function (style) { |
479 |
479 var _a; |
480 return true; |
480 return dom.setStyle(element, (_a = {}, _a[style] = '', _a)); |
481 } |
481 }); |
482 } |
482 }; |
483 |
483 var getEndPointNode = function (editor, rng, start, root) { |
484 function applyList(listName) { |
484 var container, offset; |
485 var rng = selection.getRng(true), bookmark = createBookmark(rng), listItemName = 'LI'; |
485 container = rng[start ? 'startContainer' : 'endContainer']; |
486 |
486 offset = rng[start ? 'startOffset' : 'endOffset']; |
487 listName = listName.toUpperCase(); |
487 if (container.nodeType === 1) { |
488 |
488 container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; |
489 if (listName == 'DL') { |
489 } |
490 listItemName = 'DT'; |
490 if (!start && $_okk1ogljjgweckx.isBr(container.nextSibling)) { |
491 } |
491 container = container.nextSibling; |
492 |
492 } |
493 function getSelectedTextBlocks() { |
493 while (container.parentNode !== root) { |
494 var textBlocks = [], root = editor.getBody(); |
494 if ($_okk1ogljjgweckx.isTextBlock(editor, container)) { |
495 |
495 return container; |
496 function getEndPointNode(start) { |
496 } |
497 var container, offset; |
497 if (/^(TD|TH)$/.test(container.parentNode.nodeName)) { |
498 |
498 return container; |
499 container = rng[start ? 'startContainer' : 'endContainer']; |
499 } |
500 offset = rng[start ? 'startOffset' : 'endOffset']; |
500 container = container.parentNode; |
501 |
501 } |
502 // Resolve node index |
502 return container; |
503 if (container.nodeType == 1) { |
503 }; |
504 container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; |
504 var getSelectedTextBlocks = function (editor, rng, root) { |
505 } |
505 var textBlocks = [], dom = editor.dom; |
506 |
506 var startNode = getEndPointNode(editor, rng, true, root); |
507 while (container.parentNode != root) { |
507 var endNode = getEndPointNode(editor, rng, false, root); |
508 if (isTextBlock(container)) { |
508 var block; |
509 return container; |
509 var siblings = []; |
510 } |
510 for (var node = startNode; node; node = node.nextSibling) { |
511 |
511 siblings.push(node); |
512 if (/^(TD|TH)$/.test(container.parentNode.nodeName)) { |
512 if (node === endNode) { |
513 return container; |
513 break; |
514 } |
514 } |
515 |
515 } |
516 container = container.parentNode; |
516 global$5.each(siblings, function (node) { |
517 } |
517 if ($_okk1ogljjgweckx.isTextBlock(editor, node)) { |
518 |
518 textBlocks.push(node); |
519 return container; |
519 block = null; |
520 } |
520 return; |
521 |
521 } |
522 var startNode = getEndPointNode(true); |
522 if (dom.isBlock(node) || $_okk1ogljjgweckx.isBr(node)) { |
523 var endNode = getEndPointNode(); |
523 if ($_okk1ogljjgweckx.isBr(node)) { |
524 var block, siblings = []; |
524 dom.remove(node); |
525 |
525 } |
526 for (var node = startNode; node; node = node.nextSibling) { |
526 block = null; |
527 siblings.push(node); |
527 return; |
528 |
528 } |
529 if (node == endNode) { |
529 var nextSibling = node.nextSibling; |
530 break; |
530 if (global$4.isBookmarkNode(node)) { |
531 } |
531 if ($_okk1ogljjgweckx.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) { |
532 } |
532 block = null; |
533 |
533 return; |
534 tinymce.each(siblings, function(node) { |
534 } |
535 if (isTextBlock(node)) { |
535 } |
536 textBlocks.push(node); |
536 if (!block) { |
537 block = null; |
537 block = dom.create('p'); |
538 return; |
538 node.parentNode.insertBefore(block, node); |
539 } |
539 textBlocks.push(block); |
540 |
540 } |
541 if (dom.isBlock(node) || node.nodeName == 'BR') { |
541 block.appendChild(node); |
542 if (node.nodeName == 'BR') { |
542 }); |
543 dom.remove(node); |
543 return textBlocks; |
544 } |
544 }; |
545 |
545 var hasCompatibleStyle = function (dom, sib, detail) { |
546 block = null; |
546 var sibStyle = dom.getStyle(sib, 'list-style-type'); |
547 return; |
547 var detailStyle = detail ? detail['list-style-type'] : ''; |
548 } |
548 detailStyle = detailStyle === null ? '' : detailStyle; |
549 |
549 return sibStyle === detailStyle; |
550 var nextSibling = node.nextSibling; |
550 }; |
551 if (tinymce.dom.BookmarkManager.isBookmarkNode(node)) { |
551 var applyList = function (editor, listName, detail) { |
552 if (isTextBlock(nextSibling) || (!nextSibling && node.parentNode == root)) { |
552 if (detail === void 0) { |
553 block = null; |
553 detail = {}; |
554 return; |
554 } |
555 } |
555 var rng = editor.selection.getRng(true); |
556 } |
556 var bookmark; |
557 |
557 var listItemName = 'LI'; |
558 if (!block) { |
558 var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true)); |
559 block = dom.create('p'); |
559 var dom = editor.dom; |
560 node.parentNode.insertBefore(block, node); |
560 if (dom.getContentEditable(editor.selection.getNode()) === 'false') { |
561 textBlocks.push(block); |
561 return; |
562 } |
562 } |
563 |
563 listName = listName.toUpperCase(); |
564 block.appendChild(node); |
564 if (listName === 'DL') { |
565 }); |
565 listItemName = 'DT'; |
566 |
566 } |
567 return textBlocks; |
567 bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng); |
568 } |
568 global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) { |
569 |
569 var listBlock, sibling; |
570 tinymce.each(getSelectedTextBlocks(), function(block) { |
570 sibling = block.previousSibling; |
571 var listBlock, sibling; |
571 if (sibling && $_okk1ogljjgweckx.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) { |
572 |
572 listBlock = sibling; |
573 sibling = block.previousSibling; |
573 block = dom.rename(block, listItemName); |
574 if (sibling && isListNode(sibling) && sibling.nodeName == listName) { |
574 sibling.appendChild(block); |
575 listBlock = sibling; |
575 } else { |
576 block = dom.rename(block, listItemName); |
576 listBlock = dom.create(listName); |
577 sibling.appendChild(block); |
577 block.parentNode.insertBefore(listBlock, block); |
578 } else { |
578 listBlock.appendChild(block); |
579 listBlock = dom.create(listName); |
579 block = dom.rename(block, listItemName); |
580 block.parentNode.insertBefore(listBlock, block); |
580 } |
581 listBlock.appendChild(block); |
581 removeStyles(dom, block, [ |
582 block = dom.rename(block, listItemName); |
582 'margin', |
583 } |
583 'margin-right', |
584 |
584 'margin-bottom', |
585 mergeWithAdjacentLists(listBlock); |
585 'margin-left', |
586 }); |
586 'margin-top', |
587 |
587 'padding', |
588 moveToBookmark(bookmark); |
588 'padding-right', |
589 } |
589 'padding-bottom', |
590 |
590 'padding-left', |
591 function removeList() { |
591 'padding-top' |
592 var bookmark = createBookmark(selection.getRng(true)), root = editor.getBody(); |
592 ]); |
593 |
593 updateListWithDetails(dom, listBlock, detail); |
594 tinymce.each(getSelectedListItems(), function(li) { |
594 mergeWithAdjacentLists(editor.dom, listBlock); |
595 var node, rootList; |
595 }); |
596 |
596 editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark)); |
597 if (dom.isEmpty(li)) { |
597 }; |
598 outdent(li); |
598 var removeList = function (editor) { |
599 return; |
599 var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true)); |
600 } |
600 var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true)); |
601 |
601 var listItems = $_3xb1cggnjjgwecl3.getSelectedListItems(editor); |
602 for (node = li; node && node != root; node = node.parentNode) { |
602 var emptyListItems = global$5.grep(listItems, function (li) { |
603 if (isListNode(node)) { |
603 return editor.dom.isEmpty(li); |
604 rootList = node; |
604 }); |
605 } |
605 listItems = global$5.grep(listItems, function (li) { |
606 } |
606 return !editor.dom.isEmpty(li); |
607 |
607 }); |
608 splitList(rootList, li); |
608 global$5.each(emptyListItems, function (li) { |
609 }); |
609 if ($_okk1ogljjgweckx.isEmpty(editor.dom, li)) { |
610 |
610 $_6pbactghjjgweckp.outdent(editor, li); |
611 moveToBookmark(bookmark); |
611 return; |
612 } |
612 } |
613 |
613 }); |
614 function toggleList(listName) { |
614 global$5.each(listItems, function (li) { |
615 var parentList = dom.getParent(selection.getStart(), 'OL,UL,DL'); |
615 var node, rootList; |
616 |
616 if (li.parentNode === editor.getBody()) { |
617 if (parentList) { |
617 return; |
618 if (parentList.nodeName == listName) { |
618 } |
619 removeList(listName); |
619 for (node = li; node && node !== root; node = node.parentNode) { |
620 } else { |
620 if ($_okk1ogljjgweckx.isListNode(node)) { |
621 var bookmark = createBookmark(selection.getRng(true)); |
621 rootList = node; |
622 mergeWithAdjacentLists(dom.rename(parentList, listName)); |
622 } |
623 moveToBookmark(bookmark); |
623 } |
624 } |
624 $_fikiq7gpjjgwecl5.splitList(editor, rootList, li); |
625 } else { |
625 $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, rootList.parentNode); |
626 applyList(listName); |
626 }); |
627 } |
627 editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark)); |
628 } |
628 }; |
629 |
629 var isValidLists = function (list1, list2) { |
630 function queryListCommandState(listName) { |
630 return list1 && list2 && $_okk1ogljjgweckx.isListNode(list1) && list1.nodeName === list2.nodeName; |
631 return function() { |
631 }; |
632 var parentList = dom.getParent(editor.selection.getStart(), 'UL,OL,DL'); |
632 var hasSameListStyle = function (dom, list1, list2) { |
633 |
633 var targetStyle = dom.getStyle(list1, 'list-style-type', true); |
634 return parentList && parentList.nodeName == listName; |
634 var style = dom.getStyle(list2, 'list-style-type', true); |
635 }; |
635 return targetStyle === style; |
636 } |
636 }; |
637 |
637 var hasSameClasses = function (elm1, elm2) { |
638 self.backspaceDelete = function(isForward) { |
638 return elm1.className === elm2.className; |
639 function findNextCaretContainer(rng, isForward) { |
639 }; |
640 var node = rng.startContainer, offset = rng.startOffset; |
640 var shouldMerge = function (dom, list1, list2) { |
641 var nonEmptyBlocks, walker; |
641 return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2); |
642 |
642 }; |
643 if (node.nodeType == 3 && (isForward ? offset < node.data.length : offset > 0)) { |
643 var mergeWithAdjacentLists = function (dom, listBlock) { |
644 return node; |
644 var sibling, node; |
645 } |
645 sibling = listBlock.nextSibling; |
646 |
646 if (shouldMerge(dom, listBlock, sibling)) { |
647 nonEmptyBlocks = editor.schema.getNonEmptyElements(); |
647 while (node = sibling.firstChild) { |
648 walker = new tinymce.dom.TreeWalker(rng.startContainer); |
648 listBlock.appendChild(node); |
649 |
649 } |
650 while ((node = walker[isForward ? 'next' : 'prev']())) { |
650 dom.remove(sibling); |
651 if (node.nodeName == 'LI' && !node.hasChildNodes()) { |
651 } |
652 return node; |
652 sibling = listBlock.previousSibling; |
653 } |
653 if (shouldMerge(dom, listBlock, sibling)) { |
654 |
654 while (node = sibling.lastChild) { |
655 if (nonEmptyBlocks[node.nodeName]) { |
655 listBlock.insertBefore(node, listBlock.firstChild); |
656 return node; |
656 } |
657 } |
657 dom.remove(sibling); |
658 |
658 } |
659 if (node.nodeType == 3 && node.data.length > 0) { |
659 }; |
660 return node; |
660 var updateList = function (dom, list, listName, detail) { |
661 } |
661 if (list.nodeName !== listName) { |
662 } |
662 var newList = dom.rename(list, listName); |
663 } |
663 updateListWithDetails(dom, newList, detail); |
664 |
664 } else { |
665 function mergeLiElements(fromElm, toElm) { |
665 updateListWithDetails(dom, list, detail); |
666 var node, listNode, ul = fromElm.parentNode; |
666 } |
667 |
667 }; |
668 if (isListNode(toElm.lastChild)) { |
668 var toggleMultipleLists = function (editor, parentList, lists, listName, detail) { |
669 listNode = toElm.lastChild; |
669 if (parentList.nodeName === listName && !hasListStyleDetail(detail)) { |
670 } |
670 removeList(editor); |
671 |
671 } else { |
672 node = toElm.lastChild; |
672 var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true)); |
673 if (node && node.nodeName == 'BR' && fromElm.hasChildNodes()) { |
673 global$5.each([parentList].concat(lists), function (elm) { |
674 dom.remove(node); |
674 updateList(editor.dom, elm, listName, detail); |
675 } |
675 }); |
676 |
676 editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark)); |
677 if (dom.isEmpty(toElm)) { |
677 } |
678 dom.$(toElm).empty(); |
678 }; |
679 } |
679 var hasListStyleDetail = function (detail) { |
680 |
680 return 'list-style-type' in detail; |
681 if (!dom.isEmpty(fromElm)) { |
681 }; |
682 while ((node = fromElm.firstChild)) { |
682 var toggleSingleList = function (editor, parentList, listName, detail) { |
683 toElm.appendChild(node); |
683 if (parentList === editor.getBody()) { |
684 } |
684 return; |
685 } |
685 } |
686 |
686 if (parentList) { |
687 if (listNode) { |
687 if (parentList.nodeName === listName && !hasListStyleDetail(detail)) { |
688 toElm.appendChild(listNode); |
688 removeList(editor); |
689 } |
689 } else { |
690 |
690 var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true)); |
691 dom.remove(fromElm); |
691 updateListWithDetails(editor.dom, parentList, detail); |
692 |
692 mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName)); |
693 if (dom.isEmpty(ul)) { |
693 editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark)); |
694 dom.remove(ul); |
694 } |
695 } |
695 } else { |
696 } |
696 applyList(editor, listName, detail); |
697 |
697 } |
698 if (selection.isCollapsed()) { |
698 }; |
699 var li = dom.getParent(selection.getStart(), 'LI'); |
699 var toggleList = function (editor, listName, detail) { |
700 |
700 var parentList = $_3xb1cggnjjgwecl3.getParentList(editor); |
701 if (li) { |
701 var selectedSubLists = $_3xb1cggnjjgwecl3.getSelectedSubLists(editor); |
702 var rng = selection.getRng(true); |
702 detail = detail ? detail : {}; |
703 var otherLi = dom.getParent(findNextCaretContainer(rng, isForward), 'LI'); |
703 if (parentList && selectedSubLists.length > 0) { |
704 |
704 toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail); |
705 if (otherLi && otherLi != li) { |
705 } else { |
706 var bookmark = createBookmark(rng); |
706 toggleSingleList(editor, parentList, listName, detail); |
707 |
707 } |
708 if (isForward) { |
708 }; |
709 mergeLiElements(otherLi, li); |
709 var $_aek3i3gejjgwecki = { |
710 } else { |
710 toggleList: toggleList, |
711 mergeLiElements(li, otherLi); |
711 removeList: removeList, |
712 } |
712 mergeWithAdjacentLists: mergeWithAdjacentLists |
713 |
713 }; |
714 moveToBookmark(bookmark); |
714 |
715 |
715 var findNextCaretContainer = function (editor, rng, isForward, root) { |
716 return true; |
716 var node = rng.startContainer; |
717 } else if (!otherLi) { |
717 var offset = rng.startOffset; |
718 if (!isForward && removeList(li.parentNode.nodeName)) { |
718 var nonEmptyBlocks, walker; |
719 return true; |
719 if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) { |
720 } |
720 return node; |
721 } |
721 } |
722 } |
722 nonEmptyBlocks = editor.schema.getNonEmptyElements(); |
723 } |
723 if (node.nodeType === 1) { |
724 }; |
724 node = global$1.getNode(node, offset); |
725 |
725 } |
726 editor.on('BeforeExecCommand', function(e) { |
726 walker = new global$2(node, root); |
727 var cmd = e.command.toLowerCase(), isHandled; |
727 if (isForward) { |
728 |
728 if ($_okk1ogljjgweckx.isBogusBr(editor.dom, node)) { |
729 if (cmd == "indent") { |
729 walker.next(); |
730 if (indentSelection()) { |
730 } |
731 isHandled = true; |
731 } |
732 } |
732 while (node = walker[isForward ? 'next' : 'prev2']()) { |
733 } else if (cmd == "outdent") { |
733 if (node.nodeName === 'LI' && !node.hasChildNodes()) { |
734 if (outdentSelection()) { |
734 return node; |
735 isHandled = true; |
735 } |
736 } |
736 if (nonEmptyBlocks[node.nodeName]) { |
737 } |
737 return node; |
738 |
738 } |
739 if (isHandled) { |
739 if (node.nodeType === 3 && node.data.length > 0) { |
740 editor.fire('ExecCommand', {command: e.command}); |
740 return node; |
741 e.preventDefault(); |
741 } |
742 return true; |
742 } |
743 } |
743 }; |
744 }); |
744 var hasOnlyOneBlockChild = function (dom, elm) { |
745 |
745 var childNodes = elm.childNodes; |
746 editor.addCommand('InsertUnorderedList', function() { |
746 return childNodes.length === 1 && !$_okk1ogljjgweckx.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]); |
747 toggleList('UL'); |
747 }; |
748 }); |
748 var unwrapSingleBlockChild = function (dom, elm) { |
749 |
749 if (hasOnlyOneBlockChild(dom, elm)) { |
750 editor.addCommand('InsertOrderedList', function() { |
750 dom.remove(elm.firstChild, true); |
751 toggleList('OL'); |
751 } |
752 }); |
752 }; |
753 |
753 var moveChildren = function (dom, fromElm, toElm) { |
754 editor.addCommand('InsertDefinitionList', function() { |
754 var node, targetElm; |
755 toggleList('DL'); |
755 targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm; |
756 }); |
756 unwrapSingleBlockChild(dom, fromElm); |
757 |
757 if (!$_okk1ogljjgweckx.isEmpty(dom, fromElm, true)) { |
758 editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState('UL')); |
758 while (node = fromElm.firstChild) { |
759 editor.addQueryStateHandler('InsertOrderedList', queryListCommandState('OL')); |
759 targetElm.appendChild(node); |
760 editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState('DL')); |
760 } |
761 |
761 } |
762 editor.on('keydown', function(e) { |
762 }; |
763 // Check for tab but not ctrl/cmd+tab since it switches browser tabs |
763 var mergeLiElements = function (dom, fromElm, toElm) { |
764 if (e.keyCode != 9 || tinymce.util.VK.metaKeyPressed(e)) { |
764 var node, listNode; |
765 return; |
765 var ul = fromElm.parentNode; |
766 } |
766 if (!$_okk1ogljjgweckx.isChildOfBody(dom, fromElm) || !$_okk1ogljjgweckx.isChildOfBody(dom, toElm)) { |
767 |
767 return; |
768 if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) { |
768 } |
769 e.preventDefault(); |
769 if ($_okk1ogljjgweckx.isListNode(toElm.lastChild)) { |
770 |
770 listNode = toElm.lastChild; |
771 if (e.shiftKey) { |
771 } |
772 outdentSelection(); |
772 if (ul === toElm.lastChild) { |
773 } else { |
773 if ($_okk1ogljjgweckx.isBr(ul.previousSibling)) { |
774 indentSelection(); |
774 dom.remove(ul.previousSibling); |
775 } |
775 } |
776 } |
776 } |
777 }); |
777 node = toElm.lastChild; |
778 }); |
778 if (node && $_okk1ogljjgweckx.isBr(node) && fromElm.hasChildNodes()) { |
779 |
779 dom.remove(node); |
780 editor.addButton('indent', { |
780 } |
781 icon: 'indent', |
781 if ($_okk1ogljjgweckx.isEmpty(dom, toElm, true)) { |
782 title: 'Increase indent', |
782 dom.$(toElm).empty(); |
783 cmd: 'Indent', |
783 } |
784 onPostRender: function() { |
784 moveChildren(dom, fromElm, toElm); |
785 var ctrl = this; |
785 if (listNode) { |
786 |
786 toElm.appendChild(listNode); |
787 editor.on('nodechange', function() { |
787 } |
788 var blocks = editor.selection.getSelectedBlocks(); |
788 dom.remove(fromElm); |
789 var disable = false; |
789 if ($_okk1ogljjgweckx.isEmpty(dom, ul) && ul !== dom.getRoot()) { |
790 |
790 dom.remove(ul); |
791 for (var i = 0, l = blocks.length; !disable && i < l; i++) { |
791 } |
792 var tag = blocks[i].nodeName; |
792 }; |
793 |
793 var mergeIntoEmptyLi = function (editor, fromLi, toLi) { |
794 disable = (tag == 'LI' && isFirstChild(blocks[i]) || tag == 'UL' || tag == 'OL' || tag == 'DD'); |
794 editor.dom.$(toLi).empty(); |
795 } |
795 mergeLiElements(editor.dom, fromLi, toLi); |
796 |
796 editor.selection.setCursorLocation(toLi); |
797 ctrl.disabled(disable); |
797 }; |
798 }); |
798 var mergeForward = function (editor, rng, fromLi, toLi) { |
799 } |
799 var dom = editor.dom; |
800 }); |
800 if (dom.isEmpty(toLi)) { |
801 |
801 mergeIntoEmptyLi(editor, fromLi, toLi); |
802 editor.on('keydown', function(e) { |
802 } else { |
803 if (e.keyCode == tinymce.util.VK.BACKSPACE) { |
803 var bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng); |
804 if (self.backspaceDelete()) { |
804 mergeLiElements(dom, fromLi, toLi); |
805 e.preventDefault(); |
805 editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark)); |
806 } |
806 } |
807 } else if (e.keyCode == tinymce.util.VK.DELETE) { |
807 }; |
808 if (self.backspaceDelete(true)) { |
808 var mergeBackward = function (editor, rng, fromLi, toLi) { |
809 e.preventDefault(); |
809 var bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng); |
810 } |
810 mergeLiElements(editor.dom, fromLi, toLi); |
811 } |
811 var resolvedBookmark = $_2nx1i4gjjjgweckt.resolveBookmark(bookmark); |
812 }); |
812 editor.selection.setRng(resolvedBookmark); |
813 }); |
813 }; |
|
814 var backspaceDeleteFromListToListCaret = function (editor, isForward) { |
|
815 var dom = editor.dom, selection = editor.selection; |
|
816 var selectionStartElm = selection.getStart(); |
|
817 var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm); |
|
818 var li = dom.getParent(selection.getStart(), 'LI', root); |
|
819 var ul, rng, otherLi; |
|
820 if (li) { |
|
821 ul = li.parentNode; |
|
822 if (ul === editor.getBody() && $_okk1ogljjgweckx.isEmpty(dom, ul)) { |
|
823 return true; |
|
824 } |
|
825 rng = $_a9cyhvgkjjgweckv.normalizeRange(selection.getRng(true)); |
|
826 otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root); |
|
827 if (otherLi && otherLi !== li) { |
|
828 if (isForward) { |
|
829 mergeForward(editor, rng, otherLi, li); |
|
830 } else { |
|
831 mergeBackward(editor, rng, li, otherLi); |
|
832 } |
|
833 return true; |
|
834 } else if (!otherLi) { |
|
835 if (!isForward && $_aek3i3gejjgwecki.removeList(editor)) { |
|
836 return true; |
|
837 } |
|
838 } |
|
839 } |
|
840 return false; |
|
841 }; |
|
842 var removeBlock = function (dom, block, root) { |
|
843 var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root); |
|
844 dom.remove(block); |
|
845 if (parentBlock && dom.isEmpty(parentBlock)) { |
|
846 dom.remove(parentBlock); |
|
847 } |
|
848 }; |
|
849 var backspaceDeleteIntoListCaret = function (editor, isForward) { |
|
850 var dom = editor.dom; |
|
851 var selectionStartElm = editor.selection.getStart(); |
|
852 var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm); |
|
853 var block = dom.getParent(selectionStartElm, dom.isBlock, root); |
|
854 if (block && dom.isEmpty(block)) { |
|
855 var rng = $_a9cyhvgkjjgweckv.normalizeRange(editor.selection.getRng(true)); |
|
856 var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root); |
|
857 if (otherLi_1) { |
|
858 editor.undoManager.transact(function () { |
|
859 removeBlock(dom, block, root); |
|
860 $_aek3i3gejjgwecki.mergeWithAdjacentLists(dom, otherLi_1.parentNode); |
|
861 editor.selection.select(otherLi_1, true); |
|
862 editor.selection.collapse(isForward); |
|
863 }); |
|
864 return true; |
|
865 } |
|
866 } |
|
867 return false; |
|
868 }; |
|
869 var backspaceDeleteCaret = function (editor, isForward) { |
|
870 return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward); |
|
871 }; |
|
872 var backspaceDeleteRange = function (editor) { |
|
873 var selectionStartElm = editor.selection.getStart(); |
|
874 var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm); |
|
875 var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root); |
|
876 if (startListParent || $_3xb1cggnjjgwecl3.getSelectedListItems(editor).length > 0) { |
|
877 editor.undoManager.transact(function () { |
|
878 editor.execCommand('Delete'); |
|
879 $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, editor.getBody()); |
|
880 }); |
|
881 return true; |
|
882 } |
|
883 return false; |
|
884 }; |
|
885 var backspaceDelete = function (editor, isForward) { |
|
886 return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor); |
|
887 }; |
|
888 var setup = function (editor) { |
|
889 editor.on('keydown', function (e) { |
|
890 if (e.keyCode === global$3.BACKSPACE) { |
|
891 if (backspaceDelete(editor, false)) { |
|
892 e.preventDefault(); |
|
893 } |
|
894 } else if (e.keyCode === global$3.DELETE) { |
|
895 if (backspaceDelete(editor, true)) { |
|
896 e.preventDefault(); |
|
897 } |
|
898 } |
|
899 }); |
|
900 }; |
|
901 var $_brhyezgajjgweck7 = { |
|
902 setup: setup, |
|
903 backspaceDelete: backspaceDelete |
|
904 }; |
|
905 |
|
906 var get = function (editor) { |
|
907 return { |
|
908 backspaceDelete: function (isForward) { |
|
909 $_brhyezgajjgweck7.backspaceDelete(editor, isForward); |
|
910 } |
|
911 }; |
|
912 }; |
|
913 var $_nb3yvg9jjgweck5 = { get: get }; |
|
914 |
|
915 var DOM$5 = global$6.DOM; |
|
916 var mergeLists = function (from, to) { |
|
917 var node; |
|
918 if ($_okk1ogljjgweckx.isListNode(from)) { |
|
919 while (node = from.firstChild) { |
|
920 to.appendChild(node); |
|
921 } |
|
922 DOM$5.remove(from); |
|
923 } |
|
924 }; |
|
925 var indent = function (li) { |
|
926 var sibling, newList, listStyle; |
|
927 if (li.nodeName === 'DT') { |
|
928 DOM$5.rename(li, 'DD'); |
|
929 return true; |
|
930 } |
|
931 sibling = li.previousSibling; |
|
932 if (sibling && $_okk1ogljjgweckx.isListNode(sibling)) { |
|
933 sibling.appendChild(li); |
|
934 return true; |
|
935 } |
|
936 if (sibling && sibling.nodeName === 'LI' && $_okk1ogljjgweckx.isListNode(sibling.lastChild)) { |
|
937 sibling.lastChild.appendChild(li); |
|
938 mergeLists(li.lastChild, sibling.lastChild); |
|
939 return true; |
|
940 } |
|
941 sibling = li.nextSibling; |
|
942 if (sibling && $_okk1ogljjgweckx.isListNode(sibling)) { |
|
943 sibling.insertBefore(li, sibling.firstChild); |
|
944 return true; |
|
945 } |
|
946 sibling = li.previousSibling; |
|
947 if (sibling && sibling.nodeName === 'LI') { |
|
948 newList = DOM$5.create(li.parentNode.nodeName); |
|
949 listStyle = DOM$5.getStyle(li.parentNode, 'listStyleType'); |
|
950 if (listStyle) { |
|
951 DOM$5.setStyle(newList, 'listStyleType', listStyle); |
|
952 } |
|
953 sibling.appendChild(newList); |
|
954 newList.appendChild(li); |
|
955 mergeLists(li.lastChild, newList); |
|
956 return true; |
|
957 } |
|
958 return false; |
|
959 }; |
|
960 var indentSelection = function (editor) { |
|
961 var listElements = $_3xb1cggnjjgwecl3.getSelectedListItems(editor); |
|
962 if (listElements.length) { |
|
963 var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true)); |
|
964 for (var i = 0; i < listElements.length; i++) { |
|
965 if (!indent(listElements[i]) && i === 0) { |
|
966 break; |
|
967 } |
|
968 } |
|
969 editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark)); |
|
970 editor.nodeChanged(); |
|
971 return true; |
|
972 } |
|
973 }; |
|
974 var $_3rkwagtjjgweclf = { indentSelection: indentSelection }; |
|
975 |
|
976 var queryListCommandState = function (editor, listName) { |
|
977 return function () { |
|
978 var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL'); |
|
979 return parentList && parentList.nodeName === listName; |
|
980 }; |
|
981 }; |
|
982 var register = function (editor) { |
|
983 editor.on('BeforeExecCommand', function (e) { |
|
984 var cmd = e.command.toLowerCase(); |
|
985 var isHandled; |
|
986 if (cmd === 'indent') { |
|
987 if ($_3rkwagtjjgweclf.indentSelection(editor)) { |
|
988 isHandled = true; |
|
989 } |
|
990 } else if (cmd === 'outdent') { |
|
991 if ($_6pbactghjjgweckp.outdentSelection(editor)) { |
|
992 isHandled = true; |
|
993 } |
|
994 } |
|
995 if (isHandled) { |
|
996 editor.fire('ExecCommand', { command: e.command }); |
|
997 e.preventDefault(); |
|
998 return true; |
|
999 } |
|
1000 }); |
|
1001 editor.addCommand('InsertUnorderedList', function (ui, detail) { |
|
1002 $_aek3i3gejjgwecki.toggleList(editor, 'UL', detail); |
|
1003 }); |
|
1004 editor.addCommand('InsertOrderedList', function (ui, detail) { |
|
1005 $_aek3i3gejjgwecki.toggleList(editor, 'OL', detail); |
|
1006 }); |
|
1007 editor.addCommand('InsertDefinitionList', function (ui, detail) { |
|
1008 $_aek3i3gejjgwecki.toggleList(editor, 'DL', detail); |
|
1009 }); |
|
1010 editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL')); |
|
1011 editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL')); |
|
1012 editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL')); |
|
1013 }; |
|
1014 var $_blnfs1gsjjgwecld = { register: register }; |
|
1015 |
|
1016 var shouldIndentOnTab = function (editor) { |
|
1017 return editor.getParam('lists_indent_on_tab', true); |
|
1018 }; |
|
1019 var $_8obsbgvjjgweclk = { shouldIndentOnTab: shouldIndentOnTab }; |
|
1020 |
|
1021 var setupTabKey = function (editor) { |
|
1022 editor.on('keydown', function (e) { |
|
1023 if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) { |
|
1024 return; |
|
1025 } |
|
1026 if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) { |
|
1027 e.preventDefault(); |
|
1028 if (e.shiftKey) { |
|
1029 $_6pbactghjjgweckp.outdentSelection(editor); |
|
1030 } else { |
|
1031 $_3rkwagtjjgweclf.indentSelection(editor); |
|
1032 } |
|
1033 } |
|
1034 }); |
|
1035 }; |
|
1036 var setup$1 = function (editor) { |
|
1037 if ($_8obsbgvjjgweclk.shouldIndentOnTab(editor)) { |
|
1038 setupTabKey(editor); |
|
1039 } |
|
1040 $_brhyezgajjgweck7.setup(editor); |
|
1041 }; |
|
1042 var $_ees9z9gujjgwecli = { setup: setup$1 }; |
|
1043 |
|
1044 var findIndex = function (list, predicate) { |
|
1045 for (var index = 0; index < list.length; index++) { |
|
1046 var element = list[index]; |
|
1047 if (predicate(element)) { |
|
1048 return index; |
|
1049 } |
|
1050 } |
|
1051 return -1; |
|
1052 }; |
|
1053 var listState = function (editor, listName) { |
|
1054 return function (e) { |
|
1055 var ctrl = e.control; |
|
1056 editor.on('NodeChange', function (e) { |
|
1057 var tableCellIndex = findIndex(e.parents, $_okk1ogljjgweckx.isTableCellNode); |
|
1058 var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents; |
|
1059 var lists = global$5.grep(parents, $_okk1ogljjgweckx.isListNode); |
|
1060 ctrl.active(lists.length > 0 && lists[0].nodeName === listName); |
|
1061 }); |
|
1062 }; |
|
1063 }; |
|
1064 var indentPostRender = function (editor) { |
|
1065 return function (e) { |
|
1066 var ctrl = e.control; |
|
1067 editor.on('nodechange', function () { |
|
1068 var listItemBlocks = $_3xb1cggnjjgwecl3.getSelectedListItems(editor); |
|
1069 var disable = listItemBlocks.length > 0 && $_okk1ogljjgweckx.isFirstChild(listItemBlocks[0]); |
|
1070 ctrl.disabled(disable); |
|
1071 }); |
|
1072 }; |
|
1073 }; |
|
1074 var register$1 = function (editor) { |
|
1075 var hasPlugin = function (editor, plugin) { |
|
1076 var plugins = editor.settings.plugins ? editor.settings.plugins : ''; |
|
1077 return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1; |
|
1078 }; |
|
1079 if (!hasPlugin(editor, 'advlist')) { |
|
1080 editor.addButton('numlist', { |
|
1081 active: false, |
|
1082 title: 'Numbered list', |
|
1083 cmd: 'InsertOrderedList', |
|
1084 onPostRender: listState(editor, 'OL') |
|
1085 }); |
|
1086 editor.addButton('bullist', { |
|
1087 active: false, |
|
1088 title: 'Bullet list', |
|
1089 cmd: 'InsertUnorderedList', |
|
1090 onPostRender: listState(editor, 'UL') |
|
1091 }); |
|
1092 } |
|
1093 editor.addButton('indent', { |
|
1094 icon: 'indent', |
|
1095 title: 'Increase indent', |
|
1096 cmd: 'Indent', |
|
1097 onPostRender: indentPostRender(editor) |
|
1098 }); |
|
1099 }; |
|
1100 var $_s7o0sgwjjgweclm = { register: register$1 }; |
|
1101 |
|
1102 global.add('lists', function (editor) { |
|
1103 $_ees9z9gujjgwecli.setup(editor); |
|
1104 $_s7o0sgwjjgweclm.register(editor); |
|
1105 $_blnfs1gsjjgwecld.register(editor); |
|
1106 return $_nb3yvg9jjgweck5.get(editor); |
|
1107 }); |
|
1108 function Plugin () { |
|
1109 } |
|
1110 |
|
1111 return Plugin; |
|
1112 |
|
1113 }()); |
|
1114 })(); |