// closure to avoid namespace collision (function(){ // creates the plugin tinymce.create('tinymce.plugins.tinymce_button', { // creates control instances based on the control's id. // our button's id is "dd_button" createControl : function(id, controlManager) { if (id == 'dd_button') { // creates the button var button = controlManager.createButton('dd_button', { title : 'Custom Shortcodes', // title of the button image : '../wp-content/themes/aerial/lib/admin/images/avatar.png', // path to the button's image onclick : function() { // triggers the thickbox var width = jQuery(window).width(), H = jQuery(window).height(), W = ( 720 < width ) ? 720 : width; W = W - 80; H = H - 84; tb_show( 'Styles Shortcodes', '#TB_inline?width=' + W + '&height=' + H + '&inlineId=shortcode-form' ); } }); return button; } return null; } }); // registers the plugin. DON'T MISS THIS STEP!!! tinymce.PluginManager.add('tinymce_button', tinymce.plugins.tinymce_button); // executes this when the DOM is ready jQuery(function(){ // creates a form to be displayed everytime the button is clicked // you should achieve this using AJAX instead of direct html code like this var form = jQuery('
\ \ \
\
\

\ \

\
'); var table = form.find('table'); form.appendTo('body').hide(); // handles the click event of the submit button form.find('#shortcode-submit').click(function(){ // defines the options and their default values // again, this is not the most elegant way to do this // but well, this gets the job done nonetheless var options = { 'code' : '', }; var shortcode = '['; for( var index in options) { var value = table.find('#shortcode-' + index).val(); // attaches the attribute to the shortcode only if it's different from the default value if ( value !== options[index] ) shortcode += value + ']Insert text here[/' + value + ']'; } // inserts the shortcode into the active editor tinyMCE.activeEditor.execCommand('mceInsertContent', 0, shortcode); // closes Thickbox tb_remove(); }); }); })()