/**
 * @class Ext.form.Label
 * @extends Ext.Component

Produces a standalone `<label />` element which can be inserted into a form and be associated with a field
in that form using the {@link #forId} property.

**NOTE:** in most cases it will be more appropriate to use the {@link Ext.form.Labelable#fieldLabel fieldLabel}
and associated config properties ({@link Ext.form.Labelable#labelAlign}, {@link Ext.form.Labelable#labelWidth},
etc.) in field components themselves, as that allows labels to be uniformly sized throughout the form.
Ext.form.Label should only be used when your layout can not be achieved with the standard
{@link Ext.form.Labelable field layout}.

You will likely be associating the label with a field component that extends {@link Ext.form.field.Base}, so
you should make sure the {@link #forId} is set to the same value as the {@link Ext.form.field.Base#inputId inputId}
of that field.

The label's text can be set using either the {@link #text} or {@link #html} configuration properties; the
difference between the two is that the former will automatically escape HTML characters when rendering, while
the latter will not.
{@img Ext.form.Label/Ext.form.Label.png Ext.form.Label component}
#Example usage:#

This example creates a Label after its associated Text field, an arrangement that cannot currently
be achieved using the standard Field layout's labelAlign.

    Ext.create('Ext.form.Panel', {
        title: 'Field with Label',
        width: 400,
        bodyPadding: 10,
        renderTo: Ext.getBody(),
        layout: {
            type: 'hbox',
            align: 'middle'
        },
        items: [{
            xtype: 'textfield',
            hideLabel: true,
            flex: 1
        }, {
            xtype: 'label',
            forId: 'myFieldId',
            text: 'My Awesome Field',
            margins: '0 0 0 10'
        }]
    });

 * @constructor
 * Creates a new Label component.
 * @param {Ext.core.Element/String/Object} config The configuration options.
 *
 * @xtype label
 * @markdown
 * @docauthor Jason Johnston <jason@sencha.com>
 */

Ext.define('Ext.form.Label', {
    extend
:'Ext.Component',
   
alias: 'widget.label',
    requires
: ['Ext.util.Format'],

    /**
     * @cfg {String} text The plain text to display within the label (defaults to ''). If you need to include HTML
     * tags within the label's innerHTML, use the {@link #html} config instead.
     */

    /**
     * @cfg {String} forId The id of the input element to which this label will be bound via the standard HTML 'for'
     * attribute. If not specified, the attribute will not be added to the label. In most cases you will be
     * associating the label with a {@link Ext.form.field.Base} component, so you should make sure this matches
     * the {@link Ext.form.field.Base#inputId inputId} of that field.
     */

    /**
     * @cfg {String} html An HTML fragment that will be used as the label's innerHTML (defaults to '').
     * Note that if {@link #text} is specified it will take precedence and this value will be ignored.
     */

   
    maskOnDisable
: false,
    getElConfig
: function(){
       
var me = this;
       
return {
            tag
: 'label',
            id
: me.id,
            htmlFor
: me.forId || '',
            html
: me.text ? Ext.util.Format.htmlEncode(me.text) : (me.html || '')
       
};
   
},

    /**
     * Updates the label's innerHTML with the specified string.
     * @param {String} text The new label text
     * @param {Boolean} encode (optional) False to skip HTML-encoding the text when rendering it
     * to the label (defaults to true which encodes the value). This might be useful if you want to include
     * tags in the label's innerHTML rather than rendering them as string literals per the default logic.
     * @return {Label} this
     */

    setText
: function(text, encode){
       
var me = this;
       
        encode
= encode !== false;
       
if(encode) {
            me
.text = text;
           
delete me.html;
       
} else {
            me
.html = text;
           
delete me.text;
       
}
       
       
if(me.rendered){
            me
.el.dom.innerHTML = encode !== false ? Ext.util.Format.htmlEncode(text) : text;
       
}
       
return this;
   
}
});