(function() { tinymce.PluginManager.add('foogallery', function( editor, url ) { function getParentFooGallery( node ) { while ( node && node.nodeName !== 'BODY' ) { if ( isFooGallery( node ) ) { return node; } node = node.parentNode; } } function isFooGallery( node ) { return node && /foogallery-tinymce-view/.test( node.className ); } function unselectFooGallery( dom ) { dom.removeClass(dom.select('div.foogallery-tinymce-selected'), 'foogallery-tinymce-selected'); } editor.on( 'BeforeSetContent', function( event ) { if ( ! event.content ) { return; } var shortcode_tag = window.FOOGALLERY_SHORTCODE || 'foogallery', regexp = new RegExp('\\[' + shortcode_tag + ' ([^\\]]*)\\]', 'g'); event.content = event.content.replace( regexp, function( match ) { var data = window.encodeURIComponent( match ), idRegex = / id=\"(.*?)\"/ig, idMatch = idRegex.exec(match), id = idMatch ? idMatch[1] : 0; return '
' + window.decodeURIComponent( shortcode ) + '
'; } return ''; // If error, remove the foogallery view }); } }); editor.on( 'mouseup', function( event ) { var dom = editor.dom, node = event.target, fg = getParentFooGallery( node ); // Don't trigger on right-click if ( event.button !== 2 ) { if (fg) { //we have clicked somewhere in the foogallery element if (node.nodeName === 'A' && dom.hasClass(node, 'foogallery-tinymce-toolbar-edit')) { //alert('EDIT : ' + dom.getAttrib( fg, 'data-foogallery-id' )) var win = window.open(node.href, '_blank'); win.focus(); } else if (node.nodeName === 'DIV' && dom.hasClass(node, 'foogallery-tinymce-toolbar-delete')) { //alert('DELETE : ' + dom.getAttrib( fg, 'data-foogallery-id' )) dom.remove(fg); } else { if (!dom.hasClass(fg, 'foogallery-tinymce-selected')) { unselectFooGallery(dom); dom.addClass(fg, 'foogallery-tinymce-selected'); } } } else { unselectFooGallery(dom); } } }); }); })();