diff options
author | pzread <netfirewall@gmail.com> | 2013-06-26 01:49:13 +0800 |
---|---|---|
committer | pzread <netfirewall@gmail.com> | 2013-06-26 01:49:13 +0800 |
commit | 17c8c94e097018ccaf15f8a9296b03b5195cc3f7 (patch) | |
tree | f3c32a7a7a272f0ab0c2236928c4b78e36846d56 /src/js | |
parent | e0043639746fdbbf4958c67a3ef55c63c2fe51a5 (diff) | |
download | taiwan-online-judge-17c8c94e097018ccaf15f8a9296b03b5195cc3f7.tar taiwan-online-judge-17c8c94e097018ccaf15f8a9296b03b5195cc3f7.tar.gz taiwan-online-judge-17c8c94e097018ccaf15f8a9296b03b5195cc3f7.tar.bz2 taiwan-online-judge-17c8c94e097018ccaf15f8a9296b03b5195cc3f7.tar.lz taiwan-online-judge-17c8c94e097018ccaf15f8a9296b03b5195cc3f7.tar.xz taiwan-online-judge-17c8c94e097018ccaf15f8a9296b03b5195cc3f7.tar.zst taiwan-online-judge-17c8c94e097018ccaf15f8a9296b03b5195cc3f7.zip |
Add square page. Add AsyncMCD. Add sqmod manage
Diffstat (limited to 'src/js')
-rw-r--r-- | src/js/com.js | 4 | ||||
-rw-r--r-- | src/js/index.js | 12 | ||||
-rw-r--r-- | src/js/mail.js | 87 | ||||
-rw-r--r-- | src/js/notice.js | 29 | ||||
-rw-r--r-- | src/js/square.js | 275 | ||||
-rw-r--r-- | src/js/user.js | 13 |
6 files changed, 342 insertions, 78 deletions
diff --git a/src/js/com.js b/src/js/com.js index 3e50173..64d76a2 100644 --- a/src/js/com.js +++ b/src/js/com.js @@ -684,10 +684,10 @@ var com = new function(){ imc.Auth.change_current_iden(idendesc) - if((cookie = that.get_cookie()) != null){ + if((cookie = that.get_cookie()).uid != undefined){ that.call_backend('core/user/','cookie_login',function(result){ if(that.is_callerr(result)){ - //TODO GE + index.add_alert('','登入發生錯誤'); }else{ imc.Auth.change_current_iden(result.data.idendesc); user.uid = imc.Auth.get_current_iden().uid; diff --git a/src/js/index.js b/src/js/index.js index 3ea93fc..33e22b4 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -114,10 +114,18 @@ var index = new function(){ user.login_callback.add(function(){ var j_li; + + j_header.find('li.login').hide(); + j_header.find('li.register').hide(); + j_header.find('li.nickname').show(); + j_header.find('li.logout').show(); + - j_li = j_menu.find('div.menu li.profile') + j_li = j_menu.find('div.menu li.profile'); j_li.find('a').attr('href','/toj/user:' + user.uid + '/main/'); j_li.show(); + + j_menu.find('div.menu li.square').show(); j_menu.find('div.menu li.mail').show(); }); @@ -161,7 +169,7 @@ var index = new function(){ if(autofade != false){ setTimeout(function(){ j_alert.alert('close'); - },10000); + },5000); } j_alertbox.prepend(j_alert); diff --git a/src/js/mail.js b/src/js/mail.js index 0abe12a..a3a357a 100644 --- a/src/js/mail.js +++ b/src/js/mail.js @@ -4,8 +4,8 @@ var mail = new function(){ var j_maillist; var j_newmail; var j_readmail; - var j_tabnav_inbox; - var j_tabnav_backup; + var inbox_tabnav; + var backup_tabnav; var readmail_mailid = null; var maillist_type = null; @@ -57,28 +57,52 @@ var mail = new function(){ j_index_page.find('span.checkall').check(false); + com.call_backend('core/mail/','get_mail_count',function(result){ + var i; + var j_div = j_index_page.find('div.pagination'); + var offs; + var as; + var pfix; + + if(com.is_callerr(result)){ + index.add_alert('','警告','信箱發生錯誤'); + }else{ + if(maillist_type == 1){ + pfix = '/toj/mail/inbox:'; + }else if(maillist_type == 2){ + pfix = '/toj/mail/backup:'; + } + + offs = com.create_pagination(j_div,0,result.data.tot_count,maillist_off,20); + as = j_div.find('a'); + for(i = 0;i < as.length;i++){ + $(as[i]).attr('href',pfix + offs[i] + '/'); + } + } + },maillist_type); + com.call_backend('core/mail/','list_mail',function(result){ var data; - var mail; + var mailo; var items; var j_item; var i; if(com.is_callerr(result)){ - //TODO GE + index.add_alert('','警告','信箱發生錯誤'); }else{ data = result.data; items = j_maillist.find('tr.item'); for(i = 0;i < Math.min(items.length,data.length);i++){ - mail = data[i]; + mailo = data[i]; - mailitem_set($(items[i]),mail.mailid,mail.from_username,mail.title,com.get_timestring(mail.send_time),mail.unread); + mailitem_set($(items[i]),mailo.mailid,mailo.from_username,mailo.title,com.get_timestring(mailo.send_time),mailo.unread); } for(;i < data.length;i++){ - mail = data[i]; + mailo = data[i]; - j_item = mailitem_create(mail.mailid,mail.from_username,mail.title,com.get_timestring(mail.send_time),mail.unread); + j_item = mailitem_create(mailo.mailid,mailo.from_username,mailo.title,com.get_timestring(mailo.send_time),mailo.unread); j_maillist.append(j_item); } for(;i < items.length;i++){ @@ -104,7 +128,6 @@ var mail = new function(){ if(direct == 'in'){ index.set_menu('信箱'); index.set_title(''); - index.clear_tabnav(); mail_node.child_delayset('inbox'); @@ -120,8 +143,8 @@ var mail = new function(){ newmail_content = com.create_codebox(j_newmail.find('div.content'),'text/html'); readmail_content = com.create_codebox(j_readmail.find('div.content'),'text/html',true); - j_tabnav_inbox = index.add_tabnav('收件匣','/toj/mail/inbox/'); - j_tabnav_backup = index.add_tabnav('寄件備份','/toj/mail/backup/'); + inbox_tabnav = index.add_tabnav('收件匣','/toj/mail/inbox/'); + backup_tabnav = index.add_tabnav('寄件備份','/toj/mail/backup/'); j_index_page.find('button.newmail').on('click',function(e){ j_newmail.modal('show'); @@ -183,7 +206,7 @@ var mail = new function(){ }else if(data == 'Eto_username'){ errmsg = '收件人不存在'; }else{ - errmsg = '信件寄出時發生錯誤'; + errmsg = '信件寄出發生錯誤'; } index.add_alert('alert-error','失敗',errmsg,true); @@ -202,7 +225,7 @@ var mail = new function(){ var data; if(com.is_callerr(result)){ - //TODO GE + index.add_alert('','警告','讀取郵件發生錯誤'); }else{ data = result.data; @@ -256,27 +279,10 @@ var mail = new function(){ maillist_off = parseInt(param); } - j_tabnav_inbox.active(); + inbox_tabnav.active(); j_index_page.find('table.maillist th.username').text('寄件人'); j_readmail.find('span.username_label').text('寄件人'); - com.call_backend('core/mail/','get_mail_count',function(result){ - var i; - var j_div = j_index_page.find('div.pagination'); - var offs; - var as; - - if(com.is_callerr(result)){ - //TODO GE - }else{ - offs = com.create_pagination(j_div,0,result.data.tot_count,maillist_off,20); - as = j_div.find('a'); - for(i = 0;i < as.length;i++){ - $(as[i]).attr('href','/toj/mail/inbox:' + offs[i] + '/'); - } - } - },maillist_type); - update_maillist(); }else if(direct == 'out'){ maillist_type = null; @@ -295,27 +301,10 @@ var mail = new function(){ maillist_off = parseInt(param); } - j_tabnav_backup.active(); + backup_tabnav.active(); j_index_page.find('table.maillist th.username').text('收件人'); j_readmail.find('span.username_label').text('收件人'); - com.call_backend('core/mail/','get_mail_count',function(result){ - var i; - var j_div = j_index_page.find('div.pagination'); - var offs; - var as; - - if(com.is_callerr(result)){ - //TODO GE - }else{ - offs = com.create_pagination(j_div,0,result.data.tot_count,maillist_off,20); - as = j_div.find('a'); - for(i = 0;i < as.length;i++){ - $(as[i]).attr('href','/toj/mail/backup:' + offs[i] + '/'); - } - } - },maillist_type); - update_maillist(); }else if(direct == 'out'){ maillist_type = null; diff --git a/src/js/notice.js b/src/js/notice.js index 9bd92eb..3b7dff1 100644 --- a/src/js/notice.js +++ b/src/js/notice.js @@ -28,8 +28,6 @@ var notice = new function(){ if(com.is_callerr(result)){ index.add_alert('','警告','通知發生錯誤'); }else{ - console.log(data); - for(i = 0;i < data.length;i++){ notice = data[i]; @@ -47,20 +45,23 @@ var notice = new function(){ }); }); - imc.Proxy.instance.register_call('core/notice/','update_notice',function(callback,unseen_count){ - _set_unseen_count(unseen_count); - callback('Success'); - }); + user.login_callback.add(function(){ + imc.Proxy.instance.register_call('core/notice/','update_notice',function(callback,unseen_count){ + _set_unseen_count(unseen_count); + callback('Success'); + }); - com.call_backend('core/notice/','get_unseen_count',function(result){ - var data = result.data; + com.call_backend('core/notice/','get_unseen_count',function(result){ + var data = result.data; - if(com.is_callerr(result)){ - index.add_alert('','警告','通知發生錯誤'); - }else{ - _set_unseen_count(data.unseen_count); - } + if(com.is_callerr(result)){ + index.add_alert('','警告','通知發生錯誤'); + }else{ + _set_unseen_count(data.unseen_count); + } + }); + + j_noticetag.show(); }); }; - }; diff --git a/src/js/square.js b/src/js/square.js new file mode 100644 index 0000000..a8431f9 --- /dev/null +++ b/src/js/square.js @@ -0,0 +1,275 @@ +var square = new function(){ + var that = this; + var j_index_page; + var j_catelist; + var j_indexlist; + + that.ready = function(){ + var square_node = new vus.node('square'); + var user_node = new vus.node('user'); + var index_node = new vus.node('index'); + var user_tabnav; + var index_tabnav; + + function box_set(j_box,id,logo,title,start_time,end_time,intro,active){ + var j_oper; + + j_box.attr('boxid',id); + + j_box.find('img.logo').attr('src',logo); + j_box.find('h5.title').text(title); + j_box.find('p.intro').text(intro); + + if(start_time != null || end_time != null){ + if(start_time != null){ + j_box.find('div.start').text('┌─' + start_time); + } + if(end_time != null){ + j_box.find('div.end').text('└→' + end_time); + } + } + + j_oper = j_box.find('div.oper'); + j_oper.empty(); + if(active == null){ + j_oper.append('<button class="btn btn-primary join" data-loading-text="處理中">加入</button><button class="btn">開啓</button>'); + j_oper.find('button.join').on('click',function(e){ + $(this).button('loading'); + + com.call_backend('core/square/','join_square',function(result){ + var data = result.data; + + if(com.is_callerr(result)){ + if(data == 'Ereject'){ + index.add_alert('alert-error','拒絕','加入請求被拒絕'); + }else if(data == 'Eno_such_sqid'){ + index.add_alert('alert-error','錯誤','方塊不存在'); + }else{ + index.add_alert('alert-error','錯誤','操作方塊發生錯誤'); + } + }else{ + box_update(id,logo,title,start_time,end_time,intro,data.active); + } + },id); + }); + }else{ + if(active== true){ + j_oper.append('<button class="btn btn-success quit" data-loading-text="處理中">退出</button><button class="btn">開啓</button>'); + }else{ + j_oper.append('<button class="btn btn-warning quit" data-loading-text="處理中">取消申請</button><button class="btn">開啓</button>'); + } + + j_oper.find('button.quit').on('click',function(e){ + $(this).button('loading'); + + com.call_backend('core/square/','quit_square',function(result){ + var data = result.data; + + if(com.is_callerr(result)){ + if(data == 'Eno_such_sqid'){ + index.add_alert('alert-error','錯誤','方塊不存在'); + }else{ + index.add_alert('alert-error','錯誤','操作方塊發生錯誤'); + } + }else{ + box_update(id,logo,title,start_time,end_time,intro,null); + } + },id); + }); + } + } + function box_update(id,logo,title,start_time,end_time,intro,active){ + var i; + var boxs; + + boxs = j_indexlist.find('[boxid="' + id + '"]'); + for(i = 0;i < boxs.length;i++){ + box_set($(boxs[i]),id,logo,title,start_time,end_time,intro,active); + } + } + function box_create(id,logo,title,start_time,end_time,intro,active){ + var j_box = $('<div class="span5 box"><img class="logo"></img><h5 class="title"></h5><div class="time start"></div><div class="time end"></div><p class="intro"></p><div class="btn-group oper"></div></div>'); + + box_set(j_box,id,logo,title,start_time,end_time,intro,active); + + return j_box; + } + function catebox_set(j_box,cateid,catename){ + j_box.attr('cateid',cateid); + j_box.find('h3.catename').text(catename); + } + function catebox_create(cateid,catename){ + var j_box = $('<div class="catebox"><h3 class="catename"></h3><h4 class="run">進行中</h4><div class="clearfix boxlist run"></div><h4 class="pend">等待中</h4><div class="clearfix boxlist pend"></div><h4 class="past">已結束</h4><div class="clearfix boxlist past"></div>'); + + catebox_set(j_box,cateid,catename); + + return j_box; + } + + function catelist_update(){ + var defer = $.Deferred(); + + com.call_backend('core/square/','list_category',function(result){ + var data = result.data; + + if(com.is_callerr(result)){ + index.add_alert('','警告','方塊目錄發生錯誤'); + defer.reject(); + }else{ + defer.resolve(data); + } + }); + + return defer.promise(); + } + function indexlist_update(catelist,joined){ + var i; + var j_catebox; + var cateo; + + j_catelist.empty(); + j_indexlist.empty(); + for(i = 0;i < catelist.length;i++){ + cateo = catelist[i]; + + com.call_backend('core/square/','list_square',function(cateo){return function(result){ + var i; + var data = result.data; + var sqo; + var logo; + var start_time; + var end_time; + var j_cate; + var j_box; + var j_run; + var j_pend; + var j_past; + var j_a; + + if(com.is_callerr(result)){ + index.add_alert('','警告','方塊目錄發生錯誤'); + }else{ + if(data.length == 0){ + return; + } + + j_cate = $('<li><a href=""></a></li>'); + j_a = j_cate.find('a'); + j_a.text(cateo.catename); + j_a.on('click',function(e){ + $(window).scrollTop(j_indexlist.find('[cateid="' + cateo.cateid + '"]').offset().top - 66); + return false; + }); + j_catelist.append(j_cate); + + j_catebox = catebox_create(cateo.cateid,cateo.catename); + j_indexlist.append(j_catebox); + + j_run = j_catebox.find('div.run'); + j_pend = j_catebox.find('div.pend'); + j_past = j_catebox.find('div.past'); + + for(i = 0;i < data.length;i++){ + sqo = data[i]; + if(joined == true && sqo.active == null){ + continue; + } + + if((logo = sqo.logo) == ''){ + logo = 'http://www.gravatar.com/avatar/' + sqo.sqid + '?f=y&d=identicon&s=96'; + } + if(sqo.start_time == null){ + start_time = null; + }else{ + start_time = com.get_timestring(sqo.start_time); + } + if(sqo.end_time == null){ + end_time = null; + }else{ + end_time = com.get_timestring(sqo.end_time); + } + + j_box = box_create(sqo.sqid,logo,sqo.title,start_time,end_time,sqo.intro,sqo.active); + + if(sqo.status == 1){ + j_pend.append(j_box); + }else if(sqo.status == 2){ + j_run.append(j_box); + }else if(sqo.status == 3){ + j_past.append(j_box); + } + } + + if(j_pend.children().length > 0){ + j_catebox.find('h4.pend').show(); + j_pend.show(); + } + if(j_run.children().length > 0){ + j_catebox.find('h4.run').show(); + j_run.show(); + } + if(j_past.children().length > 0){ + j_catebox.find('h4.past').show(); + j_past.show(); + } + } + }}(cateo),cateo.cateid); + } + } + function update(joined){ + catelist_update().done(function(catelist){ + indexlist_update(catelist,joined); + }); + } + + j_index_page = $('#index_page'); + + square_node.url_chg = function(direct,url_upart,url_dpart,param){ + if(direct == 'in'){ + index.set_menu('方塊'); + index.set_title(''); + index.clear_tabnav(); + + square_node.child_delayset('user'); + square_node.child_delayset('index'); + + com.loadpage('/toj/html/square.html').done(function(){ + j_catelist = j_index_page.find('ul.catelist'); + j_indexlist = j_index_page.find('div.indexlist'); + + user_tabnav = index.add_tabnav('已加入','/toj/square/user/'); + index_tabnav = index.add_tabnav('目錄','/toj/square/index/'); + + square_node.child_set(user_node); + square_node.child_set(index_node); + }); + }else if(direct == 'out'){ + square_node.child_del(user_node); + square_node.child_del(index_node); + } + + return 'cont'; + }; + com.vus_root.child_set(square_node); + + user_node.url_chg = function(direct,url_upart,url_dpart,param){ + if(direct == 'in'){ + user_tabnav.active(); + + update(true); + } + + return 'cont'; + } + + index_node.url_chg = function(direct,url_upart,url_dpart,param){ + if(direct == 'in'){ + index_tabnav.active(); + + update(false); + } + + return 'cont'; + } + }; +}; diff --git a/src/js/user.js b/src/js/user.js index f6d32b9..9e78d83 100644 --- a/src/js/user.js +++ b/src/js/user.js @@ -167,7 +167,7 @@ var user = new function(){ var url; if((url = data.avatar) == ''){ - url = 'http://i.imgur.com/ykkQD.png'; + url = 'http://www.gravatar.com/avatar/' + user_node_uid + '?f=y&d=identicon&s=256'; } j_index_page.find('img.avatar').attr('src',url); if((url = data.cover) == ''){ @@ -231,7 +231,7 @@ var user = new function(){ var url = $(this).val(); if(url == ''){ - url = 'http://i.imgur.com/ykkQD.png'; + url = 'http://www.gravatar.com/avatar/' + that.uid + '?f=y&d=identicon&s=256'; } j_img_avatar.attr('src',url); }); @@ -456,13 +456,4 @@ var user = new function(){ }; com.vus_root.child_set(logout_node); }; - - that.login_callback.add(function(){ - var j_index_header = $('#index_header'); - - j_index_header.find('li.login').hide(); - j_index_header.find('li.register').hide(); - j_index_header.find('li.nickname').show(); - j_index_header.find('li.logout').show(); - }); }; |