aboutsummaryrefslogtreecommitdiffstats
path: root/src/js
diff options
context:
space:
mode:
authorpzread <netfirewall@gmail.com>2013-06-26 01:49:13 +0800
committerpzread <netfirewall@gmail.com>2013-06-26 01:49:13 +0800
commit17c8c94e097018ccaf15f8a9296b03b5195cc3f7 (patch)
treef3c32a7a7a272f0ab0c2236928c4b78e36846d56 /src/js
parente0043639746fdbbf4958c67a3ef55c63c2fe51a5 (diff)
downloadtaiwan-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.js4
-rw-r--r--src/js/index.js12
-rw-r--r--src/js/mail.js87
-rw-r--r--src/js/notice.js29
-rw-r--r--src/js/square.js275
-rw-r--r--src/js/user.js13
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();
- });
};