var user = new function(){ var that = this; var j_index_page; that.uid = null; that.authmap = null; that.username = null; that.nickname = null; that.email = null; that.avatar = null; that.cover = null; that.datachg_callback = $.Callbacks(); that.authchg_callback = $.Callbacks(); that.ready = function(){ var defer = $.Deferred(); var uid; var user_node_uid = null; var j_tabnav_main; var j_tabnav_edit; var user_node = new vus.node('user'); var main_node = new vus.node('main'); var edit_node = new vus.node('edit'); var login_node = new vus.node('login'); var register_node = new vus.node('register'); var logout_node = new vus.node('logout'); function _login(uid,hash,idendesc){ var expire; expire = new Date(); expire.setDate(expire.getDate() + 30); document.cookie = 'uid=' + uid + ';path=/;expires=' + expire.toUTCString(); document.cookie = 'hash=' + hash + ';path=/;expires=' + expire.toUTCString(); imc.Auth.change_current_iden(idendesc); _set_user(uid).done(function(){ com.url_push_back('/toj/(login/|register)/'); }); }; function _logout(){ document.cookie = 'uid=;path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT'; document.cookie = 'hash=;path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT'; document.location.href = '/toj/home/'; }; function _get_user_info(uid){ var defer = $.Deferred(); com.call_backend('core/user/','get_user_info',function(result){ if(com.is_callerr(result)){ defer.reject(result.data); } defer.resolve(result.data); },uid); return defer.promise(); }; function _get_user_authlist(uid){ var defer = $.Deferred(); com.call_backend('core/user/','list_auth',function(result){ if(com.is_callerr(result)){ defer.reject(result.data); } defer.resolve(result.data); }); return defer.promise(); } function _set_user(uid){ var defer = $.Deferred(); $.when(_get_user_info(uid),_get_user_authlist(uid)).done(function(data,authlist){ var i; var type; if(that.username == null){ type = 'login'; }else{ type = 'set'; } that.uid = data.uid; that.username = data.username; that.nickname = data.nickname; that.email = data.email; that.avatar = data.avatar; that.cover = data.cover; user.authmap = new Object(); for(i = 0;i < authlist.length;i++){ user.authmap[authlist[i].accessid] = authlist[i]; } that.datachg_callback.fire(type); that.authchg_callback.fire(); defer.resolve(); }).fail(function(){ defer.reject(); }); return defer.promise(); } j_index_page = $('#index_page'); if((uid = imc.Auth.get_current_iden().uid) == undefined){ defer.resolve(); }else{ _set_user(uid).done(function(){ defer.resolve(); }); } user_node.url_chg = function(direct,url_upart,url_dpart,param){ var param_uid; if(direct == 'in' || direct == 'same'){ if((param_uid = parseInt(param[0])) == user_node_uid){ return 'cont'; } user_node_uid = param_uid; index.set_menu('使用者'); index.set_title(''); index.clear_tabnav(); j_tabnav_main = index.add_tabnav('個人','/toj/user:' + user_node_uid + '/main/'); if(user_node_uid == that.uid){ j_tabnav_edit = index.add_tabnav('編輯資料','/toj/user:' + user_node_uid + '/edit/'); user_node.child_set(edit_node); } }else if(direct == 'out'){ user_node_uid = null; user_node.child_del(edit_node); } }; com.vus_root.child_set(user_node); main_node.url_chg = function(direct,url_upart,url_dpart,param){ var j_win = $(window); var j_header = $('#index_header'); var j_menutag = $('#index_menutag'); var j_paneltag = $('#index_paneltag'); function _active(){ j_header.addClass('force'); j_header.addClass('active'); j_menutag.addClass('force'); j_menutag.addClass('active'); j_paneltag.addClass('force'); j_paneltag.addClass('active'); } function _inactive(){ j_header.removeClass('force'); j_menutag.removeClass('force'); j_paneltag.removeClass('force'); } if(direct == 'in' || direct == 'same'){ j_tabnav_main.active(); j_index_page.css('visibility','hidden'); $.when( _get_user_info(user_node_uid), com.loadpage('/toj/html/user_main.html','/toj/css/user_main.css') ).done(function(data){ var reen = false; var url; if((url = data.avatar) == ''){ url = com.get_defaultimg(user_node_uid); } j_index_page.find('img.avatar').attr('src',url); if((url = data.cover) == ''){ url = 'http://i.imgur.com/7COsFS4.jpg'; } j_index_page.find('div.cover').css('background-image','url(\'' + url + '\')'); j_index_page.find('h3.name').text(data.nickname + '(' + data.username + ')'); j_index_page.find('p.aboutme').text(data.aboutme); j_win.on('scroll.user_main',function(e){ if(reen == true){ return; } reen = true; if(j_win.scrollTop() > 500){ _inactive(); j_win.scroll(); }else{ _active(); } reen = false; }); _active(); j_win.scrollTop(500); j_index_page.show(); j_index_page.css('visibility','visible'); }); }else if(direct == 'out'){ console.log(direct); j_win.off('scroll.user_main'); _inactive(); } return 'cont'; }; user_node.child_set(main_node); edit_node.url_chg = function(direct,url_upart,url_dpart,param){ if(direct == 'in' || direct == 'same'){ j_tabnav_edit.active(); $.when( _get_user_info(user_node_uid), com.loadpage('/toj/html/user_edit.html','/toj/css/user_edit.css') ).done(function(data){ var j_nickname = j_index_page.find('[name="nickname"]'); var j_email = j_index_page.find('[name="email"]'); var j_avatar = j_index_page.find('[name="avatar"]'); var j_cover = j_index_page.find('[name="cover"]'); var j_aboutme = j_index_page.find('[name="aboutme"]'); var j_oldpassword = j_index_page.find('[name="oldpassword"]'); var j_password = j_index_page.find('[name="password"]'); var j_repeat = j_index_page.find('[name="repeat"]'); var j_img_avatar = j_index_page.find('img.avatar'); var j_img_cover = j_index_page.find('img.cover'); j_avatar.on('change',function(e){ var url = $(this).val(); if(url == ''){ url = com.get_defaultimg(that.uid); } j_img_avatar.attr('src',url); }); j_cover.on('change',function(e){ var url = $(this).val(); if(url == ''){ url = 'http://i.imgur.com/7COsFS4.jpg'; } j_img_cover.attr('src',url); }); j_nickname.val(data.nickname); j_email.val(data.email); j_avatar.val(data.avatar); j_avatar.change(); j_cover.val(data.cover); j_cover.change(); j_aboutme.val(data.aboutme); j_index_page.find('button.submit').on('click',function(e){ var oldpassword; var password; var repeat; var set_defer = $.Deferred(); var change_defer = $.Deferred(); oldpassword = j_oldpassword.val(); password = j_password.val(); repeat = j_repeat.val(); if(password != repeat){ index.add_alert('alert-error','失敗','重複密碼不同',true); return; } com.call_backend('core/user/','set_user_info',function(result){ var errmsg; if(com.is_callerr(result)){ if(result.data == 'Eusername_too_short'){ errmsg = '使用者名稱過短'; }else if(data == 'Eusername_too_long'){ errmsg = '使用者名稱過長'; }else if(data == 'Eavatar_too_short'){ errmsg = '個人頭像網址過短'; }else if(data == 'Eavatar_too_long'){ errmsg = '個人頭像網址過長'; }else if(data == 'Enickname_too_short'){ errmsg = '暱稱過短'; }else if(data == 'Enickname_too_long'){ errmsg = '暱稱過長'; }else if(data == 'Eemail_too_short'){ errmsg = '信箱過短'; }else if(data == 'Eemail_too_long'){ errmsg = '信箱過長'; }else{ errmsg = '資料更新時發生錯誤'; } index.add_alert('alert-error','失敗',errmsg,true); set_defer.reject(); }else{ _set_user(that.uid); set_defer.resolve(); } },that.uid,j_nickname.val(),j_email.val(),j_avatar.val(),j_aboutme.val(),j_cover.val()); if(oldpassword == ''){ change_defer.resolve(); }else{ com.call_backend('core/user/','change_user_password',function(result){ var errmsg; console.log(result); if(com.is_callerr(result)){ if(result.data == 'Epassword_too_short'){ errmsg = '密碼過短'; }else if(data == 'Epsaaword_too_long'){ errmsg = '密碼過長'; }else if(data == 'Ewrong_old_password'){ errmsg = '舊密碼錯誤'; }else{ errmsg = '密碼更改時發生錯誤'; } index.add_alert('alert-error','失敗',errmsg,true); change_defer.reject(); }else{ change_defer.resolve(); } },that.uid,oldpassword,password); } $.when(set_defer,change_defer).done(function(){ index.add_alert('alert-success','成功','資料已更新',true); com.url_push('/toj/user:' + that.uid + '/main/'); }); }); j_index_page.find('button.cancel').on('click',function(e){ com.url_push_back('/toj/user.*/edit/'); }); }); }else if(direct == 'out'){ } return 'cont'; }; login_node.url_chg = function(direct,url_upart,url_dpart,param){ if(direct == 'in'){ index.set_menu('登入'); index.set_title(''); index.clear_tabnav(); com.loadpage('/toj/html/login.html','/toj/css/login.css').done(function(){ var j_alert = j_index_page.find('div.alert'); var j_submit = j_index_page.find('button.submit'); j_index_page.find('[name="username"]').focus(); j_index_page.find('input').on('keypress',function(e){ if(e.keyCode == 13){ j_submit.click(); } }); j_submit.on('click',function(e){ var username = j_index_page.find('[name="username"]').val(); var password = j_index_page.find('[name="password"]').val(); com.call_backend('core/user/','login',function(result){ data = result.data; if(com.is_callerr(result)){ j_alert.text('登入失敗'); j_alert.show(); }else{ _login(data.uid,data.hash,data.idendesc); } },username,password); }); }); } return 'cont' }; com.vus_root.child_set(login_node); register_node.url_chg = function(direct,url_upart,url_dpart,param){ if(direct == 'in'){ index.set_menu('註冊'); index.set_title(''); index.clear_tabnav(); com.loadpage('/toj/html/register.html','/toj/css/register.css').done(function(){ var j_alert = j_index_page.find('div.alert'); j_index_page.find('[name="username"]').focus(); j_index_page.find('button.submit').on('click',function(e){ var username = j_index_page.find('[name="username"]').val(); var password = j_index_page.find('[name="password"]').val(); var repeat = j_index_page.find('[name="repeat"]').val(); var nickname = j_index_page.find('[name="nickname"]').val(); var email = j_index_page.find('[name="email"]').val(); if(password != repeat){ j_alert.text('重復密碼不同'); j_alert.show(); return; } com.call_backend('core/user/','register',function(result){ data = result.data; if(result.stat == true && typeof(data) != 'string'){ com.call_backend('core/user/','login',function(result){ data = result.data; _login(data.uid,data.hash,data.idendesc); },username,password); }else{ console.log(data); if(data == 'Eusername_too_short'){ j_alert.text('使用者名稱過短'); }else if(data == 'Eusername_too_long'){ j_alert.text('使用者名稱過長'); }else if(data == 'Epassword_too_short'){ j_alert.text('密碼過短'); }else if(data == 'Epassword_too_long'){ j_alert.text('密碼過長'); }else if(data == 'Enickname_too_short'){ j_alert.text('暱稱過短'); }else if(data == 'Enickname_too_long'){ j_alert.text('暱稱過長'); }else if(data == 'Eemail_too_short'){ j_alert.text('信箱過短'); }else if(data == 'Eemail_too_long'){ j_alert.text('信箱過長'); }else if(data == 'Eusername_exists'){ j_alert.text('使用者名稱已存在'); }else{ j_alert.text('註冊時發生錯誤'); } j_alert.show(); } },username,password,nickname,email,'','',''); }); }); } }; com.vus_root.child_set(register_node); logout_node.url_chg = function(direct,url_upart,url_dpart,param){ if(direct == 'in'){ _logout(); } }; com.vus_root.child_set(logout_node); return defer.promise(); }; };