Main.min.js 4.9 KB

1
  1. MWF.xDesktop.requireApp("FaceSet","Actions.RestActions",null,false);MWF.xApplication.FaceSet.options.multitask=false;MWF.xApplication.FaceSet.Main=new Class({Extends:MWF.xApplication.Common.Main,Implements:[Options,Events],options:{style1:"default",style:"default",name:"FaceSet",icon:"icon.png",width:"1010",height:"560",isResize:false,isMax:false,title:MWF.xApplication.FaceSet.LP.title},onQueryLoad:function(){this.lp=MWF.xApplication.FaceSet.LP;this.action=MWF.Actions.get("x_faceset_control");this.faceTokens=[]},loadApplication:function(t){this.node=new Element("div",{styles:this.css.node}).inject(this.content);this.contentNode=new Element("div",{styles:this.css.contentNode}).inject(this.node);this.picAreaNode=new Element("div",{styles:this.css.picAreaNode}).inject(this.node);COMMON.AjaxModule.loadDom(COMMON.contentPath+"/res/framework/adapter/adapter.js",function(){this.createVideo();this.createAction();this.createInfor();if(t)t()}.bind(this))},createVideo:function(){this.videoAreaNode=new Element("div",{styles:this.css.videoAreaNode}).inject(this.contentNode);this.videoAreaNode.set("html","<video autoplay>"+this.lp.noMedia+"</video>");this.video=this.videoAreaNode.getFirst().setStyles(this.css.video);this.videoStart()},videoStart:function(){navigator.mediaDevices.getUserMedia({audio:false,video:true}).then(function(t){this.video.srcObject=t}.bind(this)).catch(function(t){console.log("navigator.getUserMedia error: ",t)})},createAction:function(){this.actionAreaNode=new Element("div",{styles:this.css.actionAreaNode}).inject(this.contentNode);this.actionNode=new Element("button",{styles:this.css.actionNode,text:this.lp.button_takePic}).inject(this.actionAreaNode);this.actionNode.addEvent("click",function(){this.takePhoto()}.bind(this));this.actionCompletedNode=new Element("button",{styles:this.css.actionNode,text:this.lp.button_completed}).inject(this.actionAreaNode);this.actionCompletedNode.setStyle("display","none");this.actionCompletedNode.addEvent("click",function(){this.completed()}.bind(this))},createInfor:function(){this.inforNode=new Element("div",{styles:this.css.inforNode}).inject(this.contentNode);this.setInfor()},setInfor:function(t){if(t){this.inforNode.set("text",t)}else{switch(this.faceTokens.length){case 1:this.inforNode.set("text",this.lp.pic2);break;case 2:this.inforNode.set("text",this.lp.pic3);break;case 3:this.inforNode.set("text",this.lp.completed);break;default:this.inforNode.set("text",this.lp.pic1);break}}},takePhoto:function(){this.inforNode.set("text",this.lp.getFaceToken);this.actionNode.set("disable",true);var t=new Element("div",{styles:this.css.canvasAreaNode}).inject(this.picAreaNode);var e=new Element("canvas",{styles:this.css.canvas}).inject(t);e.width=308;e.height=308/this.video.videoWidth*this.video.videoHeight;var i=(225-e.height)/2;e.setStyle("margin-top",""+i+"px");e.getContext("2d").drawImage(this.video,0,0,e.width,e.height);this.detect(e)},detect:function(t){var e=this.toBlob(t.toDataURL());var i=new FormData;i.append("file",e);this.action.detect(this.desktop.session.user.unique,"1",i,{name:"pic",size:e.size},function(e){var i=e.data.faces[0];this.faceTokens.push(i.face_token);this.setInfor();if(this.faceTokens.length>=3){this.actionCompletedNode.setStyle("display","block");this.actionNode.setStyle("display","none")}else{this.actionCompletedNode.setStyle("display","none");this.actionNode.setStyle("display","block");this.actionNode.set("disable",false)}this.drawToken(t,i)}.bind(this))},drawToken:function(t,e){var i=t.getContext("2d");i.fillStyle="#00b9eb";Object.each(e.landmark,function(t,e){i.fillRect(t.x,t.y,2,2)}.bind(this))},toBlob:function(t){var e;if(t.substr(0,10)==="data:image"){e=window.atob(t.split(",")[1])}else{e=window.atob(t)}var i=new ArrayBuffer(e.length);var o=new Uint8Array(i);for(var n=0;n<e.length;n++){o[n]=e.charCodeAt(n)}return new Blob([i],{type:"image/png"})},completed:function(){var t=MWF.Actions.get("x_organization_assemble_control");MWF.UD.getDataJson("faceTokens",function(t){if(!t)t={tokens:[]};var e=window.location.host;e=e.replace(/\./g,"_");this.action.getFaceSet(e,function(){this.completedToken(t)}.bind(this),function(){this.action.createFaceSet(e,function(){this.completedToken(t)}.bind(this))}.bind(this))}.bind(this))},completedToken:function(t){this.removeTokenFromFaceset(t,function(){this.saveTokenToFaceset(function(){t.tokens=this.faceTokens;MWF.UD.putData("faceTokens",t,function(){this.close()}.bind(this),function(t){this.inforNode.set("text",this.lp.saveAttrError)}.bind(this))}.bind(this),function(){this.inforNode.set("text",this.lp.saveAttrError)}.bind(this))}.bind(this),function(){this.inforNode.set("text",this.lp.saveAttrError)}.bind(this))},removeTokenFromFaceset:function(t,e,i){var o=window.location.host;o=o.replace(/\./g,"_");if(t&&t.tokens.length){var n={data:t.tokens};this.action.removeface(o,n,e,i)}else{if(e)e()}},saveTokenToFaceset:function(t,e){var i=window.location.host;i=i.replace(/\./g,"_");var o={data:this.faceTokens};this.action.addface(i,o,t,e)}});