1 /** 2 * font command. 3 * @author yiminghe@gmail.com 4 */ 5 KISSY.add("editor/plugin/font/cmd", function (S, Editor) { 6 7 var getQueryCmd = Editor.Utils.getQueryCmd; 8 9 function getValueFromSingle(element, styleObj) { 10 var nodeName = element.nodeName(); 11 if (styleObj.element != nodeName) { 12 return false; 13 } 14 var styles = styleObj.styles, v; 15 for (var s in styles) { 16 if (v = element.style(s)) { 17 return v; 18 } 19 } 20 var overrides = styleObj.overrides; 21 for (var i = 0; i < overrides.length; i++) { 22 var override = overrides[i]; 23 if (override.element != nodeName) { 24 continue; 25 } 26 var attributes = override.attributes; 27 for (var a in attributes) { 28 if (v = element.attr(a)) { 29 return v; 30 } 31 } 32 } 33 return false; 34 } 35 36 function getValueFromStyleObj(elementPath, styleObj) { 37 var elements = elementPath.elements, 38 element, 39 i, 40 v; 41 for (i = 0; i < elements.length; i++) { 42 element = elements[ i ]; 43 if (element[0] == elementPath.block[0] || 44 element[0] == elementPath.blockLimit[0]) { 45 continue; 46 } 47 v = getValueFromSingle(element, styleObj); 48 if (v !== false) { 49 return v; 50 } 51 } 52 return v; 53 } 54 55 return { 56 addButtonCmd:function (editor, cmdType, style) { 57 var queryCmd = getQueryCmd(cmdType); 58 if (!editor.hasCommand(cmdType)) { 59 editor.addCommand(cmdType, { 60 exec:function (editor, effect) { 61 var doc = editor.get("document")[0]; 62 editor.execCommand("save"); 63 var checked = editor.queryCommandValue(cmdType); 64 if (checked) { 65 style.remove(doc); 66 } else { 67 style.apply(doc); 68 } 69 editor.execCommand("save"); 70 editor.notifySelectionChange(); 71 } 72 }); 73 74 editor.addCommand(queryCmd, { 75 exec:function (editor) { 76 var selection = editor.getSelection(); 77 if (selection && !selection.isInvalid) { 78 var startElement = selection.getStartElement(), 79 currentPath = new Editor.ElementPath(startElement); 80 return style.checkActive(currentPath); 81 } 82 } 83 }); 84 } 85 }, 86 87 addSelectCmd:function (editor, cmdType, styleObj) { 88 var queryCmd = getQueryCmd(cmdType); 89 if (!editor.hasCommand(cmdType)) { 90 editor.addCommand(cmdType, { 91 exec:function (editor, value) { 92 editor.focus(); 93 var currentValue = editor.queryCommandValue(cmdType) || ""; 94 var style = new Editor.Style(styleObj, { 95 value:value 96 }), 97 doc = editor.get("document")[0]; 98 editor.execCommand("save"); 99 if (value.toLowerCase() == currentValue.toLowerCase()) { 100 style.remove(doc); 101 } else { 102 style.apply(doc); 103 } 104 editor.execCommand("save"); 105 } 106 }); 107 editor.addCommand(queryCmd, { 108 exec:function (editor) { 109 var selection = editor.getSelection(); 110 if (selection && !selection.isInvalid) { 111 var startElement = selection.getStartElement(); 112 var currentPath = new Editor.ElementPath(startElement); 113 return getValueFromStyleObj(currentPath, styleObj); 114 } 115 } 116 }); 117 } 118 } 119 }; 120 }, { 121 requires:['editor'] 122 });