MSelector.min.js 10 KB

1
  1. MWF.xDesktop.requireApp("Template","MTooltips",null,false);var MSelector=new Class({Extends:MWF.widget.Common,Implements:[Options,Events],options:{style:"default",width:"230px",height:"30px",defaultOptionLp:"请选择",trigger:"delay",isSetSelectedValue:true,isChangeOptionStyle:true,inputEnable:false,isCreateReadNode:true,emptyOptionEnable:true,containerIsTarget:false,textField:"",valueField:"",value:"",text:"",defaultVaue:"",selectValue:"",selectText:"",isEdited:true,tooltipsOptions:{axis:"y",position:{x:"center",y:"bottom"},event:"click",hiddenDelay:200,displayDelay:0}},initialize:function(t,e,i,s,o){this.setOptions(e);if(!this.options.isEdited&&!this.options.isCreateReadNode){}else{this.path="/x_component_Template/$MSelector/";this.cssPath="/x_component_Template/$MSelector/"+this.options.style+"/css.wcss";this._loadCss();if(s){this.css=Object.merge(this.css,s)}}this.valSeparator=/,|;|\^\^|\|/;this.app=i;this.container=$(t);this.dropdownContainer=o||$(o)},load:function(t){if(this.options.isEdited){this.loadEdit(t)}else{this.loadRead(t)}},initPara:function(){this.itemNodeList=[];this.itemNodeObject={};this.value=this.options.value||this.options.text||this.options.defaultVaue;this.text=this.options.text||this.options.value||this.options.defaultVaue;this.textField=this.options.textField||this.options.valueField;this.valueField=this.options.valueField||this.options.textField;if(this.options.selectValue||this.options.selectText){this.textField="text";this.valueField="value";var t=this.options.selectValue;var e=this.options.selectText;this.selectValues=typeOf(t)=="array"?t:t.split(this.valSeparator);this.selectTexts=typeOf(e)=="array"?e:e.split(this.valSeparator);this.data=[];if(this.options.emptyOptionEnable){this.data.push({value:"",text:this.options.defaultOptionLp||""})}this.selectValues.each(function(t,e){this.data.push({value:t,text:this.selectTexts[e]})}.bind(this))}},loadRead:function(i){this.initPara();var e=function(){for(var t=0;t<this.data.length;t++){var e=this.data[t];if(this.options.text){if(e[this.textField]==this.options.text){this.value=e[this.valueField];this.text=this.options.text;this.currentItemData=e;break}}else if(this.options.value){if(e[this.valueField]==this.options.value){this.value=this.options.value;this.text=e[this.textField];this.currentItemData=e;break}}}this.loadReadNode(this.text);if(i)i()}.bind(this);if(this.data){e()}else{this._loadData(function(t){this.data=this.parseData(t);e()}.bind(this))}},loadReadNode:function(t){this.fireEvent("loadReadNode",t);if(this.options.isCreateReadNode){if(this.node)this.node.destroy();this.node=new Element("div",{styles:this.css.readNode,text:t}).inject(this.container)}},loadEdit:function(t){this.initPara();if(this.options.containerIsTarget){this.node=this.container}else{this.node=new Element("div.selectNode",{styles:this.css.selectNode}).inject(this.container);this.node.setStyles({width:this.options.width,height:this.options.height})}if(this.data){this.createDefaultItem();this.loadContent(this.data);this.fireEvent("postLoad",[this])}else{this._loadData(function(t){this.data=this.parseData(t);this.createDefaultItem();this.loadContent(this.data);this.fireEvent("postLoad",[this])}.bind(this))}if(t)t()},loadContent:function(t){if(!this.contentTooltip){var e=parseInt(this.options.width)+"px";this.css.tooltipNode.width=e;this.css.tooltipNode["max-width"]=e;var i=Object.merge({nodeStyles:this.css.tooltipNode,onPostLoad:function(){if(this.selectArrowNode)this.selectArrowNode.setStyles(this.css.selectArrowNode_up);if(this.inputNode){this.inputNode.focus()}}.bind(this),onPostInitialize:function(){if(this.options.trigger=="immediately"){this.contentTooltip.load()}}.bind(this),onHide:function(){this.status="hidden";if(this.selectArrowNode)this.selectArrowNode.setStyles(this.css.selectArrowNode)}.bind(this)},this.options.tooltipsOptions);this.contentTooltip=new MSelector.Tootips(this.dropdownContainer||this.app.content,this.node,this.app,t,i);this.contentTooltip.selector=this}},createDefaultItem:function(){if(this.options.containerIsTarget)return;this.selectValueNode=new Element("div.selectValueNode",{styles:this.css.selectValueNode}).inject(this.node);this.selectValueNode.setStyles({width:parseInt(this.options.width)-parseInt(this.options.height)-10+"px",height:this.options.height,"line-height":this.options.height});var t=this._getData(this.options.value);var e=t?t[this.textField]:this.options.value;if(this.options.inputEnable){this.inputNode=new Element("input",{value:e||this.options.defaultOptionLp,styles:this.css.inputNode}).inject(this.selectValueNode);this.inputNode.addEvents({focus:function(){if(this.inputNode.get("value")==this.options.defaultOptionLp){this.inputNode.set("value","")}}.bind(this),blur:function(){var t=false;var e=this.inputNode.get("value");if(e==""){this.inputNode.set("value",this.options.defaultOptionLp)}else{for(var i=0;i<this.data.length;i++){var s=this.data[i];if(s[this.textField]==e){var o=this.itemNodeObject[s[this.valueField]];this.setCurrentItem(o);t=true;break}}if(!t){this.cancelCurrentItem()}}}.bind(this)})}else{this.selectValueNode.set("text",e||this.options.defaultOptionLp)}this.selectArrowNode=new Element("div.selectArrowNode",{styles:this.css.selectArrowNode}).inject(this.node);this.selectArrowNode.setStyles({width:this.options.height,height:this.options.height})},setCurrentItem:function(t){var e=t.retrieve("data");if(this.currentItemNode){this.currentItemNode.setStyles(this.css.listItemNode)}this.currentItemNode=t;this.currentItemData=e;this.currentItemText=t.get("text");if(this.options.isChangeOptionStyle)t.setStyles(this.css.listItemNode_current);if(this.options.isSetSelectedValue&&this.selectValueNode){if(this.options.inputEnable){this.inputNode.set("value",e[this.textField])}else{this.selectValueNode.set("text",e[this.textField])}}},cancelCurrentItem:function(){if(this.currentItemNode){this.currentItemNode.setStyles(this.css.listItemNode)}this.currentItemNode=null;this.currentItemData=null;this.currentItemText=null},parseData:function(t){if(typeOf(t[0])=="string"){var e=[];this.textField="text";this.valueField="value";if(this.options.emptyOptionEnable){e.push({value:"",text:this.options.defaultOptionLp||""})}t.each(function(t){e.push({value:t,text:t})}.bind(this));return e}else{if(this.options.emptyOptionEnable&&this.textField){var i={};i[this.textField]=this.options.defaultOptionLp||"";if(this.valueField!=this.textField)i[this.valueField]="";t.unshift(i)}return t}},destroy:function(){if(this.node)this.node.destroy();if(this.contentTooltip)this.contentTooltip.destroy()},showTooltip:function(){this.contentTooltip.load()},hide:function(){this.status="hidden";if(this.selectArrowNode)this.selectArrowNode.setStyles(this.css.selectArrowNode);if(this.contentTooltip)this.contentTooltip.hide()},setValue:function(t){if(this.options.isEdited){var e=this.itemNodeObject[t];if(e){this.setCurrentItem(e)}else if(this.options.inputEnable){var i=this._getData(t);if(i){this.inputNode.set("value",i[this.textField])}else{this.inputNode.set("value",t)}}}else{var i=this._getData(t);if(i){this.loadReadNode(i[this.textField])}else{this.loadReadNode(t)}}},get:function(){return{value:this.getValue(),text:this.getText()}},getValue:function(){if(this.options.isEdited){if(this.currentItemData&&this.valueField){return this.currentItemData[this.valueField]}else if(this.inputNode){return this.inputNode.get("value")}else{return this.value}}else{return this.value}},getText:function(){if(this.options.isEdited){if(this.currentItemData&&this.textField){return this.currentItemData[this.textField]}else if(this.inputNode){var t=this._getData(this.inputNode.get("value"),"text");if(t){return t[this.textField]}else{return this.inputNode.get("value")}}else{return this.text}}else{return this.text}},getData:function(){if(this.currentItemData)return this.currentItemData;if(this.inputNode)return this.inputNode.get("value");if(!this.options.text||!this.options.value)return null;for(var t=0;t<this.data.length;t++){var e=this.data[t];if(this.options.text){if(e[this.textField]==this.options.text){return e}}else if(this.options.value){if(e[this.valueField]==this.options.value){return e}}}return null},_getData:function(t,e){for(var i=0;i<this.data.length;i++){var s=this.data[i];if(e=="text"){if(s[this.textField]==t){return s}}else{if(s[this.valueField]==t){return s}}}return null},_selectItem:function(t,e){},_loadData:function(t){this.fireEvent("loadData",t)},_postCreateItem:function(t,e){}});MSelector.Tootips=new Class({Extends:MTooltips,options:{axis:"y",position:{x:"center",y:"bottom"},event:"click",hiddenDelay:200,displayDelay:0,hasArrow:false},_customNode:function(t,e){this.createItemList(this.data,e)},createItemList:function(t,e){t=t||[];var i=this.selector;this.css=i.css;if(i.selectArrowNode)i.selectArrowNode.setStyles(this.css.selectArrowNode_up);i.listContentNode=new Element("div.listContentNode",{styles:this.css.listContentNode}).inject(e);i.listNode=new Element("div.listNode",{styles:this.css.listNode}).inject(i.listContentNode);i.setScrollBar(i.listNode);t.each(function(t){this.createItem(t)}.bind(this))},createItem:function(t){var e=this.selector;var i=new Element("div.listItemNode",{styles:this.css.listItemNode,text:t[e.textField]}).inject(e.listNode);i.setStyles({height:e.options.height,"line-height":e.options.height});if(t)i.store("data",t);i.addEvents({click:function(t){var e=this.obj;var i=this.itemNode.retrieve("data");e.selector.setCurrentItem(this.itemNode);e.selector._selectItem(this.itemNode,i,t);e.selector.fireEvent("selectItem",[this.itemNode,i,t]);e.hide();t.stopPropagation()}.bind({obj:this,itemNode:i}),mouseover:function(){if(this.obj.selector.currentItemNode!=this.itemNode||!this.obj.selector.options.isChangeOptionStyle){this.itemNode.setStyles(this.obj.selector.css.listItemNode_over)}}.bind({obj:this,itemNode:i}),mouseout:function(){if(this.obj.selector.currentItemNode!=this.itemNode||!this.obj.selector.options.isChangeOptionStyle){this.itemNode.setStyles(this.obj.selector.css.listItemNode)}}.bind({obj:this,itemNode:i})});e.itemNodeList.push(i);e.itemNodeObject[t[e.valueField]]=i;var s=false;if(e.currentItemData){s=t[e.valueField]==e.currentItemData[e.valueField]}else if(e.value){s=t[e.valueField]==e.value}else if(e.text){s=t[e.textField]==e.text}if(s)e.setCurrentItem(i);e.fireEvent("postCreateItem",[i,t]);e._postCreateItem(i,t)}});