/** * From-To textfield * @author yingp */ /*Ext.define('erp.view.core.form.FtField', { extend: 'Ext.Component', mixins: { labelable: 'Ext.form.Labelable', field: 'Ext.form.field.Field' }, alias: 'widget.erpFtField', fieldSubTpl: [ 'name="{name}_from" ', 'size="{size}" ', 'tabIndex="{tabIdx}" ', 'class="{fieldCls} {typeCls}" autocomplete="off" />', '->', 'name="{name}_to" ', 'size="{size}" ', 'tabIndex="{tabIdx}" ', 'class="{typeCls}" autocomplete="off" />', 'From()To()', { compiled: true, disableFormats: true } ], inputType: 'text', invalidText : 'The value in this field is invalid', fieldCls : Ext.baseCSSPrefix + 'form-field', focusCls : Ext.baseCSSPrefix + 'form-focus', dirtyCls : Ext.baseCSSPrefix + 'form-dirty', checkChangeEvents: Ext.isIE && (!document.documentMode || document.documentMode < 9) ? ['change', 'propertychange'] : ['change', 'input', 'textInput', 'keyup', 'dragdrop'], checkChangeBuffer: 50, componentLayout: 'field', readOnly : false, readOnlyCls: Ext.baseCSSPrefix + 'form-readonly', validateOnBlur: true, hasFocus : false, baseCls: Ext.baseCSSPrefix + 'field', maskOnDisable: false, initComponent : function() { var me = this; me.callParent(); me.subTplData = me.subTplData || {}; me.addEvents( 'focus', 'blur', 'specialkey' ); me.initLabelable(); me.initField(); if (!me.name) { me.name = me.getInputId(); } }, getInputId: function() { return this.inputId || (this.inputId = Ext.id()); }, getSubTplData: function() { var me = this, type = me.inputType, inputId = me.getInputId(); return Ext.applyIf(me.subTplData, { id: inputId, cmpId: me.id, name: me.name || inputId, type: type, size: me.size || 20, cls: me.cls, fieldCls: me.fieldCls, tabIdx: me.tabIndex, typeCls: Ext.baseCSSPrefix + 'form-' + (type === 'password' ? 'text' : type) }); }, afterRender: function() { this.callParent(); if (this.inputEl) { this.inputEl.selectable(); } }, getSubTplMarkup: function() { return this.getTpl('fieldSubTpl').apply(this.getSubTplData()); }, initRenderTpl: function() { var me = this; if (!me.hasOwnProperty('renderTpl')) { me.renderTpl = me.getTpl('labelableRenderTpl'); } return me.callParent(); }, initRenderData: function() { return Ext.applyIf(this.callParent(), this.getLabelableRenderData()); }, setFieldStyle: function(style) { var me = this, inputEl = me.inputEl; if (inputEl) { inputEl.applyStyles(style); } me.fieldStyle = style; }, onRender : function() { var me = this, fieldStyle = me.fieldStyle; me.onLabelableRender(); me.addChildEls({ name: 'inputEl', id: me.getInputId() }); me.callParent(arguments); me.setRawValue(me.rawValue); if (me.readOnly) { me.setReadOnly(true); } if (me.disabled) { me.disable(); } if (fieldStyle) { me.setFieldStyle(fieldStyle); } me.renderActiveError(); }, initAria: function() { var me = this; me.callParent(); me.getActionEl().dom.setAttribute('aria-describedby', Ext.id(me.errorEl)); }, getFocusEl: function() { return this.inputEl; }, isFileUpload: function() { return this.inputType === 'file'; }, extractFileInput: function() { var me = this, fileInput = me.isFileUpload() ? me.inputEl.dom : null, clone; if (fileInput) { clone = fileInput.cloneNode(true); fileInput.parentNode.replaceChild(clone, fileInput); me.inputEl = Ext.get(clone); } return fileInput; }, getSubmitData: function() { var me = this, data = null, val; if (!me.disabled && me.submitValue && !me.isFileUpload()) { val = me.getSubmitValue(); if (val !== null) { data = {}; data[me.getName()] = val; } } return data; }, getSubmitValue: function() { return this.processRawValue(this.getRawValue()); }, getRawValue: function() { var me = this, v = (me.inputEl ? me.inputEl.getValue() : Ext.value(me.rawValue, '')); me.rawValue = v; return v; }, setRawValue: function(value) { var me = this; value = Ext.value(value, ''); me.rawValue = value; if (me.inputEl) { me.inputEl.dom.value = value; } return value; }, valueToRaw: function(value) { return '' + Ext.value(value, ''); }, rawToValue: function(rawValue) { return rawValue; }, processRawValue: function(value) { return value; }, getValue: function() { var me = this, val = me.rawToValue(me.processRawValue(me.getRawValue())); var from = document.getElementsByName(me.id + '_from')[0].value; var to = document.getElementsByName(me.id + '_to')[0].value; if(from.length > me.maxLength){ document.getElementsByName(me.id + '_from')[0].value = from .substring(0, me.maxLength);showError('maxLength:' + me.maxLength); from = from .substring(0, me.maxLength);showError('maxLength:' + me.maxLength); } if(to.length > me.maxLength){ to = to .substring(0, me.maxLength);showError('maxLength:' + me.maxLength); } from = from == null || from == '' ? to : from; to = to == null || to == '' ? from : to; val = val == null || val == '' ? 'BETWEEN ' + from + ' AND ' + to : val; me.value = val; document.getElementById('ft').innerHTML = 'From (' + from + ') To (' + to + ")"; return val; }, setValue: function(value) { var me = this; me.setRawValue(me.valueToRaw(value)); return me.mixins.field.setValue.call(me, value); }, onDisable: function() { var me = this, inputEl = me.inputEl; me.callParent(); if (inputEl) { inputEl.dom.disabled = true; } }, onEnable: function() { var me = this, inputEl = me.inputEl; me.callParent(); if (inputEl) { inputEl.dom.disabled = false; } }, setReadOnly: function(readOnly) { var me = this, inputEl = me.inputEl; if (inputEl) { inputEl.dom.readOnly = readOnly; inputEl.dom.setAttribute('aria-readonly', readOnly); } me[readOnly ? 'addCls' : 'removeCls'](me.readOnlyCls); me.readOnly = readOnly; }, fireKey: function(e){ if(e.isSpecialKey()){ this.fireEvent('specialkey', this, Ext.create('Ext.EventObjectImpl', e)); } }, initEvents : function(){ var me = this, inputEl = me.inputEl, onChangeTask, onChangeEvent; if (inputEl) { me.mon(inputEl, Ext.EventManager.getKeyEvent(), me.fireKey, me); me.mon(inputEl, 'focus', me.onFocus, me); me.mon(inputEl, 'blur', me.onBlur, me, me.inEditor ? {buffer:10} : null); onChangeTask = Ext.create('Ext.util.DelayedTask', me.checkChange, me); me.onChangeEvent = onChangeEvent = function() { onChangeTask.delay(me.checkChangeBuffer); }; Ext.each(me.checkChangeEvents, function(eventName) { if (eventName === 'propertychange') { me.usesPropertychange = true; } me.mon(inputEl, eventName, onChangeEvent); }, me); } me.callParent(); }, doComponentLayout: function() { var me = this, inputEl = me.inputEl, usesPropertychange = me.usesPropertychange, ename = 'propertychange', onChangeEvent = me.onChangeEvent; if (usesPropertychange) { me.mun(inputEl, ename, onChangeEvent); } me.callParent(arguments); if (usesPropertychange) { me.mon(inputEl, ename, onChangeEvent); } }, preFocus: Ext.emptyFn, onFocus: function() { var me = this, focusCls = me.focusCls, inputEl = me.inputEl; me.preFocus(); if (focusCls && inputEl) { inputEl.addCls(focusCls); } if (!me.hasFocus) { me.hasFocus = true; me.componentLayout.onFocus(); me.fireEvent('focus', me); } }, beforeBlur : Ext.emptyFn, onBlur : function(){ var me = this, focusCls = me.focusCls, inputEl = me.inputEl; if (me.destroying) { return; } me.beforeBlur(); if (focusCls && inputEl) { inputEl.removeCls(focusCls); } if (me.validateOnBlur) { me.validate(); } me.hasFocus = false; me.fireEvent('blur', me); me.postBlur(); }, postBlur : Ext.emptyFn, onDirtyChange: function(isDirty) { this[isDirty ? 'addCls' : 'removeCls'](this.dirtyCls); }, isValid : function() { var me = this; return me.disabled || me.validateValue(me.processRawValue(me.getRawValue())); }, validateValue: function(value) { var me = this, errors = me.getErrors(value), isValid = Ext.isEmpty(errors); if (!me.preventMark) { if (isValid) { me.clearInvalid(); } else { me.markInvalid(errors); } } return isValid; }, markInvalid : function(errors) { var me = this, oldMsg = me.getActiveError(); me.setActiveErrors(Ext.Array.from(errors)); if (oldMsg !== me.getActiveError()) { me.doComponentLayout(); } }, clearInvalid : function() { var me = this, hadError = me.hasActiveError(); me.unsetActiveError(); if (hadError) { me.doComponentLayout(); } }, renderActiveError: function() { var me = this, hasError = me.hasActiveError(); if (me.inputEl) { me.inputEl[hasError ? 'addCls' : 'removeCls'](me.invalidCls + '-field'); } me.mixins.labelable.renderActiveError.call(me); }, getActionEl: function() { return this.inputEl || this.el; } }); function keydown(name){ Ext.getCmp(name).value = Ext.getCmp(name).getValue(); }*/ Ext.define('erp.view.core.form.FtField', { extend: 'Ext.form.FieldContainer', alias: 'widget.erpFtField', layout: 'column', value: "BETWEEN '' AND ''", height: 22, items: [], initComponent : function(){ this.callParent(arguments); var me = this; me.insert(0, { xtype: 'textfield', id: me.name + '_from', name: me.name + '_from', columnWidth: 0.5, fieldStyle: me.fieldStyle, listeners: { change: function(f){ var from = f.value; var to = me.items.items[1].value; from = from == null || from == '' ? to == null || to == '' ? '' : to : from; to = to == null || to == '' ? from == null || from == '' ? '' : from : to; if(from == ''){ me.value = ''; } else { me.value = "BETWEEN '" + from + "' AND '" + to + "'"; } } } }); me.insert(1, { xtype: 'textfield', id: me.name + '_to', name: me.name + '_to', columnWidth: 0.5, fieldStyle: me.fieldStyle, listeners: { change: function(f){ var from = me.items.items[0].value; var to = f.value; from = from == null || from == '' ? to == null || to == '' ? '' : to : from; to = to == null || to == '' ? from == null || from == '' ? '' : from : to; if(from == ''){ me.value = ''; } else { me.value = "BETWEEN '" + from + "' AND '" + to + "'"; } } } }); }, listeners: { afterrender: function(){ var tb = this.getEl().dom; if(tb.nodeName == 'TABLE') { return; } tb.childNodes[1].style.height = 22; tb.childNodes[1].style.overflow = 'hidden'; } }, reset: function(){ this.items.items[0].reset(); this.items.items[1].reset(); }, getValue: function(){ if(this.value != null && this.value != ''){ if(this.items.items[0].value == null || this.items.items[0].value == ''){ return this.items.items[1].value + '~' + this.items.items[1].value; } else if(this.items.items[1].value == null || this.items.items[1].value == ''){ return this.items.items[0].value + '~' + this.items.items[0].value; } else { return this.items.items[0].value + '~' + this.items.items[1].value; } } else { return ''; } }, isValid: function(){ return true; }, setValue: function(value){ if(value != null && value != '' && contains(value, '~', true)){ this.items.items[0].setValue(value.split('~')[0]); this.items.items[1].setValue(value.split('~')[1]); } }, getFilter: function() { var me = this, fromVal = me.items.items[0].value, toVal = me.items.items[1].value; return (fromVal || toVal) ? { "gte": fromVal, "lte": toVal } : null; } });