/*

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

*/
Class('Ariadne.ExtJSComponentQueryFinder.Identifier.PropertyValue', {

    isa         : Ariadne.QueryFinder.Identifier,

    does        : [
        Ariadne.ExtJSComponentQueryFinder.Role.ExtJSComponentHelper,
        Ariadne.ExtJSDomQueryFinder.Role.ExtJSHelper
    ],

    has         : {
        // an array of attribute names, which can be used for matching
        properties          : function () {
            return [
                'name',         // form fields
                'text',         // menu items, buttons
                'dataIndex',    // Column component
                'iconCls',      // button/menuitem
                'type',         // Panel header tools
                'title',        // identifying panels, tab panels headers
//                'cls',        // Cmp, TODO discuss
                'inputType',
                'boxLabel',
                'fieldLabel'
            ]
        }
    },

    methods : {

        initialize : function (cfg) {
            this.properties     = this.mergeArrayAttributeFromClassHierarchy('properties', cfg)
        },


        ignoreProperty : function (target, property) {
            return this.valueIsAutoGeneratedByComponent(target, target[ property ])
        },


        identify : function (target, root, maze) {
            var Ext             = this.finder.Ext
            var properties      = this.properties
            var segments        = []

            var safeXtype       = this.getExt4ProofXtype(target, Ext)

            for (var i = 0; i < properties.length; i++) {
                var property    = properties[ i ]
                var value       = target[ property ]

                if (
                    value && typeof value === 'string' && !(
                        this.ignoreProperty(target, property) ||

                        // ignore the "inputType" for sliders which is always a "text"
                        (property == 'inputType' && Ext.slider && Ext.slider.Multi && (target instanceof Ext.slider.Multi)) ||

                        (property == 'inputType' && Ext.form && Ext.form.field && Ext.form.field.ComboBox && (target instanceof Ext.form.field.ComboBox)) ||

                        // Some Ext Components have an empty title/text - ignore
                        (value == '&#160;')
                    )
                ) {
                    segments.push({
                        query       : safeXtype.query + '[' + property + '=' + this.escapeCQSelector(value) + ']',
                        leading     : safeXtype.leading
                    })
                }
            }

            return segments
        }
    }
});