/BlogEngine/BlogEngine.NET/editors/tiny_mce_3_4_3_1/plugins/legacyoutput/editor_plugin_src.js
JavaScript | 139 lines | 92 code | 17 blank | 30 comment | 8 complexity | b23bc1319757dd1011e09b666afd44a8 MD5 | raw file
1/** 2 * editor_plugin_src.js 3 * 4 * Copyright 2009, Moxiecode Systems AB 5 * Released under LGPL License. 6 * 7 * License: http://tinymce.moxiecode.com/license 8 * Contributing: http://tinymce.moxiecode.com/contributing 9 * 10 * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align 11 * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash 12 * 13 * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are 14 * not apart of the newer specifications for HTML and XHTML. 15 */ 16 17(function(tinymce) { 18 // Override inline_styles setting to force TinyMCE to produce deprecated contents 19 tinymce.onAddEditor.addToTop(function(tinymce, editor) { 20 editor.settings.inline_styles = false; 21 }); 22 23 // Create the legacy ouput plugin 24 tinymce.create('tinymce.plugins.LegacyOutput', { 25 init : function(editor) { 26 editor.onInit.add(function() { 27 var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', 28 fontSizes = tinymce.explode(editor.settings.font_size_style_values), 29 schema = editor.schema; 30 31 // Override some internal formats to produce legacy elements and attributes 32 editor.formatter.register({ 33 // Change alignment formats to use the deprecated align attribute 34 alignleft : {selector : alignElements, attributes : {align : 'left'}}, 35 aligncenter : {selector : alignElements, attributes : {align : 'center'}}, 36 alignright : {selector : alignElements, attributes : {align : 'right'}}, 37 alignfull : {selector : alignElements, attributes : {align : 'justify'}}, 38 39 // Change the basic formatting elements to use deprecated element types 40 bold : [ 41 {inline : 'b', remove : 'all'}, 42 {inline : 'strong', remove : 'all'}, 43 {inline : 'span', styles : {fontWeight : 'bold'}} 44 ], 45 italic : [ 46 {inline : 'i', remove : 'all'}, 47 {inline : 'em', remove : 'all'}, 48 {inline : 'span', styles : {fontStyle : 'italic'}} 49 ], 50 underline : [ 51 {inline : 'u', remove : 'all'}, 52 {inline : 'span', styles : {textDecoration : 'underline'}, exact : true} 53 ], 54 strikethrough : [ 55 {inline : 'strike', remove : 'all'}, 56 {inline : 'span', styles : {textDecoration: 'line-through'}, exact : true} 57 ], 58 59 // Change font size and font family to use the deprecated font element 60 fontname : {inline : 'font', attributes : {face : '%value'}}, 61 fontsize : { 62 inline : 'font', 63 attributes : { 64 size : function(vars) { 65 return tinymce.inArray(fontSizes, vars.value) + 1; 66 } 67 } 68 }, 69 70 // Setup font elements for colors as well 71 forecolor : {inline : 'font', styles : {color : '%value'}}, 72 hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} 73 }); 74 75 // Check that deprecated elements are allowed if not add them 76 tinymce.each('b,i,u,strike'.split(','), function(name) { 77 schema.addValidElements(name + '[*]'); 78 }); 79 80 // Add font element if it's missing 81 if (!schema.getElementRule("font")) 82 schema.addValidElements("font[face|size|color|style]"); 83 84 // Add the missing and depreacted align attribute for the serialization engine 85 tinymce.each(alignElements.split(','), function(name) { 86 var rule = schema.getElementRule(name), found; 87 88 if (rule) { 89 if (!rule.attributes.align) { 90 rule.attributes.align = {}; 91 rule.attributesOrder.push('align'); 92 } 93 } 94 }); 95 96 // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes 97 editor.onNodeChange.add(function(editor, control_manager) { 98 var control, fontElm, fontName, fontSize; 99 100 // Find font element get it's name and size 101 fontElm = editor.dom.getParent(editor.selection.getNode(), 'font'); 102 if (fontElm) { 103 fontName = fontElm.face; 104 fontSize = fontElm.size; 105 } 106 107 // Select/unselect the font name in droplist 108 if (control = control_manager.get('fontselect')) { 109 control.select(function(value) { 110 return value == fontName; 111 }); 112 } 113 114 // Select/unselect the font size in droplist 115 if (control = control_manager.get('fontsizeselect')) { 116 control.select(function(value) { 117 var index = tinymce.inArray(fontSizes, value.fontSize); 118 119 return index + 1 == fontSize; 120 }); 121 } 122 }); 123 }); 124 }, 125 126 getInfo : function() { 127 return { 128 longname : 'LegacyOutput', 129 author : 'Moxiecode Systems AB', 130 authorurl : 'http://tinymce.moxiecode.com', 131 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput', 132 version : tinymce.majorVersion + "." + tinymce.minorVersion 133 }; 134 } 135 }); 136 137 // Register plugin 138 tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput); 139})(tinymce);