MWF.xDesktop = MWF.xDesktop || {};
MWF.xApplication = MWF.xApplication || {};
MWF.xDesktop.requireApp("Template", "MPopupForm", null, false);
MWF.xDesktop.Authentication = new Class({
Extends: MWF.widget.Common,
Implements: [Options, Events],
options: {
"style": "default"
},
initialize: function(options, app, node){
this.setOptions(options);
this.node = node;
this.path = MWF.defaultPath+"/xDesktop/$Authentication/";
var css = null;
MWF.UD.getPublicData("loginStyleList", function(json){
if (json && json.enabledId){
MWF.UD.getPublicData(json.enabledId, function(json){
if (json && json.data){
css = json.data;
}
}.bind(this), false);
}
}.bind(this), false);
if (!css){
this.cssPath = MWF.defaultPath+"/xDesktop/$Authentication/"+this.options.style+"/css.wcss";
this._loadCss();
}else{
this.css = css;
}
this.lp = MWF.LP.authentication;
this.app = app || {};
},
isAuthenticated: function(success, failure){
MWF.Actions.get("x_organization_assemble_authentication").getAuthentication(success, failure);
},
loadLogin: function(node){
if (layout.config.loginPage && layout.config.loginPage.enable && layout.config.loginPage.portal){
MWF.xDesktop.loadPortal(layout.config.loginPage.portal);
return "";
}
this.popupOptions = {
"draggable": false,
"closeAction": false,
"hasMask" : false,
"relativeToApp" : false
};
this.popupPara = {
container : node
};
this.postLogin = function( json ){
layout.desktop.session.user = json.data;
layout.session.user = json.data;
layout.session.token = layout.session.user.token;
var user = layout.desktop.session.user;
if (!user.identityList) user.identityList = [];
if (user.roleList) {
var userRoleName = [];
user.roleList.each(function(role){
userRoleName.push(role.substring(0, role.indexOf("@")));
});
user.roleList = user.roleList.concat(userRoleName);
}
window.location.reload();
}.bind(this);
this.openLoginForm( this.popupOptions );
},
logout: function(){
MWF.Actions.get("x_organization_assemble_authentication").logout(function(){
if (this.socket){
this.socket.close();
this.socket = null;
}
Cookie.dispose("x-token", {
"domain": ".ctc.com",
"path": "/"
});
window.location.reload();
}.bind(this));
},
openLoginForm: function( options, callback ){
var opt = Object.merge( this.popupOptions || {}, options || {}, {
onPostOk : function(json){
if( callback )callback(json);
if( this.postLogin )this.postLogin( json );
this.fireEvent("postOk",json)
}.bind(this)
});
var form = new MWF.xDesktop.Authentication.LoginForm(this, {}, opt, this.popupPara );
form.create();
},
openSignUpForm: function( options, callback ){
var opt = Object.merge( this.popupOptions || {}, options || {}, {
onPostOk : function(json){
if( callback )callback(json);
this.fireEvent("postOk",json)
}.bind(this)
} );
var form = new MWF.xDesktop.Authentication.SignUpForm(this, {}, opt, this.popupPara );
form.create();
},
openResetPasswordForm: function( options, callback ){
var opt = Object.merge( this.popupOptions || {}, options || {}, {
onPostOk : function(json){
if( callback )callback(json);
this.fireEvent("postOk",json)
}.bind(this)
} );
var form = new MWF.xDesktop.Authentication.ResetPasswordForm(this, {}, opt, this.popupPara );
form.create();
}
});
MWF.xDesktop.Authentication.LoginForm = new Class({
Extends: MPopupForm,
Implements: [Options, Events],
options: {
"style": "default",
"popupStyle" : "o2platform",
"width": "650",
"height": "460",
"hasTop": true,
"hasIcon": false,
"hasTopIcon" : true,
"hasTopContent" : true,
"hasBottom": false,
"hasScroll" : false,
"hasMark": false,
"title": (layout.config && (layout.config.systemTitle || layout.config.title)) ? (layout.config.title || layout.config.systemTitle) : MWF.LP.authentication.LoginFormTitle,
"draggable": true,
"closeAction": true
},
//Camera Login
_createTopContent: function (){
this.actions = MWF.Actions.get("x_organization_assemble_authentication");
this.faceLogin = false;
this.actions.getLoginMode(function( json ){
this.faceLogin = json.data.faceLogin;
}.bind(this), null, false);
if (this.faceLogin){
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
COMMON.AjaxModule.loadDom("/o2_lib/adapter/adapter.js", function () {
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
//暂时隐藏此功能
this.cameraLoginIcon = new Element("div", {"styles": this.explorer.css.cameraLoginIcon}).inject(this.formTopContentNode);
this.cameraLoginIcon.addEvent("click", function () {
if (!this.isCameraLogin) {
this.cameraLogin();
this.isCameraLogin = true;
} else {
this.closeCamera();
this.isCameraLogin = false;
}
}.bind(this));
}
}.bind(this));
}
}
},
closeCamera: function(){
if (this.cameraLoginVideoNode){
if (this.video) this.video.destroy();
if (this.canvas) this.canvas.destroy();
if (this.cameraLoginVideoNode) this.cameraLoginVideoNode.destroy();
this.video = null;
this.canvas = null;
this.cameraLoginVideoNode = null;
}
this.cameraLoginIcon.setStyles(this.explorer.css.cameraLoginIcon);
},
cameraLoginInit: function(){
this.cameraLoginConfig = {
"maxStep": 1,
"step": 0,
"count": 0,
"max": 2,
"errorCount": 0,
"errorMax": 3,
"user": "",
"tokens":[]
};
},
cameraLoginReset: function(resetError){
this.cameraLoginConfig.count = 0;
this.cameraLoginConfig.user = "";
if (resetError) this.cameraLoginConfig.errorCount = 0;
},
cameraLogin: function(){
this.cameraLoginInit();
this.cameraLoginIcon.setStyles(this.explorer.css.closeCameraLoginIcon);
this.createCameraLoginNode();
this.startCameraLogin();
},
createCameraLoginNode: function(){
this.cameraLoginVideoNode = new Element("div", {"styles": this.explorer.css.cameraLoginVideoNode}).inject(this.container);
var size = this.formNode.getSize();
var topSize = this.formTopNode.getSize();
var h = size.y-topSize.y;
this.cameraLoginVideoNode.setStyles({
"width": ""+size.x+"px",
"height": ""+h+"px"
});
this.cameraLoginVideoNode.position({
"relativeTo": this.formContentNode,
"position": "upperLeft",
"edge": "upperLeft"
});
},
startCameraLogin: function(){
this.cameraLoginVideoAreaNode = new Element("div").inject(this.cameraLoginVideoNode);
this.cameraLoginVideoInfoNode = new Element("div", {"styles": this.explorer.css.cameraLoginVideoInfoNode}).inject(this.cameraLoginVideoNode);
this.cameraLoginVideoInfoNode.set("text", MWF.LP.desktop.login.camera_logining);
var size = this.cameraLoginVideoNode.getSize();
var infoSize = this.cameraLoginVideoInfoNode.getSize();
var h = size.y-infoSize.y;
this.cameraLoginVideoAreaNode.setStyle("height", ""+h+"px");
this.cameraLoginVideoAreaNode.set("html", "");
this.video = this.cameraLoginVideoAreaNode.getFirst().setStyles({
"background-color": "#000000",
"width": ""+size.x+"px",
"height": ""+h+"px"
});
this.videoStart();
},
videoStart: function(){
this.video.addEventListener("canplay", function(){
window.setTimeout(function(){
this.startCameraAuthentication();
}.bind(this), 500);
}.bind(this));
navigator.mediaDevices.getUserMedia({
audio: false,
video: true
}).then(function(stream){
this.video.srcObject = stream;
}.bind(this))["catch"](function(error){
console.log('navigator.getUserMedia error: ', error);
this.closeCamera();
}.bind(this));
},
getFormData: function(){
if (!this.canvas){
this.canvas = new Element("canvas", {"styles": {"display": "none"}}).inject(this.cameraLoginVideoNode);
this.canvas.width = this.video.videoWidth;
this.canvas.height = this.video.videoHeight;
}
this.canvas.getContext('2d').drawImage(this.video, 0, 0, this.canvas.width, this.canvas.height);
var blob = this.toBlob(this.canvas.toDataURL());
var formData = new FormData();
formData.append('file', blob);
this.canvas.destroy();
return {"data":formData, "size": blob.size};
},
//检测出身份
checkUserFace: function(formData){
var faceset = window.location.host;
faceset = faceset.replace(/\./g, "_");
this.faceAction.search(faceset, formData.data, {"name": "pic", "size": formData.size}, function(json){
if (json.data.results && json.data.results.length){
var hold = json.data.thresholds["1e-5"];
if (json.data.results[0].confidence>hold){
var token = json.data.faces[0].face_token;
var user = json.data.results[0].user_id;
if ((!this.cameraLoginConfig.user) || (this.cameraLoginConfig.user===user)){
this.cameraLoginConfig.count++;
this.cameraLoginConfig.user = user;
this.cameraLoginConfig.tokens.push(token);
this.cameraLoginConfig.step++;
this.cameraLoginConfig.errorCount = 0;
this.cameraLoginVideoInfoNode.set("text", MWF.LP.desktop.login["camera_logining_"+this.cameraLoginConfig.step]);
}else{
this.cameraLoginReset();
this.cameraLoginConfig.errorCount++;
}
}else{
this.cameraLoginReset();
this.cameraLoginConfig.errorCount++;
}
}else{
this.cameraLoginReset();
this.cameraLoginConfig.errorCount++;
}
this.checkCameraLogin();
}.bind(this), function(){
window.setTimeout(function(){ this.startCameraAuthentication(); }.bind(this), 500);
}.bind(this));
},
checkUserAlive: function(formData, attr, method){
this.faceAction.detectattr(attr, formData.data, {"name": "pic", "size": formData.size}, function(json){
if (json.data.faces && json.data.faces.length){
if (this[method](json.data.faces[0].attributes)){
this.cameraLoginConfig.step++;
this.cameraLoginConfig.errorCount = 0;
this.cameraLoginVideoInfoNode.set("text", MWF.LP.desktop.login["camera_logining_"+this.cameraLoginConfig.step]);
}else{
//可能是照片
this.cameraLoginConfig.errorCount++;
}
}else{
this.cameraLoginConfig.errorCount++;
}
this.checkCameraLogin();
}.bind(this), function(){
this.cameraLoginConfig.errorCount++;
this.checkCameraLogin();
}.bind(this));
},
//检测微笑
checkUserSmile: function(attr){
return attr.smile.value>attr.smile.threshold;
},
//检测抬头
checkUserPitch: function(attr){
return attr.headpose.pitch_angle<-10;
},
startCameraAuthentication: function(){
if (this.video){
var formData = this.getFormData();
if (!this.faceAction) this.faceAction = MWF.Actions.get("x_faceset_control");
if (this.cameraLoginConfig.step===0){
this.checkUserFace(formData);
}
if (this.cameraLoginConfig.step===1){
this.checkUserAlive(formData, "smiling", "checkUserSmile");
}
if (this.cameraLoginConfig.step===2){
this.checkUserAlive(formData, "headpose", "checkUserPitch");
}
}
},
toBlob : function( base64 ){
var bytes;
if( base64.substr( 0, 10 ) === 'data:image' ){
bytes=window.atob(base64.split(',')[1]);
}else{
bytes=window.atob(base64);
}
var ab = new ArrayBuffer(bytes.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob( [ab] , {type : "image/png" });
},
getDIF: function(arr){
var max = Math.max.apply(this, arr);
var min = Math.min.apply(this, arr);
return max-min;
},
checkCameraLogin: function(){
if (this.cameraLoginConfig.errorCount>this.cameraLoginConfig.errorMax){
this.cameraLoginVideoInfoNode.set("text", MWF.LP.desktop.login.camera_loginError);
}else{
if (this.cameraLoginConfig.step>=this.cameraLoginConfig.maxStep){
var text = MWF.LP.desktop.login.camera_loginSuccess.replace("{name}", this.cameraLoginConfig.user);
this.cameraLoginVideoInfoNode.set("text", text);
this.cameraLoginSuccess();
}else{
window.setTimeout(function(){ this.startCameraAuthentication(); }.bind(this), 100);
}
}
},
cameraLoginSuccess: function(){
COMMON.AjaxModule.loadDom(["/o2_lib/CryptoJS/tripledes.js", "/o2_lib/CryptoJS/mode-ecb.js"], function(){
//COMMON.AjaxModule.loadDom(, function(){
var addressObj = layout.desktop.serviceAddressList["x_organization_assemble_authentication"];
var url = layout.config.app_protocol+"//"+addressObj.host+(addressObj.port===80 ? "" : ":"+addressObj.port)+addressObj.context;
var code = this.crypDES();
var json = {"client": "oa", "token": code};
var res = new Request.JSON({
"method": "POST",
"url" : url+"/jaxrs/sso",
"data": JSON.stringify(json),
secure: false,
emulation: false,
noCache: true,
withCredentials: true,
"headers": {
"Content-Type": "application/json; charset=utf-8"
},
onSuccess : function(responseJSON) {
this._close();
this.closeCamera();
if( this.formMaskNode )this.formMaskNode.destroy();
this.formAreaNode.destroy();
if (this.explorer && this.explorer.view)this.explorer.view.reload();
if(this.app)this.app.notice( this.lp.loginSuccess, "success");
this.fireEvent("postOk",responseJSON);
}.bind(this),
onError : function() {
this.cameraLoginVideoInfoNode.set("text", MWF.LP.desktop.login.camera_loginError2);
}.bind(this)
});
res.send();
//}.bind(this));
}.bind(this));
},
crypDES: function(){
var key = "xplatform";
var userId = this.cameraLoginConfig.user;
var d = (new Date()).getTime();
var keyHex = CryptoJS.enc.Utf8.parse(key);
var xtoken = CryptoJS.DES.encrypt(userId + "#" + d, keyHex, {
mode : CryptoJS.mode.ECB,
padding : CryptoJS.pad.Pkcs7
});
var str = xtoken.ciphertext.toString(CryptoJS.enc.Base64);
str = str.replace(/=/g, "");
str = str.replace(/\+/g, "-");
str = str.replace(/\//g, "_");
return str;
},
_createTableContent: function () {
this.loginType = "captcha";
this.codeLogin=false;
this.bindLogin=false;
this.actions.getLoginMode(function( json ){
this.codeLogin = json.data.codeLogin;
this.bindLogin = json.data.bindLogin;
}.bind(this), null, false);
MWF.Actions.get("x_organization_assemble_personal").getRegisterMode(function(json){
this.signUpMode = json.data.value;
}.bind(this), null ,false);
if( this.bindLogin ){
this.bindLoginTipPic = new Element("div.bindLoginTipPic", {styles : this.css.bindLoginTipPic}).inject( this.formContentNode, "top" );
this.bindLoginAction = new Element("div.bindLoginAction", {styles : this.css.bindLoginAction}).inject( this.formContentNode, "top" );
this.bindLoginAction.addEvent("click", function(){
this.showBindCodeLogin();
}.bind(this));
this.backtoPasswordLoginTipPic = new Element("div.backtoPasswordLoginTipPic", {styles : this.css.backtoPasswordLoginTipPic}).inject( this.formContentNode, "top" );
this.backtoPasswordLoginAction = new Element("div.backtoPasswordLoginAction", {styles : this.css.backtoPasswordLoginAction}).inject( this.formContentNode, "top" );
this.backtoPasswordLoginAction.addEvent("click", function(){
this.backtoPasswordLogin();
}.bind(this));
}
var html =
"
"+
"
" +
"
";
this.bindLoginContainer.set("html",html2);
this.isShowEnable = true;
this.bindBodyArea = this.bindLoginContainer.getElement("[styles='bindBodyArea']");
this.bindLoginContainer.addEvent("mousemove", function(ev){
if( this.bindBodyArea.isOutside( ev ) ){
this.hideExampleArea(ev);
}else{
this.showExampleArea(ev);
}
}.bind(this));
this.bindPicArea = this.bindLoginContainer.getElement("[item='bindPicArea']");
this.setBindPic();
this.bindExampleArea = this.bindLoginContainer.getElement("[styles='bindExampleArea']");
this.bindSepArea = this.bindLoginContainer.getElement("[styles='bindSepArea']");
var link = this.bindLoginContainer.getElement("[styles='bindTipLinkArea']");
link.addEvent("click", function(){
window.open( this.lp.o2downloadLink, "_blank" );
}.bind(this));
MWF.xDesktop.requireApp("Template", "MForm", function () {
this.bindform = new MForm(this.bindLoginContainer, {}, {
style: "o2platform",
verifyType : "single", //batch一起校验,或alert弹出
isEdited: this.isEdited || this.isNew,
itemTemplate: {
bindLoginTitle: {value : this.lp.bingLoginTitle, type : "innerText"}
}
}, this.app, this.css);
this.bindform.load();
}.bind(this), true);
}
this.loadOauthContent()
},
_beforeFormNodeSize : function(){
if( !this.isPlusOauthSize && this.oauthListNode ){
this.options.height = parseInt(this.options.height) + this.oauthArea.getSize().y ;
this.isPlusOauthSize = true;
}
},
loadOauthContent : function(){
this.actions.listOauthServer(function( json ){
this.oauthList = json.data || [];
if( this.oauthList.length > 0 ){
this.oauthListNode = new Element("div", { styles : this.css.oauthListNode } ).inject( this.oauthArea );
this.oauthList.each( function( d ){
this.loadOauthItem( d );
}.bind(this));
}
}.bind(this), null, false);
},
loadOauthItem : function( data ){
var url = data.icon.indexOf("http") == 0 ? data.icon : ("data:image/png;base64,"+data.icon);
var itemNode = new Element("div", {
styles : this.css.oauthItemNode,
events : {
click : function(){
window.location = "/x_desktop/oauth.html?oauth="+ encodeURIComponent(this.name);
}.bind(data)
}
} ).inject( this.oauthListNode );
var iconNode = new Element("img", {
styles : this.css.oauthItemIconNode,
src : url
} ).inject( itemNode );
var textNode = new Element("div", {
styles : this.css.oauthItemTextNode,
text : data.name
} ).inject( itemNode );
},
showExampleArea: function( ){
if( this.isHiddingExample || this.isShowingExample)return;
if( !this.isShowEnable )return;
this.isShowingExample = true;
var left = this.bindBodyArea.getPosition( this.bindBodyArea.getParent()).x;
this.intervalId = setInterval( function(){
if( left > 136 ){
this.bindBodyArea.setStyle("margin-left",(left-5)+"px");
left = left -5;
}else{
clearInterval(this.intervalId);
this.bindBodyArea.setStyle("width","400px");
this.bindSepArea.setStyle("display", "");
this.bindExampleArea.setStyle("display", "");
this.isHidEnable = true;
this.isShowEnable = false;
this.isShowingExample = false;
}
}.bind(this), 10 )
},
hideExampleArea: function( ){
if( this.isShowingExample || this.isHiddingExample )return;
if( !this.isHidEnable )return;
this.isHiddingExample = true;
var left = this.bindBodyArea.getPosition( this.bindBodyArea.getParent()).x;
this.bindSepArea.setStyle("display", "none");
this.bindExampleArea.setStyle("display", "none");
this.intervalId2 = setInterval( function(){
if( left < 220 ){
this.bindBodyArea.setStyle("margin-left",(left+5)+"px");
left = left + 5;
}else{
clearInterval(this.intervalId2);
this.bindBodyArea.setStyle("width","204px");
this.isHidEnable = false;
this.isShowEnable = true;
this.isHiddingExample = false;
}
}.bind(this), 10 )
},
showPasswordLogin: function(){
this.errorArea.empty();
this.loginType = "captcha";
this.form.getItem("passwordAction").setStyles(this.css.titleNode_active);
this.form.getItem("codeAction").setStyles(this.css.titleNode_normal);
this.formTableArea.getElement("[item='passwordTr']").setStyle("display","");
this.formTableArea.getElement("[item='captchaTr']").setStyle("display","");
this.formTableArea.getElement("[item='codeTr']").setStyle("display","none");
},
showCodeLogin: function(){
this.errorArea.empty();
this.loginType = "code";
this.form.getItem("passwordAction").setStyles(this.css.titleNode_normal);
this.form.getItem("codeAction").setStyles(this.css.titleNode_active);
this.formTableArea.getElement("[item='passwordTr']").setStyle("display","none");
this.formTableArea.getElement("[item='captchaTr']").setStyle("display","none");
this.formTableArea.getElement("[item='codeTr']").setStyle("display","");
},
showBindCodeLogin:function(){
this.errorArea.empty();
this.formTableContainer.setStyle("display","none");
this.bindLoginContainer.setStyle("display","");
this.bindLoginTipPic.setStyle("display","none");
this.bindLoginAction.setStyle("display","none");
this.backtoPasswordLoginTipPic.setStyle("display","");
this.backtoPasswordLoginAction.setStyle("display","");
this.checkBindStatus();
},
backtoPasswordLogin: function(){
this.errorArea.empty();
if( this.bindStatusInterval )clearInterval( this.bindStatusInterval );
this.formTableContainer.setStyle("display","");
this.bindLoginContainer.setStyle("display","none");
this.bindLoginTipPic.setStyle("display","");
this.bindLoginAction.setStyle("display","");
this.backtoPasswordLoginTipPic.setStyle("display","none");
this.backtoPasswordLoginAction.setStyle("display","none");
},
setBindPic: function(){
this.bindPicArea.empty();
this.actions.getLoginBind( function( json ){
this.bindMeta = json.data.meta;
new Element("img", {
src : "data:image/png;base64,"+json.data.image
}).inject( this.bindPicArea );
}.bind(this))
},
setCaptchaPic: function(){
var captchaPic = this.formTableArea.getElement("[item='captchaPic']");
captchaPic.empty();
this.actions.getLoginCaptcha(120, 50, function( json ){
this.captcha = json.data.id;
new Element("img", {
src : "data:image/png;base64,"+json.data.image,
styles : this.css.verificationImage
}).inject( captchaPic );
}.bind(this))
},
sendVerificationAction: function(){
var flag = true;
var credentialItem = this.form.getItem("credential");
var credential = credentialItem.getValue();
if( !credential || credential.trim() === "" ){
credentialItem.setWarning( this.lp.inputYourUserName, "empty");
return;
}else{
this.actions.checkCredential( credential, function( json ){
if( !json.data.value ){
flag = false;
credentialItem.setWarning( this.lp.userNotExist , "invalid");
}
}.bind(this),function( errorObj ){
flag = false;
var error = JSON.parse( errorObj.responseText );
credentialItem.setWarning( error.message , "invalid");
}.bind(this), false )
}
if( !flag ){
return;
}else{
credentialItem.clearWarning("invalid");
}
this.actions.createCredentialCode( credential, function( json ){
}, function( errorObj ){
var error = JSON.parse( errorObj.responseText );
this.setWarning( error.message );
flag = false
}.bind(this));
if( !flag ){
return;
}else{
this.errorArea.empty();
}
this.form.getItem("verificationAction").container.setStyle("display","none");
this.setResendVerification();
},
setResendVerification: function(){
var resendItem = this.form.getItem("resendVerificationAction");
resendItem.container.setStyle("display","");
this.resendElement = resendItem.getElements()[0];
this.resendElement.set("text", this.lp.resendVerification + "(60)");
var i=60;
this.timer = setInterval( function(){
if( i > 0 ){
this.resendElement.set("text", this.lp.resendVerification + "("+ --i +")")
}else{
this.form.getItem("verificationAction").container.setStyle("display","");
resendItem.container.setStyle("display","none");
clearInterval( this.timer )
}
}.bind(this), 1000 )
},
gotoSignup: function(){
this.explorer.openSignUpForm();
this.close();
},
gotoResetPassword: function(){
this.explorer.openResetPasswordForm();
this.close();
},
checkBindStatus: function(){
this.bindStatusInterval = setInterval( function(){
this.actions.checkBindStatus( this.bindMeta, function( json ){
if( json.data ){
if( json.data.name && json.data.name !== "anonymous" ){
this.fireEvent("queryOk");
this._close();
if(this.formMaskNode)this.formMaskNode.destroy();
this.formAreaNode.destroy();
if (this.explorer && this.explorer.view)this.explorer.view.reload();
if(this.app)this.app.notice( this.lp.loginSuccess, "success");
this.fireEvent("postOk", json);
}
}
}.bind(this), function( errorObj ){
//var error = JSON.parse( errorObj.responseText );
//this.setWarning( error.message );
}.bind(this))
}.bind(this) , 3000 );
},
_close: function(){
if( this.bindStatusInterval )clearInterval( this.bindStatusInterval );
if(this.timer) clearInterval( this.timer );
},
ok: function () {
this.fireEvent("queryOk");
this.errorArea.empty();
var captchaItem = null;
var codeItem = null;
if( this.loginType === "captcha" ){
this.form.getItem("password").options.notEmpty = true;
captchaItem = this.form.getItem("captchaAnswer");
if( captchaItem )captchaItem.options.notEmpty = true;
codeItem = this.form.getItem("codeAnswer");
if(codeItem)codeItem.options.notEmpty = false;
}else if( this.loginType === "code" ){
this.form.getItem("password").options.notEmpty = false;
captchaItem = this.form.getItem("captchaAnswer");
if( captchaItem )captchaItem.options.notEmpty = false;
codeItem = this.form.getItem("codeAnswer");
if(codeItem)codeItem.options.notEmpty = true;
}
var data = this.form.getResult(true, ",", true, false, true);
if (data) {
this._ok(data, function (json) {
if (json.type === "error") {
if(this.app)this.app.notice(json.message, "error");
} else {
this._close();
if( this.formMaskNode ) this.formMaskNode.destroy();
this.formAreaNode.destroy();
if (this.explorer && this.explorer.view)this.explorer.view.reload();
if(this.app)this.app.notice( this.lp.loginSuccess, "success");
this.fireEvent("postOk",json);
}
}.bind(this));
}
},
setWarning : function(text){
this.errorArea.empty();
new Element("div",{
"text" : text,
"styles" : this.css.warningMessageNode
}).inject( this.errorArea );
},
_ok: function (data, callback) {
var d = null;
if( this.loginType === "captcha" ){
d = {
credential : data.credential,
password : data.password,
captchaAnswer : data.captchaAnswer,
captcha : this.captcha
};
this.actions.loginByCaptcha( d, function( json ){
if( callback )callback( json );
//this.fireEvent("postOk")
}.bind(this), function( errorObj ){
var error = JSON.parse( errorObj.responseText );
this.setWarning( error.message );
this.setCaptchaPic();
this.form.getItem( "captchaAnswer").setValue("");
}.bind(this));
}else if( this.loginType === "code" ){
d = {
credential : data.credential,
codeAnswer : data.codeAnswer
};
this.actions.loginByCode( d, function( json ){
if( callback )callback( json );
//this.fireEvent("postOk")
}.bind(this), function( errorObj ){
var error = JSON.parse( errorObj.responseText );
this.setWarning( error.message );
}.bind(this ) );
}
}
});
MWF.xDesktop.Authentication.SignUpForm = new Class({
Extends: MPopupForm,
Implements: [Options, Events],
options: {
"style": "default",
"popupStyle" : "o2platformSignup",
"width": "900",
"height": "620",
"hasTop": true,
"hasIcon": false,
"hasTopIcon" : true,
"hasTopContent" : true,
"hasBottom": false,
"title": MWF.LP.authentication.SignUpFormTitle,
"draggable": true,
"closeAction": true
},
_createTableContent: function () {
this.actions = MWF.Actions.get("x_organization_assemble_personal");
var signUpMode = "code";
this.actions.getRegisterMode(function(json){
signUpMode = json.data.value;
}.bind(this), null ,false);
this.formTableContainer.setStyles({
"width" : "900px",
"margin-top" : "50px"
});
var html = "
" +
" | " +
" | " +
" |
" +
" | " +
" | " +
" |
" +
" | " +
" | " +
" |
" +
" | " +
" | " +
" |
" +
//" | " +
//" | " +
//" |
" +
" | " +
" | " +
" |
";
if( signUpMode === "code" ){
html += " | " +
" | " +
" |
";
}else{
html += " | " +
" | " +
" |
";
}
html += " | " +
" | " +
" |
" +
" | " +
" | " +
" |
" +
"
";
this.formTableArea.set("html", html);
if( signUpMode === "captcha" ){
this.setCaptchaPic();
}
this.createPasswordStrengthNode();
MWF.xDesktop.requireApp("Template", "MForm", function () {
this.form = new MForm(this.formTableArea, this.data, {
style: this.options.popupStyle,
verifyType : "batchSingle", //batch一起校验,或alert弹出
isEdited: this.isEdited || this.isNew,
onPostLoad: function(){
var form = this.form;
var table = this.formTableArea;
form.getItem("name").tipNode = table.getElement("[item='nameTip']");
form.getItem("password").tipNode = table.getElement("[item='passwordTip']");
form.getItem("confirmPassword").tipNode = table.getElement("[item='confirmPasswordTip']");
//form.getItem("mail").tipNode = table.getElement("[item='mailTip']")[0];
form.getItem("genderType").tipNode = table.getElement("[item='genderTypeTip']");
form.getItem("mobile").tipNode = table.getElement("[item='mobileTip']");
this.tipNode = table.getElement("[item='signUpTip']");
var captchaAnswer = form.getItem("captchaAnswer");
if( captchaAnswer ){
form.getItem("captchaAnswer").tipNode = table.getElement("[item='captchaAnswerTip']");
}
var codeAnswer = form.getItem("codeAnswer");
if( codeAnswer ){
form.getItem("codeAnswer").tipNode = table.getElement("[item='verificationCodeTip']");
}
}.bind(this),
itemTemplate: {
name: { text: this.lp.userName, defaultValue : this.lp.userName, className : "inputUser",
notEmpty : true, defaultValueAsEmpty: true, emptyTip: this.lp.inputYourUserName,
validRule : { isInvalid : function( value, it ){ return this.checkUserName( value, it ); }.bind(this)},
validMessage : { isInvalid : this.lp.userExist },
event : {
focus : function( it ){ if( this.lp.userName === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.ok() } }.bind(this),
blur: function (it) {
if( it.verify( true ) ){
if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputUser );
}
}.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputUser );
}.bind(this) },
password : { text: this.lp.password, type : "password", className : "inputPassword",
notEmpty : true, defaultValueAsEmpty: true, emptyTip: this.lp.inputYourPassword,
validRule : { passwordIsWeak: function( value, it ){
if( this.getPasswordLevel( it.getValue() ) > 3 )return true;
}.bind(this)},
validMessage : { passwordIsWeak : this.lp.passwordIsSimple },
event : {
focus : function( it ){ if( "password" === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
keyup : function(it){ this.pwStrength(it.getValue()) }.bind(this),
blur: function (it) { it.verify( true ) }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputPassword );
}.bind(this) },
confirmPassword : { text: this.lp.confirmPassword, type : "password", className : "inputComfirmPassword",
notEmpty : true,defaultValueAsEmpty: true, emptyTip: this.lp.inputComfirmPassword,
validRule : { passwordNotEqual: function( value, it ){
if( it.getValue() === this.form.getItem("password").getValue() )return true;
}.bind(this)},
validMessage : { passwordNotEqual : this.lp.passwordNotEqual },
event : {
focus : function( it ){ if( "password" === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.ok() } }.bind(this),
blur: function (it) {
if( it.verify( true ) ) {
if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputComfirmPassword );
}
}.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputComfirmPassword );
}.bind(this) },
mail : { text: this.lp.mail, defaultValue : this.lp.inputYourMail, className : "inputMail",
notEmpty : true, defaultValueAsEmpty: true, emptyTip: this.lp.inputYourMail, validRule: { email : true }, event : {
focus : function( it ){ if( this.lp.inputYourMail === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
blur: function (it) { it.verify( true ); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputMail ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.ok() } }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputMail );
}.bind(this) },
genderType : { text: this.lp.genderType, className : "inputGenderType", type : "select", selectValue : this.lp.genderTypeValue.split(","), selectText : this.lp.genderTypeText.split(","),
notEmpty : true, emptyTip: this.lp.selectGenderType, event : {
focus: function(it){ if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
blur: function (it) { it.verify( true ); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputGenderType ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.ok() } }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputGenderType );
}.bind(this) },
mobile : { text: this.lp.mobile, defaultValue : this.lp.inputYourMobile, className : "inputMobile", tType : "number",
notEmpty : true, defaultValueAsEmpty: true, emptyTip: this.lp.inputYourMobile,
validRule : { isInvalid: function( value, it ){ return this.checkMobile( value, it ); }.bind(this)},
validMessage : { isInvalid : this.lp.mobileIsRegisted },
event : {
focus : function( it ){ if( this.lp.inputYourMobile === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.ok() } }.bind(this),
blur: function (it) { if( it.verify( true )){
if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputMobile );
} }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputMobile );
}.bind(this) },
captchaAnswer: { tType: "number", text: this.lp.verificationCode, defaultValue : this.lp.verificationCode, className : "inputVerificationCode",
notEmpty : true,defaultValueAsEmpty: true, emptyTip: this.lp.inputPicVerificationCode, event : {
focus : function( it ){ if( this.lp.verificationCode === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
blur: function (it) { it.verify( true ); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputVerificationCode ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.ok() } }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputVerificationCode );
}.bind(this) },
changeCaptchaAction :{ value : this.lp.changeVerification, type : "innerText", className : "verificationChange", event : {
click : function(){
this.setCaptchaPic();
}.bind(this)
} },
codeAnswer : { text: this.lp.verificationCode, defaultValue : this.lp.inputVerificationCode, className : "inputVerificationCode2",
notEmpty : true,defaultValueAsEmpty: true, emptyTip: this.lp.inputVerificationCode, event : {
focus : function( it ){ if( this.lp.inputVerificationCode === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
blur: function (it) { it.verify( true ); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputVerificationCode2 ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.ok() } }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputVerificationCode2 );
}.bind(this) },
verificationAction : {value: this.lp.sendVerification, type : "button", className : "inputSendVerification", event : {
click : function(){ this.sendVerificationAction() }.bind(this)
} },
resendVerificationAction : {value: this.lp.resendVerification, type : "button", className : "inputResendVerification"},
signUpAction: {value: this.lp.signUp, type : "button", className : "inputSignUp", event : {
click : function(){ this.ok() }.bind(this)
} },
hasAccountArea : { value : this.lp.hasAccount, type : "innerText", className : "hasCountArea" },
gotoLoginAction : { value : this.lp.gotoLogin, type : "innerText", className : "gotoLoginAction", event : {
click : function(){ this.gotoLogin() }.bind(this)
}}
}
}, this.app, this.css);
this.form.load();
}.bind(this), true);
},
checkMobile: function( mobile, it ){
var flag = true;
this.actions.checkRegisterMobile( mobile, function( ){
flag = true
}.bind(this), function( errorObj ){
if( errorObj.status === 404){
it.options.validMessage.isInvalid = this.lp.pageNotFound;
flag = false;
}else{
var error = JSON.parse( errorObj.responseText );
it.options.validMessage.isInvalid = error.message;
flag = false;
}
}.bind(this), false );
return flag;
},
checkUserName: function( userName, it ){
var flag = true;
this.actions.checkRegisterName( userName, function( ){
flag = true
}.bind(this), function( errorObj ){
if( errorObj.status === 404){
it.options.validMessage.isInvalid = this.lp.pageNotFound;
flag = false
}else{
var error = JSON.parse( errorObj.responseText );
it.options.validMessage.isInvalid = error.message;
flag = false
}
}.bind(this), false );
return flag;
},
setCaptchaPic: function(){
var captchaPic = this.formTableArea.getElement("[item='captchaPic']");
captchaPic.empty();
this.actions.getRegisterCaptcha(120, 50, function( json ){
this.captcha = json.data.id;
new Element("img", {
src : "data:image/png;base64,"+json.data.image,
styles : this.css.verificationImage
}).inject( captchaPic );
}.bind(this))
},
sendVerificationAction: function(){
var flag = true;
var it = this.form.getItem("mobile");
if( it.verify( true )){
it.clearWarning();
it.getElements()[0].setStyles(this.css.inputMobile);
}else{
return;
}
this.actions.createRegisterCode( it.getValue(), function( json ){
}, function( errorObj ){
var codeIt = this.form.getItem("codeAnswer");
var error = JSON.parse( errorObj.responseText );
if( errorObj.status === 404){
codeIt.setWarning(error.message, this.lp.pageNotFound);
flag = false;
}else{
codeIt.setWarning(error.message, "invalid");
flag = false;
}
}.bind(this), false);
if( !flag )return false;
this.form.getItem("verificationAction").container.setStyle("display","none");
this.setResendVerification();
},
setResendVerification: function(){
var resendItem = this.form.getItem("resendVerificationAction");
resendItem.container.setStyle("display","");
this.resendElement = resendItem.getElements()[0];
this.resendElement.set("text", this.lp.resendVerification + "(60)");
var i=60;
this.timer = setInterval( function(){
if( i > 0 ){
this.resendElement.set("text", this.lp.resendVerification + "("+ --i +")")
}else{
this.form.getItem("verificationAction").container.setStyle("display","");
resendItem.container.setStyle("display","none");
clearInterval( this.timer )
}
}.bind(this), 1000 )
},
createPasswordStrengthNode : function(){
var passwordStrengthArea = this.formTableArea.getElement("[item='passwordStrengthArea']");
var lowNode = new Element( "div", {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
this.lowColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( lowNode );
this.lowTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.weak }).inject( lowNode );
var middleNode = new Element( "div" , {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
this.middleColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( middleNode );
this.middleTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.middle }).inject( middleNode );
var highNode = new Element("div", {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
this.highColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( highNode );
this.highTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.high }).inject( highNode );
},
getPasswordLevel: function( password ){
// Level(级别)
// •0-3 : [easy]
// •4-6 : [midium]
// •7-9 : [strong]
// •10-12 : [very strong]
// •>12 : [extremely strong]
var level = 0;
this.actions.checkRegisterPassword( password, function( json ){
level = json.data.value;
}.bind(this), null, false );
return level;
},
pwStrength: function(pwd){
this.lowColorNode.setStyles( this.css.passwordStrengthColor );
this.lowTextNode.setStyles( this.css.passwordStrengthText );
this.middleColorNode.setStyles( this.css.passwordStrengthColor );
this.middleTextNode.setStyles( this.css.passwordStrengthText );
this.highColorNode.setStyles( this.css.passwordStrengthColor );
this.highTextNode.setStyles( this.css.passwordStrengthText );
if (!pwd){
}else{
//var level = this.checkStrong(pwd);
var level = this.getPasswordLevel(pwd);
switch(level) {
case 0:
case 1:
case 2:
case 3:
this.lowColorNode.setStyles( this.css.passwordStrengthColor_low );
this.lowTextNode.setStyles( this.css.passwordStrengthText_current );
break;
case 4:
case 5:
case 6:
this.middleColorNode.setStyles( this.css.passwordStrengthColor_middle );
this.middleTextNode.setStyles( this.css.passwordStrengthText_current );
break;
default:
this.highColorNode.setStyles( this.css.passwordStrengthColor_high );
this.highTextNode.setStyles( this.css.passwordStrengthText_current );
}
}
},
gotoLogin: function(){
this.explorer.openLoginForm( {}, function(){ window.location.reload(); } );
this.close();
},
setWarning : function(text){
this.tipNode.empty();
new Element("div",{
"text" : text,
"styles" : this.css.warningMessageNode
}).inject( this.tipNode );
},
setNotice : function(text){
this.tipNode.empty();
new Element("div",{
"text" : text,
"styles" : this.css.noticeMessageNode
}).inject( this.tipNode );
},
ok: function () {
this.tipNode.empty();
this.fireEvent("queryOk");
var data = this.form.getResult(true, ",", true, false, true);
if (data) {
this._ok(data, function (json) {
if (json.type === "error") {
if(this.app)this.app.notice(json.message, "error");
} else {
if(this.formMaskNode)this.formMaskNode.destroy();
this.formAreaNode.destroy();
this.setNotice( this.lp.registeSuccess );
if(this.app)this.app.notice( this.lp.registeSuccess, "success");
this.fireEvent("postOk", json);
this.gotoLogin();
}
}.bind(this))
}
},
_ok: function (data, callback) {
data.captcha = this.captcha;
this.actions.register( data, function(json){
if( callback )callback( json );
}.bind(this), function( errorObj ){
if( errorObj.status === 404){
this.setWarning(this.lp.pageNotFound);
}else{
var error = JSON.parse( errorObj.responseText );
this.setWarning(error.message);
}
}.bind(this) );
}
});
MWF.xDesktop.Authentication.ResetPasswordForm = new Class({
Extends: MPopupForm,
Implements: [Options, Events],
options: {
"style": "default",
"popupStyle" : "o2platformSignup",
"width": "700",
"height": "450",
"hasTop": true,
"hasIcon": false,
"hasTopIcon" : true,
"hasTopContent" : true,
"hasBottom": false,
"title": MWF.LP.authentication.ResetPasswordFormTitle,
"draggable": true,
"closeAction": true
},
_createTopContent: function(){
this.actions = MWF.Actions.get("x_organization_assemble_personal");
this.actions.getRegisterMode(function(json){
this.signUpMode = json.data.value;
}.bind(this), null ,false);
if( this.signUpMode && this.signUpMode!=="disable" ){
this.gotoSignupNode = new Element("div", {
styles : this.css.formTopContentCustomNode,
text : this.lp.signUp
}).inject( this.formTopContentNode );
this.gotoSignupNode.addEvent( "click", function(){ this.gotoSignup() }.bind(this) );
new Element("div", {styles : this.css.formTopContentSepNode}).inject( this.formTopContentNode );
}
this.gotoLoginNode = new Element("div", {
styles : this.css.formTopContentCustomNode,
text : this.lp.loginAction
}).inject( this.formTopContentNode );
this.gotoLoginNode.addEvent( "click", function(){ this.gotoLogin() }.bind(this) );
},
_createTableContent: function () {
this.formTableContainer.setStyles( this.css.formTableContainer2 );
this.loadSteps();
this.loadStepForm_1();
this.loadStepForm_2();
this.loadStepForm_3();
},
reset: function(){
this.formTableArea.empty();
this._createTableContent();
},
loadSteps: function() {
var stepsContainer = new Element("div", { styles : this.css.stepsContainer }).inject( this.formTableArea );
this.step_1 = new Element( "div", {
styles : this.css.step_1_active,
text : this.lp.shotMessageCheck
}).inject(stepsContainer);
this.stepLink_1 = new Element( "div", { styles : this.css.stepLink_1 }).inject(this.step_1);
this.step_2 = new Element( "div", {
styles : this.css.step_2,
text : this.lp.setMewPassword
}).inject(stepsContainer);
this.stepLink_2 = new Element( "div", { styles : this.css.stepLink_2 }).inject(this.step_2);
this.step_3 = new Element( "div", {
styles : this.css.step_3,
text : this.lp.completed
}).inject(stepsContainer);
},
loadStepForm_1: function(){
var html = "
" +
" | " +
" |
" +
" | " +
" " +
" " +
" " +
" | " +
"
"+
" | " +
" |
" +
"
";
this.stepNode_1 = new Element("div", {html: html , styles : {display:""} }).inject(this.formTableArea );
MWF.xDesktop.requireApp("Template", "MForm", function () {
this.stepForm_1 = new MForm(this.stepNode_1, {}, {
style: this.options.popupStyle,
verifyType : "single", //batch一起校验,或alert弹出
isEdited: this.isEdited || this.isNew,
itemTemplate: {
name: { text: this.lp.userName, defaultValue : this.lp.userName, className : "inputUser",
notEmpty : true, defaultValueAsEmpty: true, emptyTip: this.lp.inputYourUserName,
validRule : { isInvalid: function( value, it ){ return this.checkUserName( value, it ); }.bind(this)},
validMessage : { isInvalid : this.lp.userNotExist },
event : {
focus : function( it ){ if( this.lp.userName === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
blur: function (it) { if( it.getValue() === "" )it.setValue( this.lp.userName ); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputUser ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.gotoStep( 2 ) } }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputUser );
}.bind(this) },
codeAnswer : { text: this.lp.verificationCode, defaultValue : this.lp.inputVerificationCode, className : "inputVerificationCode2",
notEmpty : true,defaultValueAsEmpty: true, emptyTip: this.lp.inputVerificationCode, event : {
focus : function( it ){ if( this.lp.inputVerificationCode === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
blur: function (it) {
if( it.getValue() === "" )it.setValue( this.lp.inputVerificationCode );
if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputVerificationCode2 );
}.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.gotoStep( 2 ) } }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputVerificationCode2 );
}.bind(this) },
verificationAction : {value: this.lp.sendVerification, type : "button", className : "inputSendVerification", event : {
click : function(){ this.sendVerificationAction() }.bind(this)
} },
resendVerificationAction : {value: this.lp.resendVerification, type : "button", className : "inputResendVerification"},
nextStep: {value: this.lp.nextStep, type : "button", className : "inputSignUp", event : {
click : function(){ this.gotoStep( 2 ) }.bind(this)
} }
}
}, this.app, this.css);
this.stepForm_1.load();
}.bind(this), true);
},
loadStepForm_2 : function(){
html = "
" +
" | " +
" | " +
" |
" +
" | " +
" | " +
" |
" +
" | " +
" | "+
" |
" +
"
";
this.stepNode_2 = new Element("div", {
html: html,
styles : { "display" : "none" }
}).inject(this.formTableArea );
MWF.xDesktop.requireApp("Template", "MForm", function () {
this.stepForm_2 = new MForm(this.stepNode_2, {}, {
style: "o2platformSignup",
verifyType : "single", //batch一起校验,或alert弹出
isEdited: this.isEdited || this.isNew,
itemTemplate: {
password : { text: this.lp.setNewPassword, type : "password", className : "inputPassword",
notEmpty : true, defaultValueAsEmpty: true, emptyTip: this.lp.inputYourPassword,
validRule : { passwordIsWeak: function( value, it ){
if( this.getPasswordLevel( it.getValue() ) > 3 )return true;
}.bind(this)},
validMessage : { passwordIsWeak : this.lp.passwordIsWeak },
event : {
focus : function( it ){ if( "password" === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
blur : function( it ){ if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputPassword ); }.bind(this),
keyup : function(it){ this.pwStrength(it.getValue()) }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputPassword );
}.bind(this) },
confirmPassword : { text: this.lp.confirmNewPassword, type : "password", className : "inputComfirmPassword",
notEmpty : true,defaultValueAsEmpty: true, emptyTip: this.lp.inputComfirmPassword,
validRule : { passwordNotEqual: function( value, it ){
if( it.getValue() === this.stepForm_2.getItem("password").getValue() )return true;
}.bind(this)},
validMessage : { passwordNotEqual : this.lp.passwordNotEqual },
event : {
focus : function( it ){ if( "password" === it.getValue() )it.setValue(""); if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputActive ); }.bind(this),
blur : function( it ){ if( !it.warningStatus )it.getElements()[0].setStyles( this.css.inputComfirmPassword ); }.bind(this),
keyup : function( it, ev ){ if( ev.event.keyCode === 13 ){ this.gotoStep( 3 ) } }.bind(this)
}, onEmpty : function( it ){
it.getElements()[0].setStyles( this.css.inputEmpty );
}.bind(this), onUnempty : function( it ){
it.getElements()[0].setStyles( this.css.inputComfirmPassword );
}.bind(this) },
nextStep: {value: this.lp.nextStep, type : "button", className : "inputSignUp", event : {
click : function(){ this.gotoStep( 3 ) }.bind(this)
} }
}
}, this.app, this.css);
this.stepForm_2.load();
}.bind(this), true);
this.createPasswordStrengthNode();
},
loadStepForm_3: function(){
this.stepNode_3 = new Element("div", {
styles : this.css.stepFormResult
}).inject(this.formTableArea );
},
createSetForm_3 : function( isSuccess, text ){
var area = null;
var action = null;
if( isSuccess ){
this.stepNode_3.setStyles( this.css.stepFormResult );
this.stepNode_3.setStyle("display","");
new Element("div", {
styles : this.css.resetPasswordSuccess,
text : this.lp.resetPasswordSuccess
}).inject( this.stepNode_3 );
area = new Element("div", {
styles : this.css.resetPasswordResultArea
}).inject( this.stepNode_3 );
new Element("div", {
styles : this.css.resetPasswordResultWord,
text : this.lp.resetPasswordSuccessWord
}).inject( area );
action = new Element("div", {
styles : this.css.resetPasswordResultAction,
text : this.lp.gotoLogin
}).inject( area );
action.addEvent("click", function(){ this.gotoLogin() }.bind(this));
}else{
this.stepNode_3.setStyles( this.css.stepFormResult_fail );
this.stepNode_3.setStyle("display","");
new Element("div", {
styles : this.css.resetPasswordFail,
text : text + this.lp.resetPasswordFail
}).inject( this.stepNode_3 );
area = new Element("div", {
styles : this.css.resetPasswordResultArea
}).inject( this.stepNode_3 );
new Element("div", {
styles : this.css.resetPasswordResultWord,
text : this.lp.resetPasswordFailWord
}).inject( area );
action = new Element("div", {
styles : this.css.resetPasswordResultAction,
text : this.lp.backtoModify
}).inject( area );
action.addEvent("click", function(){ this.reset() }.bind(this));
}
},
gotoStep: function( step ){
var form = this["stepForm_"+(step-1)];
form.clearWarning();
var data = form.getResult(true, ",", true, false, true);
if( !data ){
return;
}
var i;
for( i = 1; i<=step; i++ ){
this["step_"+i].setStyles( this.css["step_"+i+"_active"] );
if( i!==step && this["stepLink_"+i]){
this["stepLink_"+i].setStyles( this.css["stepLink_"+i+"_active"] );
}
}
for( i = step+1; i<=3; i++ ){
this["step_"+i].setStyles( this.css["step_"+i] );
if( i!==3 ){
this["stepLink_"+i].setStyles( this.css["stepLink_"+i] );
}
}
for( i = 1; i<=3; i++ ){
if( i===step ){
this["stepNode_"+i].setStyle( "display" , "" );
}else{
this["stepNode_"+i].setStyle( "display" , "none" );
}
}
if( step === 3 ){
var d = {
credential : this.stepForm_1.getItem("name").getValue(),
codeAnswer : this.stepForm_1.getItem("codeAnswer").getValue(),
password : this.stepForm_2.getItem("password").getValue()
};
this.actions.resetPassword( d, function( ){
this.createSetForm_3( true )
}.bind(this), function( errorObj ){
var error = JSON.parse( errorObj.responseText );
//this.app.notice( error.message );
this.createSetForm_3( false, error.message )
}.bind(this), false );
}
},
checkMobile: function( mobile ){
var flag = true;
this.actions.checkRegisterMobile( mobile, function(){
flag = true
}.bind(this), function(){
flag = false;
}.bind(this), false );
return flag;
},
checkUserName: function( userName, it ){
var flag = false;
this.actions.checkCredentialOnResetPassword( userName, function( json ){
if( json.data ){
flag = json.data.value;
}
}.bind(this), function( errorObj ){
if( errorObj.status === 404){
it.options.validMessage.isInvalid = this.lp.pageNotFound;
flag = false
}else{
var error = JSON.parse( errorObj.responseText );
it.options.validMessage.isInvalid = error.message;
flag = false
}
}.bind(this), false );
return flag;
},
sendVerificationAction: function(){
var flag = true;
var it = this.stepForm_1.getItem("name");
this.stepForm_1.clearWarning();
if( it.verify( true )){
}else{
return;
}
this.actions.createCodeOnResetPassword( it.getValue(), function( json ){
}, function( errorObj ){
var error = JSON.parse( errorObj.responseText );
it.setWarning(error.message, "invalid");
flag = false
}.bind(this), false);
if( !flag )return false;
this.stepForm_1.getItem("verificationAction").container.setStyle("display","none");
this.setResendVerification();
},
setResendVerification: function(){
var resendItem = this.stepForm_1.getItem("resendVerificationAction");
resendItem.container.setStyle("display","");
this.resendElement = resendItem.getElements()[0];
this.resendElement.set("text", this.lp.resendVerification + "(60)");
var i=60;
this.timer = setInterval( function(){
if( i > 0 ){
this.resendElement.set("text", this.lp.resendVerification + "("+ --i +")")
}else{
this.stepForm_1.getItem("verificationAction").container.setStyle("display","");
resendItem.container.setStyle("display","none");
clearInterval( this.timer )
}
}.bind(this), 1000 )
},
createPasswordStrengthNode : function(){
var passwordStrengthArea = this.formTableArea.getElement("[item='passwordStrengthArea']");
var lowNode = new Element( "div", {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
this.lowColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( lowNode );
this.lowTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.weak }).inject( lowNode );
var middleNode = new Element( "div" , {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
this.middleColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( middleNode );
this.middleTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.middle }).inject( middleNode );
var highNode = new Element("div", {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
this.highColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( highNode );
this.highTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.high }).inject( highNode );
},
getPasswordLevel: function( password ){
/*Level(级别)
•0-3 : [easy]
•4-6 : [midium]
•7-9 : [strong]
•10-12 : [very strong]
•>12 : [extremely strong]
*/
var level = 0;
this.actions.checkRegisterPassword( password, function( json ){
level = json.data.value;
}.bind(this), null, false );
return level;
},
pwStrength: function(pwd){
this.lowColorNode.setStyles( this.css.passwordStrengthColor );
this.lowTextNode.setStyles( this.css.passwordStrengthText );
this.middleColorNode.setStyles( this.css.passwordStrengthColor );
this.middleTextNode.setStyles( this.css.passwordStrengthText );
this.highColorNode.setStyles( this.css.passwordStrengthColor );
this.highTextNode.setStyles( this.css.passwordStrengthText );
if (!pwd){
}else{
//var level = this.checkStrong(pwd);
var level = this.getPasswordLevel(pwd);
switch(level) {
case 0:
case 1:
case 2:
case 3:
this.lowColorNode.setStyles( this.css.passwordStrengthColor_low );
this.lowTextNode.setStyles( this.css.passwordStrengthText_current );
break;
case 4:
case 5:
case 6:
this.middleColorNode.setStyles( this.css.passwordStrengthColor_middle );
this.middleTextNode.setStyles( this.css.passwordStrengthText_current );
break;
default:
this.highColorNode.setStyles( this.css.passwordStrengthColor_high );
this.highTextNode.setStyles( this.css.passwordStrengthText_current );
}
}
},
gotoLogin: function(){
this.explorer.openLoginForm( {}, function(){ window.location.reload(); } );
this.close();
},
gotoSignup: function(){
this.explorer.openSignUpForm();
this.close();
}
});