|
- wysihtml.commands.alignCenterStyle = (function() {
- var nodeOptions = {
- styleProperty: "textAlign",
- styleValue: "center",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
- })();
-
- wysihtml.commands.alignJustifyStyle = (function() {
- var nodeOptions = {
- styleProperty: "textAlign",
- styleValue: "justify",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
- })();
-
- wysihtml.commands.alignLeftStyle = (function() {
- var nodeOptions = {
- styleProperty: "textAlign",
- styleValue: "left",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
- })();
-
- wysihtml.commands.alignRightStyle = (function() {
- var nodeOptions = {
- styleProperty: "textAlign",
- styleValue: "right",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
- })();
-
- /* Sets text background color by inline styles */
- wysihtml.commands.bgColorStyle = (function() {
- return {
- exec: function(composer, command, color) {
- var colorVals = wysihtml.quirks.styleParser.parseColor("background-color:" + (color.color || color), "background-color"),
- colString;
-
- if (colorVals) {
- colString = (colorVals[3] === 1 ? "rgb(" + [colorVals[0], colorVals[1], colorVals[2]].join(', ') : "rgba(" + colorVals.join(', ')) + ')';
- wysihtml.commands.formatInline.exec(composer, command, {styleProperty: 'backgroundColor', styleValue: colString});
- }
- },
-
- state: function(composer, command, color) {
- var colorVals = color ? wysihtml.quirks.styleParser.parseColor("background-color:" + (color.color || color), "background-color") : null,
- colString;
-
- if (colorVals) {
- colString = (colorVals[3] === 1 ? "rgb(" + [colorVals[0], colorVals[1], colorVals[2]].join(', ') : "rgba(" + colorVals.join(', ')) + ')';
- }
-
- return wysihtml.commands.formatInline.state(composer, command, {styleProperty: 'backgroundColor', styleValue: colString});
- },
-
- remove: function(composer, command) {
- return wysihtml.commands.formatInline.remove(composer, command, {styleProperty: 'backgroundColor'});
- },
-
- stateValue: function(composer, command, props) {
- var st = this.state(composer, command),
- colorStr,
- val = false;
-
- if (st && wysihtml.lang.object(st).isArray()) {
- st = st[0];
- }
-
- if (st) {
- colorStr = st.getAttribute('style');
- if (colorStr) {
- val = wysihtml.quirks.styleParser.parseColor(colorStr, "background-color");
- return wysihtml.quirks.styleParser.unparseColor(val, props);
- }
- }
- return false;
- }
- };
- })();
-
- wysihtml.commands.bold = (function() {
- var nodeOptions = {
- nodeName: "B",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- wysihtml.commands.formatInline.exec(composer, command, nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatInline.state(composer, command, nodeOptions);
- }
- };
- })();
-
- /* Formats block for as a <pre><code class="classname"></code></pre> block
- * Useful in conjuction for sytax highlight utility: highlight.js
- *
- * Usage:
- *
- * editorInstance.composer.commands.exec("formatCode", "language-html");
- */
- wysihtml.commands.formatCode = (function() {
- return {
- exec: function(composer, command, classname) {
- var pre = this.state(composer)[0],
- code, range, selectedNodes;
-
- if (pre) {
- // caret is already within a <pre><code>...</code></pre>
- composer.selection.executeAndRestore(function() {
- code = pre.querySelector("code");
- wysihtml.dom.replaceWithChildNodes(pre);
- if (code) {
- wysihtml.dom.replaceWithChildNodes(code);
- }
- });
- } else {
- // Wrap in <pre><code>...</code></pre>
- range = composer.selection.getRange();
- selectedNodes = range.extractContents();
- pre = composer.doc.createElement("pre");
- code = composer.doc.createElement("code");
-
- if (classname) {
- code.className = classname;
- }
-
- pre.appendChild(code);
- code.appendChild(selectedNodes);
- range.insertNode(pre);
- composer.selection.selectNode(pre);
- }
- },
-
- state: function(composer) {
- var selectedNode = composer.selection.getSelectedNode(), node;
- if (selectedNode && selectedNode.nodeName && selectedNode.nodeName == "PRE"&&
- selectedNode.firstChild && selectedNode.firstChild.nodeName && selectedNode.firstChild.nodeName == "CODE") {
- return [selectedNode];
- } else {
- node = wysihtml.dom.getParentElement(selectedNode, { query: "pre code" });
- return node ? [node.parentNode] : false;
- }
- }
- };
- })();
-
- /**
- * Inserts an <img>
- * If selection is already an image link, it removes it
- *
- * @example
- * // either ...
- * wysihtml.commands.insertImage.exec(composer, "insertImage", "http://www.google.de/logo.jpg");
- * // ... or ...
- * wysihtml.commands.insertImage.exec(composer, "insertImage", { src: "http://www.google.de/logo.jpg", title: "foo" });
- */
- wysihtml.commands.insertImage = (function() {
- var NODE_NAME = "IMG";
- return {
- exec: function(composer, command, value) {
- value = typeof(value) === "object" ? value : { src: value };
-
- var doc = composer.doc,
- image = this.state(composer),
- textNode,
- parent;
-
- // If image is selected and src ie empty, set the caret before it and delete the image
- if (image && !value.src) {
- composer.selection.setBefore(image);
- parent = image.parentNode;
- parent.removeChild(image);
-
- // and it's parent <a> too if it hasn't got any other relevant child nodes
- wysihtml.dom.removeEmptyTextNodes(parent);
- if (parent.nodeName === "A" && !parent.firstChild) {
- composer.selection.setAfter(parent);
- parent.parentNode.removeChild(parent);
- }
-
- // firefox and ie sometimes don't remove the image handles, even though the image got removed
- wysihtml.quirks.redraw(composer.element);
- return;
- }
-
- // If image selected change attributes accordingly
- if (image) {
- for (var key in value) {
- if (value.hasOwnProperty(key)) {
- image.setAttribute(key === "className" ? "class" : key, value[key]);
- }
- }
- return;
- }
-
- // Otherwise lets create the image
- image = doc.createElement(NODE_NAME);
-
- for (var i in value) {
- image.setAttribute(i === "className" ? "class" : i, value[i]);
- }
-
- composer.selection.insertNode(image);
- if (wysihtml.browser.hasProblemsSettingCaretAfterImg()) {
- textNode = doc.createTextNode(wysihtml.INVISIBLE_SPACE);
- composer.selection.insertNode(textNode);
- composer.selection.setAfter(textNode);
- } else {
- composer.selection.setAfter(image);
- }
- },
-
- state: function(composer) {
- var doc = composer.doc,
- selectedNode,
- text,
- imagesInSelection;
-
- if (!wysihtml.dom.hasElementWithTagName(doc, NODE_NAME)) {
- return false;
- }
-
- selectedNode = composer.selection.getSelectedNode();
- if (!selectedNode) {
- return false;
- }
-
- if (selectedNode.nodeName === NODE_NAME) {
- // This works perfectly in IE
- return selectedNode;
- }
-
- if (selectedNode.nodeType !== wysihtml.ELEMENT_NODE) {
- return false;
- }
-
- text = composer.selection.getText();
- text = wysihtml.lang.string(text).trim();
- if (text) {
- return false;
- }
-
- imagesInSelection = composer.selection.getNodes(wysihtml.ELEMENT_NODE, function(node) {
- return node.nodeName === "IMG";
- });
-
- if (imagesInSelection.length !== 1) {
- return false;
- }
-
- return imagesInSelection[0];
- }
- };
- })();
-
- wysihtml.commands.fontSize = (function() {
- var REG_EXP = /wysiwyg-font-size-[0-9a-z\-]+/g;
-
- return {
- exec: function(composer, command, size) {
- wysihtml.commands.formatInline.exec(composer, command, {className: "wysiwyg-font-size-" + size, classRegExp: REG_EXP, toggle: true});
- },
-
- state: function(composer, command, size) {
- return wysihtml.commands.formatInline.state(composer, command, {className: "wysiwyg-font-size-" + size});
- }
- };
- })();
-
- /* Set font size by inline style */
- wysihtml.commands.fontSizeStyle = (function() {
- return {
- exec: function(composer, command, size) {
- size = size.size || size;
- if (!(/^\s*$/).test(size)) {
- wysihtml.commands.formatInline.exec(composer, command, {styleProperty: "fontSize", styleValue: size, toggle: false});
- }
- },
-
- state: function(composer, command, size) {
- return wysihtml.commands.formatInline.state(composer, command, {styleProperty: "fontSize", styleValue: size || undefined});
- },
-
- remove: function(composer, command) {
- return wysihtml.commands.formatInline.remove(composer, command, {styleProperty: "fontSize"});
- },
-
- stateValue: function(composer, command) {
- var styleStr,
- st = this.state(composer, command);
-
- if (st && wysihtml.lang.object(st).isArray()) {
- st = st[0];
- }
- if (st) {
- styleStr = st.getAttribute("style");
- if (styleStr) {
- return wysihtml.quirks.styleParser.parseFontSize(styleStr);
- }
- }
- return false;
- }
- };
- })();
-
- wysihtml.commands.foreColor = (function() {
- var REG_EXP = /wysiwyg-color-[0-9a-z]+/g;
-
- return {
- exec: function(composer, command, color) {
- wysihtml.commands.formatInline.exec(composer, command, {className: "wysiwyg-color-" + color, classRegExp: REG_EXP, toggle: true});
- },
-
- state: function(composer, command, color) {
- return wysihtml.commands.formatInline.state(composer, command, {className: "wysiwyg-color-" + color});
- }
- };
- })();
-
- /* Sets text color by inline styles */
- wysihtml.commands.foreColorStyle = (function() {
- return {
- exec: function(composer, command, color) {
- var colorVals, colString;
-
- if (!color) { return; }
-
- colorVals = wysihtml.quirks.styleParser.parseColor("color:" + (color.color || color), "color");
-
- if (colorVals) {
- colString = (colorVals[3] === 1 ? "rgb(" + [colorVals[0], colorVals[1], colorVals[2]].join(", ") : "rgba(" + colorVals.join(', ')) + ')';
- wysihtml.commands.formatInline.exec(composer, command, {styleProperty: "color", styleValue: colString});
- }
- },
-
- state: function(composer, command, color) {
- var colorVals = color ? wysihtml.quirks.styleParser.parseColor("color:" + (color.color || color), "color") : null,
- colString;
-
-
- if (colorVals) {
- colString = (colorVals[3] === 1 ? "rgb(" + [colorVals[0], colorVals[1], colorVals[2]].join(", ") : "rgba(" + colorVals.join(', ')) + ')';
- }
-
- return wysihtml.commands.formatInline.state(composer, command, {styleProperty: "color", styleValue: colString});
- },
-
- remove: function(composer, command) {
- return wysihtml.commands.formatInline.remove(composer, command, {styleProperty: "color"});
- },
-
- stateValue: function(composer, command, props) {
- var st = this.state(composer, command),
- colorStr,
- val = false;
-
- if (st && wysihtml.lang.object(st).isArray()) {
- st = st[0];
- }
-
- if (st) {
- colorStr = st.getAttribute("style");
- if (colorStr) {
- val = wysihtml.quirks.styleParser.parseColor(colorStr, "color");
- return wysihtml.quirks.styleParser.unparseColor(val, props);
- }
- }
- return false;
- }
- };
- })();
-
- wysihtml.commands.insertBlockQuote = (function() {
- var nodeOptions = {
- nodeName: "BLOCKQUOTE",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
- })();
-
- wysihtml.commands.insertOrderedList = (function() {
- return {
- exec: function(composer, command) {
- wysihtml.commands.insertList.exec(composer, command, "OL");
- },
-
- state: function(composer, command) {
- return wysihtml.commands.insertList.state(composer, command, "OL");
- }
- };
- })();
-
- wysihtml.commands.insertUnorderedList = (function() {
- return {
- exec: function(composer, command) {
- wysihtml.commands.insertList.exec(composer, command, "UL");
- },
-
- state: function(composer, command) {
- return wysihtml.commands.insertList.state(composer, command, "UL");
- }
- };
- })();
-
- wysihtml.commands.italic = (function() {
- var nodeOptions = {
- nodeName: "I",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- wysihtml.commands.formatInline.exec(composer, command, nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatInline.state(composer, command, nodeOptions);
- }
- };
-
- })();
-
- wysihtml.commands.justifyCenter = (function() {
- var nodeOptions = {
- className: "wysiwyg-text-align-center",
- classRegExp: /wysiwyg-text-align-[0-9a-z]+/g,
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
-
- })();
-
- wysihtml.commands.justifyFull = (function() {
- var nodeOptions = {
- className: "wysiwyg-text-align-justify",
- classRegExp: /wysiwyg-text-align-[0-9a-z]+/g,
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
- })();
-
- wysihtml.commands.justifyLeft = (function() {
- var nodeOptions = {
- className: "wysiwyg-text-align-left",
- classRegExp: /wysiwyg-text-align-[0-9a-z]+/g,
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
- })();
-
- wysihtml.commands.justifyRight = (function() {
- var nodeOptions = {
- className: "wysiwyg-text-align-right",
- classRegExp: /wysiwyg-text-align-[0-9a-z]+/g,
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- return wysihtml.commands.formatBlock.exec(composer, "formatBlock", nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatBlock.state(composer, "formatBlock", nodeOptions);
- }
- };
- })();
-
- wysihtml.commands.subscript = (function() {
- var nodeOptions = {
- nodeName: "SUB",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- wysihtml.commands.formatInline.exec(composer, command, nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatInline.state(composer, command, nodeOptions);
- }
- };
-
- })();
-
- wysihtml.commands.superscript = (function() {
- var nodeOptions = {
- nodeName: "SUP",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- wysihtml.commands.formatInline.exec(composer, command, nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatInline.state(composer, command, nodeOptions);
- }
- };
-
- })();
-
- wysihtml.commands.underline = (function() {
- var nodeOptions = {
- nodeName: "U",
- toggle: true
- };
-
- return {
- exec: function(composer, command) {
- wysihtml.commands.formatInline.exec(composer, command, nodeOptions);
- },
-
- state: function(composer, command) {
- return wysihtml.commands.formatInline.state(composer, command, nodeOptions);
- }
- };
-
- })();
|