Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You have two ways of achieving this:</p> <p>When pushing the button you check for the selection parent node. If the node is a link then you can get the link information from the html a-element. To populate your dialogue you will know what to do.</p> <p>The other option is to add a contextmenu on rightclick, which will provide the necessary functionalities.</p> <p>Here is the plugin code for this (keep in mind that you will have to add "customcontextmenu" to the plugin-setting of your tinymce).</p> <pre><code>/** * editor_plugin_src.js * * Plugin for contextmenus. */ (function() { var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM; tinymce.PluginManager.requireLangPack('customcontextmenu'); /** * This plugin a context menu to TinyMCE editor instances. * * @class tinymce.plugins.customcontextmenu */ tinymce.create('tinymce.plugins.customcontextmenu', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @method init * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed) { var t = this, lastRng; t.editor = ed; // Registiere commands ed.addCommand('edit_inline_element', function() { //edit_inline_element(ed, ed.right_clicked_node); //ed.right_clicked_node is the actually clicked node //call or do whatever you need here }); // delete link ed.addCommand('delete_inline_element', function() { $(ed.right_clicked_node).replaceWith($(ed.right_clicked_node).html()); }); // assign the right clicked node (it is the evt.target) ed.onClick.add(function(ed, evt) { if (evt.button == 2) ed.right_clicked_node = evt.target; }); /** * This event gets fired when the context menu is shown. * * @event onContextMenu * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event. * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed. */ t.onContextMenu = new tinymce.util.Dispatcher(this); ed.onContextMenu.add(function(ed, e) { if (!e.ctrlKey) { // Restore the last selection since it was removed if (lastRng) ed.selection.setRng(lastRng); var menu = t._getMenu(ed); if ((typeof menu).toLowerCase() == 'object') { menu.showMenu(e.clientX, e.clientY); Event.add(ed.getDoc(), 'click', function(e) { hide(ed, e); }); Event.cancel(e); } // sonst Standardmenu anzeigen } }); ed.onRemove.add(function() { if (t._menu) t._menu.removeAll(); }); function hide(ed, e) { lastRng = null; // Since the contextmenu event moves // the selection we need to store it away if (e &amp;&amp; e.button == 2) { lastRng = ed.selection.getRng(); return; } if (t._menu) { t._menu.removeAll(); t._menu.destroy(); Event.remove(ed.getDoc(), 'click', hide); } }; ed.onMouseDown.add(hide); ed.onKeyDown.add(hide); }, _getMenu: function(ed){ var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2; if (m) { m.removeAll(); m.destroy(); } p1 = DOM.getPos(ed.getContentAreaContainer()); p2 = DOM.getPos(ed.getContainer()); m = ed.controlManager.createDropMenu('contextmenu', { offset_x : p1.x + ed.getParam('contextmenu_offset_x', 0), offset_y : p1.y + ed.getParam('contextmenu_offset_y', 0), constrain : 1 }); t._menu = m; if ((typeof ed.right_clicked_node) !== "undefined" &amp;&amp; ed.right_clicked_node.nodeName.toLowerCase() == 'a' ) { m.add({ title: $(ed.right_clicked_node).attr('title'), }); m.addSeparator(); m.add({ title: 'Edit link', icon: 'edit_inline_element', cmd: 'edit_link' }); m.add({ title: 'Delete link', icon: 'delete_inline_element', cmd: 'delete_link' }); t.onContextMenu.dispatch(t, m, el, col); return m; } else { // kein Menu anzeigen return 0; } } }); // Register plugin tinymce.PluginManager.add('customcontextmenu', tinymce.plugins.customcontextmenu); })(); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload