Skip to content

Instantly share code, notes, and snippets.

@aschempp
Last active December 12, 2015 00:18
Show Gist options
  • Save aschempp/4682480 to your computer and use it in GitHub Desktop.
Save aschempp/4682480 to your computer and use it in GitHub Desktop.
Allow to load multiple tinyMCE configs
var tinyMCE_GZ_shim = tinyMCE_GZ_shim || (function() {
"use strict";
var tinyMCE_GZ = window.tinyMCE_GZ;
var tinyMCE = null;
var initialized = false;
var config_gz = [];
var config_tiny = {};
var create_shim = function(t, s) {
var shim, k;
if (Object.create) {
shim = Object.create(t);
for (k in s) {
if (s.hasOwnProperty(k)) {
shim[k] = s[k];
}
}
} else {
shim = s;
shim.__proto__ = t;
}
return shim;
}
var array_unique = function(arr) {
var unique = [];
var i, total;
arr = arr.sort();
for (i=0, total=arr.length; i<total; i++) {
if (arr[i + 1] != arr[i]) {
unique.push(arr[i]);
}
}
return unique;
}
var tinyMCE_GZ_shim = {
init: function(s) {
config_gz.push(s)
}
}
var tinyMCE_shim = {
init: function(s) {
var elements = s.elements.split(',');
var i, total;
for (i=0, total=elements.length; i<total; i++) {
config_tiny[elements[i]] = s;
}
},
execCommand: function(c, u, v) {
initialize();
if (tinyMCE && typeof config_tiny[v] != 'undefined') {
tinyMCE.init(config_tiny[v]);
tinyMCE.execCommand(c, u, v);
}
}
}
var initialize = function() {
if (initialized) return;
var settings = {plugins:[], themes:[], languages:[]};
var i, s, k, total;
for (i=0, total=config_gz.length;i<total; i++) {
s = config_gz[i];
for (k in s) {
if (k == 'plugins' || k == 'themes' || k == 'languages') {
[].push.apply(settings[k], s[k].split(','));
}
else if (s.hasOwnProperty(k)) {
settings[k] = s[k];
}
}
}
settings.plugins = array_unique(settings.plugins).join(',');
settings.themes = array_unique(settings.themes).join(',');
settings.languages = array_unique(settings.languages).join(',');
// load tinyMCE
tinyMCE_GZ.init(settings);
tinyMCE = window.tinyMCE;
tinyMCE_shim = create_shim(tinyMCE, tinyMCE_shim);
window.tinyMCE = tinyMCE_shim;
initialized = true;
}
window.tinyMCE = tinyMCE_shim;
tinyMCE_GZ_shim = create_shim(tinyMCE_GZ, tinyMCE_GZ_shim);
return tinyMCE_GZ_shim;
})();
window.tinyMCE_GZ = tinyMCE_GZ_shim;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment