-
-
Save tomjn/3690149 to your computer and use it in GitHub Desktop.
add_filter("mce_external_plugins", "tomjn_mce_external_plugins"); | |
function tomjn_mce_external_plugins($plugin_array){ | |
$plugin_array['typekit'] = get_template_directory_uri().'/typekit.tinymce.js'; | |
return $plugin_array; | |
} |
(function() { | |
tinymce.create('tinymce.plugins.typekit', { | |
init: function(ed, url) { | |
ed.onPreInit.add(function(ed) { | |
// Get the DOM document object for the IFRAME | |
var doc = ed.getDoc(); | |
// Create the script we will add to the header asynchronously | |
var jscript = "(function() {\n\ | |
var config = {\n\ | |
kitId: 'xxxxxxx'\n\ | |
};\n\ | |
var d = false;\n\ | |
var tk = document.createElement('script');\n\ | |
tk.src = '//use.typekit.net/' + config.kitId + '.js';\n\ | |
tk.type = 'text/javascript';\n\ | |
tk.async = 'true';\n\ | |
tk.onload = tk.onreadystatechange = function() {\n\ | |
var rs = this.readyState;\n\ | |
if (d || rs && rs != 'complete' && rs != 'loaded') return;\n\ | |
d = true;\n\ | |
try { Typekit.load(config); } catch (e) {}\n\ | |
};\n\ | |
var s = document.getElementsByTagName('script')[0];\n\ | |
s.parentNode.insertBefore(tk, s);\n\ | |
})();"; | |
// Create a script element and insert the TypeKit code into it | |
var script = doc.createElement("script"); | |
script.type = "text/javascript"; | |
script.appendChild(doc.createTextNode(jscript)); | |
// Add the script to the header | |
doc.getElementsByTagName('head')[0].appendChild(script); | |
}); | |
}, | |
getInfo: function() { | |
return { | |
longname: 'TypeKit For TinyMCE', | |
author: 'Tom J Nowell', | |
authorurl: 'http://tomjn.com/', | |
infourl: 'http://twitter.com/tarendai', | |
version: "1.1" | |
}; | |
} | |
}); | |
tinymce.PluginManager.add('typekit', tinymce.plugins.typekit); | |
})(); |
I found it better to disable font watching when using Typekit in WordPress admin - to ensure the test string was not getting into the saved content via TinyMCE.
Just add the following two properties to the config object:
var config = {\n\
kitId: 'xxxxxx', events: false, classes: false\n\
};\n\
as per these instructions "If both events and classes are set to false, the Typekit JavaScript only inserts the CSS link to the fonts and does not perform any font watching." here: http://help.typekit.com/customer/portal/articles/649336
Thanks man @NeilJS
Also huge thanks to Tom Nowell for getting this going in the first place.
TinyMCE has since deprecated the onPreInit
function in version 4.x, which WordPress now uses. It doesn't cause any errors, in fact it still works, but there is a log in the console stating that it is deprecated (giving no optimal solution, leaving it to me to save the day).
Replacing line 4 in typekit.tinymce.js
with this will ensure future compatibility:
ed.on('PreInit', function(e) {
Documentation on the on('PreInit')
function is here.
new javascript code because updated Typekit!