You can create a new plugin with the mce_external_plugins
filter.. and link it to a js file. Then, in that file you can do your processing.
function tinymce_init() {
// Hook to tinymce plugins filter
add_filter( 'mce_external_plugins', 'tinymce_plugin' );
}
add_filter('init', 'tinymce_init');
function tinymce_plugin($init) {
// We create a new plugin... linked to a js file.
// Mine was created from a plugin... but you can change this to link to a file in your plugin
$init['keyup_event'] = plugins_url() . '/test/keyup_event.js';
return $init;
}
So, those functions will create the necessary hooks so our js file is loaded inside the tinymce editor.
Now… we can use the js file to grab the editor content on each keyup event.. and process it from there.
jQuery(document).ready(function($) {
// Create 'keyup_event' tinymce plugin
tinymce.PluginManager.add('keyup_event', function(editor, url) {
// Create keyup event
editor.on('keyup', function(e) {
// Get the editor content (html)
get_ed_content = tinymce.activeEditor.getContent();
// Do stuff here... (run do_stuff_here() function)
do_stuff_here(get_ed_content);
});
});
// This is needed for running the keyup event in the text (HTML) view of the editor
$('#content').on('keyup', function(e) {
// Get the editor content (html)
get_ed_content = tinymce.activeEditor.getContent();
// Do stuff here... (run do_stuff_here() function)
do_stuff_here(get_ed_content);
});
// This function allows the script to run from both locations (visual and text)
function do_stuff_here(content) {
// Now, you can further process the data in a single function
alert(content);
}
});
Now… each time you keyup in the editor.. the javascript file will process it’s contents.