addon/mixins/ui-button-base.js

import Mixin from '@ember/object/mixin';

/**
ui-button-base mixinx

@module mixins
@class UiButtonBase
@namespace mixins
@constructor
*/
export default Mixin.create({
    /**
     * The root component element
     *
     * @property tagName
     * @type {String}
     * @default  "button"
     */
    tagName: 'button',

    /**
     * Alert external code about the click
     *
     * @method click
     * @return  {void}
     */
    click: function() {
        if(typeof this.attrs.action === 'function'){
            this.attrs.action();
        }else {
            this.sendAction('action', this.param);
        }
    },
    /**
     * Class names to apply to the button
     *
     * @property classNames
     * @type {Array}
     */
    classNameBindings: ['_uiClass', 'disabled:disabled:', 'loading:loading:', 'active:active:', '_theme', 'theme', '_componentClass'],
    _uiClass: 'ui',
    _componentClass:'button',
    /**
     * private variable, Class names to apply to the button 
     * @private
     * @property _theme
     * @type {String}  
     */
    _theme: '',
    /**
     * Class name to apply to the button 
     *
     * @property theme 
     * @type {String}
     */
    theme: '',
    /**
     * the button loading status
     *
     * @property loading
     * @type {boolean}
     * @default false
     */
    loading:false,
    /**
     * the button disabled status 
     *
     * @property disabled
     * @type {boolean}
     * @default false
     */
    disabled:false,
    /**
     * the button active status
     *
     * @property active
     * @type {boolean}
     * @default false
     */
    active:false
});