diff options
Diffstat (limited to 'src/js')
-rw-r--r-- | src/js/com.js | 22 | ||||
-rw-r--r-- | src/js/imc.js | 19 | ||||
-rw-r--r-- | src/js/index.js | 32 | ||||
-rw-r--r-- | src/js/manage.js | 174 | ||||
-rw-r--r-- | src/js/mod.js | 57 | ||||
-rw-r--r-- | src/js/notice.js | 30 | ||||
-rw-r--r-- | src/js/square.js | 357 | ||||
-rw-r--r-- | src/js/user.js | 81 |
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(); }; }; |