/* global tinymce */ ( function() { tinymce.create( 'tinymce.plugins.Subscribe2Plugin', { init: function( ed, url ) { var i = 0, pb = '

', cls = 'mceSubscribe2', shortcode = '[subscribe2]', pbreplaced = [], pbreplacedcount, pbRE = new RegExp( /(\[|)/g ), replacer = function( str ) { if ( -1 !== str.indexOf( 'class="mceSubscribe2' ) ) { str = pbreplaced[i]; } return str; }; // Register commands ed.addCommand( 'mceSubscribe2', function() { ed.execCommand( 'mceInsertContent', 0, pb ); } ); // Register buttons ed.addButton( 'subscribe2', { title: 'Insert Subscribe2 Token', image: url + '/../include/s2-button.png', cmd: cls } ); // load the CSS and enable it on the right class ed.on( 'init', function() { ed.dom.loadCSS( url + '/css/content.css' ); if ( ed.theme.onResolveName ) { ed.theme.onResolveName.add( function( th, o ) { if ( 'IMG' === o.node.nodeName && ed.dom.hasClass( o.node, cls ) ) { o.name = 'subscribe2'; } } ); } } ); // create an array of replaced shortcodes so we have additional parameters // then swap in the graphic ed.on( 'BeforeSetContent', function( ed ) { pbreplaced = ed.content.match( pbRE ); ed.content = ed.content.replace( pbRE, pb ); } ); // swap back the array of shortcodes to preserve parameters // replace any other instances with the default shortcode ed.on( 'PostProcess', function( ed ) { if ( ed.get ) { if ( null !== pbreplaced ) { pbreplacedcount = pbreplaced.length; for ( i = 0; i < pbreplacedcount; i++ ) { ed.content = ed.content.replace( /]+>/, replacer ); } } ed.content = ed.content.replace( /]+>/g, function( im ) { if ( -1 !== im.indexOf( 'class="mceSubscribe2' ) ) { im = shortcode; } return im; } ); } } ); }, getInfo: function() { return { longname: 'Insert Subscribe2 Token', author: 'Matthew Robinson', authorurl: 'http://subscribe2.wordpress.com', infourl: 'http://subscribe2.wordpress.com', version: tinymce.majorVersion + '.' + tinymce.minorVersion }; } } ); // Register plugin tinymce.PluginManager.add( 'subscribe2', tinymce.plugins.Subscribe2Plugin ); }() );