Commit 3db898cd authored by Stefan Galinski's avatar Stefan Galinski 🎮

[TASK] Update to tinymce 4.3.13

parent aa93e4d5
......@@ -5,7 +5,7 @@
You can simplify the selection by using the following command in your developer tools console.
Deselect "ru@petr1708" and "zh_CN.GB2312" afterwards, because this language doesn't exists and leads to errors.
$('input[type=checkbox]').attr('checked', 1)
jQuery('input[type=checkbox]').attr('checked', 1)
3. Rename node_modules to tinymce_mode_modules, because TYPO3 removes the node_modules directory
4. Add the "langs" directory inside tinymce_node_modules/tinymce with the downloaded languages
\ No newline at end of file
4. Add the "langs" directory inside tinymce_node_modules/tinymce with the downloaded languages
......@@ -4,7 +4,7 @@
"description": "TinyMCE sources including a small PHP API",
"homepage": "https://www.sgalinski.de",
"license": ["GPL-2.0+"],
"version": "4.3.4",
"version": "4.3.13",
"support": {
"issues": "https://forge.typo3.org/projects/extension-tinymce"
},
......@@ -19,4 +19,4 @@
"SGalinski\\Tinymce\\": "Classes/"
}
}
}
\ No newline at end of file
}
......@@ -4,7 +4,7 @@ $EM_CONF[$_EXTKEY] = array (
'title' => 'tinyMCE',
'description' => 'TinyMCE sources including a small PHP API',
'category' => 'misc',
'version' => '4.3.4',
'version' => '4.3.13',
'state' => 'stable',
'uploadfolder' => false,
'createDirs' => '',
......
......@@ -2,6 +2,6 @@
"name": "sg_tinymce",
"description": "",
"dependencies": {
"tinymce": "^4.3.4"
"tinymce": "^4.3.11"
}
}
composer.json
bower.json
readme.md
{
"name": "tinymce",
"description": "Web based JavaScript HTML WYSIWYG editor control.",
"license": "LGPL-2.1",
"keywords": [
"editor",
"wysiwyg",
"tinymce",
"richtext",
"javascript",
"html"
],
"homepage": "http://www.tinymce.com",
"ignore": [
"readme.md",
"composer.json",
"package.json",
".npmignore",
"changelog.txt"
]
}
\ No newline at end of file
This diff is collapsed.
{
"name": "tinymce/tinymce",
"version": "4.3.13",
"description": "Web based JavaScript HTML WYSIWYG editor control.",
"license": [
"LGPL-2.1"
],
"keywords": [
"editor",
"wysiwyg",
"tinymce",
"richtext",
"javascript",
"html"
],
"homepage": "http://www.tinymce.com",
"type": "component",
"extra": {
"component": {
"scripts": [
"tinymce.js",
"plugins/*/plugin.js",
"themes/*/theme.js"
],
"files": [
"tinymce.min.js",
"plugins/*/plugin.min.js",
"themes/*/theme.min.js",
"skins/**"
]
}
},
"archive": {
"exclude": [
"readme.md",
"bower.js",
"package.json",
".npmignore",
"changelog.txt"
]
}
}
\ No newline at end of file
/**
* jquery.tinymce.js
*
* Released under LGPL License.
* Copyright (c) 1999-2015 Ephox Corp. All rights reserved
*
* License: http://www.tinymce.com/license
* Contributing: http://www.tinymce.com/contributing
*/
/*global tinymce:true, jQuery */
(function($) {
var undef,
lazyLoading,
patchApplied,
delayedInits = [],
win = window;
$.fn.tinymce = function(settings) {
var self = this, url, base, lang, suffix = "";
// No match then just ignore the call
if (!self.length) {
return self;
}
// Get editor instance
if (!settings) {
return window.tinymce ? tinymce.get(self[0].id) : null;
}
self.css('visibility', 'hidden'); // Hide textarea to avoid flicker
function init() {
var editors = [], initCount = 0;
// Apply patches to the jQuery object, only once
if (!patchApplied) {
applyPatch();
patchApplied = true;
}
// Create an editor instance for each matched node
self.each(function(i, node) {
var ed, id = node.id, oninit = settings.oninit;
// Generate unique id for target element if needed
if (!id) {
node.id = id = tinymce.DOM.uniqueId();
}
// Only init the editor once
if (tinymce.get(id)) {
return;
}
// Create editor instance and render it
ed = new tinymce.Editor(id, settings, tinymce.EditorManager);
editors.push(ed);
ed.on('init', function() {
var scope, func = oninit;
self.css('visibility', '');
// Run this if the oninit setting is defined
// this logic will fire the oninit callback ones each
// matched editor instance is initialized
if (oninit) {
// Fire the oninit event ones each editor instance is initialized
if (++initCount == editors.length) {
if (typeof func === "string") {
scope = (func.indexOf(".") === -1) ? null : tinymce.resolve(func.replace(/\.\w+$/, ""));
func = tinymce.resolve(func);
}
// Call the oninit function with the object
func.apply(scope || tinymce, editors);
}
}
});
});
// Render the editor instances in a separate loop since we
// need to have the full editors array used in the onInit calls
$.each(editors, function(i, ed) {
ed.render();
});
}
// Load TinyMCE on demand, if we need to
if (!win.tinymce && !lazyLoading && (url = settings.script_url)) {
lazyLoading = 1;
base = url.substring(0, url.lastIndexOf("/"));
// Check if it's a dev/src version they want to load then
// make sure that all plugins, themes etc are loaded in source mode as well
if (url.indexOf('.min') != -1) {
suffix = ".min";
}
// Setup tinyMCEPreInit object this will later be used by the TinyMCE
// core script to locate other resources like CSS files, dialogs etc
// You can also predefined a tinyMCEPreInit object and then it will use that instead
win.tinymce = win.tinyMCEPreInit || {
base: base,
suffix: suffix
};
// url contains gzip then we assume it's a compressor
if (url.indexOf('gzip') != -1) {
lang = settings.language || "en";
url = url + (/\?/.test(url) ? '&' : '?') + "js=true&core=true&suffix=" + escape(suffix) +
"&themes=" + escape(settings.theme || 'modern') + "&plugins=" +
escape(settings.plugins || '') + "&languages=" + (lang || '');
// Check if compressor script is already loaded otherwise setup a basic one
if (!win.tinyMCE_GZ) {
win.tinyMCE_GZ = {
start: function() {
function load(url) {
tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(url));
}
// Add core languages
load("langs/" + lang + ".js");
// Add themes with languages
load("themes/" + settings.theme + "/theme" + suffix + ".js");
load("themes/" + settings.theme + "/langs/" + lang + ".js");
// Add plugins with languages
$.each(settings.plugins.split(","), function(i, name) {
if (name) {
load("plugins/" + name + "/plugin" + suffix + ".js");
load("plugins/" + name + "/langs/" + lang + ".js");
}
});
},
end: function() {
}
};
}
}
var script = document.createElement('script');
script.type = 'text/javascript';
script.onload = script.onreadystatechange = function(e) {
e = e || window.event;
if (lazyLoading !== 2 && (e.type == 'load' || /complete|loaded/.test(script.readyState))) {
tinymce.dom.Event.domLoaded = 1;
lazyLoading = 2;
// Execute callback after mainscript has been loaded and before the initialization occurs
if (settings.script_loaded) {
settings.script_loaded();
}
init();
$.each(delayedInits, function(i, init) {
init();
});
}
};
script.src = url;
document.body.appendChild(script);
} else {
// Delay the init call until tinymce is loaded
if (lazyLoading === 1) {
delayedInits.push(init);
} else {
init();
}
}
return self;
};
// Add :tinymce pseudo selector this will select elements that has been converted into editor instances
// it's now possible to use things like $('*:tinymce') to get all TinyMCE bound elements.
$.extend($.expr[":"], {
tinymce: function(e) {
var editor;
if (e.id && "tinymce" in window) {
editor = tinymce.get(e.id);
if (editor && editor.editorManager === tinymce) {
return true;
}
}
return false;
}
});
// This function patches internal jQuery functions so that if
// you for example remove an div element containing an editor it's
// automatically destroyed by the TinyMCE API
function applyPatch() {
// Removes any child editor instances by looking for editor wrapper elements
function removeEditors(name) {
// If the function is remove
if (name === "remove") {
this.each(function(i, node) {
var ed = tinyMCEInstance(node);
if (ed) {
ed.remove();
}
});
}
this.find("span.mceEditor,div.mceEditor").each(function(i, node) {
var ed = tinymce.get(node.id.replace(/_parent$/, ""));
if (ed) {
ed.remove();
}
});
}
// Loads or saves contents from/to textarea if the value
// argument is defined it will set the TinyMCE internal contents
function loadOrSave(value) {
var self = this, ed;
// Handle set value
/*jshint eqnull:true */
if (value != null) {
removeEditors.call(self);
// Saves the contents before get/set value of textarea/div
self.each(function(i, node) {
var ed;
if ((ed = tinymce.get(node.id))) {
ed.setContent(value);
}
});
} else if (self.length > 0) {
// Handle get value
if ((ed = tinymce.get(self[0].id))) {
return ed.getContent();
}
}
}
// Returns tinymce instance for the specified element or null if it wasn't found
function tinyMCEInstance(element) {
var ed = null;
if (element && element.id && win.tinymce) {
ed = tinymce.get(element.id);
}
return ed;
}
// Checks if the specified set contains tinymce instances
function containsTinyMCE(matchedSet) {
return !!((matchedSet) && (matchedSet.length) && (win.tinymce) && (matchedSet.is(":tinymce")));
}
// Patch various jQuery functions
var jQueryFn = {};
// Patch some setter/getter functions these will
// now be able to set/get the contents of editor instances for
// example $('#editorid').html('Content'); will update the TinyMCE iframe instance
$.each(["text", "html", "val"], function(i, name) {
var origFn = jQueryFn[name] = $.fn[name],
textProc = (name === "text");
$.fn[name] = function(value) {
var self = this;
if (!containsTinyMCE(self)) {
return origFn.apply(self, arguments);
}
if (value !== undef) {
loadOrSave.call(self.filter(":tinymce"), value);
origFn.apply(self.not(":tinymce"), arguments);
return self; // return original set for chaining
}
var ret = "";
var args = arguments;
(textProc ? self : self.eq(0)).each(function(i, node) {
var ed = tinyMCEInstance(node);
if (ed) {
ret += textProc ? ed.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g, "") : ed.getContent({save: true});
} else {
ret += origFn.apply($(node), args);
}
});
return ret;
};
});
// Makes it possible to use $('#id').append("content"); to append contents to the TinyMCE editor iframe
$.each(["append", "prepend"], function(i, name) {
var origFn = jQueryFn[name] = $.fn[name],
prepend = (name === "prepend");
$.fn[name] = function(value) {
var self = this;
if (!containsTinyMCE(self)) {
return origFn.apply(self, arguments);
}
if (value !== undef) {
if (typeof value === "string") {
self.filter(":tinymce").each(function(i, node) {
var ed = tinyMCEInstance(node);
if (ed) {
ed.setContent(prepend ? value + ed.getContent() : ed.getContent() + value);
}
});
}
origFn.apply(self.not(":tinymce"), arguments);
return self; // return original set for chaining
}
};
});
// Makes sure that the editor instance gets properly destroyed when the parent element is removed
$.each(["remove", "replaceWith", "replaceAll", "empty"], function(i, name) {
var origFn = jQueryFn[name] = $.fn[name];
$.fn[name] = function() {
removeEditors.call(this, name);
return origFn.apply(this, arguments);
};
});
jQueryFn.attr = $.fn.attr;
// Makes sure that $('#tinymce_id').attr('value') gets the editors current HTML contents
$.fn.attr = function(name, value) {
var self = this, args = arguments;
if ((!name) || (name !== "value") || (!containsTinyMCE(self))) {
if (value !== undef) {
return jQueryFn.attr.apply(self, args);
}
return jQueryFn.attr.apply(self, args);
}
if (value !== undef) {
loadOrSave.call(self.filter(":tinymce"), value);
jQueryFn.attr.apply(self.not(":tinymce"), args);
return self; // return original set for chaining
}
var node = self[0], ed = tinyMCEInstance(node);
return ed ? ed.getContent({save: true}) : jQueryFn.attr.apply($(node), args);
};
}
})(jQuery);
!function(a){function b(){function b(a){"remove"===a&&this.each(function(a,b){var c=e(b);c&&c.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(a,b){var c=tinymce.get(b.id.replace(/_parent$/,""));c&&c.remove()})}function d(a){var c,d=this;if(null!=a)b.call(d),d.each(function(b,c){var d;(d=tinymce.get(c.id))&&d.setContent(a)});else if(d.length>0&&(c=tinymce.get(d[0].id)))return c.getContent()}function e(a){var b=null;return a&&a.id&&g.tinymce&&(b=tinymce.get(a.id)),b}function f(a){return!!(a&&a.length&&g.tinymce&&a.is(":tinymce"))}var h={};a.each(["text","html","val"],function(b,g){var i=h[g]=a.fn[g],j="text"===g;a.fn[g]=function(b){var g=this;if(!f(g))return i.apply(g,arguments);if(b!==c)return d.call(g.filter(":tinymce"),b),i.apply(g.not(":tinymce"),arguments),g;var h="",k=arguments;return(j?g:g.eq(0)).each(function(b,c){var d=e(c);h+=d?j?d.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):d.getContent({save:!0}):i.apply(a(c),k)}),h}}),a.each(["append","prepend"],function(b,d){var g=h[d]=a.fn[d],i="prepend"===d;a.fn[d]=function(a){var b=this;return f(b)?a!==c?("string"==typeof a&&b.filter(":tinymce").each(function(b,c){var d=e(c);d&&d.setContent(i?a+d.getContent():d.getContent()+a)}),g.apply(b.not(":tinymce"),arguments),b):void 0:g.apply(b,arguments)}}),a.each(["remove","replaceWith","replaceAll","empty"],function(c,d){var e=h[d]=a.fn[d];a.fn[d]=function(){return b.call(this,d),e.apply(this,arguments)}}),h.attr=a.fn.attr,a.fn.attr=function(b,g){var i=this,j=arguments;if(!b||"value"!==b||!f(i))return g!==c?h.attr.apply(i,j):h.attr.apply(i,j);if(g!==c)return d.call(i.filter(":tinymce"),g),h.attr.apply(i.not(":tinymce"),j),i;var k=i[0],l=e(k);return l?l.getContent({save:!0}):h.attr.apply(a(k),j)}}var c,d,e,f=[],g=window;a.fn.tinymce=function(c){function h(){var d=[],f=0;e||(b(),e=!0),l.each(function(a,b){var e,g=b.id,h=c.oninit;g||(b.id=g=tinymce.DOM.uniqueId()),tinymce.get(g)||(e=new tinymce.Editor(g,c,tinymce.EditorManager),d.push(e),e.on("init",function(){var a,b=h;l.css("visibility",""),h&&++f==d.length&&("string"==typeof b&&(a=-1===b.indexOf(".")?null:tinymce.resolve(b.replace(/\.\w+$/,"")),b=tinymce.resolve(b)),b.apply(a||tinymce,d))}))}),a.each(d,function(a,b){b.render()})}var i,j,k,l=this,m="";if(!l.length)return l;if(!c)return window.tinymce?tinymce.get(l[0].id):null;if(l.css("visibility","hidden"),g.tinymce||d||!(i=c.script_url))1===d?f.push(h):h();else{d=1,j=i.substring(0,i.lastIndexOf("/")),-1!=i.indexOf(".min")&&(m=".min"),g.tinymce=g.tinyMCEPreInit||{base:j,suffix:m},-1!=i.indexOf("gzip")&&(k=c.language||"en",i=i+(/\?/.test(i)?"&":"?")+"js=true&core=true&suffix="+escape(m)+"&themes="+escape(c.theme||"modern")+"&plugins="+escape(c.plugins||"")+"&languages="+(k||""),g.tinyMCE_GZ||(g.tinyMCE_GZ={start:function(){function b(a){tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(a))}b("langs/"+k+".js"),b("themes/"+c.theme+"/theme"+m+".js"),b("themes/"+c.theme+"/langs/"+k+".js"),a.each(c.plugins.split(","),function(a,c){c&&(b("plugins/"+c+"/plugin"+m+".js"),b("plugins/"+c+"/langs/"+k+".js"))})},end:function(){}}));var n=document.createElement("script");n.type="text/javascript",n.onload=n.onreadystatechange=function(b){b=b||window.event,2===d||"load"!=b.type&&!/complete|loaded/.test(n.readyState)||(tinymce.dom.Event.domLoaded=1,d=2,c.script_loaded&&c.script_loaded(),h(),a.each(f,function(a,b){b()}))},n.src=i,document.body.appendChild(n)}return l},a.extend(a.expr[":"],{tinymce:function(a){var b;return a.id&&"tinymce"in window&&(b=tinymce.get(a.id),b&&b.editorManager===tinymce)?!0:!1}})}(jQuery);
\ No newline at end of file
!function(a){function b(){function b(a){"remove"===a&&this.each(function(a,b){var c=e(b);c&&c.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(a,b){var c=tinymce.get(b.id.replace(/_parent$/,""));c&&c.remove()})}function d(a){var c,d=this;if(null!=a)b.call(d),d.each(function(b,c){var d;(d=tinymce.get(c.id))&&d.setContent(a)});else if(d.length>0&&(c=tinymce.get(d[0].id)))return c.getContent()}function e(a){var b=null;return a&&a.id&&g.tinymce&&(b=tinymce.get(a.id)),b}function f(a){return!!(a&&a.length&&g.tinymce&&a.is(":tinymce"))}var h={};a.each(["text","html","val"],function(b,g){var i=h[g]=a.fn[g],j="text"===g;a.fn[g]=function(b){var g=this;if(!f(g))return i.apply(g,arguments);if(b!==c)return d.call(g.filter(":tinymce"),b),i.apply(g.not(":tinymce"),arguments),g;var h="",k=arguments;return(j?g:g.eq(0)).each(function(b,c){var d=e(c);h+=d?j?d.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):d.getContent({save:!0}):i.apply(a(c),k)}),h}}),a.each(["append","prepend"],function(b,d){var g=h[d]=a.fn[d],i="prepend"===d;a.fn[d]=function(a){var b=this;return f(b)?a!==c?("string"==typeof a&&b.filter(":tinymce").each(function(b,c){var d=e(c);d&&d.setContent(i?a+d.getContent():d.getContent()+a)}),g.apply(b.not(":tinymce"),arguments),b):void 0:g.apply(b,arguments)}}),a.each(["remove","replaceWith","replaceAll","empty"],function(c,d){var e=h[d]=a.fn[d];a.fn[d]=function(){return b.call(this,d),e.apply(this,arguments)}}),h.attr=a.fn.attr,a.fn.attr=function(b,g){var i=this,j=arguments;if(!b||"value"!==b||!f(i))return g!==c?h.attr.apply(i,j):h.attr.apply(i,j);if(g!==c)return d.call(i.filter(":tinymce"),g),h.attr.apply(i.not(":tinymce"),j),i;var k=i[0],l=e(k);return l?l.getContent({save:!0}):h.attr.apply(a(k),j)}}var c,d,e,f=[],g=window;a.fn.tinymce=function(c){function h(){var d=[],f=0;e||(b(),e=!0),l.each(function(a,b){var e,g=b.id,h=c.oninit;g||(b.id=g=tinymce.DOM.uniqueId()),tinymce.get(g)||(e=new tinymce.Editor(g,c,tinymce.EditorManager),d.push(e),e.on("init",function(){var a,b=h;l.css("visibility",""),h&&++f==d.length&&("string"==typeof b&&(a=-1===b.indexOf(".")?null:tinymce.resolve(b.replace(/\.\w+$/,"")),b=tinymce.resolve(b)),b.apply(a||tinymce,d))}))}),a.each(d,function(a,b){b.render()})}var i,j,k,l=this,m="";if(!l.length)return l;if(!c)return window.tinymce?tinymce.get(l[0].id):null;if(l.css("visibility","hidden"),g.tinymce||d||!(i=c.script_url))1===d?f.push(h):h();else{d=1,j=i.substring(0,i.lastIndexOf("/")),-1!=i.indexOf(".min")&&(m=".min"),g.tinymce=g.tinyMCEPreInit||{base:j,suffix:m},-1!=i.indexOf("gzip")&&(k=c.language||"en",i=i+(/\?/.test(i)?"&":"?")+"js=true&core=true&suffix="+escape(m)+"&themes="+escape(c.theme||"modern")+"&plugins="+escape(c.plugins||"")+"&languages="+(k||""),g.tinyMCE_GZ||(g.tinyMCE_GZ={start:function(){function b(a){tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(a))}b("langs/"+k+".js"),b("themes/"+c.theme+"/theme"+m+".js"),b("themes/"+c.theme+"/langs/"+k+".js"),a.each(c.plugins.split(","),function(a,c){c&&(b("plugins/"+c+"/plugin"+m+".js"),b("plugins/"+c+"/langs/"+k+".js"))})},end:function(){}}));var n=document.createElement("script");n.type="text/javascript",n.onload=n.onreadystatechange=function(b){b=b||window.event,2===d||"load"!=b.type&&!/complete|loaded/.test(n.readyState)||(tinymce.dom.Event.domLoaded=1,d=2,c.script_loaded&&c.script_loaded(),h(),a.each(f,function(a,b){b()}))},n.src=i,document.body.appendChild(n)}return l},a.extend(a.expr[":"],{tinymce:function(a){var b;return!!(a.id&&"tinymce"in window&&(b=tinymce.get(a.id),b&&b.editorManager===tinymce))}})}(jQuery);
\ No newline at end of file
tinymce.addI18n('es_AR',{
"Cut": "Cortar",
"Heading 5": "Encabezado 5",
"Header 2": "Cabecera 2",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Tu navegador no soporta el acceso directo al portapapeles. Por favor, utiliza los atajos de teclados Ctrl+X\/C\/V.",
"Heading 4": "Encabezado 4",
"Div": "Div",
"Heading 2": "Encabezado 2",
"Paste": "Pegar",
"Close": "Cerrar",
"Font Family": "Fuente",
"Pre": "Pre",
"Align right": "Alinear a Derecha",
"New document": "Nuevo documento",
"Blockquote": "Cita de bloque",
"Numbered list": "Lista numerada",
"Heading 1": "Encabezado 1",
"Headings": "Encabezados",
"Increase indent": "Incrementar indentaci\u00f3n",
"Formats": "Formatos",
"Headers": "Cabeceras",
"Select all": "Seleccionar todo",
"Header 3": "Cabecera 3",
"Blocks": "Bloques",
"Undo": "Deshacer",
"Strikethrough": "Tachado",
"Bullet list": "Lista de Vi\u00f1etas",
"Header 1": "Cabecera 1",
"Superscript": "Super\u00edndice",
"Clear formatting": "Limpiar formateado",
"Font Sizes": "Tama\u00f1o de Fuente",
"Subscript": "Sub\u00edndice",
"Header 6": "Cabecera 6",
"Redo": "Rehacer",
"Paragraph": "P\u00e1rrafo",
"Ok": "Ok",
"Bold": "Negrita",
"Code": "C\u00f3digo",
"Italic": "It\u00e1lica",
"Align center": "Alinear al Centro",
"Header 5": "Cabecera 5",
"Heading 6": "Encabezado 6",
"Heading 3": "Encabezado 3",
"Decrease indent": "Disminuir indentaci\u00f3n",
"Header 4": "Cabecera 4",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Pegar est\u00e1 ahora en modo de texto plano. El contenido no ser\u00e1 pegado como texto plano hasta que desactives esta opci\u00f3n.",
"Underline": "Subrayado",
"Cancel": "Cancelar",
"Justify": "Justificar",
"Inline": "En l\u00ednea",
"Copy": "Copiar",
"Align left": "Alinear a Izquierda",
"Visual aids": "Ayudas Visuales",
"Special character": "Caracter Especial",
"Source code": "C\u00f3digo Fuente",
"Emoticons": "Emoticones",
"Fullscreen": "Pantalla Completa",
"Horizontal line": "L\u00ednea Horizontal",
"Horizontal space": "Espacio Horizontal",
"B": "B",
"Insert\/edit image": "Insertar\/Editar Imagen",
"General": "General",
"Advanced": "Avanzado",
"G": "G",
"R": "R",
"Source": "Fuente",
"Border": "Borde",
"Constrain proportions": "Restricciones de proporci\u00f3n",
"Vertical space": "Espacio Vertical",
"Image description": "Descripci\u00f3n",
"Style": "Estilo",
"Dimensions": "Dimensiones",
"Insert image": "Insertar Imagen",
"Insert date\/time": "Insertar Fecha\/hora",
"Page break": "Salto de p\u00e1gina",
"Preview": "Previzualizaci\u00f3n",
"Print": "Imprimir",
"Save": "Guardar",
"Show blocks": "Mostrar bloques",
"Show invisible characters": "Mostrar caracteres invisibles",
"Words: {0}": "Palabras:{0}"
});
\ No newline at end of file
......@@ -58,14 +58,17 @@ tinymce.addI18n('es_MX',{