Js file
(function() {
tinymce.PluginManager.add( 'custom_class', function( editor, url ) {
// Add Button to Visual Editor Toolbar
editor.addButton('custom_class', {
title: 'Insert PDF Tag',
cmd: 'custom_class',
image: url + '/icon.png',
});
// Add Command when Button Clicked
editor.addCommand('custom_class', function() {
var text = editor.selection.getNode();
if ( text.length === 0 ) {
alert( 'Please select some text.' );
return;
}
// Insert selected text back into editor, wrapping it in an anchor tag
editor.execCommand('mceReplaceContent', false, '[jupdf-viewer file="' + text + '"]');
});
// Enable/disable the button on the node change event
editor.onNodeChange.add(function( editor ) {
// Get selected text, and assume we'll disable our button
var selection = editor.selection.getContent();
var disable = true;
// If we have some text selected, don't disable the button
if ( selection ) {
disable = false;
}
// Define whether our button should be enabled or disabled
editor.controlManager.setDisabled( 'custom_class', disable );
});
});
})();
Php file
<?php
/**
* Plugin Name: TinyMCE Custom Class
* Plugin URI: http://sitepoint.com
* Version: 1.0
* Author: Tim Carr
* Author URI: http://www.n7studios.co.uk
* Description: TinyMCE Plugin to wrap selected text in a custom CSS class, within the Visual Editor
* License: GPL2
*/
class TinyMCE_Custom_Class {
/**
* Constructor. Called when the plugin is initialised.
*/
function __construct() {
if ( is_admin() ) {
add_action( 'init', array( &$this, 'setup_tinymce_plugin' ) );
add_action( 'admin_enqueue_scripts', array( &$this, 'admin_scripts_css' ) );
add_action( 'admin_print_footer_scripts', array( &$this, 'admin_footer_scripts' ) );
}
}
/**
* Check if the current user can edit Posts or Pages, and is using the Visual Editor
* If so, add some filters so we can register our plugin
*/
function setup_tinymce_plugin() {
// Check if the logged in WordPress User can edit Posts or Pages
// If not, don't register our TinyMCE plugin
if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
return;
}
// Check if the logged in WordPress User has the Visual Editor enabled
// If not, don't register our TinyMCE plugin
if ( get_user_option( 'rich_editing' ) !== 'true' ) {
return;
}
// Setup some filters
add_filter( 'mce_external_plugins', array( &$this, 'add_tinymce_plugin' ) );
add_filter( 'mce_buttons', array( &$this, 'add_tinymce_toolbar_button' ) );
}
/**
* Adds a TinyMCE plugin compatible JS file to the TinyMCE / Visual Editor instance
*
* @param array $plugin_array Array of registered TinyMCE Plugins
* @return array Modified array of registered TinyMCE Plugins
*/
function add_tinymce_plugin( $plugin_array ) {
$plugin_array['custom_class'] = plugin_dir_url( __FILE__ ) . 'tinymce-custom-class.js';
return $plugin_array;
}
/**
* Adds a button to the TinyMCE / Visual Editor which the user can click
* to insert a custom CSS class.
*
* @param array $buttons Array of registered TinyMCE Buttons
* @return array Modified array of registered TinyMCE Buttons
*/
function add_tinymce_toolbar_button( $buttons ) {
array_push( $buttons, 'custom_class' );
return $buttons;
}
/**
* Enqueues CSS for TinyMCE Dashicons
*/
function admin_scripts_css() {
wp_enqueue_style( 'tinymce-custom-class', plugins_url( 'tinymce-custom-class.css', __FILE__ ) );
}
/**
* Adds the Custom Class button to the Quicktags (Text) toolbar of the content editor
*/
function admin_footer_scripts() {
// Check the Quicktags script is in use
if ( ! wp_script_is( 'quicktags' ) ) {
return;
}
?>
<script type="text/javascript">
QTags.addButton( 'custom_class', 'Wrap text with PDF tag', insert_custom_class );
function insert_custom_class() {
// Ask the user to enter a CSS class
var text = "";
if(window.getSelection)
text = window.getSelection().toString();
if(text === ""){
alert ("please select some text");
return;
}
text = text.replace('<a href="','');
text = text.substring(0, text.indexOf('">'));
// Insert
QTags.insertContent('[jupdf-viewer file="' + text + '"]');
}
</script>
<?php
}
}
$tinymce_custom_class = new TinyMCE_Custom_Class;
?>