bgneal@312: /** bgneal@312: * editor_plugin_src.js bgneal@312: * bgneal@312: * Copyright 2009, Moxiecode Systems AB bgneal@312: * Released under LGPL License. bgneal@312: * bgneal@312: * License: http://tinymce.moxiecode.com/license bgneal@312: * Contributing: http://tinymce.moxiecode.com/contributing bgneal@312: * bgneal@312: * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align bgneal@312: * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash bgneal@312: * bgneal@312: * 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 bgneal@312: * not apart of the newer specifications for HTML and XHTML. bgneal@312: */ bgneal@312: bgneal@312: (function(tinymce) { bgneal@312: // Override inline_styles setting to force TinyMCE to produce deprecated contents bgneal@312: tinymce.onAddEditor.addToTop(function(tinymce, editor) { bgneal@312: editor.settings.inline_styles = false; bgneal@312: }); bgneal@312: bgneal@312: // Create the legacy ouput plugin bgneal@312: tinymce.create('tinymce.plugins.LegacyOutput', { bgneal@312: init : function(editor) { bgneal@312: editor.onInit.add(function() { bgneal@312: var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', bgneal@312: fontSizes = tinymce.explode(editor.settings.font_size_style_values), bgneal@312: serializer = editor.serializer; bgneal@312: bgneal@312: // Override some internal formats to produce legacy elements and attributes bgneal@312: editor.formatter.register({ bgneal@312: // Change alignment formats to use the deprecated align attribute bgneal@312: alignleft : {selector : alignElements, attributes : {align : 'left'}}, bgneal@312: aligncenter : {selector : alignElements, attributes : {align : 'center'}}, bgneal@312: alignright : {selector : alignElements, attributes : {align : 'right'}}, bgneal@312: alignfull : {selector : alignElements, attributes : {align : 'full'}}, bgneal@312: bgneal@312: // Change the basic formatting elements to use deprecated element types bgneal@312: bold : {inline : 'b'}, bgneal@312: italic : {inline : 'i'}, bgneal@312: underline : {inline : 'u'}, bgneal@312: strikethrough : {inline : 'strike'}, bgneal@312: bgneal@312: // Change font size and font family to use the deprecated font element bgneal@312: fontname : {inline : 'font', attributes : {face : '%value'}}, bgneal@312: fontsize : { bgneal@312: inline : 'font', bgneal@312: attributes : { bgneal@312: size : function(vars) { bgneal@312: return tinymce.inArray(fontSizes, vars.value) + 1; bgneal@312: } bgneal@312: } bgneal@312: }, bgneal@312: bgneal@312: // Setup font elements for colors as well bgneal@312: forecolor : {inline : 'font', styles : {color : '%value'}}, bgneal@312: hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} bgneal@312: }); bgneal@312: bgneal@312: // Force parsing of the serializer rules bgneal@312: serializer._setup(); bgneal@312: bgneal@312: // Check that deprecated elements are allowed if not add them bgneal@312: tinymce.each('b,i,u,strike'.split(','), function(name) { bgneal@312: var rule = serializer.rules[name]; bgneal@312: bgneal@312: if (!rule) bgneal@312: serializer.addRules(name); bgneal@312: }); bgneal@312: bgneal@312: // Add font element if it's missing bgneal@312: if (!serializer.rules["font"]) bgneal@312: serializer.addRules("font[face|size|color|style]"); bgneal@312: bgneal@312: // Add the missing and depreacted align attribute for the serialization engine bgneal@312: tinymce.each(alignElements.split(','), function(name) { bgneal@312: var rule = serializer.rules[name], found; bgneal@312: bgneal@312: if (rule) { bgneal@312: tinymce.each(rule.attribs, function(name, attr) { bgneal@312: if (attr.name == 'align') { bgneal@312: found = true; bgneal@312: return false; bgneal@312: } bgneal@312: }); bgneal@312: bgneal@312: if (!found) bgneal@312: rule.attribs.push({name : 'align'}); bgneal@312: } bgneal@312: }); bgneal@312: bgneal@312: // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes bgneal@312: editor.onNodeChange.add(function(editor, control_manager) { bgneal@312: var control, fontElm, fontName, fontSize; bgneal@312: bgneal@312: // Find font element get it's name and size bgneal@312: fontElm = editor.dom.getParent(editor.selection.getNode(), 'font'); bgneal@312: if (fontElm) { bgneal@312: fontName = fontElm.face; bgneal@312: fontSize = fontElm.size; bgneal@312: } bgneal@312: bgneal@312: // Select/unselect the font name in droplist bgneal@312: if (control = control_manager.get('fontselect')) { bgneal@312: control.select(function(value) { bgneal@312: return value == fontName; bgneal@312: }); bgneal@312: } bgneal@312: bgneal@312: // Select/unselect the font size in droplist bgneal@312: if (control = control_manager.get('fontsizeselect')) { bgneal@312: control.select(function(value) { bgneal@312: var index = tinymce.inArray(fontSizes, value.fontSize); bgneal@312: bgneal@312: return index + 1 == fontSize; bgneal@312: }); bgneal@312: } bgneal@312: }); bgneal@312: }); bgneal@312: }, bgneal@312: bgneal@312: getInfo : function() { bgneal@312: return { bgneal@312: longname : 'LegacyOutput', bgneal@312: author : 'Moxiecode Systems AB', bgneal@312: authorurl : 'http://tinymce.moxiecode.com', bgneal@312: infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput', bgneal@312: version : tinymce.majorVersion + "." + tinymce.minorVersion bgneal@312: }; bgneal@312: } bgneal@312: }); bgneal@312: bgneal@312: // Register plugin bgneal@312: tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput); bgneal@312: })(tinymce);