aboutsummaryrefslogtreecommitdiffstats
path: root/toj/jcs/common.js
diff options
context:
space:
mode:
Diffstat (limited to 'toj/jcs/common.js')
-rw-r--r--toj/jcs/common.js336
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();
+ };
+}