Файловый менеджер - Редактировать - /home/wuectly/www/03cbe/plugin.js.tar
Назад
home/wuectly/www/media/com_jce/editor/tinymce/plugins/lists/plugin.js 0000604 00000067213 15246311273 0022114 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { "use strict"; function isBr(node) { return node && "BR" === node.nodeName; } function getNormalizedEndPoint(container, offset) { var node = RangeUtils$1.getNode(container, offset); return NodeType.isListItemNode(container) && NodeType.isTextNode(node) ? { container: node, offset: offset >= container.childNodes.length ? node.data.length : 0 } : { container: container, offset: offset }; } function getParentList(editor) { return editor.dom.getParent(editor.selection.getStart(!0), "OL,UL,DL"); } function normalizeList(dom, ul) { var sibling, parentNode = ul.parentNode; "LI" === parentNode.nodeName && parentNode.firstChild === ul && ((sibling = parentNode.previousSibling) && "LI" === sibling.nodeName ? (sibling.appendChild(ul), NodeType.isEmpty(dom, parentNode) && DOM$3.remove(parentNode)) : DOM$3.setStyle(parentNode, "listStyleType", "none")), NodeType.isListNode(parentNode) && (sibling = parentNode.previousSibling) && "LI" === sibling.nodeName && sibling.appendChild(ul); } function removeEmptyLi(dom, li) { NodeType.isEmpty(dom, li) && DOM.remove(li); } function outdent(editor, li) { var ul = li.parentNode, ulParent = ul.parentNode; return ul !== editor.getBody() && ("DD" === li.nodeName ? DOM.rename(li, "DT") : NodeType.isFirstChild(li) && NodeType.isLastChild(li) ? "LI" === ulParent.nodeName ? (DOM.insertAfter(li, ulParent), removeEmptyLi(editor.dom, ulParent), DOM.remove(ul)) : NodeType.isListNode(ulParent) ? DOM.remove(ul, !0) : (ulParent.insertBefore(TextBlock_createNewTextBlock(editor, li), ul), DOM.remove(ul)) : NodeType.isFirstChild(li) ? "LI" === ulParent.nodeName ? (DOM.insertAfter(li, ulParent), li.appendChild(ul), removeEmptyLi(editor.dom, ulParent)) : NodeType.isListNode(ulParent) ? ulParent.insertBefore(li, ul) : (ulParent.insertBefore(TextBlock_createNewTextBlock(editor, li), ul), DOM.remove(li)) : NodeType.isLastChild(li) ? "LI" === ulParent.nodeName ? DOM.insertAfter(li, ulParent) : NodeType.isListNode(ulParent) ? DOM.insertAfter(li, ul) : (DOM.insertAfter(TextBlock_createNewTextBlock(editor, li), ul), DOM.remove(li)) : (ulParent = "LI" === ulParent.nodeName ? (ul = ulParent, TextBlock_createNewTextBlock(editor, li, "LI")) : NodeType.isListNode(ulParent) ? TextBlock_createNewTextBlock(editor, li, "LI") : TextBlock_createNewTextBlock(editor, li), SplitList_splitList(editor, ul, li, ulParent), NormalizeLists_normalizeLists(editor.dom, ul.parentNode))), !0; } function setAttribs(elm, attrs) { tinymce.each(attrs, function(value, key) { elm.setAttribute(key, value); }); } function getEndPointNode(editor, rng, start) { var root = getRoot(editor), container = rng[start ? "startContainer" : "endContainer"], rng = rng[start ? "startOffset" : "endOffset"]; for (1 === container.nodeType && (container = container.childNodes[Math.min(rng, container.childNodes.length - 1)] || container); container.parentNode !== root; ) { if (NodeType.isTextBlock(editor, container)) return container; if (/^(TD|TH)$/.test(container.parentNode.nodeName)) return container; container = container.parentNode; } return container; } function shouldMerge(dom, list1, list2) { return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2); } function findNextCaretContainer(editor, rng, isForward) { var nonEmptyBlocks, walker, node = rng.startContainer, rng = rng.startOffset; if (3 === node.nodeType && (isForward ? rng < node.data.length : 0 < rng)) return node; for (nonEmptyBlocks = editor.schema.getNonEmptyElements(), 1 === node.nodeType && (node = RangeUtils.getNode(node, rng)), walker = new TreeWalker(node, editor.getBody()), isForward && NodeType.isBogusBr(editor.dom, node) && walker.next(); node = walker[isForward ? "next" : "prev2"](); ) { if ("LI" === node.nodeName && !node.hasChildNodes()) return node; if (nonEmptyBlocks[node.nodeName]) return node; if (3 === node.nodeType && 0 < node.data.length) return node; } } function hasOnlyOneBlockChild(dom, elm) { return 1 === (elm = elm.childNodes).length && !NodeType.isListNode(elm[0]) && dom.isBlock(elm[0]); } function moveChildren(dom, fromElm, toElm) { var node, targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm; if (!function(dom, elm) { hasOnlyOneBlockChild(dom, elm) && dom.remove(elm.firstChild, !0); }(dom, fromElm), !NodeType.isEmpty(dom, fromElm, !0)) for (;node = fromElm.firstChild; ) targetElm.appendChild(node); } function mergeLiElements(dom, fromElm, toElm) { var node, listNode, ul = fromElm.parentNode; NodeType.isChildOfBody(dom, fromElm) && NodeType.isChildOfBody(dom, toElm) && (NodeType.isListNode(toElm.lastChild) && (listNode = toElm.lastChild), ul === toElm.lastChild && NodeType.isBr(ul.previousSibling) && dom.remove(ul.previousSibling), (node = toElm.lastChild) && NodeType.isBr(node) && fromElm.hasChildNodes() && dom.remove(node), NodeType.isEmpty(dom, toElm, !0) && dom.empty(toElm), moveChildren(dom, fromElm, toElm), listNode && toElm.appendChild(listNode), dom.remove(fromElm), NodeType.isEmpty(dom, ul)) && ul !== dom.getRoot() && dom.remove(ul); } function mergeForward(editor, rng, fromLi, toLi) { var dom = editor.dom; dom.isEmpty(toLi) ? function(editor, fromLi, toLi) { editor.dom.empty(toLi), mergeLiElements(editor.dom, fromLi, toLi), editor.selection.setCursorLocation(toLi); }(editor, fromLi, toLi) : (rng = Bookmark.createBookmark(rng), mergeLiElements(dom, fromLi, toLi), editor.selection.setRng(Bookmark.resolveBookmark(rng))); } function backspaceDeleteFromListToListCaret(editor, isForward) { var ul, dom = editor.dom, selection = editor.selection, li = dom.getParent(selection.getStart(), "LI"); if (li) { if ((ul = li.parentNode) === editor.getBody() && NodeType.isEmpty(dom, ul)) return !0; if (selection = Range_normalizeRange(selection.getRng(!0)), (dom = dom.getParent(findNextCaretContainer(editor, selection, isForward), "LI")) && dom !== li) return isForward ? mergeForward(editor, selection, dom, li) : function(editor, rng, fromLi, toLi) { rng = Bookmark.createBookmark(rng); mergeLiElements(editor.dom, fromLi, toLi), editor.selection.setRng(Bookmark.resolveBookmark(rng)); }(editor, selection, li, dom), !0; if (!dom && !isForward && ToggleList_removeList(editor, ul.nodeName)) return !0; } return !1; } function backspaceDelete(editor, isForward) { return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor); } function queryListCommandState(editor, listName) { return function() { var parentList = editor.dom.getParent(editor.selection.getStart(), "UL,OL,DL"); return parentList && parentList.nodeName === listName; }; } var NodeType = { isTextNode: function(node) { return node && 3 === node.nodeType; }, isListNode: function(node) { return node && /^(OL|UL|DL)$/.test(node.nodeName); }, isListItemNode: function(node) { return node && /^(LI|DT|DD)$/.test(node.nodeName); }, isBr: isBr, isFirstChild: function(node) { return node.parentNode.firstChild === node; }, isLastChild: function(node) { return node.parentNode.lastChild === node; }, isTextBlock: function(editor, node) { return node && !!editor.schema.getTextBlockElements()[node.nodeName]; }, isBlock: function(node, blockElements) { return node && node.nodeName in blockElements; }, isBogusBr: function(dom, node) { return !!isBr(node) && !(!dom.isBlock(node.nextSibling) || isBr(node.previousSibling)); }, isEmpty: function(dom, elm, keepBookmarks) { var empty = dom.isEmpty(elm); return !(keepBookmarks && 0 < dom.select("span[data-mce-type=bookmark]", elm).length) && empty; }, isChildOfBody: function(dom, elm) { return dom.isChildOf(elm, dom.getRoot()); } }, RangeUtils$1 = tinymce.dom.RangeUtils, Range_normalizeRange = function(rng) { var outRng = rng.cloneRange(), rangeStart = getNormalizedEndPoint(rng.startContainer, rng.startOffset), rangeStart = (outRng.setStart(rangeStart.container, rangeStart.offset), getNormalizedEndPoint(rng.endContainer, rng.endOffset)); return outRng.setEnd(rangeStart.container, rangeStart.offset), outRng; }, DOM$5 = tinymce.DOM, Bookmark = { createBookmark: function(rng) { function setupEndPoint(start) { var offsetNode, container = rng[start ? "startContainer" : "endContainer"], offset = rng[start ? "startOffset" : "endOffset"]; 1 === container.nodeType && (offsetNode = DOM$5.create("span", { "data-mce-type": "bookmark" }), container.hasChildNodes() ? (offset = Math.min(offset, container.childNodes.length - 1), start ? container.insertBefore(offsetNode, container.childNodes[offset]) : DOM$5.insertAfter(offsetNode, container.childNodes[offset])) : container.appendChild(offsetNode), container = offsetNode, offset = 0), bookmark[start ? "startContainer" : "endContainer"] = container, bookmark[start ? "startOffset" : "endOffset"] = offset; } var bookmark = {}; return setupEndPoint(!0), rng.collapsed || setupEndPoint(), bookmark; }, resolveBookmark: function(bookmark) { function restoreEndPoint(start) { var node, container = node = bookmark[start ? "startContainer" : "endContainer"], offset = bookmark[start ? "startOffset" : "endOffset"]; container && (1 === container.nodeType && (offset = function(container) { for (var node = container.parentNode.firstChild, idx = 0; node; ) { if (node === container) return idx; 1 === node.nodeType && "bookmark" === node.getAttribute("data-mce-type") || idx++, node = node.nextSibling; } return -1; }(container), container = container.parentNode, DOM$5.remove(node)), bookmark[start ? "startContainer" : "endContainer"] = container, bookmark[start ? "startOffset" : "endOffset"] = offset); } restoreEndPoint(!0), restoreEndPoint(); var rng = DOM$5.createRng(); return rng.setStart(bookmark.startContainer, bookmark.startOffset), bookmark.endContainer && rng.setEnd(bookmark.endContainer, bookmark.endOffset), Range_normalizeRange(rng); } }, Selection_getParentList = getParentList, Selection_getSelectedSubLists = function(editor) { var parentList = getParentList(editor); return tinymce.grep(editor.selection.getSelectedBlocks(), function(elm) { return NodeType.isListNode(elm) && parentList !== elm; }); }, Selection_getSelectedListItems = function(editor) { var selectedBlocks = editor.selection.getSelectedBlocks(); return tinymce.grep(function(editor, elms) { elms = tinymce.map(elms, function(elm) { var parentLi = editor.dom.getParent(elm, "li,dd,dt", editor.getBody()); return parentLi || elm; }); return editor.dom.unique(elms); }(editor, selectedBlocks), function(block) { return NodeType.isListItemNode(block); }); }, DOM$4 = tinymce.DOM, mergeLists = function(from, to) { var node; if (NodeType.isListNode(from)) { for (;node = from.firstChild; ) to.appendChild(node); DOM$4.remove(from); } }, Indent_indentSelection = function(editor) { var li, sibling, newList, listStyle, listElements = Selection_getSelectedListItems(editor); if (listElements.length) { for (var bookmark = Bookmark.createBookmark(editor.selection.getRng(!0)), i = 0; i < listElements.length && (li = listElements[i], listStyle = newList = sibling = void 0, ("DT" === li.nodeName ? (DOM$4.rename(li, "DD"), !0) : (sibling = li.previousSibling) && NodeType.isListNode(sibling) ? (sibling.appendChild(li), !0) : sibling && "LI" === sibling.nodeName && NodeType.isListNode(sibling.lastChild) ? (sibling.lastChild.appendChild(li), mergeLists(li.lastChild, sibling.lastChild), !0) : (sibling = li.nextSibling) && NodeType.isListNode(sibling) ? (sibling.insertBefore(li, sibling.firstChild), !0) : !(!(sibling = li.previousSibling) || "LI" !== sibling.nodeName || (newList = DOM$4.create(li.parentNode.nodeName), (listStyle = DOM$4.getStyle(li.parentNode, "listStyleType")) && DOM$4.setStyle(newList, "listStyleType", listStyle), sibling.appendChild(newList), newList.appendChild(li), mergeLists(li.lastChild, newList), 0))) || 0 !== i); i++); return editor.selection.setRng(Bookmark.resolveBookmark(bookmark)), editor.nodeChanged(), !0; } }, DOM$3 = tinymce.DOM, NormalizeLists_normalizeLists = function(dom, element) { tinymce.each(tinymce.grep(dom.select("ol,ul", element)), function(ul) { normalizeList(dom, ul); }); }, DOM$2 = tinymce.DOM, TextBlock_createNewTextBlock = function(editor, contentNode, blockName) { var node, textBlock, hasContentNode, fragment = DOM$2.createFragment(), blockElements = editor.schema.getBlockElements(); if ((blockName = editor.settings.forced_root_block ? blockName || editor.settings.forced_root_block : blockName) && ((textBlock = DOM$2.create(blockName)).tagName === editor.settings.forced_root_block && DOM$2.setAttribs(textBlock, editor.settings.forced_root_block_attrs), NodeType.isBlock(contentNode.firstChild, blockElements) || fragment.appendChild(textBlock)), contentNode) for (;node = contentNode.firstChild; ) { var nodeName = node.nodeName; hasContentNode || "SPAN" === nodeName && "bookmark" === node.getAttribute("data-mce-type") || (hasContentNode = !0), NodeType.isBlock(node, blockElements) ? (fragment.appendChild(node), textBlock = null) : (blockName ? (textBlock || (textBlock = DOM$2.create(blockName), fragment.appendChild(textBlock)), textBlock) : fragment).appendChild(node); } return editor.settings.forced_root_block ? hasContentNode || textBlock.appendChild(DOM$2.create("br", { "data-mce-bogus": "1" })) : fragment.appendChild(DOM$2.create("br")), fragment; }, DOM$1 = tinymce.DOM, SplitList_splitList = function(editor, ul, li, newBlock) { var tmpRng, node, targetNode, bookmarks = DOM$1.select('span[data-mce-type="bookmark"]', ul); for (newBlock = newBlock || TextBlock_createNewTextBlock(editor, li), (tmpRng = DOM$1.createRng()).setStartAfter(li), tmpRng.setEndAfter(ul), node = (tmpRng = tmpRng.extractContents()).firstChild; node; node = node.firstChild) if ("LI" === node.nodeName && editor.dom.isEmpty(node)) { DOM$1.remove(node); break; } editor.dom.isEmpty(tmpRng) || DOM$1.insertAfter(tmpRng, ul), DOM$1.insertAfter(newBlock, ul), NodeType.isEmpty(editor.dom, li.parentNode) && (targetNode = li.parentNode, tinymce.each(bookmarks, function(node) { targetNode.parentNode.insertBefore(node, li.parentNode); }), DOM$1.remove(targetNode)), DOM$1.remove(li), NodeType.isEmpty(editor.dom, ul) && DOM$1.remove(ul); }, DOM = tinymce.DOM, Outdent_outdent = outdent, Outdent_outdentSelection = function(editor) { var listElements = Selection_getSelectedListItems(editor); if (listElements.length) { for (var y, bookmark = Bookmark.createBookmark(editor.selection.getRng(!0)), root = editor.dom.getRoot(), i = listElements.length; i--; ) for (var node = listElements[i].parentNode; node && node !== root; ) { for (y = listElements.length; y--; ) if (listElements[y] === node) { listElements.splice(i, 1); break; } node = node.parentNode; } for (i = 0; i < listElements.length && (outdent(editor, listElements[i]) || 0 !== i); i++); return editor.selection.setRng(Bookmark.resolveBookmark(bookmark)), editor.nodeChanged(), !0; } }, BookmarkManager = tinymce.dom.BookmarkManager, getRoot = function(editor) { return editor.dom.getRoot(); }, updateListWithDetails = function(dom, el, detail) { !function(dom, el, detail) { detail = detail["list-style-type"] || null; dom.setStyle(el, "list-style-type", detail); }(dom, el, detail), function(dom, el, detail) { setAttribs(el, detail["list-attributes"]), tinymce.each(dom.select("li", el), function(li) { setAttribs(li, detail["list-item-attributes"]); }); }(dom, el, detail); }, applyList = function(editor, listName, detail) { var bookmark, rng = editor.selection.getRng(!0), listItemName = "LI", dom = editor.dom; detail = detail || {}, "false" !== dom.getContentEditable(editor.selection.getNode()) && ("DL" === (listName = listName.toUpperCase()) && (listItemName = "DT"), bookmark = Bookmark.createBookmark(rng), tinymce.each(function(editor, rng) { for (var block, textBlocks = [], root = getRoot(editor), dom = editor.dom, startNode = getEndPointNode(editor, rng, !0), endNode = getEndPointNode(editor, rng, !1), siblings = [], node = startNode; node && (siblings.push(node), node !== endNode); node = node.nextSibling); return tinymce.each(siblings, function(node) { var nextSibling; NodeType.isTextBlock(editor, node) ? (textBlocks.push(node), block = null) : dom.isBlock(node) || NodeType.isBr(node) ? (NodeType.isBr(node) && dom.remove(node), block = null) : (nextSibling = node.nextSibling, BookmarkManager.isBookmarkNode(node) && (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) ? block = null : (block || (block = dom.create("p"), node.parentNode.insertBefore(block, node), textBlocks.push(block)), block.appendChild(node))); }), textBlocks; }(editor, rng), function(block, idx) { var listBlock, detailStyle, sibling = block.previousSibling; "DL" === listName && 0 < idx && (listItemName = "DD"), sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && (idx = sibling, idx = dom.getStyle(idx, "list-style-type"), detailStyle = detail ? detail["list-style-type"] : "", idx === (null === detailStyle ? "" : detailStyle)) ? (listBlock = sibling, block = dom.rename(block, listItemName), sibling.appendChild(block)) : (listBlock = dom.create(listName), block.parentNode.insertBefore(listBlock, block), listBlock.appendChild(block), block = dom.rename(block, listItemName)), updateListWithDetails(dom, listBlock, detail), mergeWithAdjacentLists(editor.dom, listBlock); }), editor.selection.setRng(Bookmark.resolveBookmark(bookmark))); }, removeList = function(editor) { var bookmark = Bookmark.createBookmark(editor.selection.getRng(!0)), root = getRoot(editor), listItems = Selection_getSelectedListItems(editor), emptyListItems = tinymce.grep(listItems, function(li) { return editor.dom.isEmpty(li); }), listItems = tinymce.grep(listItems, function(li) { return !editor.dom.isEmpty(li); }); tinymce.each(emptyListItems, function(li) { NodeType.isEmpty(editor.dom, li) && Outdent_outdent(editor, li); }), tinymce.each(listItems, function(li) { var node, rootList; if (li.parentNode !== editor.getBody()) { for (node = li; node && node !== root; node = node.parentNode) NodeType.isListNode(node) && (rootList = node); SplitList_splitList(editor, rootList, li), NormalizeLists_normalizeLists(editor.dom, rootList.parentNode); } }), editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); }, isValidLists = function(list1, list2) { return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName; }, hasSameListStyle = function(dom, list1, list2) { return dom.getStyle(list1, "list-style-type", !0) === dom.getStyle(list2, "list-style-type", !0); }, hasSameClasses = function(elm1, elm2) { return elm1.className === elm2.className; }, mergeWithAdjacentLists = function(dom, listBlock) { var node, sibling = listBlock.nextSibling; if (shouldMerge(dom, listBlock, sibling)) { for (;node = sibling.firstChild; ) listBlock.appendChild(node); dom.remove(sibling); } if (sibling = listBlock.previousSibling, shouldMerge(dom, listBlock, sibling)) { for (;node = sibling.lastChild; ) listBlock.insertBefore(node, listBlock.firstChild); dom.remove(sibling); } }, updateList = function(dom, list, listName, detail) { list.nodeName !== listName ? (listName = dom.rename(list, listName), updateListWithDetails(dom, listName, detail)) : updateListWithDetails(dom, list, detail); }, hasListStyleDetail = function(detail) { return "list-style-type" in detail; }, ToggleList_toggleList = function(editor, listName, detail) { var parentList = Selection_getParentList(editor), selectedSubLists = Selection_getSelectedSubLists(editor); detail = detail || {}, parentList && 0 < selectedSubLists.length ? function(editor, parentList, lists, listName, detail) { var bookmark; parentList.nodeName !== listName || hasListStyleDetail(detail) ? (bookmark = Bookmark.createBookmark(editor.selection.getRng(!0)), tinymce.each([ parentList ].concat(lists), function(elm) { updateList(editor.dom, elm, listName, detail); }), editor.selection.setRng(Bookmark.resolveBookmark(bookmark))) : removeList(editor); }(editor, parentList, selectedSubLists, listName, detail) : function(editor, parentList, listName, detail) { var bookmark; parentList !== getRoot(editor) && (parentList ? parentList.nodeName !== listName || hasListStyleDetail(detail) ? (bookmark = Bookmark.createBookmark(editor.selection.getRng(!0)), updateListWithDetails(editor.dom, parentList, detail), mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName)), editor.selection.setRng(Bookmark.resolveBookmark(bookmark))) : removeList(editor) : applyList(editor, listName, detail)); }(editor, parentList, listName, detail); }, ToggleList_removeList = removeList, ToggleList_mergeWithAdjacentLists = mergeWithAdjacentLists, RangeUtils = tinymce.dom.RangeUtils, TreeWalker = tinymce.dom.TreeWalker, VK$1 = tinymce.VK, backspaceDeleteCaret = function(editor, isForward) { return backspaceDeleteFromListToListCaret(editor, isForward) || function(editor, isForward) { var dom = editor.dom, block = dom.getParent(editor.selection.getStart(), dom.isBlock); if (block && dom.isEmpty(block)) { var rng = Range_normalizeRange(editor.selection.getRng(!0)), rng = dom.getParent(findNextCaretContainer(editor, rng, isForward), "LI"); if (rng) return editor.undoManager.add(), function(dom, block) { var parentBlock = dom.getParent(block.parentNode, dom.isBlock); dom.remove(block), parentBlock && dom.isEmpty(parentBlock) && dom.remove(parentBlock); }(dom, block), ToggleList_mergeWithAdjacentLists(dom, rng.parentNode), editor.selection.select(rng, !0), editor.selection.collapse(isForward), !0; } return !1; }(editor, isForward); }, backspaceDeleteRange = function(editor) { return !!(editor.dom.getParent(editor.selection.getStart(), "LI,DT,DD") || 0 < Selection_getSelectedListItems(editor).length) && (editor.undoManager.add(), editor.execCommand("Delete"), NormalizeLists_normalizeLists(editor.dom, editor.getBody()), !0); }, Delete_setup = function(editor) { editor.onKeyDown.add(function(ed, e) { e.keyCode === VK$1.BACKSPACE ? backspaceDelete(editor, !1) && e.preventDefault() : e.keyCode === VK$1.DELETE && backspaceDelete(editor, !0) && e.preventDefault(); }); }, Delete_backspaceDelete = backspaceDelete, VK = tinymce.VK; tinymce.PluginManager.add("lists", function(editor) { Delete_setup(editor), editor.onInit.add(function() { !function(editor) { editor.onBeforeExecCommand.add(function(ed, cmd, ui, v, o) { var isHandled; if ("indent" === cmd ? Indent_indentSelection(editor) && (isHandled = !0) : "outdent" === cmd && Outdent_outdentSelection(editor) && (isHandled = !0), isHandled) return editor.execCommand(cmd), o.terminate = !0; }), editor.addCommand("InsertUnorderedList", function(ui, detail) { ToggleList_toggleList(editor, "UL", detail); }), editor.addCommand("InsertOrderedList", function(ui, detail) { ToggleList_toggleList(editor, "OL", detail); }), editor.addCommand("InsertDefinitionList", function(ui, detail) { ToggleList_toggleList(editor, "DL", detail); }); }(editor), function(editor) { editor.addQueryStateHandler("InsertUnorderedList", queryListCommandState(editor, "UL")), editor.addQueryStateHandler("InsertOrderedList", queryListCommandState(editor, "OL")), editor.addQueryStateHandler("InsertDefinitionList", queryListCommandState(editor, "DL")); }(editor), editor.getParam("lists_indent_on_tab", !0) && function(editor) { editor.onKeyDown.add(function(ed, e) { 9 !== e.keyCode || VK.metaKeyPressed(e) || editor.dom.getParent(editor.selection.getStart(), "LI,DT,DD") && (e.preventDefault(), (e.shiftKey ? Outdent_outdentSelection : Indent_indentSelection)(editor)); }); }(editor); }); var iconMap = { numlist: "OL", bullist: "UL" }; editor.onNodeChange.add(function(ed, cm, n, collapsed, args) { var lists = tinymce.grep(args.parents, NodeType.isListNode); tinymce.each(iconMap, function(listName, btnName) { cm.setActive(btnName, 0 < lists.length && lists[0].nodeName === listName); }); }), this.backspaceDelete = function(isForward) { return Delete_backspaceDelete(editor, isForward); }; }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/table/plugin.js 0000604 00000226366 15246311477 0022061 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function(tinymce) { var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend, VK = tinymce.VK, TreeWalker = tinymce.dom.TreeWalker, Delay = tinymce.util.Delay; function getSpanVal(td, name) { return parseInt(td.getAttribute(name) || 1, 10); } function TableGrid(table, dom, selection, settings) { var grid, startPos, endPos, selectedCell, gridWidth, maxX, maxY; function cloneNode(node, children) { return (node = node.cloneNode(children)).removeAttribute("id"), node; } function buildGrid() { var startY = 0; grid = [], gridWidth = 0, each([ "thead", "tbody", "tfoot" ], function(part) { var rows = dom.select("> " + part + " tr", table); each(rows, function(tr, y) { y += startY, each(dom.select("> td, > th", tr), function(td, x) { var x2, y2, rowspan, colspan; if (grid[y]) for (;grid[y][x]; ) x++; for (rowspan = getSpanVal(td, "rowspan"), colspan = getSpanVal(td, "colspan"), y2 = y; y2 < y + rowspan; y2++) for (grid[y2] || (grid[y2] = []), x2 = x; x2 < x + colspan; x2++) grid[y2][x2] = { part: part, real: y2 == y && x2 == x, elm: td, rowspan: rowspan, colspan: colspan }; gridWidth = Math.max(gridWidth, x + 1); }); }), startY += rows.length; }); } function getCell(x, y) { y = grid[y]; if (y) return y[x]; } function setSpanVal(td, name, val) { td && (1 === (val = parseInt(val, 10)) ? td.removeAttribute(name, 1) : td.setAttribute(name, val, 1)); } function isCellSelected(cell) { return cell && (dom.hasClass(cell.elm, "mceSelected") || cell == selectedCell); } function getSelectedRows() { var rows = []; return each(table.rows, function(row) { each(row.cells, function(cell) { if (dom.hasClass(cell, "mceSelected") || cell == selectedCell.elm) return rows.push(row), !1; }); }), rows; } function cloneCell(cell) { var formatNode, cloneFormats = {}; return settings.table_clone_elements && (cloneFormats = tinymce.makeMap((settings.table_clone_elements || "strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(), /[ ,]/)), tinymce.walk(cell, function(node) { var curNode; if (3 == node.nodeType) return each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { cloneFormats[node.nodeName] && (node = cloneNode(node, !1), formatNode ? curNode && curNode.appendChild(node) : formatNode = curNode = node, curNode = node); }), curNode && (curNode.innerHTML = '<br data-mce-bogus="1" />'), !1; }, "childNodes"), setSpanVal(cell = cloneNode(cell, !1), "rowSpan", 1), setSpanVal(cell, "colSpan", 1), formatNode ? cell.appendChild(formatNode) : tinymce.isIE && !tinymce.isIE11 || (cell.innerHTML = '<br data-mce-bogus="1" />'), cell; } function cleanup() { var rng = dom.createRng(); each(dom.select("tr", table), function(tr) { 0 == tr.cells.length && dom.remove(tr); }), 0 == dom.select("tr", table).length ? (rng.setStartAfter(table), rng.setEndAfter(table), selection.setRng(rng), dom.remove(table)) : (each(dom.select("thead,tbody,tfoot", table), function(part) { 0 == part.rows.length && dom.remove(part); }), buildGrid(), (rng = grid[Math.min(grid.length - 1, startPos.y)]) && (selection.select(rng[Math.min(rng.length - 1, startPos.x)].elm, !0), selection.collapse(!0))); } function fillLeftDown(x, y, rows, cols) { for (var x2, c, cell, tr = grid[y][x].elm.parentNode, r = 1; r <= rows; r++) if (tr = dom.getNext(tr, "tr")) { for (x2 = x; 0 <= x2; x2--) if ((cell = grid[y + r][x2].elm).parentNode == tr) { for (c = 1; c <= cols; c++) dom.insertAfter(cloneCell(cell), cell); break; } if (-1 == x2) for (c = 1; c <= cols; c++) tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); } } function split() { each(grid, function(row, y) { each(row, function(cell, x) { var colSpan, rowSpan, i; if (isCellSelected(cell) && (colSpan = getSpanVal(cell = cell.elm, "colspan"), rowSpan = getSpanVal(cell, "rowspan"), 1 < colSpan || 1 < rowSpan)) { for (setSpanVal(cell, "rowSpan", 1), setSpanVal(cell, "colSpan", 1), i = 0; i < colSpan - 1; i++) dom.insertAfter(cloneCell(cell), cell); fillLeftDown(x, y, rowSpan - 1, colSpan); } }); }); } function getPos(target) { var pos; return each(grid, function(row, y) { return each(row, function(cell, x) { if (cell.elm == target) return !(pos = { x: x, y: y }); }), !pos; }), pos; } buildGrid(), (selectedCell = dom.getParent(selection.getStart(), "th,td")) && (startPos = getPos(selectedCell), maxX = maxY = 0, each(grid, function(row, y) { each(row, function(cell, x) { var colSpan; isCellSelected(cell) && (cell = grid[y][x], maxX < x && (maxX = x), maxY < y && (maxY = y), cell.real) && (colSpan = cell.colspan - 1, cell = cell.rowspan - 1, colSpan && maxX < x + colSpan && (maxX = x + colSpan), cell) && maxY < y + cell && (maxY = y + cell); }); }), endPos = { x: maxX, y: maxY }, selectedCell = getCell(startPos.x, startPos.y)), tinymce.extend(this, { deleteTable: function() { var rng = dom.createRng(); rng.setStartAfter(table), rng.setEndAfter(table), selection.setRng(rng), dom.remove(table); }, split: split, merge: function(cell, cols, rows) { var startX, endX, x, y, children, count, pos, endY = cell ? (endX = (startX = (pos = getPos(cell)).x) + (cols - 1), (pos = pos.y) + (rows - 1)) : (startPos = endPos = null, each(grid, function(row, y) { each(row, function(cell, x) { isCellSelected(cell) && (startPos = startPos || { x: x, y: y }, endPos = { x: x, y: y }); }); }), startX = startPos.x, pos = startPos.y, endX = endPos.x, endPos.y), startCell = getCell(startX, pos), cols = getCell(endX, endY); if (startCell && cols && startCell.part == cols.part) { for (split(), buildGrid(), setSpanVal(startCell = getCell(startX, pos).elm, "colSpan", endX - startX + 1), setSpanVal(startCell, "rowSpan", endY - pos + 1), y = pos; y <= endY; y++) for (x = startX; x <= endX; x++) grid[y] && grid[y][x] && (cell = grid[y][x].elm) != startCell && (children = tinymce.grep(cell.childNodes), each(children, function(node) { startCell.appendChild(node); }), children.length && (children = tinymce.grep(startCell.childNodes), count = 0, each(children, function(node) { "BR" == node.nodeName && dom.getAttrib(node, "data-mce-bogus") && count++ < children.length - 1 && startCell.removeChild(node); })), dom.remove(cell)); cleanup(); } }, insertRow: function(before) { var posY, cell, lastCell, x, rowElm, newRow, otherCell, rowSpan; for (each(grid, function(row, y) { if (each(row, function(cell, x) { if (isCellSelected(cell) && (cell = cell.elm, rowElm = cell.parentNode, newRow = cloneNode(rowElm, !1), posY = y, before)) return !1; }), before) return !posY; }), x = 0; x < grid[0].length; x++) if (grid[posY][x] && (cell = grid[posY][x].elm) != lastCell) { if (before) { if (0 < posY && grid[posY - 1][x] && 1 < (rowSpan = getSpanVal(otherCell = grid[posY - 1][x].elm, "rowSpan"))) { setSpanVal(otherCell, "rowSpan", rowSpan + 1); continue; } } else if (1 < (rowSpan = getSpanVal(cell, "rowspan"))) { setSpanVal(cell, "rowSpan", rowSpan + 1); continue; } setSpanVal(otherCell = cloneCell(cell), "colSpan", cell.colSpan), newRow.appendChild(otherCell), lastCell = cell; } newRow.hasChildNodes() && (before ? rowElm.parentNode.insertBefore(newRow, rowElm) : dom.insertAfter(newRow, rowElm)); }, insertCol: function(before) { var posX, lastCell; each(grid, function(row, y) { if (each(row, function(cell, x) { if (isCellSelected(cell) && (posX = x, before)) return !1; }), before) return !posX; }), each(grid, function(row, y) { var rowSpan, colSpan; row[posX] && (row = row[posX].elm) != lastCell && (colSpan = getSpanVal(row, "colspan"), rowSpan = getSpanVal(row, "rowspan"), 1 == colSpan ? (before ? row.parentNode.insertBefore(cloneCell(row), row) : dom.insertAfter(cloneCell(row), row), fillLeftDown(posX, y, rowSpan - 1, colSpan)) : getSpanVal(row, "colSpan", row.colSpan), lastCell = row); }); }, deleteCols: function() { var cols = []; each(grid, function(row, y) { each(row, function(cell, x) { isCellSelected(cell) && -1 === tinymce.inArray(cols, x) && (each(grid, function(row) { var row = row[x].elm, colSpan = getSpanVal(row, "colSpan"); 1 < colSpan ? setSpanVal(row, "colSpan", colSpan - 1) : dom.remove(row); }), cols.push(x)); }); }), cleanup(); }, deleteRows: function() { var rows; rows = getSelectedRows(), each(rows.reverse(), function(tr) { !function(tr) { var pos, lastCell; each(tr.cells, function(cell) { var rowSpan = getSpanVal(cell, "rowSpan"); 1 < rowSpan && (setSpanVal(cell, "rowSpan", rowSpan - 1), fillLeftDown((pos = getPos(cell)).x, pos.y, 1, 1)); }), pos = getPos(tr.cells[0]), each(grid[pos.y], function(cell) { var rowSpan; (cell = cell.elm) != lastCell && ((rowSpan = getSpanVal(cell, "rowSpan")) <= 1 ? dom.remove(cell) : setSpanVal(cell, "rowSpan", rowSpan - 1), lastCell = cell); }); }(tr); }), cleanup(); }, cutRows: function() { var rows = getSelectedRows(); return dom.remove(rows), cleanup(), rows; }, copyRows: function() { var rows = getSelectedRows(); return each(rows, function(row, i) { rows[i] = cloneNode(row, !0); }), rows; }, pasteRows: function(rows, before) { var selectedRows, targetRow, targetCellCount; rows && (selectedRows = getSelectedRows(), targetRow = selectedRows[before ? 0 : selectedRows.length - 1], targetCellCount = targetRow.cells.length, each(grid, function(row) { var match; if (targetCellCount = 0, each(row, function(cell, x) { cell.real && (targetCellCount += cell.colspan), cell.elm.parentNode == targetRow && (match = 1); }), match) return !1; }), before || rows.reverse(), each(rows, function(row) { for (var cell, cellCount = row.cells.length, i = 0; i < cellCount; i++) setSpanVal(cell = row.cells[i], "colSpan", 1), setSpanVal(cell, "rowSpan", 1); for (i = cellCount; i < targetCellCount; i++) row.appendChild(cloneCell(row.cells[cellCount - 1])); for (i = targetCellCount; i < cellCount; i++) dom.remove(row.cells[i]); before ? targetRow.parentNode.insertBefore(row, targetRow) : dom.insertAfter(row, targetRow); }), dom.removeClass(dom.select("td.mceSelected,th.mceSelected"), "mceSelected")); }, getPos: getPos, setStartCell: function(cell) { startPos = getPos(cell); }, setEndCell: function(cell) { var colSpan; if (endPos = getPos(cell), startPos && endPos) { for (var endX, endY, startX = Math.min(startPos.x, endPos.x), startY = Math.min(startPos.y, endPos.y), maxX = endX = Math.max(startPos.x, endPos.x), maxY = endY = Math.max(startPos.y, endPos.y), y = startY; y <= maxY; y++) (cell = grid[y][startX]).real || startX - (cell.colspan - 1) < startX && (startX -= cell.colspan - 1); for (var x = startX; x <= maxX; x++) (cell = grid[startY][x]).real || startY - (cell.rowspan - 1) < startY && (startY -= cell.rowspan - 1); for (y = startY; y <= endY; y++) for (x = startX; x <= endX; x++) (cell = grid[y][x]).real && ((colSpan = cell.colspan - 1) && maxX < x + colSpan && (maxX = x + colSpan), colSpan = cell.rowspan - 1) && maxY < y + colSpan && (maxY = y + colSpan); for (dom.removeClass(dom.select("td.mceSelected,th.mceSelected"), "mceSelected"), y = startY; y <= maxY; y++) for (x = startX; x <= maxX; x++) grid[y][x] && dom.addClass(grid[y][x].elm, "mceSelected"); } }, moveRelIdx: function(cellElm, delta) { var cell, pos = getPos(cellElm), index = pos.y * gridWidth + pos.x; do { if (!(cell = getCell((index += delta) % gridWidth, Math.floor(index / gridWidth)))) break; if (cell.elm != cellElm) return selection.select(cell.elm, !0), dom.isEmpty(cell.elm) && selection.collapse(!0), !0; } while (cell.elm == cellElm); return !1; }, refresh: buildGrid }); } function updateCells(ed, data) { var elm = ed.selection.getStart(), tdElm = ed.dom.getParent(elm, "td,th"), elm = ed.dom.getParent(elm, "table"), elm = ed.dom.select("td.mceSelected,th.mceSelected", elm); elm.length || elm.push(tdElm), each(elm, function(td) { !function(ed, td, data) { var doc = ed.getDoc(), curCellType = td.nodeName.toLowerCase(); if (ed.dom.setAttrib(td, "style", data.style), ed.dom.setAttrib(td, "class", data.class), curCellType != data.celltype) { for (var newCell = doc.createElement(data.celltype), c = 0; c < td.childNodes.length; c++) newCell.appendChild(td.childNodes[c].cloneNode(1)); for (var a = 0; a < td.attributes.length; a++) ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name)); td.parentNode.replaceChild(newCell, td), td = newCell; } }(ed, td, data); }), ed.addVisual(), ed.nodeChanged(), ed.undoManager.add(); } function updateRows(ed, data) { var dom = ed.dom, trElm = dom.getParent(ed.selection.getStart(), "tr"), tableElm = dom.getParent(ed.selection.getStart(), "table"), rows = []; dom.select("td.mceSelected,th.mceSelected", trElm).length ? (data.skip_parent = !0, each(tableElm.rows, function(tr) { for (var i = 0; i < tr.cells.length; i++) if (dom.hasClass(tr.cells[i], "mceSelected")) return void rows.push(tr); })) : rows.push(trElm), each(rows, function(tr) { !function(ed, tr, data) { var dom = ed.dom, doc = ed.getDoc(), curRowType = tr.parentNode.nodeName.toLowerCase(), rowtype = data.rowtype; if ((rows = dom.getParent(ed.selection.getStart(), "table").rows).length || rows.push(tr), dom.setAttrib(tr, "style", data.style), dom.setAttrib(tr, "class", data.class), curRowType != rowtype && !data.skip_parent) { for (var rows = tr.cloneNode(1), theTable = dom.getParent(tr, "table"), dest = rowtype, newParent = null, i = 0; i < theTable.childNodes.length; i++) theTable.childNodes[i].nodeName.toLowerCase() == dest && (newParent = theTable.childNodes[i]); null == newParent && (newParent = doc.createElement(dest), "thead" == dest ? "CAPTION" == theTable.firstChild.nodeName ? ed.dom.insertAfter(newParent, theTable.firstChild) : theTable.insertBefore(newParent, theTable.firstChild) : theTable.appendChild(newParent)), newParent.appendChild(rows), tr.parentNode.removeChild(tr); curRowType = ed.dom.select("td", tr = rows); each(curRowType, function(cell) { ed.dom.rename(cell, "th"); }); } }(ed, tr, data); }), ed.addVisual(), ed.nodeChanged(), ed.undoManager.add(); } function insertTableHtml(ed, tableHtml) { var patt; ed.settings.fix_table_elements ? (patt = "", ed.focus(), ed.selection.setContent('<br class="_mce_marker" />'), tinymce.each("h1,h2,h3,h4,h5,h6,p".split(","), function(n) { patt && (patt += ","), patt += n + " ._mce_marker"; }), each(ed.dom.select(patt), function(n) { ed.dom.split(ed.dom.getParent(n, "h1,h2,h3,h4,h5,h6,p"), n); }), ed.dom.setOuterHTML(ed.dom.select("br._mce_marker")[0], tableHtml)) : ed.execCommand("mceInsertContent", !1, tableHtml); } tinymce.PluginManager.add("table", function(ed, url) { var winMan, clipboardRows, hasCellSelection = !0; function createTableGrid(node) { var selection = ed.selection, node = ed.dom.getParent(node || selection.getNode(), "table"); if (node) return new TableGrid(node, ed.dom, selection, ed.settings); } function cleanup(force) { ed.getBody().style.webkitUserSelect = "", (force || hasCellSelection) && (ed.dom.removeClass(ed.dom.select("td.mceSelected,th.mceSelected"), "mceSelected"), hasCellSelection = !1); } ed.addButton("table", "table.desc", "mceInsertTable", !0), ed.getParam("table_buttons", 1) && each([ [ "table", "table.desc", "mceInsertTable", !0 ], [ "delete_table", "table.del", "mceTableDelete" ], [ "delete_col", "table.delete_col_desc", "mceTableDeleteCol" ], [ "delete_row", "table.delete_row_desc", "mceTableDeleteRow" ], [ "col_after", "table.col_after_desc", "mceTableInsertColAfter" ], [ "col_before", "table.col_before_desc", "mceTableInsertColBefore" ], [ "row_after", "table.row_after_desc", "mceTableInsertRowAfter" ], [ "row_before", "table.row_before_desc", "mceTableInsertRowBefore" ], [ "row_props", "table.row_desc", "mceTableRowProps", !0 ], [ "cell_props", "table.cell_desc", "mceTableCellProps", !0 ], [ "split_cells", "table.split_cells_desc", "mceTableSplitCells", !0 ], [ "merge_cells", "table.merge_cells_desc", "mceTableMergeCells", !0 ] ], function(c) { ed.addButton(c[0], { title: c[1], cmd: c[2], ui: c[3] }); }), ed.onPreInit.add(function() { var basic_dialog, isMobile; ed.onSetContent.add(function(ed, e) { cleanup(!0), ed.onSetContent.add(function(ed, e) { cleanup(!0), each(ed.dom.select("table"), function(table) { ed.dom.addClass(table, "mce-item-table"), each(ed.dom.select("td,th", table), function(cell) { cell.hasChildNodes() || (cell.innerHTML = '<br data-mce-bogus="1" />'); }); }); }); }), ed.onPastePostProcess.add(function(ed, args) { var dom = ed.dom; dom.addClass(dom.select("table", args.node), "mce-item-table"), each(dom.select("td[valign]", args.node), function(elm) { dom.setStyle(elm, "vertical-align", elm.getAttribute("valign")), elm.removeAttribute("valign"); }); }), !1 !== ed.settings.table_merge_content_on_paste && ed.onPasteBeforeInsert.add(function(ed, o) { var table, dom = ed.dom, elm = o.node; (elm = o.internal && !elm ? ed.dom.create("div", {}, o.content) : elm) && (table = elm.firstChild) && "TABLE" === table.nodeName && 1 === elm.childNodes.length && (elm = ed.selection.getNode(), dom = dom.getParent(elm, "td,th")) && function(ed, startCell, table) { for (var dom = ed.dom, existingTable = dom.getParent(startCell, "table"), startRowIndex = startCell.parentNode.rowIndex, startColIndex = Array.prototype.indexOf.call(startCell.parentNode.cells, startCell), maxCellsInNewContent = 0, i = 0; i < table.rows.length; i++) maxCellsInNewContent = Math.max(maxCellsInNewContent, table.rows[i].cells.length); var requiredCellCount = startColIndex + maxCellsInNewContent, extraCellsNeeded = 0; for ((ed = existingTable.rows[startRowIndex]) && (extraCellsNeeded = Math.max(0, requiredCellCount - ed.cells.length)), i = 0; i < existingTable.rows.length; i++) { var currentRow = existingTable.rows[i]; if ("THEAD" !== currentRow.parentNode.tagName && "TH" !== currentRow.cells[0].tagName) for (var j = 0; j < extraCellsNeeded; j++) currentRow.insertCell(-1).innerHTML = '<br data-mce-bogus="1" />'; } 0 < extraCellsNeeded && existingTable.querySelectorAll("thead > tr").forEach(function(headerRow) { for (var i = 0; i < extraCellsNeeded; i++) { var newCell = dom.create("th"); newCell.innerHTML = '<br data-mce-bogus="1" />', headerRow.appendChild(newCell); } }); for (var totalRowsNeeded = startRowIndex + table.rows.length; existingTable.rows.length < totalRowsNeeded; ) for (var newRow = existingTable.insertRow(-1), i = 0; i < requiredCellCount; i++) newRow.insertCell(-1).innerHTML = '<br data-mce-bogus="1" />'; for (i = 0; i < table.rows.length; i++) for (currentRow = existingTable.rows[startRowIndex + i] || existingTable.insertRow(startRowIndex + i), j = 0; j < table.rows[i].cells.length; j++) { for (var targetCellIndex = startColIndex + j; currentRow.cells.length <= targetCellIndex; ) currentRow.insertCell(-1).innerHTML = '<br data-mce-bogus="1" />'; var cell = table.rows[i].cells[j]; "" === cell.innerHTML.trim() && (cell.innerHTML = '<br data-mce-bogus="1" />'), currentRow.cells[targetCellIndex].innerHTML = cell.innerHTML; } return 1; }(ed, dom, table) && (o.terminate = !0, ed.undoManager.add()); }), ed.onGetContent.add(function(ed, o) { var rows, sel; (o.selection || o.contextual) && (sel = ed.selection, sel = ed.dom.getParent(sel.getStart(), "table")) && (rows = [], each(sel.rows, function(row) { var cells = []; each(row.cells, function(cell) { ed.dom.hasClass(cell, "mceSelected") && cells.push(cell); }), cells.length && (cells.length === row.cells.length ? rows.push(row) : rows.push(cells)); }), rows.length) && (rows.length === sel.rows.length ? (sel = sel.cloneNode(!0), ed.dom.removeClass(ed.dom.select("td.mceSelected,th.mceSelected", sel), "mceSelected"), o.content = sel.outerHTML) : (sel = rows.map(function(row) { return "<tr>" + row.map(function(cell) { cell = cell.cloneNode(!0); return ed.dom.removeClass(cell, "mceSelected"), cell.outerHTML; }).join("") + "</tr>"; }), o.content = "<table>" + sel.join("") + "</table>")); }), basic_dialog = ed.getParam("table_basic_dialog"), isMobile = window.matchMedia("(max-width: 600px)").matches, (basic_dialog || isMobile) && (function(ed) { var cm = ed.controlManager, form = cm.createForm("table_form"), colsCtrl = cm.createTextBox("table_cols", { label: ed.getLang("table.cols", "Columns"), name: "cols", subtype: "number", attributes: { step: 1, min: 1 }, value: ed.getParam("table_default_cols", 2) }), rowCtrl = (form.add(colsCtrl), cm.createTextBox("table_rows", { label: ed.getLang("table.rows", "Rows"), name: "rows", subtype: "number", attributes: { step: 1, min: 1 }, value: ed.getParam("table_default_rows", 2) })), cellspacingCtrl = (form.add(rowCtrl), cm.createTextBox("table_cellspacing", { label: ed.getLang("table.cellspacing", "Cell Spacing"), name: "cellspacing", subtype: "number", attributes: { step: 1, min: 1 }, value: ed.getParam("table_default_cellspacing", "") })), cellspacingCtrl = (form.add(cellspacingCtrl), cm.createTextBox("table_cellpadding", { label: ed.getLang("table.cellpadding", "Cell Padding"), name: "cellpadding", subtype: "number", attributes: { step: 1, min: 1 }, value: ed.getParam("table_default_cellpadding", "") })), cellspacingCtrl = (form.add(cellspacingCtrl), cm.createTextBox("table_width", { label: ed.getLang("table.width", "Width"), name: "width", value: ed.getParam("table_default_width", "") })), cellspacingCtrl = (form.add(cellspacingCtrl), cm.createTextBox("table_height", { label: ed.getLang("table.height", "Height"), name: "height", value: ed.getParam("table_default_height", "") })), cellspacingCtrl = (form.add(cellspacingCtrl), cm.createStylesBox("table_classes", { label: ed.getLang("table.classes", "Classes"), onselect: function(v) {}, name: "classes", styles: ed.getParam("table_classes_custom", []) })), cellspacingCtrl = (form.add(cellspacingCtrl), cm.createCheckBox("table_caption", { label: ed.getLang("table.caption", "Caption"), name: "caption" })); function setValue(key, value) { key = cm.get(ed.id + "_table_" + key); key && key.value(value); } form.add(cellspacingCtrl), ed.addCommand("mceInsertTable", function() { ed.windowManager.open({ title: ed.getLang("table.desc", "Table"), items: [ form ], size: "mce-modal-landscape-small", open: function() { var label = ed.getLang("insert", "Insert"), elm = ed.dom.getParent(ed.selection.getNode(), "table"), classes = ed.getParam("table_classes", ""); if (classes.trim().split(" ").filter(function(cls) { return "" !== cls.trim(); }), elm) { for (var label = ed.getLang("update", "Update"), rowsAr = elm.rows, rows = rowsAr.length, cols = 0, i = 0; i < rows; i++) rowsAr[i].cells.length > cols && (cols = rowsAr[i].cells.length); setValue("caption", 0 < elm.getElementsByTagName("caption").length), rowCtrl.setDisabled(!0), colsCtrl.setDisabled(!0), setValue("cellspacing", elm.cellSpacing || ""), setValue("cellpadding", elm.cellPadding || ""); var styles = ed.dom.parseStyle(ed.dom.getAttrib(elm, "style")), width = styles.width || elm.width || "", styles = styles.height || elm.height || ""; width = width.replace("px", ""), styles = styles.replace("px", ""), setValue("width", width), setValue("height", styles), classes = (classes = ed.dom.getAttrib(elm, "class")).replace(/mce-[\w\-]+/g, "").replace(/\s+/g, " ").trim().split(" ").filter(function(cls) { return "" !== cls.trim(); }); } setValue("classes", classes), DOM.setHTML(this.id + "_insert", label); }, buttons: [ { title: ed.getLang("common.cancel", "Cancel"), id: "cancel" }, { title: ed.getLang("insert", "Insert"), id: "insert", onsubmit: function(e) { var data = form.submit(), args = (data.width && !isNaN(data.width) && (data.width += "px"), data.height && !isNaN(data.height) && (data.height += "px"), { cellspacing: data.cellspacing, cellpadding: data.cellpadding, style: { width: data.width, height: data.height }, class: data.classes }), elm = ed.dom.getParent(ed.selection.getNode(), "table"); if (elm) { var styles = ed.dom.parseStyle(ed.dom.getAttrib(elm, "style")); extend(styles, args.style), args.style = ed.dom.serializeStyle(styles), ed.dom.setAttribs(elm, args), data.caption ? elm.getElementsByTagName("caption").length || ((styles = elm.ownerDocument.createElement("caption")).innerHTML = '<br data-mce-bogus="1"/>', elm.insertBefore(styles, elm.firstChild)) : (styles = elm.getElementsByTagName("caption")).length && elm.removeChild(styles[0]); } else { var html = ""; data.caption && (html += '<caption><br data-mce-bogus="1" /></caption>'); for (var y = 0; y < data.rows; y++) { html += "<tr>"; for (var x = 0; x < data.cols; x++) html += "<td> </td>"; html += "</tr>"; } args.style = ed.dom.serializeStyle(args.style); elm = ed.dom.createHTML("table", args, html); insertTableHtml(ed, elm); } ed.addVisual(), Event.cancel(e); }, classes: "primary", scope: self } ] }); }); }(ed), function(ed) { var cm = ed.controlManager, form = cm.createForm("table_row_form"), rowtypeCtrl = cm.createListBox("table_row_type", { label: ed.getLang("table.rowtype", "Row Type"), name: "rowtype", onselect: function() {} }), items = [ { title: ed.getLang("table.thead", "Header"), value: "thead" }, { title: ed.getLang("table.tbody", "Body"), value: "tbody" }, { title: ed.getLang("table.tfoot", "Footer"), value: "tfoot" } ], heightCtrl = (each(items, function(item) { rowtypeCtrl.add(item.title, item.value); }), form.add(rowtypeCtrl), cm.createTextBox("table_row_height", { label: ed.getLang("table.height", "Height"), name: "height" })), stylesList = (form.add(heightCtrl), cm.createStylesBox("table_row_classes", { label: ed.getLang("table.classes", "Classes"), onselect: function(v) {}, name: "classes", styles: ed.getParam("table_classes_custom", []) })); form.add(stylesList), ed.addCommand("mceTableRowProps", function() { ed.windowManager.open({ title: ed.getLang("table.row_desc", "Table Rows"), items: [ form ], size: "mce-modal-landscape-small", open: function() { var label = ed.getLang("insert", "Insert"), elm = ed.dom.getParent(ed.selection.getStart(), "tr"), rowtype = elm.parentNode.nodeName.toLowerCase(), height = ""; elm && (label = ed.getLang("update", "Update"), height = elm.style.height || elm.height || ""), -1 !== height.indexOf("px") && (height = height.replace("px", "")), heightCtrl.value(height), rowtypeCtrl.value(rowtype); height = (height = ed.dom.getAttrib(elm, "class")).replace(/mce-[\w\-]+/g, "").replace(/\s+/g, " ").trim().split(" ").filter(function(cls) { return "" !== cls.trim(); }); stylesList.value(height), DOM.setHTML(this.id + "_insert", label); }, buttons: [ { title: ed.getLang("common.cancel", "Cancel"), id: "cancel" }, { title: ed.getLang("insert", "Insert"), id: "insert", onsubmit: function(e) { var data = form.submit(), elm = ed.dom.getParent(ed.selection.getStart(), "tr"), selected = ed.dom.select("td.mceSelected,th.mceSelected", elm), selected = (data.action = selected.length ? "all" : "insert", data.style = ed.dom.parseStyle(ed.dom.getAttrib(elm, "style")), data.height && !isNaN(data.height) && (data.height += "px"), data.style.height = data.height, { style: ed.dom.serializeStyle(data.style), rowtype: data.rowtype, action: data.action, class: data.classes }); updateRows(ed, selected), Event.cancel(e); }, classes: "primary", scope: self } ] }); }); }(ed), function(ed) { var cm = ed.controlManager, form = cm.createForm("table_cell_form"), celltypeCtrl = cm.createListBox("table_cell_type", { label: ed.getLang("table.celltype", "Cell Type"), name: "celltype", onselect: function() {} }), items = [ { title: ed.getLang("table.th", "Header"), value: "th" }, { title: ed.getLang("table.td", "Data"), value: "td" } ], widthCtrl = (each(items, function(item) { celltypeCtrl.add(item.title, item.value); }), form.add(celltypeCtrl), cm.createTextBox("table_cell_width", { label: ed.getLang("table.width", "Width"), name: "width" })), heightCtrl = (form.add(widthCtrl), cm.createTextBox("table_cell_height", { label: ed.getLang("table.height", "Height"), name: "height" })), stylesList = (form.add(heightCtrl), cm.createStylesBox("table_cell_classes", { label: ed.getLang("table.classes", "Classes"), onselect: function(v) {}, name: "classes", styles: ed.getParam("table_classes_custom", []) })); form.add(stylesList), ed.addCommand("mceTableCellProps", function() { ed.windowManager.open({ title: ed.getLang("table.row_desc", "Table Cells"), items: [ form ], size: "mce-modal-landscape-small", open: function() { var label = ed.getLang("insert", "Insert"), elm = ed.dom.getParent(ed.selection.getStart(), "td,th"), celltype = elm.nodeName.toLowerCase(), width = "", height = ""; elm && (label = ed.getLang("update", "Update"), width = elm.width || "", height = elm.height || "", width = (styles = ed.dom.parseStyle(ed.dom.getAttrib(elm, "style"))).width || "", height = styles.height || ""), width = width.replace("px", ""), height = height.replace("px", ""), widthCtrl.value(width), heightCtrl.value(height), celltypeCtrl.value(celltype); var styles = (styles = ed.dom.getAttrib(elm, "class")).replace(/mce-[\w\-]+/g, "").replace(/\s+/g, " ").trim().split(" ").filter(function(cls) { return "" !== cls.trim(); }); stylesList.value(styles), DOM.setHTML(this.id + "_insert", label); }, buttons: [ { title: ed.getLang("common.cancel", "Cancel"), id: "cancel" }, { title: ed.getLang("insert", "Insert"), id: "insert", onsubmit: function(e) { var data = form.submit(), elm = ed.dom.getParent(ed.selection.getStart(), "tr"), elm = (data.style = ed.dom.parseStyle(ed.dom.getAttrib(elm, "style")), data.width && !isNaN(data.width) && (data.width += "px"), data.height && !isNaN(data.height) && (data.height += "px"), data.style.width = data.width, data.style.height = data.height, { style: ed.dom.serializeStyle(data.style), celltype: data.celltype, class: data.classes }); updateCells(ed, elm), Event.cancel(e); }, classes: "primary", scope: self } ] }); }); }(ed)), function(ed) { var cm = ed.controlManager, form = cm.createForm("table_merge_form"), colsCtrl = cm.createTextBox("table_merge_cols", { label: ed.getLang("table.cols", "Columns"), name: "cols", subtype: "number", value: 1 }), rowsCtrl = (form.add(colsCtrl), cm.createTextBox("table_merge_rows", { label: ed.getLang("table.rows", "Rows"), name: "rows", subtype: "number", value: 1 })); form.add(rowsCtrl), ed.addCommand("mceTableMergeCells", function() { var grid = createTableGrid(); ed.dom.select("td.mceSelected,th.mceSelected").length ? (grid.merge(), ed.execCommand("mceRepaint"), cleanup()) : ed.windowManager.open({ title: ed.getLang("table.merge_cells_desc", "Merge Cells"), items: [ form ], size: "mce-modal-landscape-small", open: function() { var cell = ed.dom.getParent(ed.selection.getNode(), "th,td"), rowSpan = 1, colSpan = 1; cell && (rowSpan = cell.rowSpan, colSpan = cell.colSpan), colsCtrl.value(colSpan), rowsCtrl.value(rowSpan); }, buttons: [ { title: ed.getLang("common.cancel", "Cancel"), id: "cancel" }, { title: ed.getLang("update", "Update"), id: "insert", onsubmit: function(e) { var data = form.submit(), grid = createTableGrid(), node = ed.selection.getNode(), node = ed.dom.getParent(node, "th,td"); grid.merge(node, data.cols, data.rows), ed.execCommand("mceRepaint"), cleanup(), Event.cancel(e); }, classes: "primary", scope: self } ] }); }); }(ed); }), ed.onPreProcess.add(function(ed, args) { var nodes, i, node, value, dom = ed.dom; if ("html4" === ed.settings.schema) for (i = (nodes = dom.select("table,td,th,tr", args.node)).length; i--; ) { node = nodes[i], dom.setAttrib(node, "data-mce-style", ""), "auto" === dom.getStyle(node, "margin-left") && "auto" === dom.getStyle(node, "margin-right") && (dom.setAttrib(node, "align", "center"), dom.setStyles(node, { "margin-left": "", "margin-right": "" })); var flt = dom.getStyle(node, "float"), flt = ("left" !== flt && "right" !== flt || (dom.setAttrib(node, "align", flt), dom.setStyle(node, "float", "")), dom.getStyle(node, "text-align")); flt && (dom.setAttrib(node, "align", flt), dom.setStyle(node, "text-align", "")); } for (i = (nodes = dom.select("table, td, th", args.node)).length; i--; ) node = nodes[i], (value = dom.getAttrib(node, "width")) && (dom.setStyle(node, "width", value), dom.setAttrib(node, "width", "")), (value = dom.getAttrib(node, "height")) && (dom.setStyle(node, "height", value), dom.setAttrib(node, "height", "")); }), ed.onNodeChange.add(function(ed, cm, n) { var p; n = ed.selection.getStart(), p = ed.dom.getParent(n, "td,th,caption"), cm.setActive("table", "TABLE" === n.nodeName || !!p), p && "CAPTION" === p.nodeName && (p = 0), ed.getParam("table_buttons", 1) && (cm.setDisabled("delete_table", !p), cm.setDisabled("delete_col", !p), cm.setDisabled("delete_table", !p), cm.setDisabled("delete_row", !p), cm.setDisabled("col_after", !p), cm.setDisabled("col_before", !p), cm.setDisabled("row_after", !p), cm.setDisabled("row_before", !p), cm.setDisabled("row_props", !p), cm.setDisabled("cell_props", !p), cm.setDisabled("split_cells", !p), cm.setDisabled("merge_cells", !p), cm.setDisabled("table_props", !p)); }), ed.onClick.add(function(ed, e) { var n = e.target; "TABLE" == (n = e.altKey && ed.dom.is(n, "td,th,caption") ? ed.dom.getParent(n, "table") : n).nodeName && (ed.selection.select(n), ed.nodeChanged()); }), ed.onInit.add(function(ed) { var tableGrid, getSingleChildNode, isTextNode, startCell, startTable, lastMouseOverTarget, dom = ed.dom; function isCellInTable(table, cell) { return table && cell && table === dom.getParent(cell, "table"); } function moveWebKitSelection() { function eventHandler(e) { var preBrowserNode, node, key = e.keyCode; function handle(upBool, sourceNode) { var siblingDirection = upBool ? "previousSibling" : "nextSibling", currentRow = ed.dom.getParent(sourceNode, "tr"), siblingRow = currentRow[siblingDirection]; if (siblingRow) return moveCursorToRow(ed, sourceNode, siblingRow, upBool), e.preventDefault(), !0; var siblingRow = ed.dom.getParent(currentRow, "table"), middleNode = currentRow.parentNode, parentNodeName = middleNode.nodeName.toLowerCase(); if ("tbody" === parentNodeName || parentNodeName === (upBool ? "tfoot" : "thead")) { parentNodeName = function(upBool, topNode, secondNode, nodeName) { var nodeName = ed.dom.select(">" + nodeName, topNode), position = nodeName.indexOf(secondNode); { if (upBool && 0 === position || !upBool && position === nodeName.length - 1) return function(upBool, parent) { upBool = upBool ? "thead" : "tfoot", upBool = ed.dom.select(">" + upBool, parent); return 0 !== upBool.length ? upBool[0] : null; }(upBool, topNode); if (-1 === position) return topNode = "thead" === secondNode.tagName.toLowerCase() ? 0 : nodeName.length - 1, nodeName[topNode]; } return nodeName[position + (upBool ? -1 : 1)]; }(upBool, siblingRow, middleNode, "tbody"); if (null !== parentNodeName) return function(upBool, targetParent, sourceNode) { targetParent = getChildForDirection(targetParent, upBool); targetParent && moveCursorToRow(ed, sourceNode, targetParent, upBool); return e.preventDefault(), !0; }(upBool, parentNodeName, sourceNode); } return function(upBool, currentRow, siblingDirection, table) { siblingDirection = table[siblingDirection]; if (siblingDirection) return moveCursorToStartOfElement(siblingDirection), !0; siblingDirection = ed.dom.getParent(table, "td,th"); if (siblingDirection) return handle(upBool, siblingDirection); return moveCursorToStartOfElement(getChildForDirection(currentRow, !upBool)), e.preventDefault(), !1; }(upBool, currentRow, siblingDirection, siblingRow); } function getChildForDirection(parent, up) { parent = parent && parent[up ? "lastChild" : "firstChild"]; return parent && "BR" === parent.nodeName ? ed.dom.getParent(parent, "td,th") : parent; } function moveCursorToStartOfElement(n) { ed.selection.setCursorLocation(n, 0); } function moveCursorToRow(ed, node, row, upBool) { ed = function(rowElement, columnIndex) { var c = 0, r = 0; return each(rowElement.children, function(cell, i) { if (c += getSpanVal(cell, "colspan"), r = i, columnIndex < c) return !1; }), r; }(row, function(column) { for (var colIndex = 0, c = column; c.previousSibling; ) colIndex += getSpanVal(c = c.previousSibling, "colspan"); return colIndex; }(ed.dom.getParent(node, "td,th"))), node = row.childNodes[ed]; moveCursorToStartOfElement(getChildForDirection(node, upBool) || node); } function shouldFixCaret(preBrowserNode) { var newNode = ed.selection.getNode(), newNode = ed.dom.getParent(newNode, "td,th"), preBrowserNode = ed.dom.getParent(preBrowserNode, "td,th"); return newNode && newNode !== preBrowserNode && (preBrowserNode = preBrowserNode, ed.dom.getParent(newNode, "TABLE") === ed.dom.getParent(preBrowserNode, "TABLE")); } key != VK.UP && key != VK.DOWN || (node = ed.selection.getNode(), null === ed.dom.getParent(node, "tr")) || (preBrowserNode = ed.selection.getNode(), Delay.setEditorTimeout(ed, function() { shouldFixCaret(preBrowserNode) && handle(!e.shiftKey && key === VK.UP, preBrowserNode); }, 0)); } ed.onKeyDown.add(function(e) { eventHandler(e); }); } function fixBeforeTableCaretBug() { ed.onKeyDown.add(function(e) { var rng, table, dom = ed.dom; (37 == e.keyCode || 38 == e.keyCode) && (rng = ed.selection.getRng(), table = dom.getParent(rng.startContainer, "table")) && ed.getBody().firstChild == table && function(rng, par) { var doc = par.ownerDocument, rng2 = doc.createRange(); return rng2.setStartBefore(par), rng2.setEnd(rng.endContainer, rng.endOffset), (par = doc.createElement("body")).appendChild(rng2.cloneContents()), 0 === par.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, "-").replace(/<[^>]+>/g, "").length; }(rng, table) && ((rng = dom.createRng()).setStartBefore(table), rng.setEndBefore(table), ed.selection.setRng(rng), e.preventDefault()); }); } function fixTableCaretPos() { ed.dom.bind("KeyDown SetContent VisualAid", function() { for (var last = ed.getBody().lastChild; last; last = last.previousSibling) if (3 == last.nodeType) { if (0 < last.nodeValue.length) break; } else if (1 == last.nodeType && ("BR" == last.tagName || !last.getAttribute("data-mce-bogus"))) break; last && "TABLE" == last.nodeName && (ed.settings.forced_root_block ? ed.dom.add(ed.getBody(), ed.settings.forced_root_block, ed.settings.forced_root_block_attrs, '<br data-mce-bogus="1" />') : ed.dom.add(ed.getBody(), "br", { "data-mce-bogus": "1" })); }), ed.onPreProcess.add(function(ed, o) { o = o.node.lastChild; o && ("BR" == o.nodeName || 1 == o.childNodes.length && ("BR" == o.firstChild.nodeName || "\xa0" == o.firstChild.nodeValue)) && o.previousSibling && "TABLE" == o.previousSibling.nodeName && ed.dom.remove(o); }); } function fixTableCellSelection() { function fixSelection() { var rng = ed.selection.getRng(), n = ed.selection.getNode(), currentCell = ed.dom.getParent(rng.startContainer, "TD,TH"); if (function(ed, rng, n, currentCell) { var tableParent; return (ed = ed.dom.getParent(rng.startContainer, "TABLE")) && (tableParent = ed.parentNode), ed = 3 == rng.startContainer.nodeType && 0 === rng.startOffset && 0 === rng.endOffset && currentCell && ("TR" == n.nodeName || n == tableParent), rng = ("TD" == n.nodeName || "TH" == n.nodeName) && !currentCell, ed || rng; }(ed, rng, n, currentCell)) { for (var end = (currentCell = currentCell || n).lastChild; end.lastChild; ) end = end.lastChild; 3 == end.nodeType && (rng.setEnd(end, end.data.length), ed.selection.setRng(rng)); } } ed.onKeyDown.add(function() { fixSelection(); }), ed.onMouseDown.add(function(e) { 2 != e.button && fixSelection(); }); } function placeCaretInCell(cell) { ed.selection.select(cell, !0), ed.selection.collapse(!0); } function clearCell(cell) { ed.dom.empty(cell), function(cell) { cell.hasChildNodes() || (cell.innerHTML = '<br data-mce-bogus="1" />'); }(cell); } function restoreCaretPlaceholder(node, insertCaret) { var rng = ed.selection.getRng(), caretNode = node.ownerDocument.createTextNode("\xa0"); rng.startOffset ? node.insertBefore(caretNode, node.firstChild) : node.appendChild(caretNode), insertCaret && (ed.selection.select(caretNode, !0), ed.selection.collapse(!0)); } function getSingleChr(node) { return node = getSingleChildNode(node), isTextNode(node) && 1 === node.data.length ? node.data : null; } function isEmptyNode(node) { return ed.dom.isEmpty(node) || "\xa0" === getSingleChr(node); } winMan = ed.windowManager, "html4" === ed.settings.schema && tinymce.each("left,center,right,full".split(","), function(name) { var fmts = ed.formatter.get("align" + name); tinymce.each(fmts, function(fmt) { fmt.onformat = function(elm, fmt) { /^(TABLE|TH|TD|TR)$/.test(elm.nodeName) && ("full" === name && (name = "justify"), ed.dom.setAttrib(elm, "align", name)); }; }); }), ed.onKeyUp.add(function(ed, e) { cleanup(); }), ed.onKeyDown.add(function(e) { var selectedTableCells, cell, table; e.keyCode != VK.DELETE && e.keyCode != VK.BACKSPACE || e.isDefaultPrevented() || (table = ed.dom.getParent(ed.selection.getStart(), "table")) && (table = ed.dom.select("td,th", table), 0 === (selectedTableCells = tinymce.grep(table, function(cell) { return !!ed.dom.getAttrib(cell, "data-mce-selected"); })).length ? (cell = ed.dom.getParent(ed.selection.getStart(), "td,th"), ed.selection.isCollapsed() && cell && ed.dom.isEmpty(cell) && (e.preventDefault(), clearCell(cell), placeCaretInCell(cell))) : (e.preventDefault(), ed.undoManager.add(), table.length == selectedTableCells.length ? ed.execCommand("mceTableDelete") : (tinymce.each(selectedTableCells, clearCell), placeCaretInCell(selectedTableCells[0])))); }), getSingleChildNode = function(node) { return node.firstChild === node.lastChild && node.firstChild; }, isTextNode = function(node) { return node && 3 === node.nodeType; }, ed.onKeyDown.add(function(e) { var container, node; (function(e) { return (e.keyCode == VK.DELETE || e.keyCode == VK.BACKSPACE) && !e.isDefaultPrevented(); })(e) && (container = ed.dom.getParent(ed.selection.getStart(), "caption"), node = container) && "CAPTION" == node.nodeName && "TABLE" == node.parentNode.nodeName && (tinymce.isIE && (ed.selection.isCollapsed() ? function(node) { var childNode = getSingleChildNode(node), node = getSingleChr(node); return childNode && !isTextNode(childNode) || node && !("\xa0" === node); }(container) && restoreCaretPlaceholder(container) : (ed.undoManager.add(), ed.execCommand("Delete"), isEmptyNode(container) && restoreCaretPlaceholder(container, !0), e.preventDefault())), isEmptyNode(container)) && e.preventDefault(); }), ed.onMouseDown.add(function(ed, e) { 2 != e.button && (cleanup(), startCell = dom.getParent(e.target, "td,th"), startTable = dom.getParent(startCell, "table")); }), dom.bind(ed.getDoc(), "mouseover", function(e) { var currentCell, target = e.target; if (target !== lastMouseOverTarget && (lastMouseOverTarget = target, startTable) && startCell && (currentCell = dom.getParent(target, "td,th"), isCellInTable(startTable, currentCell) || (currentCell = dom.getParent(startTable, "td,th")), startCell !== currentCell || hasCellSelection) && isCellInTable(startTable, currentCell)) { e.preventDefault(), tableGrid || ((tableGrid = createTableGrid(startTable)).setStartCell(startCell), ed.getBody().style.webkitUserSelect = "none"), tableGrid.setEndCell(currentCell), hasCellSelection = !0, target = ed.selection.getSel(); try { target.removeAllRanges ? target.removeAllRanges() : target.empty(); } catch (ex) {} } }), ed.onMouseUp.add(function() { var selectedCells, walker, lastNode, sel = ed.selection; function setPoint(node, start) { var walker = new TreeWalker(node, node); do { if (3 == node.nodeType) return void (start ? rng.setStart(node, 0) : rng.setEnd(node, node.nodeValue.length)); if ("BR" == node.nodeName) return void (start ? rng.setStartBefore(node) : rng.setEndBefore(node)); } while (node = start ? walker.next() : walker.prev()); } if (startCell) { if (tableGrid && (ed.getBody().style.webkitUserSelect = ""), 0 < (selectedCells = dom.select("td.mceSelected,th.mceSelected")).length) { var parent = dom.getParent(selectedCells[0], "table"), rng = dom.createRng(), node = selectedCells[0]; rng.setStartBefore(node), rng.setEndAfter(node), setPoint(node, 1), walker = new TreeWalker(node, parent); do { if ("TD" == node.nodeName || "TH" == node.nodeName) { if (!dom.hasClass(node, "mceSelected")) break; lastNode = node; } } while (node = walker.next()); setPoint(lastNode), sel.setRng(rng); } ed.nodeChanged(), startCell = tableGrid = startTable = lastMouseOverTarget = null; } }), tinymce.isWebKit && (moveWebKitSelection(), fixTableCellSelection()), tinymce.isGecko && (fixBeforeTableCaretBug(), fixTableCaretPos()), (9 < tinymce.isIE || tinymce.isIE12) && (fixBeforeTableCaretBug(), fixTableCaretPos()), ed && ed.plugins.contextmenu && ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) { ed.dom.getParent(e, "td") || ed.dom.getParent(e, "th") || ed.dom.select("td.mceSelected,th.mceSelected").length ? (m.add({ title: "table.desc", icon: "table", cmd: "mceInsertTable", value: { action: "insert" } }), m.add({ title: "table.props_desc", icon: "table_props", cmd: "mceInsertTable" }), m.add({ title: "table.del", icon: "delete_table", cmd: "mceTableDelete" }), m.addSeparator(), (e = m.addMenu({ title: "table.cell" })).add({ title: "table.cell_desc", icon: "cell_props", cmd: "mceTableCellProps" }), e.add({ title: "table.split_cells_desc", icon: "split_cells", cmd: "mceTableSplitCells" }), e.add({ title: "table.merge_cells_desc", icon: "merge_cells", cmd: "mceTableMergeCells" }), (e = m.addMenu({ title: "table.row" })).add({ title: "table.row_desc", icon: "row_props", cmd: "mceTableRowProps" }), e.add({ title: "table.row_before_desc", icon: "row_before", cmd: "mceTableInsertRowBefore" }), e.add({ title: "table.row_after_desc", icon: "row_after", cmd: "mceTableInsertRowAfter" }), e.add({ title: "table.delete_row_desc", icon: "delete_row", cmd: "mceTableDeleteRow" }), e.addSeparator(), e.add({ title: "table.cut_row_desc", icon: "cut", cmd: "mceTableCutRow" }), e.add({ title: "table.copy_row_desc", icon: "copy", cmd: "mceTableCopyRow" }), e.add({ title: "table.paste_row_before_desc", icon: "paste", cmd: "mceTablePasteRowBefore" }).setDisabled(!clipboardRows), e.add({ title: "table.paste_row_after_desc", icon: "paste", cmd: "mceTablePasteRowAfter" }).setDisabled(!clipboardRows), (e = m.addMenu({ title: "table.col" })).add({ title: "table.col_before_desc", icon: "col_before", cmd: "mceTableInsertColBefore" }), e.add({ title: "table.col_after_desc", icon: "col_after", cmd: "mceTableInsertColAfter" }), e.add({ title: "table.delete_col_desc", icon: "delete_col", cmd: "mceTableDeleteCol" })) : m.add({ title: "table.desc", icon: "table", cmd: "mceInsertTable" }); }); }); url = ed.getParam("site_url") + "index.php?option=com_jce&task=plugin.display&plugin=table"; each({ mceTableSplitCells: function(grid) { grid.split(); }, mceTableInsertRowBefore: function(grid) { grid.insertRow(!0); }, mceTableInsertRowAfter: function(grid) { grid.insertRow(); }, mceTableInsertColBefore: function(grid) { grid.insertCol(!0); }, mceTableInsertColAfter: function(grid) { grid.insertCol(); }, mceTableDeleteCol: function(grid) { grid.deleteCols(); }, mceTableDeleteRow: function(grid) { grid.deleteRows(); }, mceTableCutRow: function(grid) { clipboardRows = grid.cutRows(); }, mceTableCopyRow: function(grid) { clipboardRows = grid.copyRows(); }, mceTablePasteRowBefore: function(grid) { grid.pasteRows(clipboardRows, !0); }, mceTablePasteRowAfter: function(grid) { grid.pasteRows(clipboardRows); }, mceTableDelete: function(grid) { grid.deleteTable(); } }, function(func, name) { ed.addCommand(name, function() { var grid = createTableGrid(); grid && (func(grid), ed.execCommand("mceRepaint"), cleanup()); }); }), each({ mceInsertTable: function(val) { winMan.open({ url: url, size: "mce-modal-landscape-xlarge" }, { plugin_url: url, action: val ? val.action : 0, layout: "table" }); }, mceTableRowProps: function() { winMan.open({ url: url + "&slot=row", size: "mce-modal-landscape-xlarge" }, { plugin_url: url, layout: "row" }); }, mceTableCellProps: function() { winMan.open({ url: url + "&slot=cell", size: "mce-modal-landscape-xlarge" }, { plugin_url: url, layout: "cell" }); } }, function(func, name) { ed.addCommand(name, function(ui, val) { func(val); }); }), !1 !== ed.settings.table_tab_navigation && ed.onKeyDown.add(function(ed, e) { var cellElm, grid; 9 == e.keyCode && (cellElm = ed.dom.getParent(ed.selection.getStart(), "th,td")) && (e.preventDefault(), grid = createTableGrid(), e = e.shiftKey ? -1 : 1, ed.undoManager.add(), !grid.moveRelIdx(cellElm, e)) && 0 < e && (grid.insertRow(), grid.refresh(), grid.moveRelIdx(cellElm, e)); }), this.createControl = function(n, cm) { function createMenuGrid(cols, rows) { for (var html = '<table role="presentation" class="mceTableSplitMenu"><tbody>', i = 0; i < rows; i++) { html += "<tr>"; for (var x = 0; x < cols; x++) html += '<td><a href="#"></a></td>'; html += "</tr>"; } return html = (html += "</tbody>") + ('<tfoot><tr><td colspan="' + rows + '" class="mceTableGridCount"> </td></tr></tfoot>') + "</table>"; } function menuGridMouseOver(e) { var e = e.target, tbody = ("TD" !== e.nodeName && (e = e.parentNode), DOM.getParent(e, "tbody")); if (tbody) { var i, rows = tbody.childNodes, tbody = e.parentNode, x = tinymce.inArray(tbody.childNodes, e), y = tinymce.inArray(rows, tbody); if (!(x < 0 || y < 0)) { for (i = 0; i < rows.length; i++) for (var cells = rows[i].childNodes, z = 0; z < cells.length; z++) x < z || y < i ? DOM.removeClass(cells[z], "selected") : DOM.addClass(cells[z], "selected"); DOM.setHTML(DOM.select("td.mceTableGridCount", n), y + 1 + " x " + (x + 1)); } } } function menuGridClick(e) { for (var el = e.target, el = ("TD" !== el.nodeName && (el = el.parentNode), DOM.getParent(el, "table")), styles = [], width = ed.getParam("table_default_width"), width = (/^[0-9\.]+$/.test(width) && (width += "px"), width && styles.push("width:" + width), ed.getParam("table_default_height")), width = (/^[0-9\.]+$/.test(width) && (width += "px"), width && styles.push("height:" + width), ed.getParam("table_default_border", "")), html = "<table", width = ("" != (width = "html5" == ed.settings.schema && ed.settings.validate ? width && 1 : width) && (html += ' border="' + width + '"'), ed.getParam("table_default_align", "")), classes = ed.getParam("table_classes", ""), rows = ("" != width && "html4" === ed.settings.schema && (html += ' align="' + width + '"'), "" != width && "html4" !== ed.settings.schema && ("center" === width ? (styles.push("margin-left: auto"), styles.push("margin-right: auto")) : styles.push("float: " + width)), classes && (html += ' class="' + classes + '"'), styles.length && (html += ' style="' + styles.join(";") + ';"'), html += ">", tinymce.grep(DOM.select("tr", el), function(row) { return DOM.select("td.selected", row).length; })), y = 0; y < rows.length; y++) { html += "<tr>"; for (var cols = DOM.select("td.selected", rows[y]).length, x = 0; x < cols; x++) html += "<td>" + (ed.settings.validate ? '<br data-mce-bogus="1"/>' : " ") + "</td>"; html += "</tr>"; } insertTableHtml(ed, html += "</table>"), ed.addVisual(), Event.cancel(e); } return "table_insert" === n ? ((cm = cm.createSplitButton("table_insert", { title: "table.desc", cmd: "mceInsertTable", class: "mce_table" })).onRenderMenu.add(function(c, m) { var tm, sm, sb = (ed.getParam("table_buttons", 1) ? m : tm = m.addMenu({ title: "table.desc", icon: "table", cmd: "mceInsertTable" })).add({ onmouseover: menuGridMouseOver, onclick: menuGridClick, html: createMenuGrid(8, 8) }); m.onShowMenu.add(function() { var n = DOM.get(sb.id); n && (DOM.removeClass(DOM.select(".mceTableSplitMenu td", n), "selected"), DOM.setHTML(DOM.select(".mceTableSplitMenu .mceTableGridCount", n), " ")); var n = ed.selection.getNode(), p = DOM.getParent(n, "table"); tinymce.walk(m, function(o) { if (o === sb || o === tm) return !1; o.settings.cmd && o.setDisabled(!p); }, "items", m); }), ed.getParam("table_buttons", 1) || (m.add({ title: "table.del", icon: "delete_table", cmd: "mceTableDelete" }), m.addSeparator(), (sm = m.addMenu({ title: "table.cell" })).add({ title: "table.cell_desc", icon: "cell_props", cmd: "mceTableCellProps" }), sm.add({ title: "table.split_cells_desc", icon: "split_cells", cmd: "mceTableSplitCells" }), sm.add({ title: "table.merge_cells_desc", icon: "merge_cells", cmd: "mceTableMergeCells" }), (sm = m.addMenu({ title: "table.row" })).add({ title: "table.row_desc", icon: "row_props", cmd: "mceTableRowProps" }), sm.add({ title: "table.row_before_desc", icon: "row_before", cmd: "mceTableInsertRowBefore" }), sm.add({ title: "table.row_after_desc", icon: "row_after", cmd: "mceTableInsertRowAfter" }), sm.add({ title: "table.delete_row_desc", icon: "delete_row", cmd: "mceTableDeleteRow" }), sm.addSeparator(), sm.add({ title: "table.cut_row_desc", icon: "cut", cmd: "mceTableCutRow" }), sm.add({ title: "table.copy_row_desc", icon: "copy", cmd: "mceTableCopyRow" }), sm.add({ title: "table.paste_row_before_desc", icon: "paste", cmd: "mceTablePasteRowBefore" }), sm.add({ title: "table.paste_row_after_desc", icon: "paste", cmd: "mceTablePasteRowAfter" }), (sm = m.addMenu({ title: "table.col" })).add({ title: "table.col_before_desc", icon: "col_before", cmd: "mceTableInsertColBefore" }), sm.add({ title: "table.col_after_desc", icon: "col_after", cmd: "mceTableInsertColAfter" }), sm.add({ title: "table.delete_col_desc", icon: "delete_col", cmd: "mceTableDeleteCol" })); }), cm) : null; }; }); }(tinymce); home/wuectly/www/media/com_jce/editor/tinymce/plugins/print/plugin.js 0000604 00000000726 15246311510 0022100 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ tinymce.PluginManager.add("print", function(ed) { ed.addCommand("mcePrint", function() { ed.getWin().print(); }), ed.addButton("print", { title: "print.desc", cmd: "mcePrint" }); }); home/wuectly/www/media/com_jce/editor/tinymce/plugins/figure/plugin.js 0000604 00000014246 15246311537 0022240 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var VK = tinymce.VK, Node = tinymce.html.Node, each = tinymce.each, blocks = []; tinymce.PluginManager.add("figure", function(ed, url) { ed.onPreInit.add(function(ed) { function setClipboardData(ed, e) { var node, content, clipboardData = e.clipboardData; clipboardData && (node = ed.dom.getParent(ed.selection.getNode(), "figure")) && (ed.selection.select(node), content = { html: content = ed.selection.getContent({ contextual: !0 }), text: content.toString() }, clipboardData.clearData(), clipboardData.setData("text/html", content.html), clipboardData.setData("text/plain", content.text), "cut" == e.type) && ed.dom.remove(node); } ed.parser.addNodeFilter("figure", function(nodes, name) { for (var figcaption, node, i = nodes.length; i--; ) 0 === (node = nodes[i]).getAll("figcaption").length && ((figcaption = new Node("figcaption", 1)).attr("data-mce-empty", ed.getLang("figcaption.default", "Write a caption...")), figcaption.attr("contenteditable", !0), node.append(figcaption)), node.attr("data-mce-image", "1"), node.attr("contenteditable", "false"), each(node.getAll("img"), function(img) { img.attr("data-mce-contenteditable", "true"); }), !1 !== ed.settings.figure_data_attribute && node.attr("data-wf-figure", "1"); }), ed.parser.addNodeFilter("figcaption", function(nodes, name) { for (var node, i = nodes.length; i--; ) (node = nodes[i]).firstChild || node.attr("data-mce-empty", ed.getLang("figcaption.default", "Write a caption...")), node.attr("contenteditable", "true"); }), ed.serializer.addNodeFilter("figure", function(nodes, name) { for (var node, i = nodes.length; i--; ) (node = nodes[i]).attr("contenteditable", null), each(node.getAll("img"), function(img) { img.attr("data-mce-contenteditable", null); }); }), ed.serializer.addNodeFilter("figcaption", function(nodes, name) { for (var node, i = nodes.length; i--; ) (node = nodes[i]).firstChild ? node.attr("contenteditable", null) : node.remove(); }), ed.serializer.addAttributeFilter("data-mce-image", function(nodes, name) { for (var i = nodes.length; i--; ) nodes[i].attr(name, null); }), each(ed.schema.getBlockElements(), function(v, k) { if (/\W/.test(k)) return !0; blocks.push(k.toLowerCase()); }), ed.formatter.register("figure", { block: "figure", remove: "all", ceFalseOverride: !0, deep: !1, onformat: function(elm, fmt, vars, node) { vars = vars || {}, ed.dom.select("img,video,iframe", elm) && (ed.dom.setAttribs(elm, { "data-mce-image": 1, contenteditable: !1 }), ed.dom.setAttrib(ed.dom.select("img", elm), "data-mce-contenteditable", "true"), ed.dom.add(elm, "figcaption", { "data-mce-empty": ed.getLang("figcaption.default", "Write a caption..."), contenteditable: !0 }, vars.caption || ""), !1 !== ed.settings.figure_data_attribute) && ed.dom.setAttribs(elm, { "data-wf-figure": "1" }); }, onremove: function(node) { ed.dom.remove(ed.dom.select("figcaption", node)), ed.dom.remove(ed.dom.getParent("figure", node), 1); } }), ed.onBeforeExecCommand.add(function(ed, cmd, ui, v, o) { var parent, se = ed.selection, n = se.getNode(); switch (cmd) { case "JustifyRight": case "JustifyLeft": case "JustifyCenter": n && ed.dom.is(n, "img,span[data-mce-object]") && (parent = ed.dom.getParent(n, "FIGURE")) && (se.select(parent), ed.execCommand(cmd, !1), o.terminate = !0); } }), ed.onClick.add(function(ed, e) { "IMG" === e.target.nodeName && VK.metaKeyPressed(e) && (e = ed.dom.getParent(e.target, "figure")) && (ed.selection.select(e), ed.nodeChanged()); }), ed.onNodeChange.add(function(ed, cm, n) { "FIGURE" !== n.nodeName && ed.dom.removeAttrib(ed.dom.select("figure"), "data-mce-selected"); }), ed.onCopy.add(setClipboardData), ed.onCut.add(setClipboardData), ed.onKeyDown.add(function(ed, e) { var container, offset, isDelete = e.keyCode == VK.DELETE; if (!e.isDefaultPrevented() && (isDelete || e.keyCode == VK.BACKSPACE) && !VK.modifierPressed(e) && (container = (isDelete = ed.selection.getRng()).startContainer, offset = isDelete.startOffset, isDelete = isDelete.collapsed, container = ed.dom.getParent(container, "FIGURE"))) { var node = ed.selection.getNode(); if ("IMG" === node.nodeName) ed.dom.remove(container), ed.nodeChanged(), e.preventDefault(); else if ("FIGCAPTION" != node.nodeName || node.nodeValue && 0 !== node.nodeValue.length || 0 !== node.childNodes.length || e.preventDefault(), 3 === node.nodeType && !isDelete && !offset) { var figcaption = ed.dom.getParent(node, "FIGCAPTION"); if (figcaption) { for (;figcaption.firstChild; ) figcaption.removeChild(figcaption.firstChild); e.preventDefault(); } } } }); }); }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/upload/plugin.js 0000604 00000034377 15246311570 0022247 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var each = tinymce.each, JSON = tinymce.util.JSON, RangeUtils = tinymce.dom.RangeUtils, Uuid = tinymce.util.Uuid, Env = tinymce.util.Env; tinymce.PluginManager.add("upload", function(ed, url) { var plugins = [], files = []; ed.onPreInit.add(function() { function bindUploadEvents(ed) { each(ed.dom.select(".mce-item-upload-marker", ed.getBody()), function(n) { 0 == plugins.length ? ed.dom.remove(n) : bindUploadMarkerEvents(n); }); } each(ed.plugins, function(plg, name) { var data; tinymce.is(plg.getUploadConfig, "function") && (data = plg.getUploadConfig()).inline && data.filetypes && plugins.push(plg); }), ed.onBeforeSetContent.add(function(ed, o) { o.content = o.content.replace(/<\/media>/g, " </media>"); }), ed.onPostProcess.add(function(ed, o) { o.content = o.content.replace(/( |\u00a0)<\/media>/g, "</media>"); }), ed.schema.addValidElements("+media[type|width|height|class|style|title|*]"), ed.serializer.addAttributeFilter("data-mce-marker", function(nodes, name, args) { for (var i = nodes.length; i--; ) nodes[i].remove(); }), ed.parser.addNodeFilter("img,media", function(nodes) { for (var node, i = nodes.length; i--; ) !function(node) { if ("media" === node.name) return 1; if ("img" === node.name) { if (node.attr("data-mce-upload-marker")) return 1; node = node.attr("class"); if (node && -1 != node.indexOf("upload-placeholder")) return 1; } }(node = nodes[i]) || (0 == plugins.length ? node.remove() : function(node) { var src = node.attr("src") || "", style = {}, cls = []; node.attr("alt") || /data:image/.test(src) || (src = src.substring(src.length, src.lastIndexOf("/") + 1), node.attr("alt", src)); node.attr("style") && (style = ed.dom.styles.parse(node.attr("style"))); node.attr("hspace") && (style["margin-left"] = style["margin-right"] = node.attr("hspace")); node.attr("vspace") && (style["margin-top"] = style["margin-bottom"] = node.attr("vspace")); node.attr("align") && (style.float = node.attr("align")); node.attr("class") && (cls = node.attr("class").replace(/\s*upload-placeholder\s*/, "").split(" ")); cls.push("mce-item-upload"), cls.push("mce-item-upload-marker"), "media" === node.name && (node.name = "img", node.shortEnded = !0); node.attr({ src: Env.transparentSrc, class: tinymce.trim(cls.join(" ")) }); src = ed.dom.create("span", { style: style }); (cls = ed.dom.getAttrib(src, "style")) && node.attr({ style: cls, "data-mce-style": cls }); }(node)); }), ed.serializer.addNodeFilter("img", function(nodes) { for (var node, cls, i = nodes.length; i--; ) (cls = (node = nodes[i]).attr("class")) && /mce-item-upload-marker/.test(cls) && (cls = cls.replace(/(?:^|\s)(mce-item-)(?!)(upload|upload-marker|upload-placeholder)(?!\S)/g, ""), node.attr({ "data-mce-src": "", src: "", class: tinymce.trim(cls) }), node.name = "media", node.shortEnded = !1, node.attr("alt", null), node.attr("data-mce-upload-marker", null)); }), ed.onSetContent.add(function() { bindUploadEvents(ed); }), ed.onFullScreen && ed.onFullScreen.add(function(editor) { bindUploadEvents(editor); }); }), ed.onInit.add(function() { function cancelEvent(e) { e.preventDefault(), e.stopPropagation(); } 0 == plugins.length ? (ed.dom.bind(ed.getBody(), "dragover", function(e) { var dataTransfer = e.dataTransfer; dataTransfer && dataTransfer.files && dataTransfer.files.length && e.preventDefault(); }), ed.dom.bind(ed.getBody(), "drop", function(e) { var dataTransfer = e.dataTransfer; dataTransfer && dataTransfer.files && dataTransfer.files.length && e.preventDefault(); })) : (ed.theme && ed.theme.onResolveName && ed.theme.onResolveName.add(function(theme, o) { var n = o.node; n && "IMG" === n.nodeName && /mce-item-upload/.test(n.className) && (o.name = "placeholder"); }), ed.dom.bind(ed.getBody(), "dragover", function(e) { e.dataTransfer.dropEffect = tinymce.VK.metaKeyPressed(e) ? "copy" : "move"; }), ed.dom.bind(ed.getBody(), "drop", function(e) { var rng, dataTransfer = e.dataTransfer; dataTransfer && dataTransfer.files && dataTransfer.files.length && (each(dataTransfer.files, function(file) { rng || (rng = RangeUtils.getCaretRangeFromPoint(e.clientX, e.clientY, ed.getDoc())) && ed.selection.setRng(rng), addFile(file); }), cancelEvent(e)), files.length && each(files, function(file) { uploadFile(file); }), tinymce.isGecko && "IMG" == e.target.nodeName && cancelEvent(e); })); }); var noop = function() {}; function uploadHandler(file, success, failure, progress) { success = success || noop, failure = failure || noop, progress = progress || noop; var xhr, formData, args = { method: "upload", id: Uuid.uuid("wf_"), inline: 1, name: file.filename }, url = file.upload_url; url += "&" + ed.settings.query, (xhr = new XMLHttpRequest()).open("POST", url), xhr.upload.onprogress = function(e) { progress(e.loaded / e.total * 100); }, xhr.onerror = function() { failure("Image upload failed due to a XHR Transport error. Code: " + xhr.status); }, xhr.onload = function() { var json; xhr.status < 200 || 300 <= xhr.status ? failure("HTTP Error: " + xhr.status) : ((json = JSON.parse(xhr.responseText)) || failure("Invalid JSON response!"), json.error || !json.result ? failure(json.error.message || "Invalid JSON response!") : success(json.result)); }, formData = new FormData(), each(args, function(value, name) { formData.append(name, value); }), formData.append("file", file, file.name), xhr.send(formData); } function addFile(file) { if (!/\.(php([0-9]*)|phtml|pl|py|jsp|asp|htm|html|shtml|sh|cgi)\./i.test(file.name) && (each(plugins, function(plg) { if (!file.upload_url) { var url = plg.getUploadURL(file); if (url) return file.upload_url = url, file.uploader = plg, !1; } }), file.upload_url)) { if (tinymce.is(file.uploader.getUploadConfig, "function")) { var config = file.uploader.getUploadConfig(), name = file.target_name || file.name; if (file.filename = name.replace(/[\+\\\/\?\#%&<>"\'=\[\]\{\},;@\^\(\)\xa3\u20ac$~]/g, ""), !new RegExp(".(" + config.filetypes.join("|") + ")$", "i").test(file.name)) return void ed.windowManager.alert({ text: ed.getLang("upload.file_extension_error", "File type not supported"), title: ed.getLang("upload.error", "Upload Error") }); if (file.size) { name = parseInt(config.max_size, 10) || 1024; if (file.size > 1024 * name) return void ed.windowManager.alert({ text: ed.getLang("upload.file_size_error", "File size exceeds maximum allowed size"), title: ed.getLang("upload.error", "Upload Error") }); } } var w; return file.marker || !1 === ed.settings.upload_use_placeholder || (config = Uuid.uuid("wf-tmp-"), ed.execCommand("mceInsertContent", !1, '<span data-mce-marker="1" id="' + config + '">\ufeff</span>', { skip_undo: 1 }), name = ed.dom.get(config), /image\/(gif|png|jpeg|jpg)/.test(file.type) && file.size ? (config = Math.round(Math.sqrt(file.size)), w = Math.max(300, config), config = Math.max(300, config), ed.dom.setStyles(name, { width: w, height: config }), ed.dom.addClass(name, "mce-item-upload")) : ed.setProgressState(!0), file.marker = name), files.push(file), 1; } ed.windowManager.alert({ text: ed.getLang("upload.file_extension_error", "File type not supported"), title: ed.getLang("upload.error", "Upload Error") }); } function bindUploadMarkerEvents(marker) { var dom = tinymce.DOM; function removeUpload() { dom.setStyles("wf_upload_button", { top: "", left: "", display: "none", zIndex: "" }); } ed.onNodeChange.add(removeUpload), ed.dom.bind(ed.getWin(), "scroll", removeUpload); var btn, input = dom.get("wf_upload_input"); dom.get("wf_upload_button") || (btn = dom.add(dom.doc.body, "div", { id: "wf_upload_button", class: "btn", role: "button", title: ed.getLang("upload.button_description", "Click to upload a file") }, '<label for="wf_upload_input"><span class="icon-upload"></span> ' + ed.getLang("upload.label", "Upload") + "</label>"), input = dom.add(btn, "input", { type: "file", id: "wf_upload_input" })), ed.dom.bind(marker, "mouseover", function(e) { var p2, x, p1, vp; ed.dom.getAttrib(marker, "data-mce-selected") || (vp = ed.dom.getViewPort(ed.getWin()), p1 = dom.getRect(ed.getContentAreaContainer()), p2 = ed.dom.getRect(marker), vp.y > p2.y + p2.h / 2 - 25) || vp.y < p2.y + p2.h / 2 + 25 - p1.h || (x = Math.max(p2.x - vp.x, 0) + p1.x, p1 = Math.max(p2.y - vp.y, 0) + p1.y - Math.max(vp.y - p2.y, 0), vp = "mce_fullscreen" == ed.id ? dom.get("mce_fullscreen_container").style.zIndex : 0, dom.setStyles("wf_upload_button", { top: p1 + p2.h / 2 - 16, left: x + p2.w / 2 - 50, display: "block", zIndex: vp + 1 }), dom.setStyles("wf_select_button", { top: p1 + p2.h / 2 - 16, left: x + p2.w / 2 - 50, display: "block", zIndex: vp + 1 }), input.onchange = function() { var file; input.files && (file = input.files[0]) && (file.marker = marker, addFile(file)) && (each([ "width", "height" ], function(key) { ed.dom.setStyle(marker, key, ed.dom.getAttrib(marker, key)); }), file.marker = ed.dom.rename(marker, "span"), uploadFile(file), removeUpload()); }); }), ed.dom.bind(marker, "mouseout", function(e) { !e.relatedTarget && 0 < e.clientY || removeUpload(); }); } function removeFile(file) { for (var i = 0; i < files.length; i++) files[i] === file && files.splice(i, 1); files.splice(tinymce.inArray(files, file), 1); } function uploadFile(file) { uploadHandler(file, function(response) { var response = response.files || [], response = response.length ? response[0] : {}; file.uploader && (response = tinymce.extend({ type: file.type, name: file.name }, response), function(file, data) { var w, h, marker = file.marker, file = file.uploader; ed.selection.select(marker), (file = file.insertUploadedFile(data)) && ("object" == typeof file && file.nodeType && (ed.dom.hasClass(marker, "mce-item-upload-marker") && (data = ed.dom.getAttrib(marker, "data-mce-style"), w = marker.width || 0, h = marker.height || 0, data && ((data = ed.dom.styles.parse(data)).width && (w = data.width, delete data.width), data.height && (h = data.height, delete data.height), ed.dom.setStyles(file, data)), w && ed.dom.setAttrib(file, "width", w), h) && ed.dom.setAttrib(file, "height", h = w ? "" : h), ed.undoManager.add(), ed.dom.replace(file, marker)), ed.nodeChanged()); }(file, response)), removeFile(file), file.marker && ed.dom.remove(file.marker), ed.setProgressState(!1); }, function(message) { ed.windowManager.alert({ text: message, title: ed.getLang("upload.error", "Upload Error") }), removeFile(file), file.marker && ed.dom.remove(file.marker), ed.setProgressState(!1); }, function(value) { file.marker && ed.dom.setAttrib(file.marker, "data-progress", value); }); } this.plugins = plugins, this.upload = uploadHandler; }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/style/plugin.js 0000604 00000002775 15246311571 0022121 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ tinymce.PluginManager.add("style", function(ed, url) { function isRootNode(node) { return node == ed.dom.getRoot(); } window.matchMedia("(max-width: 600px)").matches || (ed.addCommand("mceStyleProps", function() { var applyStyleToBlocks = !1, blocks = ed.selection.getSelectedBlocks(), styles = []; 1 === blocks.length ? styles.push(ed.selection.getNode().style.cssText) : (tinymce.each(blocks, function(block) { styles.push(ed.dom.getAttrib(block, "style")); }), applyStyleToBlocks = !0), ed.windowManager.open({ file: ed.getParam("site_url") + "index.php?option=com_jce&task=plugin.display&plugin=style", size: "mce-modal-landscape-xxlarge" }, { applyStyleToBlocks: applyStyleToBlocks, plugin_url: url, styles: styles }); }), ed.addCommand("mceSetElementStyle", function(ui, v) { var node = ed.selection.getNode(); node && (ed.dom.setAttrib(node, "style", v), ed.execCommand("mceRepaint")); }), ed.onNodeChange.add(function(ed, cm, n) { cm.setDisabled("style", isRootNode(n) || n.hasAttribute("data-mce-bogus")); }), ed.addButton("style", { title: "style.desc", cmd: "mceStyleProps" })); }); home/wuectly/www/media/com_jce/editor/tinymce/plugins/format/plugin.js 0000604 00000015677 15246311702 0022252 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var VK = tinymce.VK, each = tinymce.each, blocks = []; tinymce.PluginManager.add("format", function(ed, url) { var keyCode; function clearBlocks(e) { var n = ed.selection.getNode(), tag = (tag = ed.getParam("forced_root_block", "p")) || (ed.getParam("force_block_newlines") ? "p" : "br"), p = ed.dom.getParents(n, blocks.join(",")); (p = ed.dom.getParent(n, "td,th") ? ed.dom.getParents(n, "td,th,tr,tfoot,thead,table") : p) && 1 < p.length && (e.preventDefault(), (n = p[p.length - 1]) !== ed.getBody()) && (p = ed.dom.create(tag, {}, "\xa0"), e.keyCode === VK.ENTER || e.keyCode === VK.DOWN ? ed.dom.insertAfter(p, n) : ed.dom.insertBefore(p, n), ed.selection.select(p), ed.selection.collapse(1)); } ed.addButton("italic", { title: "advanced.italic_desc", onclick: function(e) { e.preventDefault(), ed.focus(), e.shiftKey ? ed.formatter.toggle("italic-i") : ed.formatter.toggle("italic"), ed.undoManager.add(); } }), ed.addShortcut("meta+shift+i", "italic.desc", function() { ed.formatter.apply("italic-i"); }), ed.addCommand("mceSoftHyphen", function() { ed.execCommand("mceInsertContent", !1, ed.plugins.visualchars && ed.plugins.visualchars.state ? '<span data-mce-bogus="1" class="mce-item-hidden mce-item-shy">­</span>' : "­"); }), keyCode = 189, tinymce.isGecko && (keyCode = 173), ed.addShortcut("ctrl+shift+" + keyCode, "softhyphen.desc", "mceSoftHyphen"), ed.onPreInit.add(function(ed) { each(ed.schema.getBlockElements(), function(v, k) { if (/\W/.test(k)) return !0; blocks.push(k.toLowerCase()); }), ed.formatter.register("aside", { block: "aside", remove: "all", wrapper: !0 }), ed.formatter.register("p", { block: "p", remove: "all" }), ed.formatter.register("div", { block: "div", onmatch: !!ed.settings.forced_root_block && function() { return !1; } }), ed.formatter.register("div_container", { block: "div", wrapper: !0, onmatch: !!ed.settings.forced_root_block && function() { return !1; } }), ed.formatter.register("span", { inline: "span", remove: "all", onmatch: function() { return !1; } }), ed.formatter.register("section", { block: "section", remove: "all", wrapper: !0, merge_siblings: !1 }), ed.formatter.register("article", { block: "article", remove: "all", wrapper: !0, merge_siblings: !1 }), ed.formatter.register("footer", { block: "footer", remove: "all", wrapper: !0, merge_siblings: !1 }), ed.formatter.register("header", { block: "header", remove: "all", wrapper: !0, merge_siblings: !1 }), ed.formatter.register("nav", { block: "nav", remove: "all", wrapper: !0, merge_siblings: !1 }), ed.formatter.register("code", { inline: "code", remove: "all" }), ed.formatter.register("samp", { inline: "samp", remove: "all" }), ed.formatter.register("blockquote", { block: "blockquote", wrapper: 1, remove: "all", merge_siblings: !1 }), ed.formatter.register("italic-i", { inline: "i", remove: "all" }); var doc, head, values, custom_css = ed.getParam("custom_css", ""); custom_css && (head = (doc = ed.getDoc()).getElementsByTagName("head")[0], ed = ed.dom.create("style", { type: "text/css", id: "mceCustomStyles" }), values = [], each(custom_css.split(";"), function(value) { values.push(".mceContentBody " + value); }), ed.appendChild(doc.createTextNode(values.join(";"))), head.appendChild(ed)); }), ed.settings.removeformat = [ { selector: "b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,footer", remove: "all", split: !0, expand: !1, block_expand: !0, deep: !0 } ], ed.onKeyDown.add(function(ed, e) { e.keyCode !== VK.ENTER && e.keyCode !== VK.UP && e.keyCode !== VK.DOWN || !e.altKey || clearBlocks(e); }), ed.onKeyUp.addToTop(function(ed, e) { e.keyCode === VK.ENTER && "DIV" === (e = ed.selection.getNode()).nodeName && ed.settings.force_block_newlines && (!1 === ed.settings.keep_styles && ed.dom.removeAllAttribs(e), ed.formatter.apply("p")); }), ed.onBeforeExecCommand.add(function(ed, cmd, ui, v, o) { var p, n = ed.selection.getNode(); switch (cmd) { case "FormatBlock": if (!v) { if (o.terminate = !0, n === ed.getBody()) return; ed.undoManager.add(), (p = ed.dom.getParent(n, blocks.join(",")) || "") && (name = p.nodeName.toLowerCase(), ed.formatter.get(name)) && ed.formatter.remove(name); var name = ed.controlManager.get("formatselect"); name && name.select(p); } "dl" === v && (ed.execCommand("InsertDefinitionList"), o.terminate = !0), "dt" !== v && "dd" !== v || (n && !ed.dom.getParent(n, "dl") && ed.execCommand("InsertDefinitionList"), "dt" === v && "DD" === n.nodeName && ed.dom.rename(n, "DT"), "dd" === v && "DT" === n.nodeName && ed.dom.rename(n, "DD"), o.terminate = !0); break; case "RemoveFormat": v || ed.dom.isBlock(n) || (name = ed.controlManager.get("styleselect")) && name.selectedValue && ed.execCommand("mceToggleFormat", !1, name.selectedValue); } }), ed.onExecCommand.add(function(ed, cmd, ui, v, o) { var n = ed.selection.getNode(); "mceToggleFormat" !== cmd || "dt" !== v && "dd" !== v || "DL" === n.nodeName && 0 === ed.dom.select("dt,dd", n).length && ed.formatter.remove("dl"); }); }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/source/plugin.js 0000604 00000015022 15246311725 0022247 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var DOM = tinymce.DOM, Event = tinymce.dom.Event; tinymce.PluginManager.add("source", function(ed, url) { var self = this; function isEditorActive() { return 0 == DOM.hasClass(ed.getElement(), "wf-no-editor"); } function getSourceEditor() { return DOM.get(ed.id + "_editor_source_textarea") || null; } ed.onSetContent.add(function(ed, o) { self.setContent(ed.getContent(), !0); }), ed.onInit.add(function(ed) { 0 != isEditorActive() && "wf-editor-source" === (ed.settings.active_tab || "") && (DOM.hide(ed.getContainer()), DOM.hide(ed.getElement()), window.setTimeout(function() { self.toggle(); }, 10)); }), this.ControlManager = new tinymce.ControlManager(ed), this.setContent = function(v) { var editor = getSourceEditor(); return !!editor && (editor.value = v); }, this.insertContent = function(v) { var editor = getSourceEditor(); return editor && (editor.focus(), document.selection ? document.selection.createRange().text = v : editor.setRangeText(v, editor.selectionStart, editor.selectionEnd, "end")), !1; }, this.getContent = function() { var editor = getSourceEditor(); return editor ? editor.value : null; }, this.hide = function() { DOM.hide(ed.id + "_editor_source"); }, this.isHidden = function() { return DOM.isHidden(ed.id + "_editor_source"); }, this.save = function(content, debounced) { var args, el = ed.getElement(); return el ? (args = { content: content = tinymce.is(content) ? content : this.getContent(), no_events: !0, format: "raw" }, ed.onWfEditorSave.dispatch(ed, args), /TEXTAREA|INPUT/i.test(el.nodeName) ? el.value = args.content : el.innerHTML = args.content, debounced && ed.onWfEditorChange.dispatch(ed, args), args.content) : content; }, this.toggle = function() { var self = this, s = ed.settings, element = ed.getElement(), container = element.parentNode, header = DOM.getPrev(element, ".wf-editor-header"), div = DOM.get(ed.id + "_editor_source"), textarea = DOM.get(ed.id + "_editor_source_textarea"), ifrHeight = parseInt(DOM.get(ed.id + "_ifr").style.height, 10) || s.height, o = tinymce.util.Storage.getHash("TinyMCE_" + ed.id + "_size"); o && o.height && (ifrHeight = o.height); var statusbar, resize, keyup, callback, time, timer, o = (tinymce.is(element.value) ? element.value : element.innerHTML).replace(/<br data-mce-bogus="1"([^>]+)>/gi, ""), element = (div ? (DOM.show(div), textarea.value = o) : (div = DOM.add(container, "div", { role: "textbox", id: ed.id + "_editor_source", class: "wf-editor-source" }), element = s.skin_class || "defaultSkin", DOM.addClass(div, element), textarea = DOM.create("textarea", { id: ed.id + "_editor_source_textarea" }), DOM.add(div, textarea), textarea.value = o, statusbar = DOM.add(div, "div", { id: ed.id + "_editor_source_statusbar", class: "mceStatusbar mceLast" }, '<div class="mcePathRow"></div><div tabindex="-1" class="mceResize" id="' + ed.id + '_editor_source_resize"><span class="mceIcon mce_resize"></span></div>'), resize = DOM.get(ed.id + "_editor_source_resize"), Event.add(resize, "click", function(e) { e.preventDefault(); }), Event.add(resize, "mousedown", function(e) { var mm1, mu1, sx, sy, sw, sh, w, h; function resizeTo(w, h) { w = Math.max(w, 300), h = Math.max(h, 200), textarea.style.height = h + "px", container.style.maxWidth = w + "px", ed.settings.container_width = w, ed.settings.container_height = h + statusbar.offsetHeight, h -= ed.settings.interface_height || 0, ed.theme.resizeTo(w, h); } function endResize(e) { e.preventDefault(), Event.remove(DOM.doc, "mousemove", mm1), Event.remove(DOM.doc, "mouseup", mu1), w = sw + (e.screenX - sx), h = sh + (e.screenY - sy), resizeTo(w, h), DOM.removeClass(resize, "wf-editor-source-resizing"); } if (e.preventDefault(), DOM.hasClass(resize, "wf-editor-source-resizing")) return endResize(e), !1; sx = e.screenX, sy = e.screenY, sw = w = container.offsetWidth, sh = h = textarea.clientHeight, mm1 = Event.add(DOM.doc, "mousemove", function(e) { e.preventDefault(), w = sw + (e.screenX - sx), h = sh + (e.screenY - sy), resizeTo(w, h), DOM.addClass(resize, "wf-editor-source-resizing"); }), mu1 = Event.add(DOM.doc, "mouseup", endResize); }), function(ed) { return window.widgetkit && -1 !== ed.id.indexOf("wk_") || -1 !== ed.id.indexOf("sppb-editor-"); }(ed) && (callback = function(e) { var value = (value = textarea.value).replace(/^\s*|\s*$/g, ""); self.save(value, !0); }, time = 300, (s = function() { var args = arguments; clearTimeout(timer), timer = setTimeout(function() { callback.apply(this, args); }, time); }).stop = function() { clearTimeout(timer); }, keyup = s, DOM.bind(textarea, "input blur", function() { keyup(); }))), DOM.removeClass(container, "mce-loading"), ed.settings.container_height || sessionStorage.getItem("wf-editor-container-height") || ifrHeight + statusbar.offsetHeight); DOM.hasClass(container, "mce-fullscreen") && (element = DOM.getViewPort().h - header.offsetHeight - statusbar.offsetHeight - 4), DOM.setStyles(textarea, { height: element }); }, this.getSelection = function() { return document.getSelection().toString(); }, this.getCursorPos = function() { return 0; }; }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/media/plugin.js 0000604 00000142247 15246331233 0022034 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var each = tinymce.each, extend = tinymce.extend, Node = tinymce.html.Node, VK = tinymce.VK, Serializer = tinymce.html.Serializer, DomParser = tinymce.html.DomParser, SaxParser = tinymce.html.SaxParser, DOM = tinymce.DOM; function indexOf(array, item) { for (var i = 0; i < array.length; i++) if (array[i] === item) return i; return -1; } String.prototype.startsWith || (String.prototype.startsWith = function(search, pos) { return this.substring(pos = pos || 0, pos + search.length) === search; }); var htmlSchema = new tinymce.html.Schema({ schema: "mixed" }), transparentSrc = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"; function isNonEditable(ed, node) { ed = ed.settings.noneditable_noneditable_class || "mceNonEditable"; return node.attr ? node.hasClass(ed) : DOM.hasClass(node, ed); } var alignStylesMap = { left: { float: "left" }, center: { display: "block", "margin-left": "auto", "margin-right": "auto" }, right: { float: "right" } }; function isResponsiveMedia(node) { var valid, pStyles, nStyles, parent = node.parent; if (parent && "div" == parent.name) return valid = !0, pStyles = DOM.parseStyle(parent.attr("style")), nStyles = DOM.parseStyle(node.attr("style")), each({ "padding-bottom": "56.25%", position: "relative" }, function(val, key) { tinymce.is(pStyles[key]) && pStyles[key] == val || (valid = !1); }), each({ position: "absolute" }, function(val, key) { tinymce.is(nStyles[key]) && nStyles[key] == val || (valid = !1); }), valid; } function isPreviewMedia(type) { return "iframe" == type || "video" == type || "audio" == type; } function isObjectEmbed(type) { return !isPreviewMedia(type); } function isCenterAligned(style) { return "block" == style.display && "auto" == style["margin-left"] && "auto" == style["margin-right"]; } var sandbox_iframes_exclusions = [ "youtube.com", "youtube-nocookie.com", "youtu.be", "vimeo.com", "player.vimeo.com", "dailymotion.com", "embed.music.apple.com", "open.spotify.com", "giphy.com", "dai.ly", "codepen.io", "maps.google.com", "google.com/maps", "docs.google.com", "google.com/docs", "sheets.google.com", "google.com/sheets", "slides.google.com", "google.com/slides", "forms.google.com", "google.com/forms", "canva.com", "slideshare.net", "slides.com", "facebook.com", "instagram.com", "bandcamp.com", "calendly.com" ], mediaProviders = { youtube: /youtu(\.)?be(.+)?\/(.+)/, vimeo: /vimeo(.+)?\/(.+)/, dailymotion: /dai\.?ly(motion)?(\.com)?/, scribd: /scribd\.com\/(.+)/, slideshare: /slideshare\.net\/(.+)\/(.+)/, soundcloud: /soundcloud\.com\/(.+)/, spotify: /spotify\.com\/(.+)/, ted: /ted\.com\/talks\/(.+)/, twitch: /twitch\.tv\/(.+)/, facebook: /facebook\.com\/(.+)/, instagram: /instagram\.com\/(.+)/, bandcamp: /bandcamp\.com\/(.+)/, calendly: /calendly\.com\/(.+)/ }; function getMediaProps(ed, data, provider) { var id, matches, src, defaultValues = { youtube: { src: data = data.src || "", width: 560, height: 315, frameborder: 0, allowfullscreen: "allowfullscreen", allow: "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture", sandbox: !1, oembed: !0 }, vimeo: { src: data, width: 560, height: 315, frameborder: 0, allowfullscreen: "allowfullscreen", allow: "autoplay; fullscreen", sandbox: !1, oembed: !0 }, dailymotion: { src: data, width: 640, height: 360, frameborder: 0, allowfullscreen: "allowfullscreen", allow: "autoplay; fullscreen", sandbox: !1, oembed: !0 }, video: { src: data, controls: !0, type: "video/mpeg" }, slideshare: { src: "", width: 427, height: 356, frameborder: 0, allowfullscreen: "allowfullscreen", allow: "fullscreen", sandbox: !1, oembed: !0 }, soundcloud: { src: "", width: "100%", height: 400, frameborder: 0, scrolling: "no", allow: "autoplay; fullscreen", sandbox: !1, oembed: !0 }, spotify: { src: data, width: 300, height: 380, frameborder: 0, allowtransparency: !0, allow: "encrypted-media", sandbox: !1, oembed: !0 }, ted: { src: "", width: 560, height: 316, frameborder: 0, allowfullscreen: "allowfullscreen", allow: "fullscreen", sandbox: !1, oembed: !0 }, twitch: { src: "", width: 500, height: 281, frameborder: 0, allowfullscreen: "allowfullscreen", allow: "autoplay; fullscreen", sandbox: !1, oembed: !0 }, instagram: { src: "", width: 400, height: 480, frameborder: 0, allowfullscreen: "allowfullscreen", sandbox: !1, oembed: !1 }, facebook: { src: "", frameborder: 0, width: 500, height: 280, allowtransparency: "allowtransparency", allowfullscreen: "allowfullscreen", scrolling: "no", allow: "encrypted-media;fullscreen", sandbox: !1, oembed: !1 }, calendly: { src: "", width: "100%", height: 700, frameborder: 0, style: "min-width:320px", allowtransparency: !0, sandbox: !1, oembed: !1 } }, data = data.replace(/[^a-z0-9-_:&;=%\?\[\]\/\.]/gi, ""); return defaultValues[provider] || (defaultValues[provider] = {}), defaultValues[provider].src = data, "youtube" === provider && (src = data.replace(/youtu(\.)?be([^\/]+)?\/(.+)/, function(a, b, c, d) { return d = d.replace(/(watch\?v=|v\/|embed\/)/, ""), "youtube" + (c = b && !c ? ".com" : c) + "/embed/" + (id = d.replace(/([^\?&#]+)/, function($0, $1) { return $1; })); }), defaultValues[provider].src = src), "vimeo" === provider && (-1 == data.indexOf("player.vimeo.com/video/") && (src = id = "", matches = /vimeo\.com\/(?:\w+\/){0,3}((?:[0-9]+\b)(?:\/[a-z0-9]+)?)/.exec(data)) && tinymce.is(matches, "array") && (matches = matches[1].split("/"), id = matches[0], 2 == matches.length && (src = matches[1]), data = "https://player.vimeo.com/video/" + id + (src ? "?h=" + src : "")), defaultValues[provider].src = data), "dailymotion" === provider && (id = "", (matches = /dai\.?ly(motion)?(.+)?\/(swf|video)?\/?([a-z0-9]+)_?/.exec(data)) && tinymce.is(matches, "array") && (id = matches.pop()), defaultValues[provider].src = "https://dailymotion.com/embed/video/" + id, -1 !== matches.indexOf("player.html?video=")) && (defaultValues[provider].src = matches), "spotify" === provider && (defaultValues[provider].src = data.replace(/open\.spotify\.com\/track\//, "open.spotify.com/embed/track/")), "ted" === provider && (defaultValues[provider].src = data.replace(/www\.ted.com\/talks\//, "embed.ted.com/talks/")), "twitch" === provider && (defaultValues[provider].src = data.replace(/twitch\.tv\//, "player.twitch.tv/?channel=")), "instagram" === provider && (data = (data = data.replace(/\/\?.+$/gi, "")).replace(/\/$/, ""), defaultValues[provider].src = data + "/embed/captioned"), "facebook" === provider && (src = "https://www.facebook.com/plugins/", -1 !== data.indexOf("/videos/") && (src += "video.php?href="), -1 !== data.indexOf("/posts/") && (src += "post.php?href=", defaultValues[provider].height = 247, data = data.replace(/\?.+$/, "")), defaultValues[provider].src = src + encodeURIComponent(data)), "calendly" === provider && (data = (data = data.replace(/\?.+$/, "")).replace(/\/$/, ""), defaultValues[provider].src = data), defaultValues[provider]; } function updateSandbox(editor, node) { var src = node.attr("src"); if (!node.attr("sandbox")) { var defaultAttributes = getMediaProps(0, { src: src }, isSupportedMedia(editor, src)); if (!1 === defaultAttributes.sandbox ? node.attr("sandbox", null) : node.attr("sandbox", defaultAttributes.sandbox || ""), isLocalUrl(editor, src)) node.attr("sandbox", null); else if (!1 === editor.getParam("media_iframes_sandbox", !0)) node.attr("sandbox", null); else try { var url = new URL(src), host = url.host.toLowerCase(), path = url.pathname.toLowerCase(), cleanHost = 0 === host.indexOf("www.") ? host.substring(4) : host, site = cleanHost + path; sandbox_iframes_exclusions.some(function(value) { return !!value && (value = (value = 0 === (value = (value = String(value).toLowerCase()).replace(/^[a-z0-9.+-]+:\/\//, "")).indexOf("www.") ? value.substring(4) : value).replace(/\/+$/, ""), 0 === site.indexOf(value) || 0 === cleanHost.indexOf(value)); }) && node.attr("sandbox", null); } catch (e) {} } } function normalizeUrl(u) { (u = (u || "").trim()).startsWith("//") ? u = "placeholder:" + u : /:\/\//i.test(u) || (u = "placeholder://" + u); try { var p = new URL(u); return (p.hostname.replace(/^www\./i, "") + p.pathname.replace(/\/+$/, "")).toLowerCase(); } catch (e) { return u.replace(/^https?:\/\//i, "").replace(/^www\./i, "").replace(/\/+$/, "").toLowerCase(); } } function isSupportedProvider(editor, url) { for (var providers = editor.settings.media_iframes_supported_media || Object.keys(mediaProviders), supported = !1, testUrl = ("string" == typeof providers && (providers = providers.split(",").map(function(s) { return s.trim(); })), normalizeUrl(url)), i = 0; i < providers.length; i++) { var key = providers[i]; if (key) { var trimmed = key.replace(/\/+$/, ""); if ((mediaProviders[key] || (trimmed = normalizeUrl(trimmed), trimmed = String(trimmed).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), new RegExp("^" + trimmed))).test(testUrl)) { supported = mediaProviders[key] ? key : "iframe"; break; } } } return supported; } function isSupportedIframe(editor, url) { var value; return !!isValidElement(editor, "iframe") && !!url && (editor.settings.media_iframes_allow_local ? isLocalUrl(editor, url) : (value = isSupportedProvider(editor, url), editor.settings.media_iframes_allow_supported ? !!isLocalUrl(editor, url) || value : value || !0)); } function isValidElement(editor, value) { return editor.getParam("media_valid_elements", "", "hash")[value]; } function isSupportedUrl(editor, tag, url) { return !editor.settings["media_" + tag + "_allow_local"] || isLocalUrl(editor, url); } function isSupportedMedia(editor, url, type) { var ext = (url = stripQuery(url = url || "")).split(".").pop().toLowerCase(), audioExts = [ "mp3", "ogg", "webm", "wav", "m4a", "aiff" ], videoExts = [ "mp4", "ogv", "ogg", "webm", "mov", "qt", "mpg", "mpeg", "divx" ]; if ((type = (type || "").toLowerCase()).startsWith("audio/")) { if (-1 === indexOf(audioExts, ext)) return !1; if (isValidElement(editor, "audio") && isSupportedUrl(editor, "audio", url)) return "audio"; } if (type.startsWith("video/")) { if (-1 === indexOf(videoExts, ext)) return !1; if (isValidElement(editor, "video") && isSupportedUrl(editor, "video", url)) return "video"; } return -1 !== indexOf(videoExts, ext) && isValidElement(editor, "video") && isSupportedUrl(editor, "video", url) ? "video" : -1 !== indexOf(audioExts, ext) && isValidElement(editor, "audio") && isSupportedUrl(editor, "audio", url) ? "audio" : -1 !== indexOf([ "swf", "pdf" ], ext) && isValidElement(editor, "object") && isSupportedUrl(editor, "object", url) ? "object" : !!isSupportedIframe(editor, url) && "iframe"; } var isAbsoluteUrl = function(url) { return !!url && (0 === url.indexOf("//") || 0 < url.indexOf("://")); }, isLocalUrl = function(editor, url) { return !isAbsoluteUrl(url) || (editor = editor.documentBaseURI.toRelative(url), !1 === isAbsoluteUrl(editor)); }, validateIframe = function(editor, node) { var src = node.attr("src"); return !!isNonEditable(editor, node) || 0 !== node.attributes.length && isSupportedIframe(editor, src); }, sanitize = function(editor, html) { var blocked, writer = new tinymce.html.Writer(); return new tinymce.html.SaxParser({ validate: !1, allow_conditional_comments: !1, special: "script,noscript", comment: function(text) { writer.comment(text); }, cdata: function(text) { writer.cdata(text); }, text: function(text, raw) { writer.text(text, raw); }, start: function(name, attrs, empty) { if (blocked = !0, "script" !== name && "noscript" !== name && "svg" !== name && !(attrs.map && "bookmark" == attrs.map["data-mce-type"] || attrs.map["data-mce-bogus"])) { for (var i = attrs.length - 1; 0 <= i; i--) { var attrName = attrs[i].name; 0 === attrName.indexOf("on") && (delete attrs.map[attrName], attrs.splice(i, 1)), "style" === attrName && (attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name)); } writer.start(name, attrs, empty), blocked = !1; } }, end: function(name) { blocked || writer.end(name); } }, htmlSchema).parse(html), writer.getContent(); }; function parseHTML(value) { var nodes = [], settings = (new SaxParser({ start: function(name, attrs) { ("source" !== name || !attrs.map) && "param" !== name && "embed" !== name && "track" !== name || nodes.push({ name: name, value: attrs.map }); } }).parse(value), { invalid_elements: "source,param,embed,track", forced_root_block: !1, verify_html: !0, validate: !0 }), schema = new tinymce.html.Schema(settings), settings = new Serializer(settings, schema).serialize(new DomParser(settings, schema).parse(value)); return nodes.push({ name: "html", value: settings }), nodes; } function stripQuery(value) { var match; return value && ((match = value.match(/^(.*?\.[a-z0-9]{2,10})(?:[?#&].*|$)/i)) ? match[1] : value); } for (var y, ext, lookup = {}, mimes = {}, items = "video/divx,divx,application/pdf,pdf,application/x-shockwave-flash,swf swfl,audio/mpeg,mpga mpega mp2 mp3,audio/ogg,ogg spx oga,audio/x-wav,wav,video/mpeg,mpeg mpg mpe,video/mp4,mp4 m4v,video/ogg,ogg ogv,video/webm,webm,video/quicktime,qt mov,video/x-flv,flv,video/3gpp,3gp,video/x-matroska,mkv".split(/,/), i = 0; i < items.length; i += 2) for (ext = items[i + 1].split(/ /), y = 0; y < ext.length; y++) mimes[ext[y]] = items[i]; each({ flash: { type: "application/x-shockwave-flash" }, quicktime: { type: "video/quicktime" }, divx: { type: "video/divx" }, video: { type: "video/mpeg" }, audio: { type: "audio/mpeg" }, iframe: {}, pdf: { type: "application/pdf" } }, function(value, key) { value.name = key, value.classid && (lookup[value.classid] = value), value.type && (lookup[value.type] = value), lookup[key.toLowerCase()] = value; }); var createPlaceholderNode = function(editor, node) { var placeHolder = new Node("img", 1); return placeHolder.shortEnded = !0, retainAttributesAndInnerHtml(editor, node, placeHolder), placeHolder.attr({ src: transparentSrc, "data-mce-object": node.name }), isNonEditable(editor, node) && (placeHolder.attr("contenteditable", "false"), placeHolder.attr("data-mce-resize", "false")), placeHolder; }; function createReplacementNode(editor, node) { node = new tinymce.html.Serializer().serialize(node); return editor.dom.create("div", {}, node).firstChild; } var createPreviewNode = function(editor, node) { var name = node.name, msg = (msg = editor.getLang("media.preview_hint", "Click to activate, ALT + Click to toggle placeholder")).replace(/%s/g, "ALT"), src = (node.attr("autoplay") && (node.attr("data-mce-p-autoplay", node.attr("autoplay")), node.attr("autoplay", null)), "iframe" == name && node.attr("src") && (src = node.attr("src"), node.attr("data-mce-p-src", src), node.attr("src", src.replace("autoplay=1", "autoplay=0"))), [ "mce-object-preview", "mce-object-" + name ]), styles = {}, styleVal = editor.dom.parseStyle(node.attr("style")); return each([ "width", "height" ], function(key) { var val = node.attr(key) || styleVal[key] || ""; val && !/(%|[a-z]{1,3})$/.test(val) && (val += "px"), styles[key] = val; }), each(styleVal, function(value, key) { /(margin|float|align)/.test(key) && (styles[key] = value); }), isCenterAligned(styleVal) && (src.push("mce-object-preview-center"), delete styles["margin-left"], delete styles["margin-right"]), styleVal.float && (src.push("mce-object-preview-" + styleVal.float), delete styles.float), src = Node.create("span", { contentEditable: "false", "data-mce-contenteditable": "true", "data-mce-object": name, class: src.join(" "), "aria-details": msg, "data-mce-resize": function(node) { return "video" === node.name ? "proportional" : "iframe" === node.name ? isSupportedMedia(editor, node.attr("src")) ? "proportional" : "true" : "false"; }(node), style: editor.dom.serializeStyle(styles) }), msg = Node.create(name, { src: node.attr("src") }), retainAttributesAndInnerHtml(editor, node, msg), name = Node.create("span", { class: "mce-object-shim" }), src.append(msg), src.append(name), src; }; function processNodeAttributes(editor, tag, node) { var key, params, attribs = {}, styles = {}, boolAttrs = editor.schema.getBoolAttrs(); for (key in node.attributes.map) { var align, styleObject, value = node.attributes.map[key]; "src" === key && "img" === node.name || "draggable" === key || "contenteditable" === key || 0 === key.indexOf("on") || 0 === (key = "data-mce-width" !== (key = 0 === key.indexOf("data-mce-p-") ? key.substring(11) : key) && "data-mce-height" !== key ? key : key.substring(9)).indexOf("data-mce-") || "span" == node.name && node.attr("data-mce-object") || !editor.schema.isValid(tag, key) && -1 == key.indexOf("-") || ("class" === key && ((align = value.match(/mce-object-preview-(left|center|right)/)) && (styles = extend(styles, alignStylesMap[align[1]]), node.attr("style") || node.attr("style", editor.dom.serializeStyle(styles))), value = function(value) { return value && (value = value.replace(/\s?mce-([\w-]+)/g, "").replace(/\s+/g, " "), value = 0 < (value = tinymce.trim(value)).length ? value : null), value || null; }(value)), "style" === key && value && (styleObject = editor.dom.parseStyle(value), each([ "width", "height" ], function(key) { var attrValue; return "audio" === tag || !styleObject[key] || ((attrValue = tinymce.is(node.attr(key)) ? node.attr(key) : "") && !/\D/.test(attrValue) && (attrValue += "px"), void (attrValue && attrValue == styleObject[key] && delete styleObject[key])); }), styleObject = extend(styleObject, styles), value = (value = editor.dom.serializeStyle(styleObject)) || null), "src" !== key && "poster" !== key && "data" !== key || (value = editor.convertURL(value)), boolAttrs[key] && (value = key), attribs[key] = value); } return node.attr("data") || (params = node.getAll("param")).length && (value = (params = params[0]).attr("src") || params.attr("url") || null) && (attribs.src = editor.convertURL(value), params.remove()), attribs; } function nodeToMedia(editor, node) { var elm, parent, embed, tag = node.attr("data-mce-object"), node = (isResponsiveMedia(node) && ((parent = node.parent).attr("contenteditable", null), parent.attr("data-mce-contenteditable", null)), elm = new Node(tag, 1), parent = processNodeAttributes(editor, tag, node), /\s*mce-object-preview\s*/.test(node.attr("class")) && node.firstChild && node.firstChild.name === tag && (node = node.firstChild), parent = extend(parent, processNodeAttributes(editor, tag, node)), elm.attr(parent), node.attr("data-mce-html")); return node && (node = parseHTML(unescape(node)), each(node, function(child) { var inner; "html" === child.name ? ((inner = new Node("#text", 3)).raw = !0, inner.value = sanitize(editor, child.value), elm.append(inner)) : ((inner = new Node(child.name, 1)).shortEnded = !0, each(child.value, function(val, key) { htmlSchema.isValid(inner.name, key) && inner.attr(key, val); }), elm.append(inner), "source" == inner.name && inner.attr("src") == elm.attr("src") && elm.attr("src", null)); })), elm.attr("data-mce-html", null), "object" === tag && 0 === elm.getAll("embed").length && "application/x-shockwave-flash" != (node = elm.attr("type")) && "application/pdf" != node && ((embed = new Node("embed", 1)).shortEnded = !0, each(parent, function(value, name) { "data" === name && embed.attr("src", value), htmlSchema.isValid("embed", name) && embed.attr(name, value); }), elm.append(embed)), "iframe" === tag && updateSandbox(editor, elm), elm; } function convertMediaToPlaceholder(editor, node) { var media_live_embed = editor.settings.media_live_embed, strict_embed = !1 !== editor.settings.media_strict_embed; if (node.parent.attr("data-mce-object")) return !1; if (node.firstChild && "bookmark" == node.firstChild.attr("data-mce-type") && node.firstChild.remove(), "iframe" === node.name) if (node.attr("src")) { if (!1 === validateIframe(editor, node)) return node.remove(), !1; } else media_live_embed = !1; if (!isValidElement(editor, node.name) && !isNonEditable(editor, node)) return node.remove(), !1; if ("iframe" !== node.name) { var src = node.attr("src") || node.attr("data") || "", type = node.attr("type") || node.attr("data-mce-p-type") || ""; if (!src) { if ("video" === node.name || "audio" === node.name) { for (var sources = node.getAll("source"), j = 0; j < sources.length; j++) { var source = sources[j]; !source.attr("src") || isSupportedUrl(editor, node.name, source.attr("src")) || (source.remove(), sources.splice(j, 1)); } sources.length && (src = sources[0].attr("src"), type = sources[0].attr("type") || type); } if ("object" === node.name) { var params = node.getAll("param"); if (params.length) for (j = 0; j < params.length; j++) { var param = params[j]; param.attr("movie") && (src = param.attr("value")); } src || (embed = node.getAll("embed")).length && (src = embed[0].attr("src"), type = embed[0].attr("type") || type); } } if (!src) return media_live_embed = !1; if (!isSupportedUrl(editor, node.name, src)) return node.remove(), !1; if (strict_embed) { var embed, newName = isSupportedMedia(editor, src, type); if (!newName) return node.remove(), !1; if ("iframe" == newName && !isSupportedProvider(editor, src)) return node.remove(), !1; newName !== node.name && each(node.children(), function(elm) { editor.schema.isValidChild(newName, elm.name) || elm.remove(); }), node.name = newName, node.attr("src", src), "object" == newName && (node.attr("data", src), node.attr("src", null), embed = stripQuery(src).split(".").pop(), node.attr("type", mimes[embed] || "application/octet-stream")); } } !media_live_embed || isObjectEmbed(node.name) || isResponsiveMedia(node) || isNonEditable(editor, node) ? isWithinEmbed(node) || (isResponsiveMedia(node) && node.parent.attr({ contentEditable: "false", "data-mce-contenteditable": "true" }), node.replace(createPlaceholderNode(editor, node))) : isWithinEmbed(node) || node.replace(createPreviewNode(editor, node)); } var retainAttributesAndInnerHtml = function(editor, sourceNode, targetNode) { var attrName, attrValue, attribs, ai, innerHtml, boolAttrs = editor.schema.getBoolAttrs(), src = sourceNode.attr("src"), style = (src && (defaultAttributes = getMediaProps(0, { src: src }, isSupportedMedia(editor, src)), each(defaultAttributes, function(val, name) { tinymce.is(sourceNode.attr(name)) || name in boolAttrs || ("style" === name && tinymce.is(val, "object") && (val = editor.dom.serializeStyle(val)), sourceNode.attr(name, val)); }), updateSandbox(editor, sourceNode)), editor.dom.parseStyle(sourceNode.attr("style"))), defaultAttributes = sourceNode.attr("width") || style.width || "", height = sourceNode.attr("height") || style.height || "", style = editor.dom.parseStyle(sourceNode.attr("style")); for (each([ "bgcolor", "align", "border", "vspace", "hspace" ], function(na) { var v = sourceNode.attr(na); if (v) { switch (na) { case "bgcolor": style["background-color"] = v; break; case "align": /^(left|right)$/.test(v) ? style.float = v : style["vertical-align"] = v; break; case "vspace": style["margin-top"] = v, style["margin-bottom"] = v; break; case "hspace": style["margin-left"] = v, style["margin-right"] = v; break; default: style[na] = v; } sourceNode.attr(na, null); } }), ai = (attribs = sourceNode.attributes).length; ai--; ) attrName = attribs[ai].name, attrValue = attribs[ai].value, "data-mce-html" === attrName || "data-mce-clipboard-media" === attrName ? targetNode.attr(attrName, attrValue) : -1 !== attrName.indexOf("data-mce") && -1 === attrName.indexOf("data-mce-p-") || (-1 !== (attrName = 0 === (attrName = "img" !== targetNode.name || htmlSchema.isValid("img", attrName) && "src" != attrName ? attrName : "data-mce-p-" + attrName).indexOf("on") && editor.settings.allow_event_attributes ? "data-mce-p-" + attrName : attrName).indexOf("-") ? targetNode.attr(attrName, attrValue) : (htmlSchema.isValid(targetNode.name, attrName) && targetNode.attr(attrName, attrValue), tinymce.is(boolAttrs[attrName]) && "false" == attrValue && targetNode.attr(attrName, null), "sandbox" == attrName && !1 === attrValue && targetNode.attr(attrName, null))); defaultAttributes && !style.width && (style.width = /^[0-9.]+$/.test(defaultAttributes) ? defaultAttributes + "px" : defaultAttributes), height && !style.height && (style.height = /^[0-9.]+$/.test(height) ? height + "px" : height); var agent, defaultAttributes = [], height = (sourceNode.attr("class") && (defaultAttributes = sourceNode.attr("class").replace(/mce-(\S+)/g, "").replace(/\s+/g, " ").trim().split(" ")), lookup[sourceNode.attr("type")] || lookup[sourceNode.attr("classid")] || { name: sourceNode.name }); defaultAttributes.push("mce-object mce-object-" + height.name), "audio" == sourceNode.name && (agent = navigator.userAgent.match(/(Chrome|Safari|Gecko)/)) && defaultAttributes.push("mce-object-agent-" + agent[0].toLowerCase()), targetNode.attr("class", tinymce.trim(defaultAttributes.join(" "))), (agent = editor.dom.serializeStyle(style)) && targetNode.attr("style", agent), src || (defaultAttributes = sourceNode.getAll("source")).length && (agent = defaultAttributes[0], src = "src", "img" === targetNode.name && (src = "data-mce-p-" + src), targetNode.attr(src, agent.attr("src"))), "object" === sourceNode.name && (sourceNode.attr("data") || (defaultAttributes = sourceNode.getAll("param"), each(defaultAttributes, function(param) { if ("src" === param.attr("name") || "url" === param.attr("name")) return targetNode.attr({ "data-mce-p-data": param.attr("value") }), !1; })), targetNode.attr("data-mce-p-type", height.type)), (innerHtml = sourceNode.firstChild ? new tinymce.html.Serializer({ inner: !0 }).serialize(sourceNode) : innerHtml) && (targetNode.attr("data-mce-html", escape(sanitize(editor, innerHtml))), targetNode.empty()); }, isWithinEmbed = function(node) { for (;node = node.parent; ) if (node.attr("data-mce-object")) return !0; return !1; }; function htmlToData(ed, mediatype, html) { var data = { innerHTML: "" }; try { html = unescape(html); } catch (e) {} html = parseHTML(html); return each(html, function(node, i) { var val; "source" == node.name && (data.source || (data.source = []), val = ed.convertURL(node.value.src), data.source.push(val)), "param" == node.name && (val = node.value.name, -1 !== tinymce.inArray([ "src", "data", "movie", "url", "source" ], val) && (node.value.value = ed.convertURL(node.value.value)), data[node.value.name] = node.value.value), "track" == node.name && (data.innerHTML += ed.dom.createHTML(node.name, node.value)), "html" == node.name && (data.innerHTML += node.value); }), data; } function updateMedia(ed, data, elm) { var preview, attribs = {}, node = ed.dom.getParent(elm || ed.selection.getNode(), "[data-mce-object]"), boolAttrs = ed.schema.getBoolAttrs(), nodeName = (boolAttrs.preload = !0, node.nodeName.toLowerCase()), elm = (each([ "block", "center", "left", "right" ], function(val) { ed.dom.removeClass(node, "mce-object-preview-" + val); }), -1 !== node.className.indexOf("mce-object-preview") && (nodeName = (preview = node).getAttribute("data-mce-object"), node = ed.dom.select(nodeName, node)[0]), preview && preview.removeAttribute("style"), each(data, function(value, name) { if ("innerHTML" === name && value) return attribs["data-mce-html"] = escape(value), !0; if ("img" !== nodeName && !htmlSchema.isValid(nodeName, name) && -1 == name.indexOf("-")) return !0; if (name in boolAttrs && ("false" == value || !value) && (value = null, "autoplay" == name) && (attribs["data-mce-p-" + name] = null), "img" === nodeName && (!htmlSchema.isValid(nodeName, name) || "src" === name) && null !== value) return attribs["data-mce-p-" + name] = value, !0; if ("iframe" == nodeName && "src" == name && (value = (attribs["data-mce-p-" + name] = value).replace("autoplay=1", "autoplay=1")), "class" == name && value) return ed.dom.addClass(node, value), !0; if ("style" == name) { if (value) return tinymce.is(value, "object") && (value = ed.dom.serializeStyle(value)), ed.dom.setStyles(node, ed.dom.parseStyle(value)), !0; value = null; } attribs[name] = value = "sandbox" == name && !1 === value ? null : value; }), ed.dom.setAttribs(node, attribs), ed.dom.parseStyle(node.getAttribute("style"))); preview && (isCenterAligned(elm) && ed.dom.addClass(preview, "mce-object-preview-center"), elm.float) && ed.dom.addClass(preview, "mce-object-preview-" + elm.float), each([ "width", "height" ], function(key) { attribs[key] && (ed.dom.setStyle(node, key, attribs[key]), preview) && ed.dom.setStyle(preview, key, attribs[key]); }); } tinymce.PluginManager.add("media", function(ed, url) { var custom_sandbox_iframes_exclusions = ed.getParam("media_iframes_sandbox_exclusions"); function isMediaObject(node) { return node = node || ed.selection.getNode(), ed.dom.getParent(node, "[data-mce-object]"); } function isMediaNode(node) { return node && isMediaObject(node); } function findMediaNode(elm, nodeName) { nodeName = ed.dom.select(nodeName, elm); return nodeName.length ? nodeName[0] : null; } function objectActivate(ed, e) { var node = isMediaObject(e.target); node && !isNonEditable(ed, node) && (ed.selection.select(node), ed.dom.getAttrib(node, "data-mce-selected") && node.setAttribute("data-mce-selected", "2"), "mousedown" === e.type && e.altKey && "IMG" !== node.nodeName && (e.target = function(editor, node) { var ifr = new tinymce.html.DomParser({}, editor.schema).parse(node.innerHTML).firstChild, ifr = createReplacementNode(editor, createPlaceholderNode(editor, ifr)); return editor.dom.replace(ifr, node), ifr; }(ed, node)), e.stopImmediatePropagation(), e.preventDefault()); } function setClipboardData(ed, e) { var node, e = e.clipboardData; e && (node = isMediaObject()) && (isNonEditable(ed, node) ? e.clearData() : (ed.selection.select(node), ed = { html: node = ed.selection.getContent({ contextual: !0 }), text: node.toString() }, e.clearData(), e.setData("text/html", ed.html), e.setData("text/plain", ed.text))); } function updatePreviewSelection(ed) { each(ed.dom.select(".mce-object-preview", ed.getBody()), function(node) { !ed.dom.isBlock(node.parentNode) || node.previousSibling || node.nextSibling || ed.dom.insertAfter(ed.dom.create("br", { "data-mce-bogus": 1 }), node); }); } custom_sandbox_iframes_exclusions && "string" == typeof custom_sandbox_iframes_exclusions && (custom_sandbox_iframes_exclusions = custom_sandbox_iframes_exclusions.split(",").map(function(item) { return item.trim(); })), sandbox_iframes_exclusions = sandbox_iframes_exclusions.concat(custom_sandbox_iframes_exclusions), ed.onMouseDown.add(objectActivate), ed.onKeyDown.add(objectActivate), ed.onNodeChange.addToTop(function(ed, cm, n, collapsed, o) { !isMediaNode(n) || isNonEditable(ed, n) || o.contenteditable || (o.contenteditable = !0); }), ed.onPreInit.add(function() { var editor; ed.onUpdateMedia.add(function(ed, o) { o.before && o.after && isSupportedMedia(ed, o.before) && each(ed.dom.select("video.mce-object, audio.mce-object, iframe.mce-object, img.mce-object"), function(elm) { var html, src = elm.getAttribute("src"); "IMG" === elm.nodeName && (src = elm.getAttribute("data-mce-p-src")), "VIDEO" !== elm.nodeName && "AUDIO" !== elm.nodeName || ((html = elm.getAttribute("data-mce-html")) && (html = ed.dom.create(elm.nodeName, {}, unescape(html)), each(html.childNodes, function(el) { "SOURCE" == el.nodeName && el.getAttribute("src") == o.before && el.setAttribute("src", o.after); }), elm.setAttribute("data-mce-html", escape(html.innerHTML))), (html = elm.getAttribute("poster")) && html == o.before && elm.setAttribute("poster", o.after)), src == o.before && updateMedia(ed, { src: o.after }, elm); }); }), "html4" === ed.settings.schema && (ed.schema.addValidElements("iframe[longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height|allowfullscreen|seamless|*]"), ed.schema.addValidElements("video[src|autobuffer|autoplay|loop|controls|width|height|poster|*],audio[src|autobuffer|autoplay|loop|controls|*],source[src|type|media|*],embed[src|type|width|height|*]")), ed.parser.addNodeFilter("iframe,video,audio,object,embed", (editor = ed, function(nodes) { for (var node, i = nodes.length; i--; ) (node = nodes[i]).parent && convertMediaToPlaceholder(editor, node); })), ed.serializer.addAttributeFilter("data-mce-object", function(nodes, name) { for (var node, i = nodes.length; i--; ) (node = nodes[i]).parent && !function(editor, node) { editor = nodeToMedia(editor, node); isObjectEmbed(editor.name) || node.empty(), node.replace(editor), node.empty(); }(ed, node); }), ed.dom.bind(ed.getDoc(), "touchstart", function(e) { objectActivate(ed, e); }); }), ed.onInit.add(function() { var settings = ed.settings; each([ "left", "right", "center" ], function(align) { ed.formatter.register("align" + align, { selector: "span[data-mce-object]", collapsed: !1, ceFalseOverride: !0, classes: "mce-object-preview-" + align, deep: !0, onremove: function(elm) { each([ "left", "right", "center" ], function(val) { ed.dom.removeClass(elm, "mce-object-preview-" + val); }); } }); }), ed.theme.onResolveName.add(function(theme, o) { var name, node = ed.dom.getParent(o.node, "[data-mce-object]"); node && (name = node.getAttribute("data-mce-object"), o.node !== node ? o.name = "" : ("IMG" !== node.nodeName && (node = ed.dom.select("iframe,audio,video", node), node = ed.dom.getAttrib(node, "src") || ed.dom.getAttrib(node, "data-mce-p-src") || "") && (node = isSupportedMedia(ed, node) || "") && (name = node[0].toUpperCase() + node.slice(1)), o.name = name = "object" === name ? "media" : name)); }), ed.onObjectResized.add(function(ed, elm, width, height) { isMediaNode(elm) && (ed.dom.hasClass(elm, "mce-object-preview") && (ed.dom.setStyles(elm, { width: "", height: "" }), elm = elm.firstChild), ed.dom.setAttrib(elm, "data-mce-width", width), ed.dom.setAttrib(elm, "data-mce-height", height), ed.dom.removeAttrib(elm, "width"), ed.dom.removeAttrib(elm, "height"), ed.dom.setStyles(elm, { width: width, height: height })); }), ed.dom.bind(ed.getDoc(), "keyup click", function(e) { var node = ed.selection.getNode(); node.hasAttribute("data-mce-object") && (each(ed.dom.select(".mce-object-preview video, .mce-object-preview audio"), function(elm) { elm.pause(); }), node) && "IMG" === node.nodeName && "object" !== node.getAttribute("data-mce-object") && !isNonEditable(ed, node) && "click" === e.type && e.altKey && (e.target = function(editor, node) { for (var name, placeholder = new Node("img", 1), attributes = (placeholder.shortEnded = !0, node.attributes), i = attributes.length; i--; ) name = attributes[i].nodeName, placeholder.attr(name, "" + node.getAttribute(name)); var elm = nodeToMedia(editor, placeholder), elm = createReplacementNode(editor, createPreviewNode(editor, elm)); return editor.dom.replace(elm, node), elm; }(ed, node)); }), ed.onBeforeExecCommand.add(function(ed, cmd, ui, values, o) { var range; !cmd || "ApplyFormat" != cmd && "RemoveFormat" != cmd && "ToggleFormat" != cmd || (cmd = ed.selection.getNode(), isMediaNode(cmd = tinymce.is(values, "object") && values.node ? values.node : cmd) && "IMG" !== cmd.nodeName && ((cmd = findMediaNode(cmd, cmd.getAttribute("data-mce-object"))) && ((range = ed.dom.createRng()).setStart(cmd, 0), range.setEnd(cmd, 0), (ed = ed.selection.getSel()).removeAllRanges(), ed.addRange(range)), cmd) && tinymce.is(values, "object") && (values.node = cmd)); }), ed.onBeforeSetContent.add(function(ed, o) { settings.media_live_embed && (o.content = o.content.replace(/<br data-mce-caret="1"[^>]+>/gi, ""), /^<(iframe|video|audio)([^>]+)><\/(iframe|video|audio)>$/.test(o.content)) && (o.content += '<br data-mce-caret="1" />'); }); }), ed.onKeyDown.add(function(ed, e) { var node = ed.selection.getNode(); e.keyCode !== VK.BACKSPACE && e.keyCode !== VK.DELETE || node && isMediaNode(node = node === ed.getBody() ? e.target : node) && (isNonEditable(ed, node) ? e.preventDefault() : (node = ed.dom.getParent(node, "[data-mce-object]") || node, ed.dom.remove(node), ed.nodeChanged())); }), ed.onCopy.add(setClipboardData), ed.onCut.add(setClipboardData), ed.onSetContent.add(function(ed, o) { updatePreviewSelection(ed); }), ed.onWfEditorSave.add(function(ed, o) { var body = DOM.create("div", {}, o.content); each(DOM.select("audio,video,object,iframe,embed", body), function(tag) { var name = tag.nodeName.toLowerCase(); isValidElement(ed, name) || isNonEditable(ed, tag) || DOM.remove(tag); }), o.content = body.innerHTML; }), tinymce.util.MediaEmbed = { dataToHtml: function(name, data, innerHtml) { var html = ""; return html = "iframe" !== name && "video" !== name && "audio" !== name ? html : "string" == typeof data ? data : ed.dom.createHTML(name, data, innerHtml); } }, ed.addCommand("insertMediaHtml", function(ui, value) { var data = {}, name = "iframe", innerHtml = "", value = ("string" == typeof value ? data = value : value.name && value.data && (name = value.name, data = value.data, innerHtml = value.innerHtml || ""), tinymce.util.MediaEmbed.dataToHtml(name, data, innerHtml)); ed.execCommand("mceInsertContent", !1, value, { skip_undo: 1 }), updatePreviewSelection(ed), ed.undoManager.add(); }), extend(this, { getMediaData: function() { return function(ed) { var data = {}, node = ed.dom.getParent(ed.selection.getNode(), "[data-mce-object]"), boolAttrs = ed.schema.getBoolAttrs(); if (node && 1 == node.nodeType) { if (-1 !== node.className.indexOf("mce-object-preview")) { for (i = (attribs = node.attributes).length - 1; 0 <= i; i--) "contenteditable" != (name = attribs.item(i).name) && -1 == name.indexOf("data-mce-") && -1 == name.indexOf("aria-") && (data[name] = ed.dom.getAttrib(node, name)); node = ed.dom.select("audio,video,iframe", node)[0]; } var i, attribs, mediatype = node.getAttribute("data-mce-object") || node.nodeName.toLowerCase(), html = ed.dom.getAttrib(node, "data-mce-html"); for ((data = html ? extend(data, htmlToData(ed, 0, html)) : data).src = ed.dom.getAttrib(node, "data-mce-p-src") || ed.dom.getAttrib(node, "data-mce-p-data") || ed.dom.getAttrib(node, "src"), data.src = ed.convertURL(data.src), data.src == transparentSrc && (data.src = ""), i = (attribs = node.attributes).length - 1; 0 <= i; i--) { var value, name = attribs.item(i).name; value = ed.dom.getAttrib(node, name), "data" !== (name = -1 !== name.indexOf("data-mce-p-") ? name.substr(11) : name) && "src" !== name && "type" !== name && "codebase" !== name && "classid" !== name && ("poster" === name && (value = ed.convertURL(value)), "flashvars" === name && (value = decodeURIComponent(value)), -1 === name.indexOf("data-mce-")) && ("class" == name && (value = value.replace(/mce-[\w\-]+/g, "").replace(/\s+/g, " ").trim()), boolAttrs[name] && (value = !0), data[name] = value); } each([ "width", "height" ], function(key) { var val = ed.dom.getAttrib(node, key); val ? data[key] = val : (val = ed.dom.getStyle(node, key)) && -1 === val.indexOf("%") && !isNaN(parseInt(val, 10)) && (data[key] = parseInt(val, 10)); }), data.mediatype = mediatype; } return data; }(ed); }, getMediaProps: function(data, provider) { return getMediaProps(0, data, provider); }, updateMedia: function(data) { return updateMedia(ed, data); }, isMediaObject: isMediaObject, isSupportedMedia: function(url) { return isSupportedMedia(ed, url); }, getMediaHtml: function(data) { return function(ed, value) { var nodeName = "iframe", attribs = {}, innerHTML = "", src = stripQuery((value = "string" == typeof value ? { src: value } : value).src), boolAttrs = (/\.(mp4|m4v|ogg|webm|ogv)$/.test(src) ? nodeName = "video" : /\.(mp3|m4a|oga)$/.test(src) && (nodeName = "audio"), nodeName = value.mediatype || nodeName, ed.schema.getBoolAttrs()); return each(value, function(val, name) { if ("" == val && !boolAttrs[name]) return !0; value.innerHTML && (innerHTML = value.innerHTML), !ed.schema.isValid(nodeName, name) && -1 === name.indexOf("-") || ("class" == name && (val = val.replace(/mce-(\S+)/g, "").replace(/\s+/g, " ").trim()), attribs[name] = val); }), "iframe" != nodeName || attribs.sandbox || (attribs.sandbox = ""), ed.dom.createHTML(nodeName, attribs, innerHTML); }(ed, data); }, isMediaHtml: function(html) { return !!(html = html.trim().match(/^<([a-zA-Z0-9]+)\b/)) && isPreviewMedia(html[1].toLowerCase()); }, convertMediaToPlaceholder: function(node) { return convertMediaToPlaceholder(ed, node); } }); }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/joomla/plugin.js 0000604 00000012066 15246331270 0022232 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var Joomla = window.Joomla || null, each = tinymce.each, DOM = tinymce.DOM; tinymce.PluginManager.add("joomla", function(ed, url) { this.createControl = function(n, cm) { var plugins, ctrl; return "joomla" === n && ((n = ed.settings.joomla_xtd_buttons || {})[ed.id] || n.__jce__ || n.ckeditor) && (plugins = n[ed.id] || n.__jce__ || n.ckeditor || []).length ? (ctrl = cm.createSplitButton("joomla", { title: "joomla.buttons", icon: "joomla" }), function(ed) { var ckModal = DOM.select('.modal[id^="ckeditor_"][id$="_modal"]'); each(ckModal, function(modal) { var newModal = modal.cloneNode(!0), id = newModal.id, url = newModal.getAttribute("data-url"), ifr = newModal.getAttribute("data-iframe"), ifr = (url && id && (id = id.replace("ckeditor_", ed.id + "_"), url = url.replace(/=ckeditor\b/g, "=" + ed.id)), DOM.create("div", {}, DOM.decode(ifr))), iframe = ifr.firstChild; iframe && iframe.setAttribute("src", url), newModal.setAttribute("id", id), newModal.setAttribute("data-url", url), newModal.setAttribute("data-iframe", ifr.innerHTML), newModal.innerHTML = newModal.innerHTML.replace(/'ckeditor'/g, `'${ed.id}'`), document.body.appendChild(newModal), Joomla.initialiseModal(newModal), DOM.remove(modal); }); }(ed), ctrl.onRenderMenu.add(function(ctrl, menu) { var ed = ctrl.editor, vp = ed.dom.getViewPort(), jModalCloseCore = (each(plugins, function(plg, name) { var href = (href = plg.href || "") && (href = (href = ed.dom.decode(href)).replace(/(__jce__|ckeditor)/gi, ed.id)).replace(/(e_name|editor)=([\w_]+)/gi, "$1=" + ed.id), item = (plg.id = plg.id.replace(/(__jce__|ckeditor)/gi, ed.id), menu.add({ id: ed.dom.uniqueId(), title: plg.title, icon: plg.icon, svg: plg.svg || "", onclick: function(e) { var buttons = [ { id: "cancel", title: ed.getLang("cancel", "Cancel") } ]; if (ed.lastSelectionBookmark = ed.selection.getBookmark(1), href) { plg.options && plg.options.confirmCallback && buttons.unshift({ id: "confirm", title: plg.options.confirmText || ed.getLang("insert", "Insert"), classes: "primary", onsubmit: function(e) { new Function(plg.options.confirmCallback).apply(); } }); var modal = DOM.get(plg.id + "_modal"); if (modal) modal.open(); else if (plg.action) try { ed.editorXtdButtons(plg); } catch (e) { console.log("This option is not supported"); } else ed.windowManager.open({ file: href, title: plg.title, width: Math.max(vp.w - 40, 896), height: Math.max(vp.h - 40, 707), size: "mce-modal-landscape-full", addver: !1, buttons: buttons }), Joomla && Joomla.Modal && Joomla.Modal.setCurrent(ed.windowManager); } return plg.onclick && new Function(plg.onclick).apply(), item.setSelected(!1), !1; } })); }), function() {}), SBoxClose = (window.jModalClose && (jModalCloseCore = window.jModalClose), window.jModalClose = function() { var wm = ed.windowManager; return wm.count ? wm.close() : jModalCloseCore(); }, function() {}); window.SqueezeBox ? SBoxClose = window.SqueezeBox.close : window.SqueezeBox = {}, window.SqueezeBox.close = function() { var wm = ed.windowManager; return wm.count ? wm.close() : SBoxClose(); }; }), ed.onRemove.add(function() { ctrl.destroy(); }), ctrl) : null; }; }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/core/plugin.js 0000604 00000015751 15246331342 0021705 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var Entities = tinymce.html.Entities, each = tinymce.each, extend = tinymce.extend, DomParser = tinymce.html.DomParser, HtmlSerializer = tinymce.html.Serializer, Dispatcher = tinymce.util.Dispatcher, DOM = tinymce.DOM; tinymce.PluginManager.add("core", function(ed, url) { var store; ed.onUpdateMedia = new Dispatcher(), ed.onWfEditorSave = new Dispatcher(); var contentLoaded = !1, elm = ed.getElement(); var startup_content_html = ed.settings.startup_content_html || "", quoteMap = (ed.onBeforeRenderUI.add(function() { if (startup_content_html && elm && !contentLoaded && ("TEXTAREA" === elm.nodeName ? "" == elm.value : "" == elm.innerHTML)) return contentLoaded = !0, value = startup_content_html, (value = Entities.decode(value)) && ("TEXTAREA" === elm.nodeName ? elm.value = value : elm.innerHTML = value), !0; var value; }), { en: { '"': "“{$selection}”", "'": "‘{$selection}’" }, de: { '"': "„{$selection}“", "'": "‚{$selection}’" } }); function fakeRootBlock() { ed.settings.editable_root = "rootblock", ed.onPreInit.addToTop(function() { var selection = ed.selection, dom = ed.dom; dom.settings.root_element = ed.settings.editable_root, ed.schema.addValidElements("#mce:root[id|data-mce-root]"), ed.schema.children["mce:root"] = ed.schema.children.body, ed.schema.children.body["mce:root"] = {}, ed.serializer.addAttributeFilter("data-mce-root", function(nodes) { for (var i = nodes.length; i--; ) nodes[i].unwrap(); }), ed.serializer.addAttributeFilter("data-mce-bogus", function(nodes) { for (var i = nodes.length; i--; ) nodes[i].remove(); }), ed.onBeforeSetContent.add(function(editor, o) { o.content || (o.content = '<br data-mce-bogus="1">'), o.content = '<mce:root id="' + ed.settings.editable_root + '" data-mce-root="1">' + o.content + "</mce:root>"; }), ed.onSetContent.addToTop(function(ed, o) { var rng, ed = dom.get(ed.settings.editable_root); ed && (/^( | |\s|\u00a0|)$/.test(ed.innerHTML) && (ed.innerHTML = '<br data-mce-bogus="1">'), (rng = dom.createRng()).setStart(ed, 0), rng.setEnd(ed, 0), selection.setRng(rng)); }), ed.onSaveContent.add(function(ed, o) { " " === o.content && (o.content = ""); }), ed.undoManager.onBeforeAdd.add(function(um, level) { var node, container = ed.dom.create("div", {}, level.content); (node = container.firstChild) && 1 == node.nodeType && node.hasAttribute("data-mce-root") && (level.content = container.firstChild.innerHTML); }); }); } ed.onKeyUp.add(function(ed, e) { var map = quoteMap[ed.settings.language] || quoteMap.en; !e.ctrlKey || e.altKey || '"' != e.key && "'" != e.key || (map = map[e.shiftKey ? '"' : "'"], ed.undoManager.add(), ed.execCommand("mceReplaceContent", !1, map)); }), ed.onExecCommand.add(function(ed, cmd, ui, val, args) { "Undo" != cmd && "Redo" != cmd && "mceReApply" != cmd && "mceRepaint" != cmd && (store = { cmd: cmd, ui: ui, value: val, args: args }); }), ed.addShortcut("ctrl+alt+z", "", "mceReApply"), ed.addCommand("mceReApply", function() { if (store && store.cmd) return ed.execCommand(store.cmd, store.ui, store.value, store.args); }), ed.onPreInit.add(function() { var pb; ed.onUpdateMedia.add(function(ed, o) { o.before && o.after && (each(ed.dom.select("img,poster"), function(elm) { var after, stamp, src = elm.getAttribute("src"); (src = src && -1 !== src.indexOf("?") ? src.substring(0, src.indexOf("?")) : src) == o.before && (after = o.after, stamp = "?" + new Date().getTime(), -1 !== src.indexOf("?") && -1 === after.indexOf("?") && (after += stamp), ed.dom.setAttribs(elm, { src: after, "data-mce-src": o.after })), elm.getAttribute("srcset") && function(elm, o) { var srcset = elm.getAttribute("srcset"); if (srcset) { for (var sets = srcset.split(","), i = 0; i < sets.length; i++) { var values = sets[i].trim().split(" "); o.before == values[0] && (values[0] = o.after), sets[i] = values.join(" "); } elm.setAttribute("srcset", sets.join(",")); } }(elm, o); }), each(ed.dom.select("a[href]"), function(elm) { ed.dom.getAttrib(elm, "href") == o.before && ed.dom.setAttribs(elm, { href: o.after, "data-mce-href": o.after }); })); }), ed.onWfEditorSave.add(function(ed, o) { o.content = function(ed, content) { var args, parser, settings; return ed.settings.validate ? (args = { no_events: !0, format: "html", get: !0, load: !0 }, extend(settings = {}, ed.settings), args.content = content, ed.onBeforeGetContent.dispatch(ed, args), settings.forced_root_block = !1, settings.validate = !0, parser = new DomParser(settings, ed.schema), settings = new HtmlSerializer(settings, ed.schema), args.content = settings.serialize(parser.parse(args.content), args), ed.onPostProcess.dispatch(ed, args), args.content) : content; }(ed, o.content); }), (pb = DOM.get("sp-inline-popover")) && DOM.isChildOf(ed.getElement(), pb) && ed.onGetContent.addToTop(function(ed, o) { var args; -1 != ed.id.indexOf("sppbeditor-") && "raw" == o.format && (args = tinymce.extend(o, { format: "html" }), o.content = ed.serializer.serialize(ed.getBody(), args)); }); }), 0 == ed.settings.forced_root_block && 0 != ed.settings.editable_root && fakeRootBlock(); }); }(); home/wuectly/www/media/editors/tinymce/js/plugins/dragdrop/plugin.js 0000604 00000007004 15246334643 0021756 0 ustar 00 tinymce.PluginManager.add('jdragdrop', function(editor) { // Reset the drop area border tinyMCE.DOM.bind(document, 'dragleave', function(e) { e.stopPropagation(); e.preventDefault(); tinyMCE.activeEditor.contentAreaContainer.style.borderWidth = '1px 0 0'; return false; }); // The upload logic function UploadFile(file) { var fd = new FormData(); fd.append('Filedata', file); fd.append('folder', tinyMCE.activeEditor.settings.mediaUploadPath); var xhr = new XMLHttpRequest(); xhr.upload.onprogress = function(e) { var percentComplete = (e.loaded / e.total) * 100; document.querySelector('.bar').style.width = percentComplete + '%'; }; removeProgessBar = function(){ setTimeout(function(){ var loader = document.querySelector('#jloader'); loader.parentNode.removeChild(loader); editor.contentAreaContainer.style.borderWidth = '1px 0 0 0'; }, 200); }; xhr.onload = function() { var resp = JSON.parse(xhr.responseText); if (xhr.status == 200) { if (resp.status == '0') { removeProgessBar(); editor.windowManager.alert(resp.message + ': ' + tinyMCE.activeEditor.settings.setCustomDir + resp.location); } if (resp.status == '1') { removeProgessBar(); // Create the image tag var newNode = tinyMCE.activeEditor.getDoc().createElement ('img'); newNode.src= tinyMCE.activeEditor.settings.setCustomDir + resp.location; tinyMCE.activeEditor.execCommand('mceInsertContent', false, newNode.outerHTML); } } else { removeProgessBar(); } }; xhr.onerror = function() { removeProgessBar(); }; xhr.open("POST", tinyMCE.activeEditor.settings.uploadUri, true); xhr.send(fd); } // Listers for drag and drop if (typeof FormData != 'undefined'){ // Fix for Chrome editor.on('dragenter', function(e) { e.stopPropagation(); return false; }); // Notify user when file is over the drop area editor.on('dragover', function(e) { e.preventDefault(); editor.contentAreaContainer.style.borderStyle = 'dashed'; editor.contentAreaContainer.style.borderWidth = '5px'; return false; }); // Logic for the dropped file editor.on('drop', function(e) { // We override only for files if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) { for (var i = 0, f; f = e.dataTransfer.files[i]; i++) { // Only images allowed if (f.name.toLowerCase().match(/\.(jpg|jpeg|png|gif)$/)) { // Create and display the progress bar var container, innerDiv, progressBar = ''; container = document.createElement('div'); container.id = 'jloader'; innerDiv = document.createElement('div'); innerDiv.classList.add('progress'); innerDiv.classList.add('progress-success'); innerDiv.classList.add('progress-striped'); innerDiv.classList.add('active'); innerDiv.style.width = '100%'; innerDiv.style.height = '30px'; progressBar = document.createElement('div'); progressBar.classList.add('bar'); progressBar.style.width = '0'; innerDiv.appendChild(progressBar); container.appendChild(innerDiv); document.querySelector('.mce-toolbar-grp').appendChild(container); // Upload the file(s) UploadFile(f); } e.preventDefault(); } } editor.contentAreaContainer.style.borderWidth = '1px 0 0'; }); } else { Joomla.renderMessages({'error': [Joomla.JText._("PLG_TINY_ERR_UNSUPPORTEDBROWSER")]}); editor.on('drop', function(e) { e.preventDefault(); return false; }); } }); home/wuectly/www/media/com_jce/editor/tinymce/plugins/hr/plugin.js 0000604 00000004476 15246341772 0021400 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE; tinymce.PluginManager.add("hr", function(ed, url) { function isHR(n) { return "HR" === n.nodeName && !1 === /mce-item-(pagebreak|readmore)/.test(n.className); } ed.addCommand("InsertHorizontalRule", function(ui, v) { var hr, el, p, n = ed.selection.getNode(); /^(H[1-6]|P)$/.test(n.nodeName) ? (ed.undoManager.add(), ed.execCommand("mceInsertContent", !1, '<span id="mce_hr_marker" data-mce-type="bookmark">\ufeff</span>', { skip_undo: 1 }), n = ed.dom.get("mce_hr_marker"), hr = ed.dom.create("hr"), p = ed.dom.getParent(n, "H1,H2,H3,H4,H5,H6,P,DIV,ADDRESS,PRE,FORM,TABLE,OL,UL,CAPTION,BLOCKQUOTE,CENTER,DL,DIR,FIELDSET,NOSCRIPT,NOFRAMES,MENU,ISINDEX,SAMP,SECTION,ARTICLE,HGROUP,ASIDE,FIGURE", "BODY"), ed.dom.split(p, n), (p = n.nextSibling) || (el = ed.getParam("forced_root_block") || "br", p = ed.dom.create(el), "br" != el && (p.innerHTML = "\xa0"), ed.dom.insertAfter(p, n)), p && ed.selection.setCursorLocation(p, p.childNodes.length), ed.dom.replace(hr, n)) : ed.execCommand("mceInsertContent", !1, "<hr />"), ed.undoManager.add(); }), ed.addButton("hr", { title: "advanced.hr_desc", cmd: "InsertHorizontalRule" }), ed.onNodeChange.add(function(ed, cm, n) { var s = isHR(n); cm.setActive("hr", s), ed.dom.removeClass(ed.dom.select("hr.mce-item-selected:not(.mce-item-pagebreak,.mce-item-readmore)"), "mce-item-selected"), s && ed.dom.addClass(n, "mce-item-selected"); }), ed.onKeyDown.add(function(ed, e) { var n, sib; e.keyCode != BACKSPACE && e.keyCode != DELETE || isHR(n = ed.selection.getNode()) && (sib = n.previousSibling, ed.dom.remove(n), e.preventDefault(), sib = ed.dom.isBlock(sib) || (sib = n.nextSibling, ed.dom.isBlock(sib)) ? sib : null) && ed.selection.setCursorLocation(sib, sib.childNodes.length); }); }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/article/plugin.js 0000604 00000022444 15246341773 0022406 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function() { var DOM = tinymce.DOM, each = tinymce.each, VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE; tinymce.PluginManager.add("article", function(ed, url) { function isReadMore(n) { return ed.dom.is(n, "hr.mce-item-readmore"); } function isPageBreak(n) { return ed.dom.is(n, "hr.mce-item-pagebreak"); } function _cancelResize() { each(ed.dom.select("hr.mce-item-pagebreak, hr.mce-item-readmore"), function(n) { n.onresizestart = function() { return !1; }, n.onbeforeeditfocus = function() { return !1; }; }); } function insertBreak(s, args) { var h, dom = ed.dom, n = ed.selection.getNode(), blocks = "H1,H2,H3,H4,H5,H6,P,DIV,ADDRESS,PRE,FORM,TABLE,OL,UL,CAPTION,BLOCKQUOTE,CENTER,DL,DIR,FIELDSET,NOSCRIPT,NOFRAMES,MENU,ISINDEX,SAMP,SECTION,ARTICLE,HGROUP,ASIDE,FIGURE", n = dom.getParent(n, blocks, "BODY") || n, marker = (tinymce.extend(args, { class: "pagebreak" == s ? "mce-item-pagebreak" : "mce-item-readmore", "data-alt": args.alt || null }), args.alt = null, "readmore" == s && (args.id = "system-readmore"), ed.execCommand("mceInsertContent", !1, '<span id="mce_hr_marker" data-mce-type="bookmark">\ufeff</span>', { skip_undo: 1 }), dom.get("mce_hr_marker")), args = dom.create("hr", args); if (dom.isBlock(n)) { var ns, p = dom.getParent(marker, blocks, "BODY"); if ("P" == p.nodeName || "DIV" == p.nodeName) -1 !== p.className.indexOf("wf-column") ? (blocks = dom.getParent(n, ".wf-columns"), dom.insertAfter(marker, blocks)) : (dom.split(p, marker), (ns = marker.nextSibling) && ns.nodeName == p.nodeName && /^(\s| |\u00a00)*?$/.test(h) && dom.remove(ns)); else for (p ? "BODY" == p.parentNode.nodeName ? dom.insertAfter(marker, p) : p.parentNode.insertBefore(marker, p) : "BODY" == n.parentNode.nodeName ? dom.insertAfter(marker, n) : n.parentNode.insertBefore(marker, n), p = marker.parentNode; /^(H[1-6]|ADDRESS|PRE|FORM|TABLE|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(p.nodeName); ) p.parentNode.insertBefore(marker, p), p = marker.parentNode; (ns = marker.nextSibling) || (blocks = ed.getParam("forced_root_block") || "br", ns = ed.dom.create(blocks), "br" != blocks && (ns.innerHTML = "\xa0"), ed.dom.insertAfter(ns, marker), s = ed.selection.select(ns), ed.selection.collapse(1)); } ed.dom.replace(args, marker), ed.undoManager.add(); } ed.addCommand("mceReadMore", function() { if (ed.dom.get("system-readmore")) return alert(ed.getLang("article.readmore_alert", "There is already a Read More break inserted in this article. Only one such break is permitted. Use a Pagebreak to split the page up further.")), !1; insertBreak("readmore", { id: "system-readmore" }); }), ed.addCommand("mcePageBreak", function(ui, v) { var n = ed.selection.getNode(); isPageBreak(n) ? function(n, v) { tinymce.extend(v, { "data-alt": v.alt || "" }), v.alt = null, ed.dom.setAttribs(n, v); }(n, v) : insertBreak("pagebreak", v); }), ed.getParam("article_show_readmore", !0) && ed.addButton("readmore", { title: "article.readmore", cmd: "mceReadMore" }), ed.onInit.add(function() { ed.theme && ed.theme.onResolveName && ed.theme.onResolveName.add(function(theme, o) { var v, n = o.node; n && "HR" === n.nodeName && /mce-item-pagebreak/.test(n.className) && (v = "pagebreak"), (v = n && "HR" === n.nodeName && /mce-item-readmore/.test(n.className) ? "readmore" : v) && (o.name = v); }); }), ed.onNodeChange.add(function(ed, cm, n) { cm.setActive("readmore", isReadMore(n)), cm.setActive("pagebreak", isPageBreak(n)), ed.dom.removeClass(ed.dom.select("hr.mce-item-pagebreak.mce-item-selected, hr.mce-item-readmore.mce-item-selected"), "mce-item-selected"), (isPageBreak(n) || isReadMore(n)) && ed.dom.addClass(n, "mce-item-selected"); }), ed.onBeforeSetContent.add(function(ed, o) { o.content = o.content.replace(/<hr(.*?) alt="([^"]+)"([^>]*?)>/gi, '<hr$1 data-alt="$2"$3>'); }), ed.onPostProcess.add(function(ed, o) { o.get && (o.content = o.content.replace(/<hr(.*?)data-alt="([^"]+)"([^>]*?)>/gi, '<hr$1alt="$2"$3>')); }), ed.onSetContent.add(function() { tinymce.isIE && _cancelResize(); }), ed.onGetContent.add(function() { tinymce.isIE && _cancelResize(); }), ed.onKeyDown.add(function(ed, e) { var n; e.keyCode != BACKSPACE && e.keyCode != DELETE || (n = ed.selection.getNode(), ed.dom.is(n, "hr.mce-item-pagebreak, hr.mce-item-readmore") && (ed.dom.remove(n), e.preventDefault())); }), ed.onPreInit.add(function() { ed.onBeforeSetContent.addToTop(function(ed, o) { o.content = o.content.replace(/<hr([^>]*)\salt="([^"]+)"([^>]*)>/gi, '<hr$1 data-alt="$2"$3>'); }), ed.parser.addNodeFilter("hr", function(nodes) { for (var i = 0; i < nodes.length; i++) { var node = nodes[i], id = node.attr("id") || "", cls = node.attr("class") || ""; ("system-readmore" == id || /(mce-item|system)-pagebreak/.test(cls)) && (cls = /(mce-item|system)-pagebreak/.test(cls) ? "mce-item-pagebreak" : "mce-item-readmore", node.attr("class", cls), node.attr("alt")) && (node.attr("data-alt", node.attr("alt")), node.attr("alt", null)); } }), ed.serializer.addNodeFilter("hr", function(nodes, name, args) { for (var i = 0; i < nodes.length; i++) { var node = nodes[i], cls = node.attr("class") || ""; /mce-item-(pagebreak|readmore)/.test(cls) && (/mce-item-pagebreak/.test(node.attr("class")) ? node.attr("class", "system-pagebreak") : (node.attr("class", null), node.attr("id", "system-readmore")), node.attr("data-alt")) && (node.attr("alt", node.attr("data-alt")), node.attr("data-alt", null)); } }); }), ed.getParam("article_show_pagebreak", !0) && ed.addButton("pagebreak", { title: "article.pagebreak", onclick: function() { var html = '<div class="mceFormRow"> <label for="' + ed.id + 'article_title">' + ed.getLang("article.title", "Title") + '</label> <div class="mceFormControl"> <input type="text" id="' + ed.id + '_article_title" autofocus /> </div></div><div class="mceFormRow"> <label for="' + ed.id + '_article_alt">' + ed.getLang("article.alias", "Alias") + '</label> <div class="mceFormControl"> <input type="text" id="' + ed.id + '_article_alt" /> </div></div>'; ed.windowManager.open({ title: ed.getLang("article.pagebreak", "PageBreak"), content: html, size: "mce-modal-landscape-small", open: function() { var label = ed.getLang("insert", "Insert"), title = DOM.get(ed.id + "_article_title"), alt = DOM.get(ed.id + "_article_alt"), o = function() { var o, n = ed.selection.getNode(); ed.dom.is(n, "hr.mce-item-pagebreak") && (o = { title: ed.dom.getAttrib(n, "title", ""), alt: ed.dom.getAttrib(n, "data-alt", "") }); return o; }(); o && (label = ed.getLang("update", "Update"), title.value = o.title || "", alt.value = o.alt || ""), DOM.setHTML(this.id + "_insert", label), window.setTimeout(function() { title.focus(); }, 10); }, buttons: [ { title: ed.getLang("cancel", "Cancel"), id: "cancel" }, { title: ed.getLang("insert", "Insert"), id: "insert", onsubmit: function(e) { var title = DOM.getValue(ed.id + "_article_title"), alt = DOM.getValue(ed.id + "_article_alt"); ed.execCommand("mcePageBreak", !1, { title: title, alt: alt }); }, classes: "primary" } ] }); } }); }); }(); home/wuectly/www/media/com_jce/editor/tinymce/plugins/cleanup/plugin.js 0000604 00000014516 15246342161 0022403 0 ustar 00 /* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ import split from "./src/utils/split"; import { TAGS, PADDED_RX } from "./src/constants"; import createPadding from "./src/filters/padding"; import { processAttributes } from "./src/filters/processAttributes"; import { convertFromGeshi, convertToGeshi } from "./src/geshi"; var each = tinymce.each, Node = tinymce.html.Node; tinymce.PluginManager.add("cleanup", function(ed, url) { !1 === ed.settings.verify_html && (ed.settings.validate = !1); var padding = createPadding(Node); ed.onPreInit.add(function() { var elements; ed.serializer.addAttributeFilter("data-mce-caret", function(nodes) { for (var i = nodes.length; i--; ) nodes[i].remove(); }), !1 === ed.settings.remove_trailing_brs && ed.serializer.addAttributeFilter("data-mce-bogus", function(nodes) { for (var node, textNode, i = nodes.length; i--; ) "br" === (node = nodes[i]).name && (node.prev || node.next ? node.remove() : ((textNode = new Node("#text", 3)).value = "\xa0", node.replace(textNode))); }), ed.serializer.addAttributeFilter("data-mce-tmp", function(nodes, name) { for (var i = nodes.length; i--; ) nodes[i].attr("data-mce-tmp", null); }), ed.parser.addAttributeFilter("data-mce-tmp", function(nodes, name) { for (var i = nodes.length; i--; ) nodes[i].attr("data-mce-tmp", null); }), !1 !== ed.settings.verify_html && (ed.settings.allow_event_attributes || each(ed.schema.elements, function(elm) { if (!elm.attributesOrder || 0 === elm.attributesOrder.length) return !0; each(elm.attributes, function(obj, name) { 0 === name.indexOf("on") && (delete elm.attributes[name], elm.attributesOrder.splice(tinymce.inArray(elm, elm.attributesOrder, name), 1)); }); }), elements = ed.schema.elements, each(split("ol ul sub sup blockquote font table tbody tr strong b"), function(name) { elements[name] && (elements[name].removeEmpty = !1); }), ed.getParam("pad_empty_tags", !0) || each(elements, function(v, k) { v.paddEmpty && (v.paddEmpty = !1); }), ed.getParam("table_pad_empty_cells", !0) || (elements.th.paddEmpty = !1, elements.td.paddEmpty = !1), each(elements, function(v, k) { if (0 === k.indexOf("mce:")) return !0; -1 === tinymce.inArray(TAGS, k) && ed.schema.addCustomElements(k); })), ed.parser.addNodeFilter("a,i,span,li", function(nodes, name) { padding.ensureEmptyInlineNodes(nodes, name); }), ed.serializer.addAttributeFilter("data-mce-empty", function(nodes) { padding.cleanupEmptyInlineNodes(nodes); }); }), !1 === ed.settings.verify_html && ed.addCommand("mceCleanup", function() { var s = ed.settings, se = ed.selection, bm = se.getBookmark(), content = ed.getContent({ cleanup: !0 }), s = (s.verify_html = !0, new tinymce.html.Schema(s)), content = new tinymce.html.Serializer({ validate: !0 }, s).serialize(new tinymce.html.DomParser({ validate: !0, allow_event_attributes: !!ed.settings.allow_event_attributes }, s).parse(content)); ed.setContent(content, { cleanup: !0 }), se.moveToBookmark(bm); }), ed.onBeforeSetContent.add(function(ed, o) { o.content = o.content.replace(/^<br>/, ""), o.content = convertFromGeshi(o.content), o.content = padding.paddEmptyTags(o.content), o.content = processAttributes(ed, o.content); }), ed.onPostProcess.add(function(ed, o) { o.set && (o.content = convertFromGeshi(o.content)), o.get && (o.content = convertToGeshi(o.content), o.content = o.content.replace(/<a([^>]*)class="jce(box|popup|lightbox|tooltip|_tooltip)"([^>]*)><\/a>/gi, ""), o.content = o.content.replace(/<span class="jce(box|popup|lightbox|tooltip|_tooltip)">(.*?)<\/span>/gi, "$2"), o.content = o.content.replace(/_mce_(src|href|style|coords|shape)="([^"]+)"\s*?/gi, ""), !1 === ed.settings.validate && (o.content = o.content.replace(/<body([^>]*)>([\s\S]*)<\/body>/, "$2"), ed.getParam("remove_tag_padding") || (o.content = o.content.replace(/<(p|h1|h2|h3|h4|h5|h6|th|td|pre|div|address|caption)\b([^>]*)><\/\1>/gi, "<$1$2> </$1>"))), ed.getParam("table_pad_empty_cells", !0) || (o.content = o.content.replace(/<(th|td)([^>]*)>( |\u00a0)<\/\1>/gi, "<$1$2></$1>")), o.content = o.content.replace(/<(a|i|span)([^>]+)>( |\u00a0)<\/\1>/gi, function(match, tag, attribs) { return attribs = attribs.replace('data-mce-empty="1"', ""), "<" + tag + " " + tinymce.trim(attribs) + "></" + tag + ">"; }), o.content = o.content.replace(/<li data-mce-empty="1">( |\u00a0)<\/li>/gi, "<li></li>"), ed.getParam("remove_div_padding") && (o.content = o.content.replace(/<div([^>]*)>( |\u00a0)<\/div>/g, "<div$1></div>")), !1 === ed.getParam("pad_empty_tags", !0) && (o.content = o.content.replace(PADDED_RX, "<$1$2></$1>")), ed.getParam("keep_nbsp", !0) && "raw" === ed.settings.entity_encoding && (o.content = o.content.replace(/\u00a0/g, " ")), o.content = o.content.replace(/(uk|v|ng|data)-([\w-]+)=""(\s|>)/gi, "$1-$2$3"), ed.settings.padd_empty_editor && (o.content = o.content.replace(/^(<div>( | |\s|\u00a0|)<\/div>[\r\n]*|<br(\s*\/)?>[\r\n]*)$/, "")), o.content = o.content.replace(/<hr(.*)class="system-pagebreak"(.*?)\/?>/gi, '<hr$1class="system-pagebreak"$2/>'), o.content = o.content.replace(/<hr id="system-readmore"(.*?)>/gi, '<hr id="system-readmore" />')); }), ed.onSaveContent.add(function(ed, o) { var entities; ed.getParam("cleanup_pluginmode") && (entities = { "'": "'", "&": "&", """: '"', "'": "'" }, o.content = o.content.replace(/&(#39|apos|amp|quot);/gi, function(a) { return entities[a]; })); }), ed.addButton("cleanup", { title: "advanced.cleanup_desc", cmd: "mceCleanup" }), this.paddEmptyTags = padding.paddEmptyTags; });
| ver. 1.4 |
Github
|
.
| PHP 8.1.34 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка