    /*

    Siesta 5.3.0
    Copyright(c) 2009-2019 Bryntum AB
    https://bryntum.com/contact
    https://bryntum.com/products/siesta/license

    */
    Role('Ariadne.ExtJSComponentQueryFinder.Role.ExtJSComponentHelper', {

        does        : Ariadne.DomQueryFinder.Role.DomHelper,

        has : {
        },

        methods : {

            getComponentXType : function (cmp) {
                var xtype   = this.getComponentOwnXType(cmp)

                if (xtype) return xtype

                xtype       = cmp.getXTypes && cmp.getXTypes()

                if (!xtype) return null

                xtype       = xtype.split('/')

                return xtype[ xtype.length - 1 ]
            },

            // might be not available if component does not define the "alias" property in "widget" namespace
            getComponentOwnXType : function (cmp) {
                return (cmp.getXType && cmp.getXType()) || cmp.xtype || cmp.xtypes[ 0 ]
            },

            escapeCQSelector : function (selector) {
                 return this.escapeDomSelector(selector)
            },

            // Ext4 breaks when xtype contains dot, even if it is properly escaped
            // however [xtype=value\.with\.dots] is supported
            // this is why we need this method
            getExt4ProofXtype : function (cmp, Ext) {
                var xtype       = this.getComponentXType(cmp)
                var escaped     = this.escapeCQSelector(xtype)

                var extVersion  = Ext.getVersion('ext')

                if (extVersion && extVersion.major == 4 && xtype != escaped)
                    return {
                        query       : '[xtype=' + escaped + ']',
                        leading     : false
                    }
                else
                    return {
                        query       : escaped,
                        leading     : true
                    }
            }
        }
    });