/**
* VisualChars.js
*
* Released under LGPL License.
* Copyright (c) 1999-2017 Ephox Corp. All rights reserved
*
* License: http://www.tinymce.com/license
* Contributing: http://www.tinymce.com/contributing
*/
define(
'tinymce.plugins.visualchars.core.VisualChars',
[
'tinymce.plugins.visualchars.core.Data',
'tinymce.plugins.visualchars.core.Nodes',
'ephox.katamari.api.Arr',
'ephox.sugar.api.node.Element',
'ephox.sugar.api.node.Node'
],
function (Data, Nodes, Arr, Element, Node) {
var show = function (editor, rootElm) {
var node, div;
var nodeList = Nodes.filterDescendants(Element.fromDom(rootElm), Nodes.isMatch);
Arr.each(nodeList, function (n) {
var withSpans = Nodes.replaceWithSpans(Node.value(n));
div = editor.dom.create('div', null, withSpans);
while ((node = div.lastChild)) {
editor.dom.insertAfter(node, n.dom());
}
editor.dom.remove(n.dom());
});
};
var hide = function (editor, body) {
var nodeList = editor.dom.select(Data.selector, body);
Arr.each(nodeList, function (node) {
editor.dom.remove(node, 1);
});
};
var toggle = function (editor) {
var body = editor.getBody();
var bookmark = editor.selection.getBookmark();
var parentNode = Nodes.findParentElm(editor.selection.getNode(), body);
// if user does select all the parentNode will be undefined
parentNode = parentNode !== undefined ? parentNode : body;
hide(editor, parentNode);
show(editor, parentNode);
editor.selection.moveToBookmark(bookmark);
};
return {
show: show,
hide: hide,
toggle: toggle
};
}
);
|