summaryrefslogtreecommitdiff
path: root/static
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2009-04-01 08:49:59 +0200
committerYorhel <git@yorhel.nl>2009-04-01 08:49:59 +0200
commit33c6bd207473e8ce6ddfc0d19b34ccb139aa8521 (patch)
treed5714b79b3e02c77d78f43a1f4b34f7194068b14 /static
parent61c4d04980dc0376cf0032364a5952f8d828837f (diff)
parentf35175b04fc9f54680ad2578a994177e4d280b09 (diff)
Merge branch 'beta'2.3
Conflicts: data/docs/4
Diffstat (limited to 'static')
-rw-r--r--static/f/forms.js214
-rw-r--r--static/f/script.js139
-rw-r--r--static/s/seinarukana/conf2
-rw-r--r--static/s/term/conf2
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')
+ +'&nbsp;</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+')">&nbsp;</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