Krzysztof Przygoda
Krzysztof Przygoda

Reputation: 1315

How to check textarea vs CKEDITOR?

I need to capture last focused input and paste something in it later.

I've already managed to catch last focused HTML input field (using jQuery on focusin event) or CKEDITOR editor (using CKEDITOR API on focus event). Because I store this last object in one var lastFocusedInput (jQuery object or CKEDITOR editor object), now I need to determine if it is CKEDITOR or jQuery object, due to they have different methods to paste data in it.

Any ideas how to do this in a more sophisticated way than testing it like that:

function isjQueryObject(o)
{
    return (o && (o instanceof jQuery || o.constructor.prototype.jquery));
}

function isCKEditorObject(o)
{
    return (o && (typeof CKEDITOR !== undefined) && (typeof o.insertHtml !== undefined));
}

EDIT on 2018-03-29

In the meantime I've ended up with type testing as below due to the need of reuse in other areas of the code.

function TypeTester()
{
    var result = function (test)
    {
        return test ? true : false;
    };

    // jQuery [object Function]
    this.jQuery = function (o)
    {
        return result(o
            && (o instanceof jQuery || o.constructor.prototype.jquery)
        );
    };

    // CKEDITOR [object Object]
    this.CKEDITOR =
    {
        object: function (o)
        {
            return result(o
                && o.replaceClass === 'ckeditor'
            );
        },

        instance: function (o)
        {
            return result(o
                && o.insertHtml !== undefined
                && o.insertText !== undefined
            );
        },
    };
};
var isTypeOf = new TypeTester();

var lastFocusedInput = new Object(
{
    object: null,
    insert: function (content)
    {
        if (!this.object) return;

        switch (true)
        {
            case isTypeOf.jQuery(this.object) :
                this.object.insertAtCaret(content);
                break;

            case isTypeOf.CKEDITOR.instance(this.object) :
                this.object.insertHtml(content);
                break;
        }
    },
});

Upvotes: 0

Views: 187

Answers (1)

vinayakj
vinayakj

Reputation: 5681

As you know the typeof object while storing then store it like

var lastFocusedInput= { type:'jQuery', theObject: theObjectToStore};

And access it like so

if(lastFocusedInput.type == 'jQuery'){
  //get jquery object -> lastFocusedInput.theObject
}else{
 //get CKEDITOR object ->  lastFocusedInput.theObject
}

Or use two containers

If object to store is jQuery

var $lastFocusedInput = theObjectToStore;
var CKElastFocusedInput= null;

or vice versa

while accessing

if($lastFocusedInput){// use jquery API on object }
else{ // use CKEDITOR API on object }

Upvotes: 1

Related Questions