/**
* Formats.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.legacyoutput.core.Formats',
[
'tinymce.core.util.Tools'
],
function (Tools) {
var overrideFormats = function (editor) {
var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img',
fontSizes = Tools.explode(editor.settings.font_size_style_values),
schema = editor.schema;
// Override some internal formats to produce legacy elements and attributes
editor.formatter.register({
// Change alignment formats to use the deprecated align attribute
alignleft: { selector: alignElements, attributes: { align: 'left' } },
aligncenter: { selector: alignElements, attributes: { align: 'center' } },
alignright: { selector: alignElements, attributes: { align: 'right' } },
alignjustify: { selector: alignElements, attributes: { align: 'justify' } },
// Change the basic formatting elements to use deprecated element types
bold: [
{ inline: 'b', remove: 'all' },
{ inline: 'strong', remove: 'all' },
{ inline: 'span', styles: { fontWeight: 'bold' } }
],
italic: [
{ inline: 'i', remove: 'all' },
{ inline: 'em', remove: 'all' },
{ inline: 'span', styles: { fontStyle: 'italic' } }
],
underline: [
{ inline: 'u', remove: 'all' },
{ inline: 'span', styles: { textDecoration: 'underline' }, exact: true }
],
strikethrough: [
{ inline: 'strike', remove: 'all' },
{ inline: 'span', styles: { textDecoration: 'line-through' }, exact: true }
],
// Change font size and font family to use the deprecated font element
fontname: { inline: 'font', attributes: { face: '%value' } },
fontsize: {
inline: 'font',
attributes: {
size: function (vars) {
return Tools.inArray(fontSizes, vars.value) + 1;
}
}
},
// Setup font elements for colors as well
forecolor: { inline: 'font', attributes: { color: '%value' } },
hilitecolor: { inline: 'font', styles: { backgroundColor: '%value' } }
});
// Check that deprecated elements are allowed if not add them
Tools.each('b,i,u,strike'.split(','), function (name) {
schema.addValidElements(name + '[*]');
});
// Add font element if it's missing
if (!schema.getElementRule("font")) {
schema.addValidElements("font[face|size|color|style]");
}
// Add the missing and depreacted align attribute for the serialization engine
Tools.each(alignElements.split(','), function (name) {
var rule = schema.getElementRule(name);
if (rule) {
if (!rule.attributes.align) {
rule.attributes.align = {};
rule.attributesOrder.push('align');
}
}
});
};
var setup = function (editor) {
editor.settings.inline_styles = false;
editor.on('init', function () {
overrideFormats(editor);
});
};
return {
setup: setup
};
}
);
|