import { computed } from '@ember/object'; import TextField from '@ember/component/text-field'; import { isMobile } from 'ui/utils/platform'; import layout from './template'; function sanitize(val) { val = (val+'').trim().replace(/[^0-9.-]/g,''); val = val.substr(0,1) + val.substr(1).replace('-',''); let idx = val.indexOf('.'); if ( idx >= 0) { let idx2 = val.indexOf('.', idx+1); if ( idx2 >= 0) { val = val.substr(0,idx2); } } if ( idx === 0 ) { val = '0' + val; } return val; } export default TextField.extend({ layout, type: computed(function() { return ( isMobile ? 'number' : 'text' ); }), attributeBindings: ['pattern','inputmode'], pattern:"[0-9]*(\.[0-9]*)?", inputmode:"numeric", _elementValueDidChange: function () { let val = this.element.value; let cur = val; val = sanitize(val); let num = parseFloat(val); let max = parseFloat(this.get('max')); if ( !isNaN(num) && !isNaN(max) && num > max ) { val = ""+max; } if ( cur !== val ) { this.element.value = val; } this.set('value', val); }, focusOut() { this._super(...arguments); let val = this.element.value; let cur = val; val = sanitize(val); let num = parseFloat(val); let min = parseFloat(this.get('min')); if ( !isNaN(num) && !isNaN(min) && num < min ) { val = ""+min; } if ( cur !== val ) { this.element.value = val; this.set('value', val); } } });