aboutsummaryrefslogtreecommitdiffstats
path: root/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js')
-rw-r--r--src/js/com.js22
-rw-r--r--src/js/imc.js19
-rw-r--r--src/js/index.js32
-rw-r--r--src/js/manage.js174
-rw-r--r--src/js/mod.js57
-rw-r--r--src/js/notice.js30
-rw-r--r--src/js/square.js357
-rw-r--r--src/js/user.js81
8 files changed, 494 insertions, 278 deletions
diff --git a/src/js/com.js b/src/js/com.js
index f4f9612..3b162c2 100644
--- a/src/js/com.js
+++ b/src/js/com.js
@@ -1,5 +1,15 @@
'use strict'
+var ACCESSID_SQUAREMG = 4;
+var ACCESSID_PROBLEMMG = 6;
+
+var ACCESS_READ = 0x1;
+var ACCESS_WRITE = 0x2;
+var ACCESS_CREATE = 0x4;
+var ACCESS_DELETE = 0x8;
+var ACCESS_SETPER = 0x10;
+var ACCESS_EXECUTE = 0x20;
+
var WebSocketConnection = function(link,ws){
var that = this;
@@ -561,6 +571,13 @@ var com = new function(){
that.get_defaultimg = function(hash){
return 'http://www.gravatar.com/avatar/' + hash + '?f=y&d=identicon&s=256';
};
+ that.check_access = function(accessid,permission){
+ if((user.authmap[accessid].permission & permission) == permission){
+ return true;
+ }else{
+ return false;
+ }
+ };
that.create_codebox = function(j_div,mode,readonly){
var codebox;
@@ -584,6 +601,8 @@ var com = new function(){
codebox.getScrollerElement().style.width = '100%';
codebox.getScrollerElement().style.height = '100%';
+ j_div.data('codebox',codebox);
+
return codebox;
};
that.create_pagination = function(j_div,start,end,curr,step){
@@ -993,10 +1012,9 @@ var com = new function(){
if((cookie = that.get_cookie()).uid != undefined){
that.call_backend('core/user/','cookie_login',function(result){
if(that.is_callerr(result)){
- index.add_alert('','登入發生錯誤');
+ index.add_alert('','錯誤','登入失敗');
}else{
imc.Auth.change_current_iden(result.data.idendesc);
- user.uid = imc.Auth.get_current_iden().uid;
}
that.conn_callback.fire();
diff --git a/src/js/imc.js b/src/js/imc.js
index 8970ccf..ae81684 100644
--- a/src/js/imc.js
+++ b/src/js/imc.js
@@ -258,12 +258,31 @@ var imc = new function(){
cnode = walk_path(path,true);
cnode.name[func_name] = func;
};
+ that.unregister_call = function(path,func_name){
+ var cnode;
+
+ cnode = walk_path(path,true);
+ delete cnode.name[func_name];
+ }
that.register_filter = function(path,func){
var cnode;
cnode = walk_path(path,true);
cnode.filt.push(func);
};
+ that.unregister_filter = function(path,func){
+ var i;
+ var cnode;
+ var new_filt = new Array();
+
+ cnode = walk_path(path,true);
+ for(i = 0;i < cnode.filt.length;i++){
+ if(cnode.filt[i] != func){
+ new_filt.push(cnode.filt[i]);
+ }
+ }
+ cnode.filt.remove(func);
+ };
conn_retidmap[self_link] = {};
diff --git a/src/js/index.js b/src/js/index.js
index d6b36d3..f645d3d 100644
--- a/src/js/index.js
+++ b/src/js/index.js
@@ -112,20 +112,28 @@ var index = new function(){
}
});
- user.login_callback.add(function(){
+ user.datachg_callback.add(function(type){
+ var j_a;
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.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();
- j_menu.find('div.menu li.manage').show();
+ j_a = j_header.find('li.nickname > a');
+ j_a.text(user.nickname);
+ j_a.attr('href','/toj/user:' + user.uid + '/main/');
+ console.log(type);
+
+ if(type == 'login'){
+ 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.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();
+ j_menu.find('div.menu li.manage').show();
+ }
});
_change();
diff --git a/src/js/manage.js b/src/js/manage.js
index d631d0e..e3af1f9 100644
--- a/src/js/manage.js
+++ b/src/js/manage.js
@@ -3,15 +3,17 @@
var manage = new function(){
var that = this;
var j_index_page;
+
+ var manage_node = new vus.node('manage');
+ var dash_node = new vus.node('dash');
+ var square_node = new vus.node('square');
+ var problem_node = new vus.node('problem');
- that.ready = function(){
- var manage_node = new vus.node('manage');
- var square_node = new vus.node('square');
- var problem_node = new vus.node('problem');
-
- var j_tabnav_square;
- var j_tabnav_problem;
+ var j_tabnav_dash;
+ var j_tabnav_square;
+ var j_tabnav_problem;
+ that.ready = function(){
j_index_page = $('#index_page');
manage_node.url_chg = function(direct,url_upart,url_dpart,param){
@@ -19,17 +21,72 @@ var manage = new function(){
index.set_menu('管理');
index.clear_tabnav();
+ j_tabnav_dash = index.add_tabnav('儀表板','/toj/manage/dash/');
j_tabnav_square = index.add_tabnav('方塊','/toj/manage/square/');
j_tabnav_problem = index.add_tabnav('題目','/toj/manage/problem/');
-
- com.call_backend('core/user/','list_auth',function(result){
- console.log(result);
- });
}
return 'cont';
};
com.vus_root.child_set(manage_node);
+
+ dash_node.url_chg = function(direct,url_upart,url_dpart,param){
+ if(direct == 'in'){
+ j_tabnav_dash.active();
+
+ com.loadpage('/toj/html/manage_dash.html').done(function(){
+ var i;
+ var j_accesslist = j_index_page.find('table.accesslist');
+ var j_item;
+ var j_permission;
+ var accessid;
+ var authlist;
+ var autho;
+
+ authlist = new Array();
+ for(accessid in user.authmap){
+ authlist.push(user.authmap[accessid]);
+ }
+ authlist.sort(function(a,b){
+ return a.accessid - b.accessid;
+ });
+
+ for(i = 0;i < authlist.length;i++){
+ autho = authlist[i];
+
+ j_item = $('<tr><td class="accessid"></td><td class="permission"></td></tr>');
+ j_item.find('td.accessid').text(autho.accessid);
+ j_permission = j_item.find('td.permission');
+
+ if(com.check_access(autho.accessid,ACCESS_READ)){
+ j_permission.append($('<span class="label label-success">READ</span>'));
+ }
+ if(com.check_access(autho.accessid,ACCESS_WRITE)){
+ j_permission.append($('<span class="label label-warning">WRITE</span>'));
+ }
+ if(com.check_access(autho.accessid,ACCESS_CREATE)){
+ j_permission.append($('<span class="label label-info">CREATE</span>'));
+ }
+ if(com.check_access(autho.accessid,ACCESS_DELETE)){
+ j_permission.append($('<span class="label label-important">DELETE</span>'));
+ }
+ if(com.check_access(autho.accessid,ACCESS_SETPER)){
+ j_permission.append($('<span class="label label-inverse">SETPER</span>'));
+ }
+ if(com.check_access(autho.accessid,ACCESS_EXECUTE)){
+ j_permission.append($('<span class="label">EXECUTE</span>'));
+ }
+
+ j_accesslist.append(j_item);
+ }
+ });
+ }else if(direct == 'out'){
+
+ }
+
+ return 'cont';
+ };
+ manage_node.child_set(dash_node);
square_node.url_chg = function(direct,url_upart,url_dpart,param){
var j_create;
@@ -41,8 +98,9 @@ var manage = new function(){
var set_tagbox_cate;
var set_data;
- function _item_set(j_item,id,title,start_time,end_time,cateid,intro,logo,hidden){
+ function _item_set(j_item,id,title,hidden,start_time,end_time,cateid,intro,logo){
var i;
+ var j_hidden;
var j_cate;
var j_label;
@@ -55,6 +113,15 @@ var manage = new function(){
if(end_time != null){
j_item.find('td.time > div.end').text('└→' + com.get_timestring(end_time));
}
+
+ j_hidden = j_item.find('td.hid');
+ if(hidden == false){
+ j_hidden.text('公開');
+ j_hidden.removeClass('text-warning');
+ }else{
+ j_hidden.text('隱藏');
+ j_hidden.addClass('text-warning');
+ }
j_cate = j_item.find('td.cate');
j_cate.empty();
@@ -68,12 +135,12 @@ var manage = new function(){
set_data = {
'id':id,
'title':title,
+ 'hidden':hidden,
'start_time':start_time,
'end_time':end_time,
'cateid':cateid,
'intro':intro,
'logo':logo,
- 'hidden':hidden
};
j_set.modal('show');
@@ -88,10 +155,10 @@ var manage = new function(){
},id);
});
}
- function _item_create(id,title,start_time,end_time,cateid,intro,logo,hidden){
- var j_item = $('<tr class="item"><td class="id"></td><td class="title"><td class="time"><div class="time start"></div><div class="time end"></div</td></td><td class="cate"></td><td class="oper"><div class="btn-group"><button class="btn btn-small set"><i class="icon-cog"></i></button><button class="btn btn-small del"><i class="icon-trash"></i></button></div></td></tr>');
+ function _item_create(id,title,hidden,start_time,end_time,cateid,intro,logo){
+ var j_item = $('<tr class="item"><td class="id"></td><td class="title"><td class="time"><div class="time start"></div><div class="time end"></div</td><td class="hid"></td></td><td class="cate"></td><td class="oper"><div class="btn-group"><button class="btn btn-small set"><i class="icon-cog"></i></button><button class="btn btn-small del"><i class="icon-trash"></i></button></div></td></tr>');
- _item_set(j_item,id,title,start_time,end_time,cateid,intro,logo,hidden);
+ _item_set(j_item,id,title,hidden,start_time,end_time,cateid,intro,logo);
return j_item;
}
@@ -103,6 +170,7 @@ var manage = new function(){
if(com.is_callerr(result)){
index.add_alert('','警告','管理發生錯誤');
+ defer.reject(data);
}else{
defer.resolve(data);
}
@@ -157,24 +225,24 @@ var manage = new function(){
_item_set($(items[i]),sqo.sqid,
sqo.title,
+ sqo.hidden,
sqo.start_time,
sqo.end_time,
sqo.cateid,
sqo.intro,
- sqo.logo,
- sqo.hidden);
+ sqo.logo);
}
for(;i < data.length;i++){
sqo = data[i];
j_item = _item_create(sqo.sqid,
sqo.title,
+ sqo.hidden,
sqo.start_time,
sqo.end_time,
sqo.cateid,
sqo.intro,
- sqo.logo,
- sqo.hidden);
+ sqo.logo);
j_list.append(j_item);
}
for(;i < items.length;i++){
@@ -189,6 +257,7 @@ var manage = new function(){
if(direct == 'in'){
com.loadpage('/toj/html/manage_square.html').done(function(){
var j_catebox;
+ var j_button;
j_tabnav_square.active();
@@ -200,6 +269,14 @@ var manage = new function(){
create_tagbox_cate = j_catebox.tagbox({'words':[],'restrict':true,'duplicate':false});
j_catebox.find('input').attr('placeholder','+加入分類');
+ j_button = j_index_page.find('div.oper > button.create');
+ if(com.check_access(ACCESSID_SQUAREMG,ACCESS_CREATE)){
+ j_button.show();
+ }
+ j_index_page.find('div.oper > button.create').on('click',function(e){
+ j_create.modal('show');
+ });
+
j_create.find('[name="logo"]').on('change',function(e){
var url;
var j_logo = j_create.find('img.logo');
@@ -399,10 +476,6 @@ var manage = new function(){
set_tagbox_cate.clear();
});
- j_index_page.find('div.oper > button.create').on('click',function(e){
- j_create.modal('show');
- });
-
_update_list();
});
}
@@ -417,14 +490,25 @@ var manage = new function(){
var j_list;
var set_data;
- function _item_set(j_item,proid,title,pmodid){
+ function _item_set(j_item,proid,title,hidden,pmodid){
+ var j_hidden;
+
j_item.find('td.proid').text(proid);
j_item.find('td.title').text(title);
+ j_hidden = j_item.find('td.hid');
+ if(hidden == false){
+ j_hidden.text('公開');
+ j_hidden.removeClass('text-warning');
+ }else{
+ j_hidden.text('隱藏');
+ j_hidden.addClass('text-warning');
+ }
j_item.find('button.set').on('click',function(e){
set_data = {
'proid':proid,
'title':title,
+ 'hidden':hidden
};
j_set.modal('show');
@@ -439,10 +523,10 @@ var manage = new function(){
},proid);
});
}
- function _item_create(proid,title,pmodid){
- var j_item = $('<tr><td class="proid"></td><td class="title"></td><td class="oper"><div class="btn-group"><button class="btn btn-small set"><i class="icon-cog"></i></button><button class="btn btn-small del"><i class="icon-trash"></i></button></div></td></tr>')
+ function _item_create(proid,title,hidden,pmodid){
+ var j_item = $('<tr><td class="proid"></td><td class="title"></td><td class="hid"></td><td class="oper"><div class="btn-group"><button class="btn btn-small set"><i class="icon-cog"></i></button><button class="btn btn-small del"><i class="icon-trash"></i></button></div></td></tr>');
- _item_set(j_item,proid,title,pmodid);
+ _item_set(j_item,proid,title,hidden,pmodid);
return j_item;
}
@@ -457,6 +541,7 @@ var manage = new function(){
if(com.is_callerr(result)){
index.add_alert('','警告','管理發生錯誤');
+ defer.reject(data);
}else{
defer.resolve(data);
}
@@ -477,7 +562,7 @@ var manage = new function(){
j_list.empty();
for(i = 0;i < data.length;i++){
proo = data[i];
- j_item = _item_create(proo.proid,proo.title,proo.pmodid);
+ j_item = _item_create(proo.proid,proo.title,proo.hidden,proo.pmodid);
j_list.append(j_item);
}
}
@@ -488,11 +573,17 @@ var manage = new function(){
j_tabnav_problem.active();
com.loadpage('/toj/html/manage_problem.html').done(function(){
+ var j_button;
+
j_create = j_index_page.find('div.create');
j_set = j_index_page.find('div.set');
j_list = j_index_page.find('table.list > tbody');
- j_index_page.find('button.create').on('click',function(e){
+ j_button = j_index_page.find('div.oper > button.create');
+ if(com.check_access(ACCESSID_PROBLEMMG,ACCESS_CREATE)){
+ j_button.show();
+ }
+ j_button.on('click',function(e){
j_create.modal('show');
});
@@ -519,6 +610,13 @@ var manage = new function(){
j_create.find('button.submit').on('click',function(e){
var title = j_create.find('[name="title"]').val();
var pmodid = parseInt(j_create.find('[name="pmod"]').val());
+ var hidden = j_create.find('[name="hidden"]').val();
+
+ if(hidden == '0'){
+ hidden = false;
+ }else{
+ hidden = true;
+ }
com.call_backend('core/problem/','create_problem',function(result){
var data = result.data;
@@ -541,7 +639,7 @@ var manage = new function(){
index.add_alert('alert-success','成功','題目已建立');
_update_list();
}
- },title,pmodid);
+ },title,hidden,pmodid);
});
j_create.find('button.cancel').on('click',function(e){
j_create.modal('hide');
@@ -549,12 +647,24 @@ var manage = new function(){
j_set.on('show',function(e){
j_set.find('[name="title"]').val(set_data.title);
+ if(set_data.hidden == false){
+ j_set.find('[name="hidden"]').val(0);
+ }else{
+ j_set.find('[name="hidden"]').val(1);
+ }
});
j_set.on('hide',function(e){
j_set.find('input').val('');
});
j_set.find('button.submit').on('click',function(e){
var title = j_set.find('[name="title"]').val();
+ var hidden = j_set.find('[name="hidden"]').val();
+
+ if(hidden == '0'){
+ hidden = false;
+ }else{
+ hidden = true;
+ }
com.call_backend('core/problem/','set_problem',function(result){
var data = result.data;
@@ -577,7 +687,7 @@ var manage = new function(){
index.add_alert('alert-success','成功','題目已設定');
_update_list();
}
- },set_data.proid,title);
+ },set_data.proid,title,hidden);
});
j_set.find('button.cancel').on('click',function(e){
j_set.modal('hide');
diff --git a/src/js/mod.js b/src/js/mod.js
index e626ff9..db1c617 100644
--- a/src/js/mod.js
+++ b/src/js/mod.js
@@ -1,11 +1,13 @@
+'use strict'
+
var mod = new function(){
var that = this;
-
- that.curr_sqmod = null;
+ var sq_node = new vus.node('sq');
+ var pro_node = new vus.node('pro');
+ var curr_sqmod = null;
+ var curr_pmod = null;
that.ready = function(){
- var sq_node = new vus.node('sq');
-
sq_node.url_chg = function(direct,url_upart,url_dpart,param){
var sqid;
@@ -29,21 +31,60 @@ var mod = new function(){
$.getScript('/toj/sqmod/' + sqmodname + '/js/' + sqmodname + '.js',function(script,status,xhr){
var sqid_node;
- curr_sqmod = sqmodname;
-
sqid_node = new vus.node(sqid);
- eval(sqmodname + '(sqid_node);');
+ eval('curr_sqmod = new ' + sqmodname + '(sqid_node);');
sq_node.child_set(sqid_node);
});
}
},parseInt(sqid));
}else if(direct == 'out'){
- eval(curr_sqmod + '.unload()');
+ curr_sqmod.unload();
+ curr_sqmod = null;
}
return 'cont';
};
com.vus_root.child_set(sq_node);
+
+ pro_node.url_chg = function(direct,url_upart,url_dpart,param){
+ var proid;
+
+ if(direct == 'in'){
+ index.set_menu('題目');
+ index.clear_tabnav();
+
+ proid = url_dpart[0];
+ pro_node.child_delayset(proid);
+
+ com.call_backend('core/problem/','get_problem_info',function(result){
+ var data = result.data;
+ var pmodname;
+
+ if(com.is_callerr(result)){
+ index.add_alert('','警告','開啓題目發生錯誤');
+ }else{
+ index.set_title(data.title);
+
+ pmodname = escape(data.pmodname);
+ $.getScript('/toj/pmod/' + pmodname + '/js/' + pmodname + '.js',function(script,status,xhr){
+ var proid_node;
+
+ proid_node = new vus.node(proid);
+ eval('curr_pmod = new ' + pmodname + '(parseInt(proid),proid_node);');
+
+ pro_node.child_set(proid_node);
+ });
+ }
+ },parseInt(proid));
+
+ }else if(direct == 'out'){
+ curr_pmod.unload();
+ curr_pmod = null;
+ }
+
+ return 'cont';
+ };
+ com.vus_root.child_set(pro_node);
};
}
diff --git a/src/js/notice.js b/src/js/notice.js
index 3b7dff1..f7a4f41 100644
--- a/src/js/notice.js
+++ b/src/js/notice.js
@@ -45,23 +45,25 @@ var notice = new function(){
});
});
- 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');
- });
+ user.datachg_callback.add(function(type){
+ if(type == 'login'){
+ 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();
+ j_noticetag.show();
+ }
});
};
};
diff --git a/src/js/square.js b/src/js/square.js
index 9b5f684..6e71acd 100644
--- a/src/js/square.js
+++ b/src/js/square.js
@@ -4,213 +4,222 @@ var square = new function(){
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;
+ var square_node = new vus.node('square');
+ var user_node = new vus.node('user');
+ var index_node = new vus.node('index');
- function box_set(j_box,id,logo,title,start_time,end_time,intro,active){
- var j_oper;
+ function box_set(j_box,id,logo,title,start_time,end_time,intro,active){
+ var j_oper;
- j_box.attr('boxid',id);
+ j_box.attr('boxid',id);
- j_box.find('div.logo').css('background-image','url(\'' + logo + '\')');
- j_box.find('h5.title').text(title);
- j_box.find('p.intro').text(intro);
+ j_box.find('div.logo').css('background-image','url(\'' + logo + '\')');
+ j_box.find('h5.title').text(title);
+ j_box.find('p.intro').text(intro);
- if(start_time != null){
- j_box.find('div.start').text('┌─' + com.get_timestring(start_time));
- }
- if(end_time != null){
- j_box.find('div.end').text('└→' + com.get_timestring(end_time));
- }
+ if(start_time != null){
+ j_box.find('div.start').text('┌─' + com.get_timestring(start_time));
+ }
+ if(end_time != null){
+ j_box.find('div.end').text('└→' + com.get_timestring(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><a class="btn open">開啓</a>');
- 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','錯誤','操作方塊發生錯誤');
- }
+ 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><a class="btn open">開啓</a>');
+ 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{
- box_update(id,logo,title,start_time,end_time,intro,data.active);
+ index.add_alert('alert-error','錯誤','操作方塊發生錯誤');
}
- },id);
- });
+ }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><a class="btn open">開啓</a>');
}else{
- if(active== true){
- j_oper.append('<button class="btn btn-success quit" data-loading-text="處理中">退出</button><a class="btn open">開啓</a>');
- }else{
- j_oper.append('<button class="btn btn-warning quit" data-loading-text="處理中">取消申請</button><a class="btn open">開啓</a>');
- }
+ j_oper.append('<button class="btn btn-warning quit" data-loading-text="處理中">取消申請</button><a class="btn open">開啓</a>');
+ }
- j_oper.find('button.quit').on('click',function(e){
- $(this).button('loading');
+ 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;
+ 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','錯誤','操作方塊發生錯誤');
- }
+ if(com.is_callerr(result)){
+ if(data == 'Eno_such_sqid'){
+ index.add_alert('alert-error','錯誤','方塊不存在');
}else{
- box_update(id,logo,title,start_time,end_time,intro,null);
+ index.add_alert('alert-error','錯誤','操作方塊發生錯誤');
}
- },id);
- });
- }
-
- j_oper.find('a.open').attr('href','/toj/sq/' + id + '/');
+ }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);
- }
+ j_oper.find('a.open').attr('href','/toj/sq/' + 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"><div class="logo"></div><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>');
+ }
+ function box_create(id,logo,title,start_time,end_time,intro,active){
+ var j_box = $('<div class="span5 box"><div class="logo"></div><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);
+ 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.data('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>');
+ return j_box;
+ }
+ function catebox_set(j_box,cateid,catename){
+ j_box.data('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);
+ catebox_set(j_box,cateid,catename);
- return j_box;
- }
+ return j_box;
+ }
- function catelist_update(){
- var defer = $.Deferred();
+ function catelist_update(){
+ var defer = $.Deferred();
- com.call_backend('core/square/','list_category',function(result){
- var data = result.data;
+ 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 show_list;
+ 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('','警告','方塊目錄發生錯誤');
- 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;
+ show_list = new Array();
+ for(i = 0;i < data.length;i++){
+ sqo = data[i];
+ if((joined == false || sqo.active != null) && sqo.hidden == false){
+ show_list.push(sqo);
}
+ }
+ if(show_list.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 = com.get_defaultimg(sqo.sqid);
- }
-
- j_box = box_create(sqo.sqid,logo,sqo.title,sqo.start_time,sqo.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();
+ 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 < show_list.length;i++){
+ sqo = show_list[i];
+ if((joined == true && sqo.active == null) || sqo.hidden == true){
+ continue;
}
- if(j_run.children().length > 0){
- j_catebox.find('h4.run').show();
- j_run.show();
+
+ if((logo = sqo.logo) == ''){
+ logo = com.get_defaultimg(sqo.sqid);
}
- if(j_past.children().length > 0){
- j_catebox.find('h4.past').show();
- j_past.show();
+
+ j_box = box_create(sqo.sqid,logo,sqo.title,sqo.start_time,sqo.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();
}
- }}(cateo),cateo.cateid);
- }
- }
- function update(joined){
- catelist_update().done(function(catelist){
- indexlist_update(catelist,joined);
- });
+ 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);
+ });
+ }
+
+ that.ready = function(){
+ var user_tabnav;
+ var index_tabnav;
j_index_page = $('#index_page');
diff --git a/src/js/user.js b/src/js/user.js
index 9a18a1a..73fdba0 100644
--- a/src/js/user.js
+++ b/src/js/user.js
@@ -3,15 +3,19 @@ var user = new function(){
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.login_callback = $.Callbacks();
+ 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;
@@ -33,9 +37,7 @@ var user = new function(){
document.cookie = 'hash=' + hash + ';path=/;expires=' + expire.toUTCString();
imc.Auth.change_current_iden(idendesc);
- _set_user_data(uid).done(function(){
- that.login_callback.fire();
- });
+ _set_user(uid);
};
function _logout(){
document.cookie = 'uid=;path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT';
@@ -54,11 +56,30 @@ var user = new function(){
return defer.promise();
};
- function _set_user_data(uid){
+ function _get_user_authlist(uid){
var defer = $.Deferred();
- _get_user_info(uid).done(function(data){
- var j_a;
+ 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;
@@ -67,12 +88,16 @@ var user = new function(){
that.avatar = data.avatar;
that.cover = data.cover;
- j_a = $('#index_header li.nickname > a');
- j_a.text(that.nickname);
- j_a.attr('href','/toj/user:' + that.uid + '/main/');
+ 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(data){
+ }).fail(function(){
defer.reject();
});
@@ -81,9 +106,11 @@ var user = new function(){
j_index_page = $('#index_page');
- if((uid = imc.Auth.get_current_iden().uid) != undefined){
- _set_user_data(uid).done(function(){
- that.login_callback.fire();
+ if((uid = imc.Auth.get_current_iden().uid) == undefined){
+ defer.resolve();
+ }else{
+ _set_user(uid).done(function(){
+ defer.resolve();
});
}
@@ -119,26 +146,6 @@ var user = new function(){
var j_menutag = $('#index_menutag');
var j_paneltag = $('#index_paneltag');
- 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);
- }
-
- __ani();*/
- j_win.scrollTop(y);
- }
-
function _active(){
j_header.addClass('force');
j_header.addClass('active');
@@ -193,7 +200,7 @@ var user = new function(){
});
_active();
- _tmp(500);
+ j_win.scrollTop(500);
j_index_page.show();
j_index_page.css('visibility','visible');
});
@@ -294,7 +301,7 @@ var user = new function(){
index.add_alert('alert-error','失敗',errmsg,true);
set_defer.reject();
}else{
- _set_user_data(that.uid);
+ _set_user(that.uid);
set_defer.resolve();
}
},that.uid,j_nickname.val(),j_email.val(),j_avatar.val(),j_aboutme.val(),j_cover.val());
@@ -454,5 +461,7 @@ var user = new function(){
}
};
com.vus_root.child_set(logout_node);
+
+ return defer.promise();
};
};