import Util from './util' const Base = (($) => { const ClassName = { BMD_FORM_GROUP: 'bmd-form-group', IS_FILLED: 'is-filled', IS_FOCUSED: 'is-focused' } const Selector = { BMD_FORM_GROUP: `.${ClassName.BMD_FORM_GROUP}` } const Default = {} /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ class Base { /** * * @param element * @param config * @param properties - anything that needs to be set as this[key] = value. Works around the need to call `super` before using `this` */ constructor($element, config, properties = {}) { this.$element = $element this.config = $.extend(true, {}, Default, config) // set properties for use in the constructor initialization for (let key in properties) { this[key] = properties[key] } } dispose(dataKey) { this.$element.data(dataKey, null) this.$element = null this.config = null } // ------------------------------------------------------------------------ // protected addFormGroupFocus() { if (!this.$element.prop('disabled')) { this.$bmdFormGroup.addClass(ClassName.IS_FOCUSED) } } removeFormGroupFocus() { this.$bmdFormGroup.removeClass(ClassName.IS_FOCUSED) } removeIsFilled() { this.$bmdFormGroup.removeClass(ClassName.IS_FILLED) } addIsFilled() { this.$bmdFormGroup.addClass(ClassName.IS_FILLED) } // Find bmd-form-group findMdbFormGroup(raiseError = true) { let mfg = this.$element.closest(Selector.BMD_FORM_GROUP) if (mfg.length === 0 && raiseError) { $.error(`Failed to find ${Selector.BMD_FORM_GROUP} for ${Util.describe(this.$element)}`) } return mfg } // ------------------------------------------------------------------------ // private // ------------------------------------------------------------------------ // static } return Base })(jQuery) export default Base