diff options
author | Yorhel <git@yorhel.nl> | 2009-04-01 08:49:59 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2009-04-01 08:49:59 +0200 |
commit | 33c6bd207473e8ce6ddfc0d19b34ccb139aa8521 (patch) | |
tree | d5714b79b3e02c77d78f43a1f4b34f7194068b14 /static | |
parent | 61c4d04980dc0376cf0032364a5952f8d828837f (diff) | |
parent | f35175b04fc9f54680ad2578a994177e4d280b09 (diff) |
Merge branch 'beta'2.3
Conflicts:
data/docs/4
Diffstat (limited to 'static')
-rw-r--r-- | static/f/forms.js | 214 | ||||
-rw-r--r-- | static/f/script.js | 139 | ||||
-rw-r--r-- | static/s/seinarukana/conf | 2 | ||||
-rw-r--r-- | static/s/term/conf | 2 |
4 files changed, 275 insertions, 82 deletions
diff --git a/static/f/forms.js b/static/f/forms.js index e25a880c..b9770203 100644 --- a/static/f/forms.js +++ b/static/f/forms.js @@ -7,77 +7,6 @@ function qq(v) { function shorten(v, l) { return qq(v.length > l ? v.substr(0, l-3)+'...' : v); } -var http_request = false; -function ajax(url, func) { - if(http_request) - http_request.abort(); - http_request = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); - if(http_request == null) { - alert("Your browse does not support the functionality this website requires."); - return; - } - http_request.onreadystatechange = function() { - if(!http_request || http_request.readyState != 4 || !http_request.responseText) - return; - if(http_request.status != 200) - return alert('Whoops, error! :('); - func(http_request); - }; - url += (url.indexOf('?')>=0 ? ';' : '?')+(Math.floor(Math.random()*999)+1); - http_request.open('GET', url, true); - http_request.send(null); -} - - - - - /************************\ - * C A T E G O R I E S * - \************************/ - - -function catLoad() { - var i; - var cats=[]; - var ct = x('categories'); - var l = ct.value.split(','); - for(i=0;i<l.length;i++) - cats[l[i].substr(0,3)] = Math.floor(l[i].substr(3,1)); - - l = x('jt_box_categories').getElementsByTagName('a'); - for(i=0;i<l.length;i++) { - if(l[i].id.substr(0, 4) != 'cat_') - continue; - catSet(l[i].id.substr(4), cats[l[i].id.substr(4)]||0); - l[i].onclick = function() { - var c = this.id.substr(4); - if(!cats[c]) cats[c] = 0; - if(c.substr(0,1) == 'p' || c == 'gaa' || c == 'gab' || c.substr(0,1) == 'h' || c.substr(0,1) == 'l' || c.substr(0,1) == 't') { - if(cats[c]++) - cats[c] = 0; - } else if(++cats[c] == 4) - cats[c] = 0; - catSet(c, cats[c]); - - // has to be ordered before serializing! - var r;l=[];i=0; - for(r in cats) - l[i++] = r; - l = l.sort(); - r=''; - for(i=0;i<l.length;i++) - if(cats[l[i]] > 0) - r+=(r?',':'')+l[i]+cats[l[i]]; - ct.value = r; - return false; - }; - } -} - -function catSet(id, rnk) { - x('cat_'+id).className = 'catlvl_'+rnk; - x('b_'+id).innerHTML = rnk; -} @@ -176,8 +105,10 @@ function dsSearch(obj) { // show/hide the ds_box div if(obj.value.length < 2) { - if(b) + if(b) { b.style.top = '-500px'; + b.innerHTML = '<b>Loading...</b>'; + } obj.selectedId = 0; return; } @@ -880,3 +811,142 @@ function vnpSerialize(type) { } + + + + + /****************************************************\ + * V I S U A L N O V E L T A G L I N K I N G * + \****************************************************/ + + +function tglLoad() { + var n = x('tagtable').getElementsByTagName('tfoot')[0].getElementsByTagName('input'); + dsInit(n[0], '/xml/tags.xml?q=', function(item, tr) { + var td = document.createElement('td'); + td.innerHTML = shorten(item.firstChild.nodeValue, 40); + if(item.getAttribute('meta') == 'yes') + td.innerHTML += ' <b class="grayedout">meta</b>'; + else if(item.getAttribute('state') == 0) + td.innerHTML += ' <b class="grayedout">awaiting moderation</b>'; + tr.appendChild(td); + }, function(item) { + return item.firstChild.nodeValue; + }, tglAdd); + n[1].onclick = tglAdd; + + tglStripe(); + var l = x('tagtable').getElementsByTagName('tbody')[0].getElementsByTagName('tr'); + for(var i=0; i<l.length;i++) { + var o = l[i].getElementsByTagName('td'); + tglSpoiler(o[2], parseInt(o[2].innerHTML)); + tglVoteBar(o[1], parseInt(o[1].innerHTML)); + } +} + +function tglSpoiler(obj, spoil) { + var r = '<select onchange="tglSerialize()">'; + for(var i=-1; i<=2; i++) + r += '<option value="'+i+'"'+(spoil==i?' selected="selected"':'')+'>' + +(i == -1 ? 'neutral' : i == 0 ? 'no spoiler' : i == 1 ? 'minor spoiler' : 'major spoiler') + +' </option>'; + obj.innerHTML = r+'</select>'; +} + +function tglVoteBar(obj, vote) { + var r = ''; + for(var i=-3;i<=3;i++) + r += '<a href="#" class="taglvl taglvl'+i+'" onmouseover="tglVoteBarSel(this, '+i+')"' + + ' onmouseout="tglVoteBarSel(this, '+vote+')" onclick="return tglVoteBar(this.parentNode, '+i+')"> </a>'; + obj.innerHTML = r; + tglVoteBarSel(obj, vote); + tglSerialize(); + return false; +} + +function tglVoteBarSel(obj, vote) { + if(obj.className.indexOf('taglvl') >= 0) + obj = obj.parentNode; + var l = obj.getElementsByTagName('a'); + var num; + for(var i=0; i<l.length; i++) { + if((num = l[i].className.replace(/^.*taglvl(-?[0-3]).*$/, "$1")) == l[i].className) + continue; + if(num == 0) + l[i].innerHTML = vote == 0 ? '-' : vote; + else if(num<0&&vote<=num || num>0&&vote>=num) { + if(l[i].className.indexOf('taglvlsel') < 0) + l[i].className += ' taglvlsel'; + } else + if(l[i].className.indexOf('taglvlsel') >= 0) + l[i].className = l[i].className.replace(/taglvlsel/, ''); + } +} + +function tglAdd() { + var n = x('tagtable').getElementsByTagName('tfoot')[0].getElementsByTagName('input'); + n[0].disabled = n[1].disabled = true; + n[1].value = 'loading...'; + ajax('/xml/tags.xml?q=name:'+encodeURIComponent(n[0].value), function(hr) { + n[0].disabled = n[1].disabled = false; + n[1].value = 'Add tag'; + n[0].value = ''; + + var items = hr.responseXML.getElementsByTagName('item'); + if(items.length < 1) + return alert('Item not found!'); + if(items[0].getAttribute('meta') == 'yes') + return alert('Can\'t use meta tags here!'); + var name = items[0].firstChild.nodeValue; + var l = x('tagtable').getElementsByTagName('a'); + for(var i=0; i<l.length; i++) + if(l[i].innerHTML == shorten(name, 40)) + return alert('Tag is already present!'); + + var tr = document.createElement('tr'); + var td = document.createElement('td'); + td.innerHTML = '<a href="/g'+items[0].getAttribute('id')+'">'+name+'</a>'; + td.className = 'tc1'; + tr.appendChild(td); + td = document.createElement('td'); + tglVoteBar(td, 2); + td.className = 'tc2'; + tr.appendChild(td); + td = document.createElement('td'); + tglSpoiler(td, -1); + td.className = 'tc3'; + tr.appendChild(td); + td = document.createElement('td'); + td.className = 'tc4'; + td.innerHTML = '-'; + tr.appendChild(td); + td = document.createElement('td'); + td.innerHTML = '-'; + td.className = 'tc5'; + tr.appendChild(td); + x('tagtable').getElementsByTagName('tbody')[0].appendChild(tr); + tglStripe(); + tglSerialize(); + }); +} + +function tglStripe() { + var l = x('tagtable').getElementsByTagName('tbody')[0].getElementsByTagName('tr'); + for(var i=0;i<l.length;i++) + l[i].className = i%2 ? 'odd' : ''; +} + +function tglSerialize() { + var r = ''; + var l = x('tagtable').getElementsByTagName('tbody')[0].getElementsByTagName('tr'); + for(var i=0; i<l.length;i++) { + var lnk = l[i].getElementsByTagName('a')[0].href; + var vt = l[i].getElementsByTagName('td')[1].getElementsByTagName('a'); + var id; + if((id = lnk.replace(/^.*g([1-9][0-9]*)$/, "$1")) != lnk && vt.length > 3 && vt[3].innerHTML != '-') + r += (r?' ':'')+id+','+vt[3].innerHTML+','+(l[i].getElementsByTagName('select')[0].selectedIndex-1); + } + x('taglinks').value = r; +} + + diff --git a/static/f/script.js b/static/f/script.js index 68d40f75..b555c662 100644 --- a/static/f/script.js +++ b/static/f/script.js @@ -12,6 +12,45 @@ if(document.addEventListener)document.addEventListener("DOMCont" function(){if(/loaded|complete/.test(document.readyState)){ clearInterval(t);f()}},10);window.onload=f;} +var http_request = false; +function ajax(url, func) { + if(http_request) + http_request.abort(); + http_request = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); + if(http_request == null) { + alert("Your browse does not support the functionality this website requires."); + return; + } + http_request.onreadystatechange = function() { + if(!http_request || http_request.readyState != 4 || !http_request.responseText) + return; + if(http_request.status != 200) + return alert('Whoops, error! :('); + func(http_request); + }; + url += (url.indexOf('?')>=0 ? ';' : '?')+(Math.floor(Math.random()*999)+1); + http_request.open('GET', url, true); + http_request.send(null); +} + +function setCookie(n,v) { + var date = new Date(); + date.setTime(date.getTime()+(365*24*60*60*1000)); + document.cookie = n+'='+v+'; expires='+date.toGMTString()+'; path=/'; +} +function readCookie(n) { + var l = document.cookie.split(';'); + for(var i=0; i<l.length; i++) { + var c = l[i]; + while(c.charAt(0) == ' ') + c = c.substring(1,c.length); + if(c.indexOf(n+'=') == 0) + return c.substring(n.length+1,c.length); + } + return null; +} + + @@ -37,7 +76,7 @@ function searchInit() { l = x('advoptions').getElementsByTagName('input'); for(i=0;i<l.length;i++) if(l[i].id.substr(0,5) == 'lang_' || l[i].id.substr(0,5) == 'plat_') - l[i].onclick = function() { + l[i].onclick = function() { searchParse(0, this.parentNode.getElementsByTagName('acronym')[0].title); }; @@ -221,17 +260,19 @@ function vlDropDown(e) { } while(o = o.offsetParent); ddx -= 185; - var cu = '/r'+tg.id.substr(6)+'/list?e='; + var cu = tg.id.substr(6); var st = tg.innerHTML.split(' / '); + if(st[0].indexOf('loading') >= 0) + return; var r = '<ul><li><b>Release status</b></li>'; for(var i=0;i<rstat.length;i++) - r += st[0] && st[0].indexOf(rstat[i]) >= 0 ? '<li><i>'+rstat[i]+'</i></li>' : '<li><a href="'+cu+'r'+i+'">'+rstat[i]+'</a></li>'; + r += st[0] && st[0].indexOf(rstat[i]) >= 0 ? '<li><i>'+rstat[i]+'</i></li>' : '<li><a href="#" onclick="return vlMod('+cu+',\'r'+i+'\')">'+rstat[i]+'</a></li>'; r += '</ul><ul><li><b>Play status</b></li>'; for(var i=0;i<vstat.length;i++) - r += st[1] && st[1].indexOf(vstat[i]) >= 0 ? '<li><i>'+vstat[i]+'</i></li>' : '<li><a href="'+cu+'v'+i+'">'+vstat[i]+'</a></li>'; + r += st[1] && st[1].indexOf(vstat[i]) >= 0 ? '<li><i>'+vstat[i]+'</i></li>' : '<li><a href="#" onclick="return vlMod('+cu+',\'v'+i+'\')">'+vstat[i]+'</a></li>'; r += '</ul>'; if(tg.innerHTML != '--') - r += '<ul class="full"><li><a href="'+cu+'del">Remove from VN list</a></li></ul>'; + r += '<ul class="full"><li><a href="#" onclick="return vlMod('+cu+',\'del\')">Remove from VN list</a></li></ul>'; o = document.createElement('div'); o.id = 'vldd'; @@ -243,6 +284,15 @@ function vlDropDown(e) { } } +function vlMod(rid, act) { + document.body.removeChild(x('vldd')); + x('rlsel_'+rid).innerHTML = '<b class="patch">loading...</b>'; + ajax('/xml/rlist.xml?id='+rid+';e='+act, function(hr) { + x('rlsel_'+rid).innerHTML = hr.responseXML.getElementsByTagName('rlist')[0].firstChild.nodeValue; + }); + return false; +} + @@ -296,6 +346,49 @@ function jtSel(which, nolink) { +/* Tag VN spoilers */ +/* lvl = null to not change lvl, lim = null to not change limit */ +function tvsSet(lvl, lim) { + var l = x('tagops').getElementsByTagName('a'); + for(var i=0;i<l.length;i++) { + if(i < 3) { + if(lvl == null) { /* determine level */ + if(l[i].className.indexOf('tsel') >= 0) + lvl = i; + } else { /* set level */ + if(i == lvl && l[i].className.indexOf('tsel') < 0) + l[i].className += ' tsel'; + else if(i != lvl && l[i].className.indexOf('tsel') >= 0) + l[i].className = l[i].className.replace(/tsel/, ''); + } + } else { + if(lim == null) { /* determine limit */ + if(l[i].className.indexOf('tsel') >= 0) + lim = i == 3; + } else { /* set limit */ + if((i == 3) == lim && l[i].className.indexOf('tsel') < 0) + l[i].className += ' tsel'; + else if((i == 3) != lim && l[i].className.indexOf('tsel') >= 0) + l[i].className = l[i].className.replace(/tsel/, ''); + } + } + } + + l = x('vntags').getElementsByTagName('span'); + lim = lim ? 15 : 999; + var s=0; + for(i=0;i<l.length;i++) { + if((lvl < l[i].className.substr(6, 1) || s>=lim) && l[i].className.indexOf('hidden') < 0) + l[i].className += ' hidden'; + if(lvl >= l[i].className.substr(6, 1) && ++s<=lim && l[i].className.indexOf('hidden') >= 0) + l[i].className = l[i].className.replace(/hidden/, ''); + } + return false; +} + + + + /* O N L O A D E V E N T */ DOMLoad(function() { @@ -362,7 +455,9 @@ DOMLoad(function() { if(this.selectedIndex != 0) location.href = location.href.replace(/\.[0-9]+/, '')+'/list?e='+this.options[this.selectedIndex].value; }; + // User VN list + // (might want to make this a bit more generic, as it's now also used for the user tag list) i = x('relhidall'); if(i) { var l = document.getElementsByTagName('tr'); @@ -443,8 +538,28 @@ DOMLoad(function() { break; } + // VN tag spoiler options + if(x('tagops')) { + l = x('tagops').getElementsByTagName('a'); + for(i=0;i<l.length;i++) + l[i].onclick = function() { + var l = x('tagops').getElementsByTagName('a'); + var sel = 0; + for(var i=0;i<l.length;i++) + if(l[i] == this) { + if(i < 3) { + tvsSet(i, null); + setCookie('tagspoil', i); + } else + tvsSet(null, i==3?true:false); + } + return false; + }; + tvsSet(readCookie('tagspoil'), true); + } + // Javascript tabs - if(x('jt_select')) + if(x('jt_select')) jtInit(); // spoiler tags @@ -455,9 +570,15 @@ DOMLoad(function() { l[i].onmouseout = function() { this.className = 'spoiler' }; } + // Are we really vndb? + if(location.hostname != 'vndb.org') { + var d = document.createElement('div'); + d.setAttribute('id', 'debug'); + d.innerHTML = '<h2>This is not VNDB!</h2>The real VNDB is <a href="http://vndb.org/">here</a>.'; + document.body.appendChild(d); + } + // forms.js - if(x('categories')) - catLoad(); if(x('relations')) relLoad(); if(x('jt_box_screenshots')) @@ -468,6 +589,8 @@ DOMLoad(function() { vnpLoad('vn'); if(x('jt_box_producers')) vnpLoad('producers'); + if(x('taglinks')) + tglLoad(); // spam protection on all forms if(document.forms.length >= 1) diff --git a/static/s/seinarukana/conf b/static/s/seinarukana/conf index 6c2fb3a5..11f1f145 100644 --- a/static/s/seinarukana/conf +++ b/static/s/seinarukana/conf @@ -6,7 +6,7 @@ name Seinarukana (white) // text maintext #131838 // primary text color (also used for the menu links) grayedout #fc8e77 //#fcdfd9 // color used for grayed-out/non-important things -standout #a5e2f2 // color of 'stand-out' text +standout #e93d71 //#a5e2f2 // color of 'stand-out' text link #5a5fc7 //#9fa1c7 // primary link color (not used for the menu links) statok #424d81 // generic 'ok' text color (used for vnlist statuses & category browser) statnok #a43462 // generoc 'not ok' text color (used for above, and as border for NSFW screenshots) diff --git a/static/s/term/conf b/static/s/term/conf index 19bb5c80..64530d2c 100644 --- a/static/s/term/conf +++ b/static/s/term/conf @@ -2,7 +2,7 @@ name Neon (black) // text maintext #0f0 -grayedout #444 +grayedout #aaa standout #f00 link #ff0 statok #0c0 |