From d42c8b528eb595101954f478e0024e3f079f6fbf Mon Sep 17 00:00:00 2001 From: schneefux Date: Wed, 22 Mar 2017 19:19:26 +0100 Subject: first implementation of fun stats site --- .../assets/bootstrap-material-design/js/file.js | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 templates/assets/bootstrap-material-design/js/file.js (limited to 'templates/assets/bootstrap-material-design/js/file.js') diff --git a/templates/assets/bootstrap-material-design/js/file.js b/templates/assets/bootstrap-material-design/js/file.js new file mode 100644 index 0000000..ba75a93 --- /dev/null +++ b/templates/assets/bootstrap-material-design/js/file.js @@ -0,0 +1,139 @@ +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