I'm using a fantastic jquery text editor named Redactor. I'm trying to add a new button which when clicked gets the text that was highlighted in the text editor.
The script allows to add a new button by adding the following setting:
buttonsCustom: {
        button1: {
            title: 'Button', 
            callback: testButton //executes callback on button click
        } 
}  
then in the callback I want to get the highlighted text
function testButton(obj, event, key)
{
     alert(highlighted_text);
}
I thoroughly looked in the documentation and there's no way to get highlighted text. I tried other functions like...
function getSelText() {
  var txt = '';
  if (window.getSelection) {
    txt = window.getSelection();
  } else if (document.getSelection) {
    txt = document.getSelection();
  } else if (document.selection) {
    txt = document.selection.createRange().text;
  } else return;
  return txt;
}
...but the text editor script already has a way to do it and would be best to use that.
In the script I found where the text selection function is on line 1719 but can't figure out how to use it for a custom button.
Anyone experienced with Redactor, please help!
Pick your poison (both methods work on Firefox and IE):
Method 1: Undocumented internal function
There is an internal function named getSelection, but it isn't part of the public API.
You can call it with $('#redactor_content').data('redactor').getSelection().
Method 2: Duplicating functionality
Now if you don't want to rely on accessing the internals of Redactor, you can duplicate the implementation into your own function, replacing access to internal variables with a call to getDoc():
function getRedactorSelection(elem)
{
    var doc = elem.getDoc().get(0);
    if (doc.getSelection)
    {
        return doc.getSelection();
    }
    else if (doc.selection)
    {
        return doc.selection.createRange();
    }
};
Usage: getRedactorSelection($('#redactor_content'))
The upside is that you are protected from changes in how internal functions of Redactor are named and called, but the downside is that your code is no longer browser-independent.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With