| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- MWF.xApplication.TeamWork = MWF.xApplication.TeamWork || {};
- MWF.xApplication.TeamWork.ExtField = new Class({
- Extends: MTooltips,
- options : {
- "style":"default",
- // displayDelay : 300,
- hasArrow:false,
- event:"click"
- },
- initialize : function( explorer,container, target, app, data, options, targetCoordinates ){
- //可以传入target 或者 targetCoordinates,两种选一
- //传入target,表示触发tooltip的节点,本类根据 this.options.event 自动绑定target的事件
- //传入targetCoordinates,表示 出发tooltip的位置,本类不绑定触发事件
- if( options ){
- this.setOptions(options);
- }
- this.explorer = explorer;
- this.container = container;
- this.target = target;
- this.targetCoordinates = targetCoordinates;
- this.app = app;
- this.lp = this.app.lp.extField;
- this.data = data;
- this.actions = this.app.restActions;
- this.path = "/x_component_TeamWork/$ExtField/";
- this.cssPath = this.path+this.options.style+"/css.wcss";
- this._loadCss();
- if( this.target ){
- this.setTargetEvents();
- }
- this.fireEvent("postInitialize",[this]);
- },
- _loadCustom : function( callback ){
- //this.data
- //this.contentNode
- var _self = this;
- this.valid = false;
- this.topLayout = new Element("div.topLayout",{styles:this.css.topLayout,text:this.lp.newTip}).inject(this.contentNode);
- this.contentLayout = new Element("div.contentLayout",{styles:this.css.contentLayout}).inject(this.contentNode);
- //名称
- this.nameText = new Element("div.nameText",{styles:this.css.titleText,text:this.lp.name}).inject(this.contentLayout);
- this.nameValueLayout = new Element("div.nameValueLayout",{styles:this.css.valueLayout}).inject(this.contentLayout);
- this.nameValue = new Element("input.nameValue",{styles:this.css.nameValue,placeHolder:this.lp.field+this.lp.name}).inject(this.nameValueLayout);
- this.nameValue.addEvents({
- focus:function(){
- this.nameValueLayout.setStyles({"border":"1px solid #4a90e2"})
- }.bind(this),
- blur:function(){
- this.nameValueLayout.setStyles({"border":"1px solid #dedede"});
- var v = this.nameValue.get("value").trim();
- var next = this.nameValueLayout.getNext();
- if(v=="" && next.get("class")!="inValid"){
- this.createInValid(this.nameValueLayout)
- }
- this.checkValid();
- }.bind(this),
- keyup:function(){
- var v = this.nameValue.get("value").trim();
- var next = this.nameValueLayout.getNext();
- if(v=="" && next.get("class")!="inValid"){
- this.createInValid(this.nameValueLayout)
- }else{
- if(next.get("class")=="inValid") next.destroy()
- }
- this.checkValid();
- }.bind(this)
- });
- //描述
- this.descriptionText = new Element("div.descriptionText",{styles:this.css.titleText,text:this.lp.description}).inject(this.contentLayout);
- this.descriptionLayout = new Element("div.descriptionLayout",{styles:this.css.valueLayout}).inject(this.contentLayout);
- this.descriptionValue = new Element("input.descriptionValue",{styles:this.css.nameValue,placeHolder:this.lp.field+this.lp.description}).inject(this.descriptionLayout);
- this.descriptionValue.addEvents({
- focus:function(){
- this.descriptionLayout.setStyles({"border":"1px solid #4a90e2"})
- }.bind(this),
- blur:function(){
- this.descriptionLayout.setStyles({"border":"1px solid #dedede"})
- }.bind(this)
- });
- //类型
- this.typeText = new Element("div.descriptionText",{styles:this.css.titleText,text:this.lp.type}).inject(this.contentLayout);
- this.typeLayout = new Element("div.typeLayout",{styles:this.css.valueLayout}).inject(this.contentLayout);
- this.typeLayout.addEvents({
- click:function(){
- this.typeLayout.setStyles({"border":"1px solid #4a90e2"});
- var pc = new MWF.xApplication.TeamWork.ExtField.Types(this.container, this.typeLayout, this.app, {}, {
- css:this.css, lp:this.lp, axis : "y",
- position : { //node 固定的位置
- x : "right",
- y : "middle"
- },
- nodeStyles : {
- "min-width":"150px",
- "width":this.typeLayout.getWidth()+"px",
- "padding":"2px",
- "border-radius":"5px",
- "box-shadow":"0px 0px 4px 0px #999999",
- "z-index" : "301"
- },
- onPostLoad:function(){
- pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt())+"px","left":(pc.node.getStyle("left").toInt())+"px"});
- var fx = new Fx.Tween(pc.node,{duration:400});
- fx.start(["opacity"] ,"0", "1");
- if(pc.maskNode){
- pc.maskNode.setStyles({"z-index":"300"})
- }
- },
- onClose:function(rd){
- var next = this.typeLayout.getNext();
- if(!rd) {
- if(!next && !this.type){
- this.createInValid(this.typeLayout)
- }
- this.rotateArrow(this.typeArrow);
- this.typeLayout.setStyles({"border":"1px solid #dedede"});
- this.checkValid();
- return;
- }
- if(next && next.get("class")=="inValid"){
- next.destroy()
- }
- this.rotateArrow(this.typeArrow,function(){
- this.typeValue.set("text",rd.value);
- this.type = rd.type;
- this.typeLayout.setStyles({"border":"1px solid #dedede"});
- this.contentLayout.getElements(".optionLayout").destroy();
- if(rd.type == "RADIO" || rd.type=="CHECKBOX"){
- //增加选项
- this.createOptions()
- }
- this.checkValid();
- }.bind(this));
- }.bind(this)
- });
- pc.load();
- this.rotateArrow(this.typeArrow);
- }.bind(this)
- })
- this.typeValue = new Element("div.typeValue",{styles:this.css.typeValue}).inject(this.typeLayout);
- this.typeArrow = new Element("div.typeArrow",{styles:this.css.typeArrow}).inject(this.typeLayout);
- this.bottomLayout = new Element("div.bottomLayout",{styles:this.css.bottomLayout}).inject(this.contentNode)
- this.confirm = new Element("div.confirm",{styles:this.css.confirm,text:this.lp.confirm}).inject(this.bottomLayout);
- this.confirm.addEvents({
- click:function(){
- if(this.valid){
- var data = {
- id:this.data.id || "",
- projectId:this.data.projectId,
- displayName:this.nameValue.get("value").trim(),
- displayType:this.type,
- description:this.descriptionValue.get("value").trim(),
- optionsData:""
- };
- this.actions.projectExtFieldSave(data,function(json){
- if(json.data.id){
- this.actions.projectExtFieldGet(json.data.id,function(data){
- this.explorer.createExtFieldItem(data.data);
- this.close()
- }.bind(this))
- }
- }.bind(this))
- }
- }.bind(this)
- })
- if(this.data.id){
- this.actions.projectExtFieldGet(this.data.id,function(json){
- this.loadData(json.data);
- this.checkValid()
- }.bind(this))
- }
- if(callback)callback();
- },
- loadData:function(data){
- this.nameValue.set("value",data.displayName);
- this.descriptionValue.set("value",data.description);
- this.type = data.displayType;
- var dt = this.lp.text;
- if(data.displayType=="RICHTEXT") dt = this.lp.richtext;
- else if(data.displayType=="RADIO") dt = this.lp.radio;
- else if(data.displayType=="CHECKBOX") dt = this.lp.checkbox;
- else if(data.displayType=="DATE") dt = this.lp.date;
- else if(data.displayType=="DATETIME") dt = this.lp.datetime;
- else if(data.displayType=="PERSON") dt = this.lp.identity;
- else if(data.displayType=="IDENTITY") dt = this.lp.identity;
- else if(data.displayType=="UNIT") dt = this.lp.unit;
- this.typeValue.set("text",dt);
- if(this.type == "RADIO" || this.type == "CHECKBOX"){
- }
- },
- createOptions:function(){
- var _self = this;
- //this.contentLayout
- var optionLayout = new Element("div.optionLayout",{styles:this.css.optionLayout}).inject(this.contentLayout);
- var optionText = new Element("div.optionText",{styles:this.css.optionText,text:this.lp.option}).inject(optionLayout);
- var optionValue = new Element("div.optionValue",{styles:this.css.optionValue}).inject(optionLayout);
- var optionName = new Element("input.optionName",{styles:this.css.optionName}).inject(optionValue);
- var optionValid = new Element("div.optionValid",{styles:this.css.inValid,text:this.lp.notEmpty}).inject(optionLayout);
- optionValid.setStyles({"display":"none"});
- optionName.addEvents({
- click:function(){
- optionClose.show();
- if(this.get("value").trim()=="") optionValid.show();
- var next = optionLayout.getNext();
- if(!next)_self.createOptions();
- _self.checkValid()
- },
- keyup:function(){
- if(this.get("value").trim()=="") optionValid.show();
- else optionValid.hide();
- _self.checkValid()
- }
- });
- var optionClose = new Element("div.optionClose",{styles:this.css.optionClose}).inject(optionValue);
- optionClose.addEvents({
- click:function(){
- optionLayout.destroy();
- _self.checkValid()
- }.bind(this),
- mouseover:function(){this.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_off_click.png)"})},
- mouseout:function(){this.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_off.png)"})},
- });
- },
- rotateArrow:function(node,callback){
- var status = node.get("rotate") || "down";
- var angle = 0;
- if(status=="down")angle=0;
- else angle=180;
- var int = window.setInterval(function(){
- if(status == "down"){
- if(angle==180){
- window.clearInterval(int);
- node.set("rotate","up");
- if(callback)callback();
- return;
- }
- angle = angle + 4;
- }else{
- if(angle==0){
- window.clearInterval(int);
- node.set("rotate","down");
- if(callback)callback();
- return;
- }
- angle = angle - 4;
- }
- node.setStyles({"transform":"rotate("+angle+"deg)"});
- }.bind(this),1)
- },
- checkValid:function(){
- var name = this.nameValue.get("value").trim();
- if(name!="" && this.type){
- if(this.type == "RADIO" || this.type == "CHECKBOX"){
- var flag = false;
- var options = this.contentLayout.getElements(".optionValid");
- options.each(function(d){
- if(d.isDisplayed())flag = true
- });
- if(flag){
- this.valid = false;
- this.confirm.setStyles(this.css.confirm)
- }else{
- if(options.length == 1){
- this.valid = false;
- this.confirm.setStyles(this.css.confirm)
- }else{
- this.valid = true;
- this.confirm.setStyles({"background-color":"#4a90e2","cursor":"pointer"})
- }
- }
- }else{
- this.valid = true;
- this.confirm.setStyles({"background-color":"#4a90e2","cursor":"pointer"})
- }
- }else{
- this.valid = false;
- this.confirm.setStyles(this.css.confirm)
- }
- },
- createInValid:function(node){
- var inValid = new Element("div.inValid",{styles:this.css.inValid,text:this.lp.notEmpty}).inject(node,"after");
- },
- hide: function(){
- if( this.node ){
- this.node.setStyle("display","none");
- this.status = "hidden";
- if( this.maskNode ){
- this.maskNode.setStyle("display","none");
- }
- this.fireEvent("hide",[this]);
- }
- if( this.maskNode ){
- this.maskNode.destroy();
- }
- this.close();
- },
- // 增加的方法
- close: function(data){
- if( this.node ){
- this.node.setStyle("display","none");
- this.status = "hidden";
- if( this.maskNode ){
- this.maskNode.setStyle("display","none");
- }
- this.fireEvent("hide",[this]);
- //this.fireEvent("close",[data]);
- }
- if( this.maskNode ){
- this.maskNode.destroy();
- }
- this.fireEvent("close",[data]);
- this.destroy();
- },
- setTargetEvents : function(){
- if( this.options.event == "click" ){
- // if( this.options.isAutoShow ){
- // this.target.addEvents({
- // "click": function( ev ){
- // this.load();
- // ev.stopPropagation();
- // }.bind(this)
- // });
- // }
- }else{
- if( this.options.isAutoHide || this.options.isAutoShow ){
- this.target.addEvents({
- "mouseenter": function(){
- if( this.timer_hide ){
- clearTimeout(this.timer_hide);
- }
- }.bind(this)
- });
- }
- if( this.options.isAutoShow ){
- this.target.addEvents({
- "mouseenter": function(){
- if( this.status != "display" ){
- this.timer_show = setTimeout( this.load.bind(this),this.options.displayDelay );
- }
- }.bind(this)
- });
- }
- if( this.options.isAutoHide || this.options.isAutoShow ){
- this.target.addEvents({
- "mouseleave" : function(){
- if( this.timer_show ){
- clearTimeout(this.timer_show);
- }
- }.bind(this)
- });
- }
- if( this.options.isAutoHide ){
- this.target.addEvents({
- "mouseleave" : function(){
- if( this.status == "display" ){
- this.timer_hide = setTimeout( this.hide.bind(this),this.options.hiddenDelay );
- }
- }.bind(this)
- });
- }
- }
- }
- });
- MWF.xApplication.TeamWork.ExtField.Types = new Class({
- Extends: MWF.xApplication.TeamWork.Common.ToolTips,
- options : {
- // displayDelay : 300,
- hasArrow:false,
- event:"click"
- },
- _loadCustom : function( callback ){
- var _self = this;
- this.css = this.options.css;
- this.lp = this.options.lp;
- //this.data
- //this.contentNode
- var container = {
- "cursor":"pointer",
- "height":"40px",
- "width":"100%"
- };
- var text={
- "height":"25px","line-height":"25px","float":"left",
- "margin-left":"6px","margin-top":"8px",
- "font-size":"13px","color":"#666666","border-radius":"2px"
- };
- var icon = {
- "float":"left","width":"24px","height":"24px",
- "margin-top":"8px","margin-left":"4px",
- "background-position":"center",
- "background-repeat":"no-repeat"
- };
- var select = {
- "float":"right","width":"24px","height":"24px",
- "margin-top":"6px","margin-right":"8px",
- "background":"url(/x_component_TeamWork/$ExtField/default/icon/icon_dagou.png) no-repeat center"
- };
- var textContainer = new Element("div.container",{styles:container}).inject(this.contentNode);
- var textIcon = new Element("div",{styles:icon}).inject(textContainer);
- textIcon.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_text.png)"});
- var textText = new Element("div.text",{styles:text,text:this.lp.text,name:"TEXT"}).inject(textContainer);
- var textSelect = new Element("div.select",{styles:select}).inject(textContainer);
- var richtextContainer = new Element("div.container",{styles:container}).inject(this.contentNode);
- var richtextIcon = new Element("div",{styles:icon}).inject(richtextContainer);
- richtextIcon.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_richtext.png)"});
- var richtextText = new Element("div.text",{styles:text,text:this.lp.richtext,name:"RICHTEXT"}).inject(richtextContainer);
- var richtextSelect = new Element("div.select",{styles:select}).inject(richtextContainer);
- var radioContainer = new Element("div.container",{styles:container}).inject(this.contentNode);
- var radioIcon = new Element("div",{styles:icon}).inject(radioContainer);
- radioIcon.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_radio.png)"});
- var radioText = new Element("div.text",{styles:text,text:this.lp.radio,name:"RADIO"}).inject(radioContainer);
- var radioSelect = new Element("div.select",{styles:select}).inject(radioContainer);
- var checkboxContainer = new Element("div.container",{styles:container}).inject(this.contentNode);
- var checkboxIcon = new Element("div",{styles:icon}).inject(checkboxContainer);
- checkboxIcon.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_checkbox.png)"});
- var checkboxText = new Element("div.text",{styles:text,text:this.lp.checkbox,name:"CHECKBOX"}).inject(checkboxContainer);
- var checkboxSelect = new Element("div.select",{styles:select}).inject(checkboxContainer);
- var dateContainer = new Element("div.container",{styles:container}).inject(this.contentNode);
- var dateIcon = new Element("div",{styles:icon}).inject(dateContainer);
- dateIcon.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_date.png)"});
- var dateText = new Element("div.text",{styles:text,text:this.lp.date,name:"DATE"}).inject(dateContainer);
- var dateSelect = new Element("div.select",{styles:select}).inject(dateContainer);
- var personContainer = new Element("div.container",{styles:container}).inject(this.contentNode);
- var personIcon = new Element("div",{styles:icon}).inject(personContainer);
- personIcon.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_person.png)"});
- var personText = new Element("div.text",{styles:text,text:this.lp.identity,name:"IDENTITY"}).inject(personContainer);
- var personSelect = new Element("div.select",{styles:select}).inject(personContainer);
- var unitContainer = new Element("div.container",{styles:container}).inject(this.contentNode);
- var unitIcon = new Element("div",{styles:icon}).inject(unitContainer);
- unitIcon.setStyles({"background-image":"url(/x_component_TeamWork/$ExtField/default/icon/icon_unit.png)"});
- var unitText = new Element("div.text",{styles:text,text:this.lp.unit,name:"UNIT"}).inject(unitContainer);
- var unitSelect = new Element("div.select",{styles:select}).inject(unitContainer);
- this.contentNode.getElements(".select").hide();
- this.contentNode.getElements(".container").addEvents({
- mouseover:function(){this.setStyles({"background-color":"#F7F7F7"})},
- mouseout:function(){this.setStyles({"background-color":""})},
- click:function(){
- var data = {"value":this.getElement(".text").get("text"),"type":this.getElement(".text").get("name")};
- _self.close(data)
- }
- });
- if(callback)callback();
- }
- });
|