diff options
Diffstat (limited to 'src/js/user.js')
-rw-r--r-- | src/js/user.js | 299 |
1 files changed, 263 insertions, 36 deletions
diff --git a/src/js/user.js b/src/js/user.js index 259768d..f6d32b9 100644 --- a/src/js/user.js +++ b/src/js/user.js @@ -7,15 +7,19 @@ var user = new function(){ that.nickname = null; that.email = null; that.avatar = null; + that.cover = null; that.login_callback = $.Callbacks(); that.ready = function(){ 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'); @@ -29,7 +33,9 @@ var user = new function(){ document.cookie = 'hash=' + hash + ';path=/;expires=' + expire.toUTCString(); imc.Auth.change_current_iden(idendesc); - _set_user_data(uid); + _set_user_data(uid).done(function(){ + that.login_callback.fire(); + }); }; function _logout(){ document.cookie = 'uid=;path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT'; @@ -49,71 +55,293 @@ var user = new function(){ return defer.promise(); }; function _set_user_data(uid){ + var defer = $.Deferred(); + _get_user_info(uid).done(function(data){ + var j_a; + that.uid = data.uid; that.username = data.username; that.nickname = data.nickname; that.email = data.email; that.avatar = data.avatar; + that.cover = data.cover; - that.login_callback.fire(); + j_a = $('#index_header li.nickname > a'); + j_a.text(that.nickname); + j_a.attr('href','/toj/user:' + that.uid + '/main/'); + defer.resolve(); }).fail(function(data){ - //TODO GE + defer.reject(); }); + + return defer.promise(); } j_index_page = $('#index_page'); if((uid = imc.Auth.get_current_iden().uid) != undefined){ - _set_user_data(uid); + _set_user_data(uid).done(function(){ + that.login_callback.fire(); + }); } user_node.url_chg = function(direct,url_upart,url_dpart,param){ - if(direct == 'in'){ - user_node_uid = parseInt(param[0]); + 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); - function _tmp(y){ - var now = 0; - var ay = 80; + 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 __ani(){ - if(y <= now){ - $(window).scrollTop(y); - return; + function _tmp(y){ + var now = 0; + var ay = 100; + + /*function __ani(){ + if(y <= now){ + $(window).scrollTop(y); + return; + } + $(window).scrollTop(now); + + now = now + ay; + ay = Math.max(5,ay * 0.86); + setTimeout(__ani,10); } - $(window).scrollTop(now); - now = now + ay; - ay = Math.max(5,ay * 0.86); - setTimeout(__ani,10); + __ani();*/ + j_win.scrollTop(y); } - __ani(); - } + 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'); + } - main_node.url_chg = function(direct,url_upart,url_dpart,param){ - if(direct == 'in'){ - index.set_menu('使用者'); - index.set_title(''); - index.clear_tabnav(); + 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') ).done(function(data){ + var reen = false; + var url; + + if((url = data.avatar) == ''){ + url = 'http://i.imgur.com/ykkQD.png'; + } + 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); - _tmp(560); + 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(); + _tmp(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') + ).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 = 'http://i.imgur.com/ykkQD.png'; + } + 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_data(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('登入'); @@ -139,12 +367,12 @@ var user = new function(){ com.call_backend('core/user/','login',function(result){ data = result.data; - if(result.stat == true && typeof(data) != 'string'){ - _login(data.uid,data.hash,data.idendesc); - com.url_push('/toj/home/'); - }else{ + if(com.is_callerr(result)){ j_alert.text('登入失敗'); j_alert.show(); + }else{ + _login(data.uid,data.hash,data.idendesc); + com.url_push_back('/toj/(login/|register)/'); } },username,password); }); @@ -186,8 +414,10 @@ var user = new function(){ com.call_backend('core/user/','login',function(result){ data = result.data; _login(data.uid,data.hash,data.idendesc); + com.url_push_back('/toj/(login/|register)/'); },username,password); }else{ + console.log(data); if(data == 'Eusername_too_short'){ j_alert.text('使用者名稱過短'); }else if(data == 'Eusername_too_long'){ @@ -206,11 +436,13 @@ var user = new function(){ j_alert.text('信箱過長'); }else if(data == 'Eusername_exists'){ j_alert.text('使用者名稱已存在'); + }else{ + j_alert.text('註冊時發生錯誤'); } j_alert.show(); } - },username,password,nickname,email,'',''); + },username,password,nickname,email,'','',''); }); }); } @@ -227,12 +459,7 @@ var user = new function(){ that.login_callback.add(function(){ var j_index_header = $('#index_header'); - var j_a; - - j_a = j_index_header.find('li.nickname > a'); - j_a.text(that.nickname); - j_a.attr('href','/toj/user:' + that.uid + '/main/'); - + j_index_header.find('li.login').hide(); j_index_header.find('li.register').hide(); j_index_header.find('li.nickname').show(); |