import BaseInput from './baseInput' //import Checkbox from './checkbox' //import Radio from './radio' //import Switch from './switch' //import Text from './text' //import Textarea from './textarea' //import Select from './select' import Util from './util' const File = (($) => { /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ const NAME = 'file' const DATA_KEY = `bmd.${NAME}` const JQUERY_NAME = `bmd${NAME.charAt(0).toUpperCase() + NAME.slice(1)}` const JQUERY_NO_CONFLICT = $.fn[JQUERY_NAME] const Default = {} const ClassName = { FILE: NAME, IS_FILE: 'is-file' } const Selector = { FILENAMES: 'input.form-control[readonly]' } /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ class File extends BaseInput { constructor($element, config) { super($element, $.extend(true, //{invalidComponentMatches: [Checkbox, Radio, Text, Textarea, Select, Switch]}, Default, config)) this.$bmdFormGroup.addClass(ClassName.IS_FILE) } dispose() { super.dispose(DATA_KEY) } static matches($element) { if ($element.attr('type') === 'file') { return true } return false } static rejectMatch(component, $element) { Util.assert(this.$element, this.matches($element), `${component} component element ${Util.describe($element)} is invalid for type='file'.`) } // ------------------------------------------------------------------------ // protected // Demarcation element (e.g. first child of a form-group) outerElement() { // label.file > input[type=file] return this.$element.parent().closest(`.${ClassName.FILE}`) } rejectWithoutRequiredStructure() { // label.file > input[type=file] Util.assert(this.$element, !this.outerElement().prop('tagName') === 'label', `${this.constructor.name}'s ${Util.describe(this.$element)} parent element ${Util.describe(this.outerElement())} should be