diff options
Diffstat (limited to 'toj/jcs/common.js')
-rw-r--r-- | toj/jcs/common.js | 336 |
1 files changed, 336 insertions, 0 deletions
diff --git a/toj/jcs/common.js b/toj/jcs/common.js new file mode 100644 index 0000000..84468e3 --- /dev/null +++ b/toj/jcs/common.js @@ -0,0 +1,336 @@ +var RESULTMAP = {0:'AC',1:'WA',2:'TLE',3:'MLE',4:'RF',5:'RE',6:'CE',7:'ERR',100:'WAIT'}; + +var USER_PER_USER = 0x00000001; +var USER_PER_PROCREATOR = 0x00000002; +var USER_PER_PROADMIN = 0x00000004; + +var USER_LEVEL_USER = 0x00000001; +var USER_LEVEL_PROCREATOR = 0x00000003; +var USER_LEVEL_PROADMIN = 0x00000007; +var USER_LEVEL_ADMIN = 0x0000ffff; +var USER_LEVEL_SUPERADMIN = -1; + +var __extend = function(child,parent){ + child.prototype.__super = parent; +}; + +var common = { + page_list:new Array(), + url_prev:null, + url_curr:null, + mbox_curr:null, + mbox_defer:null, + + init:function(){ + var i; + var url; + var urlpart; + + urlpart = location.href.split('?'); + if(urlpart[0].search(/\/$/) == -1){ + url = urlpart[0] + '/'; + if(urlpart.length > 1){ + url = url + '?'; + for(i = 1;i < urlpart.length;i++){ + url = url + urlpart[i]; + } + } + window.history.replaceState(null,document.title,url); + } + + common.url_curr = location.href; + + $(document).on('click','a',function(e){ + common.pushurl($(this).attr('href')); + return false; + }); + $(document).on('keyup',function(e){ + if(e.which == 27){ + common.hidembox(false); + } + }); + }, + + exheight:function(){ + var i; + var es; + var extop; + var exbottom; + var j_e; + var j_parent; + + es = $('[exheight=true]'); + for(i = 0;i < es.length;i++){ + j_e = $(es[i]); + if((extop = j_e.attr('extop')) == undefined){ + extop = j_e.css('top').match(/(.+)px/)[1]; + } + if((exbottom = j_e.attr('exbottom')) == undefined){ + exbottom = 0; + } + extop = parseInt(extop); + exbottom = parseInt(exbottom); + + j_e.css('height',($(window).height() - (extop + exbottom) + 'px')); + } + }, + getcookie:function(){ + var ret; + var i; + var part; + var subpart; + + ret = new Array(); + part = document.cookie.split(';'); + for(i = 0;i < part.length;i++){ + part[i] = part[i].replace(/\+/g,' '); + subpart = part[i].split('='); + ret[decodeURIComponent(subpart[0])] = decodeURIComponent(subpart[1]); + } + + return ret; + }, + getdate:function(str){ + var part; + part = str.match(/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/); + return new Date(part[1],parseInt(part[2]) - 1,part[3],part[4],part[5],part[6],0); + }, + getdatestring:function(date,secflag){ + var month; + var day; + var hr; + var min; + var sec; + + month = date.getMonth() + 1; + if(month < 10){ + month = '0' + month; + } + day = date.getDate(); + if(day < 10){ + day = '0' + day; + } + hr = date.getHours(); + if(hr < 10){ + hr = '0' + hr; + } + min = date.getMinutes(); + if(min < 10){ + min = '0' + min; + } + if(secflag == true){ + sec = date.getSeconds(); + if(sec < 10){ + sec = '0' + sec; + } + + return date.getFullYear() + '-' + month + '-' + day + ' ' + hr + ':' + min + ':' + sec; + }else{ + return date.getFullYear() + '-' + month + '-' + day + ' ' + hr + ':' + min; + } + }, + getlang:function(value){ + var i; + var ret; + var langlist = ['C++','JAVA','Pascal']; + + ret = new Array; + i = 0; + while(value > 0){ + if((value & 1) == 1){ + ret.push(langlist[i]); + } + value = value >> 1; + } + + return ret; + }, + + geturlpart:function(url){ + if(url == undefined){ + return location.href.match(/toj\/(.*)/)[1].split('/'); + }else{ + return url.match(/toj\/(.*)/)[1].split('/'); + } + }, + pushurl:function(url){ + common.url_prev = location.href; + window.history.pushState(null,document.title,url); + common.url_curr = location.href; + common.page_urlchange(); + }, + replaceurl:function(url){ + window.history.replaceState(null,document.title,url); + common.url_curr = location.href; + }, + prevurl:function(notpagename){ + if(common.url_prev == null || common.geturlpart(common.url_prev)[0] == notpagename){ + common.pushurl('/toj/home/'); + }else{ + common.pushurl(common.url_prev); + } + }, + page_urlchange:function(){ + var urlpart; + var pagename; + var pagename_prev; + + if(arguments.callee.reentrant == true){ + arguments.callee.hasnext = true; + return; + }else{ + arguments.callee.reentrant = true; + arguments.callee.hasnext = true; + } + + while(arguments.callee.hasnext){ + arguments.callee.hasnext = false; + + if(common.mbox_curr != null){ + common.hidembox(false); + } + + urlpart = common.geturlpart(); + pagename = urlpart[0]; + if(pagename == ''){ + common.replaceurl('/toj/home/'); + common.page_urlchange(); + continue; + }else if(!(pagename in common.page_list)){ + common.replaceurl('/toj/none/'); + common.page_urlchange(); + continue; + } + + if(common.url_prev != null){ + pagename_prev = common.geturlpart(common.url_prev)[0]; + if(pagename == pagename_prev){ + common.page_list[pagename].urlchange('same'); + }else{ + if(pagename_prev in common.page_list){ + common.page_list[pagename_prev].urlchange('out'); + } + common.page_list[pagename].urlchange('in'); + } + }else{ + common.page_list[pagename].urlchange('in'); + } + } + arguments.callee.reentrant = false; + }, + addpage:function(pagename,pageobj){ + common.page_list[pagename] = pageobj; + }, + removepage:function(pagename){ + delete common.page_list[pagename]; + }, + + showmbox:function(mboxobj){ + common.mbox_curr = mboxobj; + mboxobj.switchchange('in'); + common.mbox_defer = $.Deferred(); + return common.mbox_defer.promise(); + }, + hidembox:function(done){ + if(common.mbox_curr != null){ + common.mbox_curr.switchchange('out'); + common.mbox_curr = null; + if(done == true){ + common.mbox_defer.resolve(); + }else{ + common.mbox_defer.reject(); + } + } + } +}; + +var class_common_page = function(){ + var that = this; + that.tab_list = Array(); + that.tabname_curr = null; + + that.urlchange = function(direct){}; + that.fadein = function(j_e){ + j_e.stop().fadeIn('fast'); + }; + that.fadeout = function(j_e){ + j_e.stop().hide(); + }; + + that.tab_urlchange = function(tabname){ + if(arguments.callee.reentrant == true){ + arguments.callee.hasnext = true; + return; + }else{ + arguments.callee.reentrant = true; + arguments.callee.hasnext = true; + } + + while(arguments.callee.hasnext){ + arguments.callee.hasnext = false; + + if(tabname == null){ + if(that.tabname_curr in that.tab_list){ + index.lltab(that.tabname_curr); + that.tab_list[that.tabname_curr].urlchange('out'); + } + that.tab_list = new Array(); + that.tabname_curr = null; + continue; + } + + if(!(tabname in that.tab_list)){ + common.replaceurl('/toj/none/'); + common.page_urlchange(); + return; + } + + if(tabname == that.tabname_curr){ + that.tab_list[tabname].urlchange('same'); + }else{ + if(that.tabname_curr in that.tab_list){ + index.lltab(that.tabname_curr); + that.tab_list[that.tabname_curr].urlchange('out'); + } + that.tabname_curr = tabname; + index.hltab(tabname); + that.tab_list[tabname].urlchange('in'); + } + } + arguments.callee.reentrant = false; + }; + that.addtab = function(tabname,tabobj){ + that.tab_list[tabname] = tabobj; + }; + that.removetab = function(tabname){ + delete that.tab_list[tabname]; + }; +}; + +var class_common_tab = function(paobj){ + var that = this; + that.paobj = paobj; + + that.urlchange = function(direct){}; + that.fadein = function(j_e){ + j_e.stop().fadeIn('fast'); + }; + that.fadeout = function(j_e){ + j_e.stop().hide(); + }; +}; + +var class_common_mbox = function(paobj){ + var that = this; + that.paobj = paobj; + + that.switchchange = function(direct){}; + that.fadein = function(j_e){ + j_e.stop().show(); + index.showmask(); + }; + that.fadeout = function(j_e){ + index.hidemask(); + j_e.stop().hide(); + }; +} |