summaryrefslogtreecommitdiff
path: root/static
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2009-10-24 15:18:34 +0200
committerYorhel <git@yorhel.nl>2009-10-24 15:19:10 +0200
commit5251f791de0a0e1684107b373a08cfe3a17fc447 (patch)
tree53d39d0456b464bf4525020b8503ae2d0c98b1bc /static
parent8243d0b30d015c2464c34b02dd4e3ecf1c599762 (diff)
parenta8921887bddb7242a95e99b5177aff6ff6cd11be (diff)
Merge branch 'beta'2.8
+ ChangeLog update
Diffstat (limited to 'static')
-rw-r--r--static/f/forms.js955
-rw-r--r--static/f/icons.pngbin9403 -> 9474 bytes
-rw-r--r--static/f/script.js635
3 files changed, 0 insertions, 1590 deletions
diff --git a/static/f/forms.js b/static/f/forms.js
deleted file mode 100644
index ce9daab5..00000000
--- a/static/f/forms.js
+++ /dev/null
@@ -1,955 +0,0 @@
-// various form functions
-// called by script.js
-
-function qq(v) {
- return v.replace(/&/g,"&amp;").replace(/</,"&lt;").replace(/>/,"&gt;").replace(/"/g,'&quot;');
-}
-function shorten(v, l) {
- return qq(v.length > l ? v.substr(0, l-3)+'...' : v);
-}
-
-
-
-
-
-
- /***********************************\
- * D R O P D O W N S E A R C H *
- \***********************************/
-
-
-function dsInit(obj, url, trfunc, serfunc, retfunc, parfunc) {
- obj.setAttribute('autocomplete', 'off');
- obj.onkeydown = dsKeyDown;
- obj.onblur = function() {
- // timeout to make sure the tr.onclick event is called before we've hidden the object
- setTimeout(function () {
- if(x('ds_box'))
- x('ds_box').style.top = '-500px';
- }, 500)
- };
- // all local data is stored in the DOM input object
- obj.returnFunc = retfunc;
- obj.trFunc = trfunc;
- obj.serFunc = serfunc;
- obj.parFunc = parfunc;
- obj.searchURL = url;
- obj.selectedId = 0;
-}
-
-function dsKeyDown(ev) {
- var c = document.layers ? ev.which : document.all ? event.keyCode : ev.keyCode;
- var obj = this;
-
- if(c == 9) // tab
- return true;
-
- // do some processing when the enter key has been pressed
- if(c == 13) {
- var o = obj;
- while(o && o.nodeName.toLowerCase() != 'form')
- o = o.parentNode;
- if(o) {
- var oldsubmit = o.onsubmit;
- o.onsubmit = function() { return false };
- setTimeout(function() { o.onsubmit = oldsubmit }, 100);
- }
-
- if(obj.selectedId != 0)
- obj.value = obj.serFunc(x('ds_box_'+obj.selectedId).itemData, obj);
- if(obj.returnFunc)
- obj.returnFunc();
- if(x('ds_box'))
- x('ds_box').style.top = '-500px';
- obj.selectedId = 0;
-
- return false;
- }
-
- // process up/down keys
- if(x('ds_box') && (c == 38 || c == 40)) {
- var l = x('ds_box').getElementsByTagName('tr');
- if(l.length < 1)
- return true;
-
- if(obj.selectedId == 0) {
- if(c == 38) // up
- obj.selectedId = l[l.length-1].id.substr(7);
- else
- obj.selectedId = l[0].id.substr(7);
- } else {
- var sel = null;
- for(var i=0;i<l.length;i++)
- if(l[i].id == 'ds_box_'+obj.selectedId) {
- if(c == 38) // up
- sel = i>0 ? l[i-1] : l[l.length-1];
- else
- sel = l[i+1] ? l[i+1] : l[0];
- }
- obj.selectedId = sel.id.substr(7);
- }
-
- for(var i=0;i<l.length;i++)
- l[i].className = l[i].id == 'ds_box_'+obj.selectedId ? 'selected' : '';
- return true;
- }
-
- // this.value isn't available in a keydown event
- setTimeout(function() {
- dsSearch(obj);
- }, 10);
-
- return true;
-}
-
-function dsSearch(obj) {
- var b = x('ds_box');
- var v = obj.parFunc ? obj.parFunc(obj.value) : obj.value;
-
- // show/hide the ds_box div
- if(v.length < 2) {
- if(b) {
- b.style.top = '-500px';
- b.innerHTML = '<b>Loading...</b>';
- }
- obj.selectedId = 0;
- return;
- }
- if(!b) {
- b = document.createElement('div');
- b.setAttribute('id', 'ds_box');
- b.innerHTML = '<b>Loading...</b>';
- document.body.appendChild(b);
- }
-
- // position the div
- var ddx=0;
- var ddy=obj.offsetHeight;
- var o = obj;
- do {
- ddx += o.offsetLeft;
- ddy += o.offsetTop;
- } while(o = o.offsetParent);
-
- b.style.position = 'absolute';
- b.style.left = ddx+'px';
- b.style.top = ddy+'px';
- b.style.width = obj.offsetWidth+'px';
-
- // perform search
- ajax(obj.searchURL + encodeURIComponent(v), function(hr) {
- dsResults(hr, obj);
- });
-}
-
-function dsResults(hr, obj) {
- var l = hr.responseXML.getElementsByTagName('item');
- var b = x('ds_box');
- if(l.length < 1) {
- b.innerHTML = '<b>No results...</b>';
- obj.selectedId = 0;
- return;
- }
-
- b.innerHTML = '<table><tbody></tbody></table>';
- tb = b.getElementsByTagName('tbody')[0];
- for(var i=0;i<l.length;i++) {
- var id = l[i].getAttribute('id');
- var tr = document.createElement('tr');
- tr.setAttribute('id', 'ds_box_'+id);
- tr.itemData = l[i];
- if(obj.selectedId == id)
- tr.setAttribute('class', 'selected');
- tr.onmouseover = function() {
- obj.selectedId = this.id.substr(7);
- var l = x('ds_box').getElementsByTagName('tr');
- for(var i=0;i<l.length;i++)
- l[i].className = l[i].id == 'ds_box_'+obj.selectedId ? 'selected' : '';
- };
- tr.onclick = function() {
- obj.value = obj.serFunc(this.itemData, obj);
- if(obj.returnFunc)
- obj.returnFunc();
- if(x('ds_box'))
- x('ds_box').style.top = '-500px';
- obj.selectedId = 0;
- };
- obj.trFunc(l[i], tr);
- tb.appendChild(tr);
- }
-
- if(obj.selectedId != 0 && !x('ds_box_'+obj.selectedId))
- obj.selectedId = 0;
-}
-
-
-
-
-
-
- /*****************************\
- * V N R E L A T I O N S *
- \*****************************/
-
-
-var relTypes = [];
-function relLoad() {
- var i;var l;var o;
-
- // fetch the relation types from the add new relation selectbox
- l = x('relation_new').getElementsByTagName('select')[0].options;
- for(i=0;i<l.length;i++)
- relTypes[Math.floor(l[i].value)] = l[i].text;
-
- // read the current relations
- l = x('relations').value.split('|||');
- if(l[0]) {
- for(i=0;i<l.length;i++) {
- var rel = l[i].split(',', 3);
- relAdd(rel[0], rel[1], rel[2]);
- }
- }
- relEmpty();
-
- // make sure the title is up-to-date
- x('title').onchange = function() {
- l = x('jt_box_vn_rel').getElementsByTagName('td');
- for(i=0;i<l.length;i++)
- if(l[i].className == 'tc3')
- l[i].innerHTML = shorten(this.value, 40);
- };
-
- // bind the add-link
- x('relation_new').getElementsByTagName('a')[0].onclick = relFormAdd;
-
- // dropdown
- dsInit(x('relation_new').getElementsByTagName('input')[0], '/xml/vn.xml?q=', function(item, tr) {
- var td = document.createElement('td');
- td.innerHTML = 'v'+item.getAttribute('id');
- td.style.textAlign = 'right';
- td.style.paddingRight = '5px';
- tr.appendChild(td);
- td = document.createElement('td');
- td.innerHTML = shorten(item.firstChild.nodeValue, 40);
- tr.appendChild(td);
- }, function(item) {
- return 'v'+item.getAttribute('id')+':'+item.firstChild.nodeValue;
- }, relFormAdd);
-}
-
-function relAdd(rel, vid, title) {
- var o = document.createElement('tr');
- o.setAttribute('id', 'relation_tr_'+vid);
-
- var t = document.createElement('td');
- t.className = 'tc1';
- t.innerHTML = 'v'+vid+':<a href="/v'+vid+'">'+shorten(title, 40)+'</a>';
- o.appendChild(t);
-
- var options = '';
- for(var i=0;i<relTypes.length;i++)
- options += '<option value="'+i+'"'+(i == rel ? ' selected="selected"' : '')+'>'+qq(relTypes[i])+'</option>';
- t = document.createElement('td');
- t.className = 'tc2';
- t.innerHTML = 'is a <select onchange="relSerialize()">'+options+'</select> of';
- o.appendChild(t);
-
- t = document.createElement('td');
- t.className = 'tc3';
- t.innerHTML = shorten(x('title').value, 40);
- o.appendChild(t);
-
- t = document.createElement('td');
- t.className = 'tc4';
- t.innerHTML = '<a href="#" onclick="return relDel('+vid+')">del</a>';
- o.appendChild(t);
-
- x('relation_tbl').appendChild(o);
- relEmpty();
-}
-
-function relEmpty() {
- if(x('relation_tbl').getElementsByTagName('tr').length > 0) {
- if(x('relation_tr_none'))
- x('relation_tbl').removeChild(x('relation_tr_none'));
- return;
- }
- var o = document.createElement('tr');
- o.setAttribute('id', 'relation_tr_none');
- var t = document.createElement('td');
- t.colspan = 4;
- t.innerHTML = 'No relations selected.';
- o.appendChild(t);
- x('relation_tbl').appendChild(o);
-}
-
-function relSerialize() {
- var r='';
- var i;
- var l = x('relation_tbl').getElementsByTagName('tr');
- for(i=0;i<l.length;i++) {
- var title = l[i].getElementsByTagName('td')[0];
- title = title.innerText || title.textContent;
- title = title.substr(title.indexOf(':')+1);
- r += (r ? '|||' : '')
- +l[i].getElementsByTagName('select')[0].selectedIndex
- +','+l[i].id.substr(12)+','+title;
- }
- x('relations').value = r;
-}
-
-function relDel(vid) {
- x('relation_tbl').removeChild(x('relation_tr_'+vid));
- relSerialize();
- relEmpty();
- return false;
-}
-
-function relFormAdd() {
- var txt = x('relation_new').getElementsByTagName('input')[0];
- var sel = x('relation_new').getElementsByTagName('select')[0];
- var lnk = x('relation_new').getElementsByTagName('a')[0];
- var input = txt.value;
-
- if(!input.match(/^v[0-9]+/)) {
- alert('Visual novel textbox must start with an ID (e.g. v17)');
- return false;
- }
-
- txt.disabled = true;
- txt.value = 'loading...';
- sel.disabled = true;
- lnk.innerHTML = 'loading...';
-
- ajax('/xml/vn.xml?q='+encodeURIComponent(input), function(hr) {
- txt.disabled = false;
- txt.value = '';
- sel.disabled = false;
- lnk.innerHTML = 'add';
-
- var items = hr.responseXML.getElementsByTagName('item');
- if(items.length < 1)
- return alert('Visual novel not found!');
-
- var id = items[0].getAttribute('id');
- if(x('relation_tr_'+id))
- return alert('This visual novel has already been selected!');
-
- relAdd(sel.selectedIndex, id, items[0].firstChild.nodeValue);
- sel.selectedIndex = 0;
- relSerialize();
- });
- return false;
-}
-
-
-
-
-
-
- /*********************************\
- * V N S C R E E N S H O T S *
- \*********************************/
-
-
-var scrRel = [ [ 0, '-- select release --' ] ];
-var scrStaticURL;
-function scrLoad() {
- // load the releases
- scrStaticURL = x('scr_rel').className;
- var l = x('scr_rel').options;
- for(var i=0;i<l.length;i++)
- scrRel[i+1] = [ l[i].value, l[i].text ];
- x('scr_rel').parentNode.removeChild(x('scr_rel'));
-
- // load the current screenshots
- l = x('screenshots').value.split(' ');
- for(i=0;i<l.length;i++)
- if(l[i].length > 2) {
- var r = l[i].split(',');
- scrAdd(r[0], r[1], r[2]);
- }
- scrLast();
- scrCheckStatus();
-
- scrSetSubmit();
-}
-
-// give an error when submitting the form while still uploading an image
-function scrSetSubmit() {
- var o=x('screenshots');
- while(o.nodeName.toLowerCase() != 'form')
- o = o.parentNode;
- oldfunc = o.onsubmit;
- o.onsubmit = function() {
- var c=0;var r=0;
- var l = x('scr_table').getElementsByTagName('tr');
- for(var i=0;i<l.length-1;i++) {
- if(l[i].scrStatus > 0)
- c=1;
- else if(l[i].getElementsByTagName('select')[0].selectedIndex == 0)
- r=1;
- }
- if(c) {
- alert('Please wait for the screenshots to be uploaded before submitting the form.');
- return false;
- } else if(r) {
- alert('Please select the appropriate release for every screenshot');
- return false;
- } else if(oldfunc)
- return oldfunc();
- };
-}
-
-
-function scrURL(id, t) {
- return scrStaticURL+'/s'+t+'/'+(id%100<10?'0':'')+(id%100)+'/'+id+'.jpg';
-}
-
-function scrAdd(id, nsfw, rel) {
- var tr = document.createElement('tr');
- tr.scrId = id;
- tr.scrStatus = id ? 2 : 1; // 0: done, 1: uploading, 2: waiting for thumbnail
- tr.scrRel = rel;
- tr.scrNSFW = nsfw;
-
- var td = document.createElement('td');
- td.className = 'thumb';
- td.innerHTML = 'loading...';
- tr.appendChild(td);
-
- td = document.createElement('td');
- if(id)
- td.innerHTML = '<b>Generating thumbnail...</b><br />'
- +'Note: if this takes longer than 30 seconds, there\'s probably something wrong on our side.'
- +'Please try again later or report a bug if that is the case.';
- else
- td.innerHTML = '<b>Uploading screenshot...</b><br />'
- +'This can take a while, depending on the file size and your upload speed.<br />'
- +'<a href="#" onclick="return scrDel(this)">cancel</a>';
- tr.appendChild(td);
-
- x('scr_table').appendChild(tr);
- scrStripe();
- return tr;
-}
-
-function scrLast() {
- if(x('scr_last'))
- x('scr_table').removeChild(x('scr_last'));
- var full = x('scr_table').getElementsByTagName('tr').length >= 10;
-
- var tr = document.createElement('tr');
- tr.setAttribute('id', 'scr_last');
-
- var td = document.createElement('td');
- td.className = 'thumb';
- tr.appendChild(td);
-
- var td = document.createElement('td');
- if(full)
- td.innerHTML = '<b>Enough screenshots</b><br />'
- +'The limit of 10 screenshots per visual novel has been reached. '
- +'If you want to add a new screenshot, please remove an existing one first.';
- else
- td.innerHTML = '<b>Add screenshot</b><br />'
- +'Image must be smaller than 5MB and in PNG or JPEG format.<br />'
- +'<input name="scr_upload" id="scr_upload" type="file" class="text" /><br />'
- +'<input type="button" value="Upload!" class="submit" onclick="scrUpload()" />';
-
- tr.appendChild(td);
- x('scr_table').appendChild(tr);
- scrStripe();
-}
-
-function scrStripe() {
- var l = x('scr_table').getElementsByTagName('tr');
- for(var i=0;i<l.length;i++)
- l[i].className = i%2==0 ? 'odd' : '';
-}
-
-function scrCheckStatus() {
- var ids = '';
- var l = x('scr_table').getElementsByTagName('tr');
- for(var i=0;i<l.length-1;i++)
- if(l[i].scrStatus == 2)
- ids += (ids ? ';' : '?')+'id='+l[i].scrId;
- if(!ids)
- return setTimeout(scrCheckStatus, 1000);
-
- var ti = setTimeout(scrCheckStatus, 10000);
- ajax('/xml/screenshots.xml'+ids, function(hr) {
- var ls = hr.responseXML.getElementsByTagName('item');
- var l = x('scr_table').getElementsByTagName('tr');
- var tr;
- for(var s=0;s<ls.length;s++) {
- for(i=0;i<l.length-1;i++)
- if(l[i].scrId == ls[s].getAttribute('id') && ls[s].getAttribute('processed') == "1")
- tr = l[i];
- if(!tr)
- continue;
-
- tr.scrStatus = 0;
- tr.getElementsByTagName('td')[0].innerHTML =
- '<a href="'+scrURL(tr.scrId, 'f')+'" rel="iv:'+ls[s].getAttribute('width')+'x'+ls[s].getAttribute('height')+':edit">'
- +'<img src="'+scrURL(tr.scrId, 't')+'" style="margin: 0; padding: 0; border: 0" /></a>';
-
- var opt='';
- for(var o=0;o<scrRel.length;o++)
- opt += '<option value="'+scrRel[o][0]+'"'+(tr.scrRel && tr.scrRel == scrRel[o][0] ? ' selected="selected"' : '')+'>'+scrRel[o][1]+'</option>';
-
- tr.getElementsByTagName('td')[1].innerHTML = '<b>Screenshot #'+tr.scrId+'</b>'
- +' (<a href="#" onclick="return scrDel(this)">remove</a>)<br />'
- +'Full size: '+ls[s].getAttribute('width')+'x'+ls[s].getAttribute('height')+'<br /><br />'
- +'<input type="checkbox" onclick="scrSerialize()" id="scr_ser_'+tr.scrId+'" name="scr_ser_'+tr.scrId+'"'
- +' '+(tr.scrNSFW > 0 ? 'checked = "checked"' : '')+' />'
- +'<label for="scr_ser_'+tr.scrId+'">This screenshot is NSFW</label><br />'
- +'<select onchange="scrSerialize()">'+opt+'</select>';
- }
- scrSerialize();
- ivInit();
- clearTimeout(ti);
- setTimeout(scrCheckStatus, 1000);
- });
-}
-
-function scrDel(what) {
- while(what.nodeName.toLowerCase() != 'tr')
- what = what.parentNode;
- what.scrStatus = 3;
- x('scr_table').removeChild(what);
- scrSerialize();
- scrLast();
- return false;
-}
-
-var scrUplNr=0;
-function scrUpload() {
- scrUplNr++;
-
- // create temporary form
- var d = document.createElement('div');
- d.style.cssText = 'visibility: hidden; overflow: hidden; width: 1px; height: 1px; position: absolute; left: -500px; top: -500px';
- d.innerHTML = '<iframe id="scr_upl_'+scrUplNr+'" name="scr_upl_'+scrUplNr+'" style="height: 0px; width: 0px; visibility: hidden"'
- +' src="about:blank" onload="scrUploadComplete(this)"></iframe>'
- +'<form method="post" action="/xml/screenshots.xml" target="scr_upl_'+scrUplNr+'" enctype="multipart/form-data" id="scr_frm_'+scrUplNr+'"></form>';
- document.body.appendChild(d);
-
- // submit form and delete it
- d = x('scr_frm_'+scrUplNr);
- d.appendChild(x('scr_upload'));
- d.submit();
- d.parentNode.removeChild(d);
-
- d = scrAdd(0, 0, 0);
- x('scr_upl_'+scrUplNr).theTR = d;
- scrLast();
-
- return false;
-}
-
-function scrUploadComplete(what) {
- var f = window.frames[what.id];
- if(f.location.href.indexOf('screenshots') < 0)
- return;
-
- var tr = what.theTR;
- if(!tr || tr.scrStatus == 3)
- return;
-
- try {
- tr.scrId = f.window.document.getElementsByTagName('image')[0].getAttribute('id');
- } catch(e) {
- tr.scrId = -10;
- }
- if(tr.scrId < 0) {
- alert(
- tr.scrId == -10 ?
- 'Oops! Seems like something went wrong...\n'
- +'Make sure the file you\'re uploading doesn\'t exceed 5MB in size.\n'
- +'If that isn\'t the problem, then please report a bug.' :
- tr.scrId == -1 ?
- 'Upload failed!\nOnly JPEG or PNG images are accepted.' :
- 'Upload failed!\nNo file selected, or an empty file?'
- );
- return scrDel(tr);
- }
-
- tr.scrStatus = 2;
- tr.getElementsByTagName('td')[1].innerHTML =
- '<b>Generating thumbnail...</b><br />'
- +'Note: if this takes longer than 30 seconds, there\'s probably something wrong on our side.'
- +'Please try again later or report a bug if that is the case.';
-
- // remove the <div> in a timeout, otherwise some browsers think the page is still loading
- setTimeout(function() { document.body.removeChild(what.parentNode) }, 100);
-}
-
-function scrSerialize() {
- var r = '';
- var l = x('scr_table').getElementsByTagName('tr');
- for(var i=0;i<l.length-1;i++)
- if(l[i].scrStatus == 0)
- r += (r ? ' ' : '') + l[i].scrId + ','
- + (l[i].getElementsByTagName('input')[0].checked ? 1 : 0) + ','
- + scrRel[l[i].getElementsByTagName('select')[0].selectedIndex][0];
- x('screenshots').value = r;
-}
-
-
-
-
-
-
- /***************\
- * M E D I A *
- \***************/
-
-
-var medTypes = [ [ '', '- medium -', false ] ];
-function medLoad() {
- // load the medTypes and clear the div
- var l = x('media_div').getElementsByTagName('select')[0].options;
- for(var i=0;i<l.length;i++)
- medTypes[medTypes.length] = [ l[i].value, l[i].text, l[i].className.indexOf('noqty') ? false : true ];
- x('media_div').innerHTML = '';
-
- // load the selected media
- l = x('media').value.split(',');
- for(var i=0;i<l.length;i++)
- if(l[i].length > 2)
- medAddNew(l[i].split(' ')[0], Math.floor(l[i].split(' ')[1]));
-
- medAddNew('', 0);
- medSetSubmit();
-}
-
-function medSetSubmit() {
- var o=x('media');
- while(o.nodeName.toLowerCase() != 'form')
- o = o.parentNode;
- oldfunc = o.onsubmit;
- o.onsubmit = function() {
- var l = x('media_div').getElementsByTagName('span');
- for(var i=0;i<l.length-1;i++) {
- var s = l[i].getElementsByTagName('select');
- if(!medTypes[s[1].selectedIndex][2] && s[0].selectedIndex == 0) {
- alert('Media '+medTypes[s[1].selectedIndex][1]+' requires a quantity to be specified!');
- return false;
- }
- }
- return oldfunc ? oldfunc() : true;
- };
-}
-
-function medAddNew(med, qty) {
- var o = document.createElement('span');
- var r = '<select class="qty" onchange="medSerialize()"><option value="0">- quantity -</option>';
- for(var i=1;i<=20;i++)
- r += '<option value="'+i+'"'+(qty == i ? ' selected="selected"' : '')+'>'+i+'</option>';
- r += '</select><select class="medium" onchange="return medCheckNew(this)">';
- for(i=0;i<medTypes.length;i++)
- r += '<option value="'+medTypes[i][0]+'"'+(med == medTypes[i][0] ? ' selected="selected"' : '')+'>'+medTypes[i][1]+'</option>';
- r += '</select>';
- if(med != '')
- r += '<input type="button" class="submit" onclick="return medDel(this)" value="remove" />';
- o.innerHTML = r;
- x('media_div').appendChild(o);
-}
-
-function medDel(what) {
- what = what.nodeName ? what : this;
- while(what.nodeName.toLowerCase() != 'span')
- what = what.parentNode;
- x('media_div').removeChild(what);
- medSerialize();
- return false;
-}
-
-function medCheckNew() {
- // check for non-new items and add remove buttons
- var l = x('media_div').getElementsByTagName('span');
- var createnew=1;
- for(var i=0;i<l.length;i++) {
- var sel = l[i].getElementsByTagName('select')[1].selectedIndex;
- if(sel == 0)
- createnew = 0;
- else if(l[i].getElementsByTagName('input').length < 1) {
- var a = document.createElement('input');
- a.type = 'button';
- a.className = 'submit';
- a.onclick = medDel;
- a.value = 'remove';
- l[i].appendChild(a);
- }
- }
- if(createnew)
- medAddNew('', 0);
- medSerialize();
-
- return true;
-}
-
-function medSerialize() {
- var r = '';
- var l = x('media_div').getElementsByTagName('span');
- for(var i=0;i<l.length;i++) {
- var sel = l[i].getElementsByTagName('select');
- if(sel[1].selectedIndex != 0)
- r += (r ? ',' : '') + medTypes[sel[1].selectedIndex][0] + ' ' + (medTypes[sel[1].selectedIndex][2] ? 0 : sel[0].selectedIndex);
- }
- x('media').value = r;
-}
-
-
-
-
-
-
- /****************************************************\
- * V I S U A L N O V E L S / P R O D U C E R S *
- \****************************************************/
-
-
-function vnpLoad(type) {
- // load currently selected VNs
- var l = x(type).value.split('|||');
- for(var i=0;i<l.length;i++)
- if(l[i].length > 2)
- vnpAdd(type, l[i].split(',',2)[0], l[i].split(',',2)[1]);
- vnpCheckEmpty(type);
-
- // dropdown
- var n = x('jt_box_'+(type == 'vn' ? 'rel_vn' : 'rel_prod')).getElementsByTagName('div')[1];
- dsInit(n.getElementsByTagName('input')[0], '/xml/'+type+'.xml?q=', function(item, tr) {
- var td = document.createElement('td');
- td.innerHTML = type.substr(0,1)+item.getAttribute('id');
- td.style.textAlign = 'right';
- td.style.paddingRight = '5px';
- tr.appendChild(td);
- td = document.createElement('td');
- td.innerHTML = shorten(item.firstChild.nodeValue, 40);
- tr.appendChild(td);
- }, function(item) {
- return type.substr(0,1)+item.getAttribute('id')+':'+item.firstChild.nodeValue;
- }, function() { vnpFormAdd(type) });
- n.getElementsByTagName('a')[0].onclick = function() { vnpFormAdd(type); return false };
-}
-
-function vnpAdd(type, id, title) {
- var o = document.createElement('span');
- o.innerHTML = '<i>'+type.substr(0,1)+id+':<a href="/'+type.substr(0,1)+id+'">'+shorten(title, 40)+'</a></i>'
- +'<a href="#" onclick="return vnpDel(this, \''+type+'\')">remove</a>';
- x(type+'sel').appendChild(o);
- vnpStripe(type);
- vnpCheckEmpty(type);
-}
-
-function vnpDel(what, type) {
- what = what.nodeName ? what : this;
- while(what.nodeName.toLowerCase() != 'span')
- what = what.parentNode;
- x(type+'sel').removeChild(what);
- vnpCheckEmpty(type);
- vnpSerialize(type);
- return false;
-}
-
-function vnpCheckEmpty(type) {
- var o = x(type+'sel');
- if(o.getElementsByTagName('span').length < 1) {
- if(o.getElementsByTagName('b').length < 1)
- o.innerHTML = '<b>Nothing selected...</b>';
- } else if(o.getElementsByTagName('b').length == 1)
- o.removeChild(o.getElementsByTagName('b')[0]);
-}
-
-function vnpStripe(type) {
- var l = x(type+'sel').getElementsByTagName('span');
- for(var i=0;i<l.length;i++)
- l[i].className = i%2 ? 'odd' : '';
-}
-
-function vnpFormAdd(type) {
- var n = x('jt_box_'+(type == 'vn' ? 'rel_vn' : 'rel_prod')).getElementsByTagName('div')[1];
- var txt = n.getElementsByTagName('input')[0];
- var lnk = n.getElementsByTagName('a')[0];
- var input = txt.value;
-
- if(type == 'vn' && !input.match(/^v[0-9]+/)) {
- alert('Visual novel textbox must start with an ID (e.g. v17)');
- return false;
- }
- if(type == 'producers' && !input.match(/^p[0-9]+/)) {
- alert('Producer textbox must start with an ID (e.g. p5)');
- return false;
- }
-
- txt.disabled = true;
- txt.value = 'loading...';
- lnk.innerHTML = 'loading...';
-
- ajax('/xml/'+type+'.xml?q='+encodeURIComponent(input), function(hr) {
- txt.disabled = false;
- txt.value = '';
- lnk.innerHTML = 'add';
-
- var items = hr.responseXML.getElementsByTagName('item');
- if(items.length < 1)
- return alert('Item not found!');
-
- vnpAdd(type, items[0].getAttribute('id'), items[0].firstChild.nodeValue);
- vnpSerialize(type);
- });
- return false;
-}
-
-function vnpSerialize(type) {
- var r = '';
- var l = x(type+'sel').getElementsByTagName('span');
- for(var i=0;i<l.length;i++)
- r += (r ? '|||' : '') + l[i].getElementsByTagName('i')[0].innerHTML.substr(1, l[i].getElementsByTagName('i')[0].innerHTML.indexOf(':')-1)
- + ',' + l[i].getElementsByTagName('a')[0].innerHTML;
- x(type).value = r;
-}
-
-
-
-
-
-
- /****************************************************\
- * 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[1], '/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[2].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[1].disabled = n[2].disabled = true;
- n[2].value = 'loading...';
- ajax('/xml/tags.xml?q=name:'+encodeURIComponent(n[1].value), function(hr) {
- n[1].disabled = n[1].disabled = false;
- n[2].value = 'Add tag';
- n[1].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 == qq(name))
- 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')+'">'+qq(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/icons.png b/static/f/icons.png
index 78ec79fc..42c9004d 100644
--- a/static/f/icons.png
+++ b/static/f/icons.png
Binary files differ
diff --git a/static/f/script.js b/static/f/script.js
deleted file mode 100644
index 987963dc..00000000
--- a/static/f/script.js
+++ /dev/null
@@ -1,635 +0,0 @@
-
-/* G L O B A L S T U F F */
-
-function x(y){return document.getElementById(y)}
-function cl(o,f){if(x(o))x(o).onclick=f}
-function DOMLoad(y){var d=0;var f=function(){if(d++)return;y()};
-if(document.addEventListener)document.addEventListener("DOMCont"
-+"entLoaded",f,false);document.write("<script id=_ie defer src="
-+"javascript:void(0)><\/script>");document.getElementById('_ie')
-.onreadystatechange=function(){if(this.readyState=="complete")f()
-};if(/WebKit/i.test(navigator.userAgent))var t=setInterval(
-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;
-}
-
-
-
-
-/* I M A G E V I E W E R */
-
-function ivInit() {
- var init = 0;
- var l = document.getElementsByTagName('a');
- for(var i=0;i<l.length;i++)
- if(l[i].rel.substr(0,3) == 'iv:') {
- init++;
- l[i].onclick = ivView;
- }
- if(init && !x('iv_view')) {
- var d = document.createElement('div');
- d.id = 'iv_view';
- d.innerHTML = '<b id="ivimg"></b><br />'
- +'<a href="#" id="ivfull">&nbsp;</a>'
- +'<a href="#" onclick="return ivClose()" id="ivclose">close</a>'
- +'<a href="#" onclick="return ivView(this)" id="ivprev">&laquo; previous</a>'
- +'<a href="#" onclick="return ivView(this)" id="ivnext">next &raquo;</a>';
- document.body.appendChild(d);
- d = document.createElement('b');
- d.id = 'ivimgload';
- d.innerHTML = 'Loading...';
- document.body.appendChild(d);
- }
-}
-
-function ivView(what) {
- what = what && what.rel ? what : this;
- var u = what.href;
- var opt = what.rel.split(':');
- d = x('iv_view');
-
- // fix prev/next links (if any)
- if(opt[2]) {
- var ol = document.getElementsByTagName('a');
- var l=[];
- for(i=0;i<ol.length;i++)
- if(ol[i].rel.substr(0,3) == 'iv:' && ol[i].rel.indexOf(':'+opt[2]) > 4 && ol[i].className.indexOf('hidden') < 0 && ol[i].id != 'ivprev' && ol[i].id != 'ivnext')
- l[l.length] = ol[i];
- for(i=0;i<l.length;i++)
- if(l[i].href == u) {
- x('ivnext').style.visibility = l[i+1] ? 'visible' : 'hidden';
- x('ivnext').href = l[i+1] ? l[i+1].href : '#';
- x('ivnext').rel = l[i+1] ? l[i+1].rel : '';
- x('ivprev').style.visibility = l[i-1] ? 'visible' : 'hidden';
- x('ivprev').href = l[i-1] ? l[i-1].href : '#';
- x('ivprev').rel = l[i-1] ? l[i-1].rel : '';
- }
- } else
- x('ivnext').style.visibility = x('ivprev').style.visibility = 'hidden';
-
- // calculate dimensions
- var w = Math.floor(opt[1].split('x')[0]);
- var h = Math.floor(opt[1].split('x')[1]);
- var ww = typeof(window.innerWidth) == 'number' ? window.innerWidth : document.documentElement.clientWidth;
- var wh = typeof(window.innerHeight) == 'number' ? window.innerHeight : document.documentElement.clientHeight;
- var st = typeof(window.pageYOffset) == 'number' ? window.pageYOffset : document.body && document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
- if(w+100 > ww || h+70 > wh) {
- x('ivfull').href = u;
- x('ivfull').innerHTML = w+'x'+h;
- x('ivfull').style.visibility = 'visible';
- if(w/h > ww/wh) { // width++
- h *= (ww-100)/w;
- w = ww-100;
- } else { // height++
- w *= (wh-70)/h;
- h = wh-70;
- }
- } else
- x('ivfull').style.visibility = 'hidden';
- var dw = w;
- var dh = h+20;
- dw = dw < 200 ? 200 : dw;
-
- // update document
- d.style.display = 'block';
- x('ivimg').innerHTML = '<img src="'+u+'" onclick="ivClose()" onload="document.getElementById(\'ivimgload\').style.top=\'-400px\'" style="width: '+w+'px; height: '+h+'px" />';
- d.style.width = dw+'px';
- d.style.height = dh+'px';
- d.style.left = ((ww - dw) / 2 - 10)+'px';
- d.style.top = ((wh - dh) / 2 + st - 20)+'px';
- x('ivimgload').style.left = ((ww - 100) / 2 - 10)+'px';
- x('ivimgload').style.top = ((wh - 20) / 2 + st)+'px';
- return false;
-}
-
-function ivClose() {
- x('iv_view').style.display = 'none';
- x('iv_view').style.top = '-5000px';
- x('ivimgload').style.top = '-400px';
- x('ivimg').innerHTML = '';
- return false;
-}
-
-
-
-
-
-
-/* V N L I S T D R O P D O W N */
-
-var rstat = [ 'Unknown', 'Pending', 'Obtained', 'On loan', 'Deleted' ];
-var vstat = [ 'Unknown', 'Playing', 'Finished', 'Stalled', 'Dropped' ];
-function vlDropDown(e) {
- e = e || window.event;
- var tg = e.target || e.srcElement;
- while(tg && (tg.nodeType == 3 || tg.nodeName.toLowerCase() != 'a'))
- tg = tg.parentNode;
-
- var o = x('vldd');
- if(!o && (!tg || tg.id.substr(0,6) != 'rlsel_'))
- return;
-
- if(o) {
- var mouseX = e.pageX || (e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft);
- var mouseY = e.pageY || (e.clientY + document.body.scrollTop + document.documentElement.scrollTop);
- if((mouseX < ddx-5 || mouseX > ddx+o.offsetWidth+100 || mouseY < ddy-5 || mouseY > ddy+o.offsetHeight+5)
- || (tg && tg.id.substr(0,6) == 'rlsel_' && tg.id != 'rlsel_'+o.relId)) {
- document.body.removeChild(o);
- o = null;
- }
- }
- if(!o && tg) {
- o = tg;
- ddx = ddy = 0;
- do {
- ddx += o.offsetLeft;
- ddy += o.offsetTop;
- } while(o = o.offsetParent);
- ddx -= 185;
-
- 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="#" 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="#" onclick="return vlMod('+cu+',\'v'+i+'\')">'+vstat[i]+'</a></li>';
- r += '</ul>';
- if(tg.innerHTML != '--')
- 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';
- o.relId = tg.id.substr(6);
- o.style.left = ddx+'px';
- o.style.top = ddy+'px';
- o.innerHTML = r;
- document.body.appendChild(o);
- }
-}
-
-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;
-}
-
-
-
-
-
-
-/* J A V A S C R I P T T A B S */
-
-function jtInit() {
- var sel = '';
- var first = '';
- var l = x('jt_select').getElementsByTagName('a');
- for(var i=0;i<l.length;i++)
- if(l[i].id.substr(0,7) == 'jt_sel_') {
- l[i].onclick = jtSel;
- if(!first)
- first = l[i].id;
- if(location.hash && l[i].id == 'jt_sel_'+location.hash.substr(1))
- sel = l[i].id;
- }
- if(!first)
- return;
- if(!sel)
- sel = first;
- jtSel(sel, 1);
-}
-
-function jtSel(which, nolink) {
- which = typeof(which) == 'string' ? which : which && which.id ? which.id : this.id;
- which = which.substr(7);
-
- var l = x('jt_select').getElementsByTagName('a');
- for(var i=0;i<l.length;i++)
- if(l[i].id.substr(0,7) == 'jt_sel_') {
- var name = l[i].id.substr(7);
- if(name != 'all')
- x('jt_box_'+name).style.display = name == which || which == 'all' ? 'block' : 'none';
- var o = x('jt_sel_'+name).parentNode;
- if(o.className.indexOf('tabselected') >= 0) {
- if(name != which)
- o.className = o.className.replace(/tabselected/, '');
- } else
- if(name == which)
- o.className += ' tabselected';
- }
-
- if(!nolink)
- location.href = '#'+which;
- return false;
-}
-
-
-
-
-/* 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;
-}
-
-
-
-
-/* date input */
-var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
-function dtLoad(obj) {
- var r = Math.floor(obj.value) || 0;
- var v = [ Math.floor(r/10000), Math.floor(r/100)%100, r%100 ];
- var i;
- r = '<select onchange="dtSerialize(this)" style="width: 70px"><option value="0">-year-</option>';
- for(i=1980; i<=(new Date()).getFullYear()+5; i++)
- r += '<option value="'+i+'"'+(i == v[0] ? ' selected="selected"':'')+'>'+i+'</option>';
- r += '<option value="9999"'+(v[0] == 9999 ? ' selected="selected"':'')+'>TBA</option>';
- r += '</select><select onchange="dtSerialize(this)" style="width: 100px"><option value="99">-month-</option>';
- for(i=1; i<=12; i++)
- r += '<option value="'+i+'"'+(i == v[1] ? ' selected="selected"':'')+'>'+months[i-1]+'</option>';
- r += '</select><select onchange="dtSerialize(this)" style="width: 70px"><option value="99">-day-</option>';
- for(i=1; i<=31; i++)
- r += '<option value="'+i+'"'+(i == v[2] ? ' selected="selected"':'')+'>'+i+'</option>';
- r += '</select>';
- v = document.createElement('div');
- v.obj = obj;
- v.innerHTML = r;
- obj.parentNode.insertBefore(v, obj);
-}
-function dtSerialize(obj) {
- obj = obj.parentNode;
- var l = obj.getElementsByTagName('select');
- var v = [ l[0].options[l[0].selectedIndex].value*1, l[1].options[l[1].selectedIndex].value*1, l[2].options[l[2].selectedIndex].value*1 ];
- obj = obj.obj;
- if(v[0] == 0) obj.value = 0;
- else if(v[0] == 9999) obj.value = 99999999;
- else obj.value = v[0]*10000 + v[1]*100 + (v[1]==99?99:v[2]);
-}
-
-
-
-/* O N L O A D E V E N T */
-
-DOMLoad(function() {
-
- // search box
- var i = x('sq');
- i.onfocus = function () {
- if(this.value == 'search') {
- this.value = '';
- this.style.fontStyle = 'normal'
- }
- };
- i.onblur = function () {
- if(this.value.length < 1) {
- this.value = 'search';
- this.style.fontStyle = 'italic'
- }
- };
-
-
- // VN Voting
- i = x('votesel');
- if(i)
- i.onchange = function() {
- var s = this.options[this.selectedIndex].value;
- if(s == 1 && !confirm(
- "You are about to give this visual novel a 1 out of 10. This is a rather extreme rating, "
- +"meaning this game has absolutely nothing to offer, and that it's the worst game you have ever played.\n"
- +"Are you really sure this visual novel matches that description?"))
- return;
- if(s == 10 && !confirm(
- "You are about to give this visual novel a 10 out of 10. This is a rather extreme rating, "
- +"meaning this is one of the best visual novels you've ever played and it's unlikely "
- +"that any other game could ever be better than this one.\n"
- +"It is generally a bad idea to have more than three games in your vote list with this rating, choose carefully!"))
- return;
- if(s)
- location.href = location.href.replace(/\.[0-9]+/, '')+'/vote?v='+s;
- };
-
- // VN Wishlist editing
- i = x('wishsel');
- if(i)
- i.onchange = function() {
- if(this.selectedIndex != 0)
- location.href = location.href.replace(/\.[0-9]+/, '')+'/wish?s='+this.options[this.selectedIndex].value;
- };
- // Batch Wishlist editing
- i = x('batchedit');
- if(i)
- i.onchange = function() {
- var frm = this;
- while(frm.nodeName.toLowerCase() != 'form')
- frm = frm.parentNode;
- if(this.selectedIndex != 0)
- frm.submit();
- };
-
-
- // Release list editing
- i = x('listsel');
- if(i)
- i.onchange = 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');
- for(var i=0;i<l.length;i++)
- if(l[i].className.indexOf('relhid') >= 0)
- l[i].style.display = 'none';
- var l = document.getElementsByTagName('td');
- for(var i=0;i<l.length;i++)
- if(l[i].className.indexOf('relhid_but') >= 0)
- l[i].onclick = function() {
- var l = document.getElementsByTagName('tr');
- for(var i=0;i<l.length;i++)
- if(l[i].className.substr(7) == this.id) {
- l[i].style.display = l[i].style.display == 'none' ? '' : 'none';
- this.getElementsByTagName('i')[0].innerHTML = l[i].style.display == 'none' ? '&#9656;' : '&#9662;';
- }
- };
- var allhid = 1;
- x('relhidall').onclick = function() {
- allhid = !allhid;
- var l = document.getElementsByTagName('tr');
- for(var i=0;i<l.length;i++)
- if(l[i].className.indexOf('relhid') >= 0) {
- l[i].style.display = allhid ? 'none' : '';
- x(l[i].className.substr(7)).getElementsByTagName('i')[0].innerHTML = allhid ? '&#9656;' : '&#9662;';
- }
- this.getElementsByTagName('i')[0].innerHTML = allhid ? '&#9656;' : '&#9662;';
- };
- }
-
- // Advanced search
- cl('advselect', function() {
- var e = x('advoptions');
- e.className = e.className.indexOf('hidden')>=0 ? '' : 'hidden';
- this.getElementsByTagName('i')[0].innerHTML = e.className.indexOf('hidden')>=0 ? '&#9656;' : '&#9662;';
- return false;
- });
-
- // auto-complete tag search
- if(x('advselect') && x('ti')) {
- var fields=['ti','te'];
- for(var field=0;field<fields.length;field++)
- dsInit(x(fields[field]), '/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, obj) {
- var tags = obj.value.split(/ *, */);
- tags[tags.length-1] = item.firstChild.nodeValue;
- return tags.join(', ');
- },
- function() { false; },
- function(val) { return (val.split(/, */))[val.split(/, */).length-1]; }
- );
- }
-
- // update spoiler cookie on VN search radio button
- if(x('sp_0')) {
- cl('sp_0', function(){setCookie('tagspoil',0)});
- cl('sp_1', function(){setCookie('tagspoil',1)});
- cl('sp_2', function(){setCookie('tagspoil',2)});
- if((i = readCookie('tagspoil')) == null)
- i = 1;
- x('sp_'+i).checked = true;
- }
-
- // show/hide NSFW VN image
- if(x('nsfw_show'))
- x('nsfw_show').getElementsByTagName('a')[0].onclick = function() {
- x('nsfw_show').style.display = 'none';
- x('nsfw_hid').style.display = 'block';
- x('nsfw_hid').onclick = function() {
- x('nsfw_show').style.display = 'block';
- x('nsfw_hid').style.display = 'none';
- };
- return false
- };
-
- // NSFW toggle for screenshots
- cl('nsfwhide', function() {
- var s=0;
- var l = x('screenshots').getElementsByTagName('div');
- for(var i=0;i<l.length;i++) {
- if(l[i].className.indexOf('nsfw') >= 0) {
- if(l[i].className.indexOf('hidden') >= 0) {
- s++;
- l[i].className = 'nsfw';
- l[i].getElementsByTagName('a')[0].className = '';
- } else {
- l[i].className += ' hidden';
- l[i].getElementsByTagName('a')[0].className = 'hidden';
- }
- } else
- s++;
- }
- x('nsfwshown').innerHTML = s;
- return false;
- });
-
- // initialize image viewer
- ivInit();
-
- // vnlist dropdown
- var l = document.getElementsByTagName('a');
- for(var i=0;i<l.length;i++)
- if(l[i].id.substr(0,6) == 'rlsel_') {
- document.onmousemove = vlDropDown;
- 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'))
- jtInit();
-
- // spoiler tags
- l = document.getElementsByTagName('b');
- for(i=0;i<l.length;i++)
- if(l[i].className == 'spoiler') {
- l[i].onmouseover = function() { this.className = 'spoiler_shown' };
- l[i].onmouseout = function() { this.className = 'spoiler' };
- }
-
- // expand/collapse edit summaries on */hist
- if(x('history_comments')) {
- setcomment = function() {
- var e = readCookie('histexpand') == 1;
- var l = x('history_comments');
- l.innerHTML = e ? 'collapse' : 'expand';
- while(l.nodeName.toLowerCase() != 'table')
- l = l.parentNode;
- l = l.getElementsByTagName('tr');
- for(var i=0;i<l.length;i++)
- //alert(l[i].className);
- if(l[i].className.indexOf('editsum') >= 0) {
- if(!e && l[i].className.indexOf('hidden') < 0)
- l[i].className += ' hidden';
- if(e && l[i].className.indexOf('hidden') >= 0)
- l[i].className = l[i].className.replace(/hidden/, '');
- }
- };
- setcomment();
- x('history_comments').onclick = function () {
- setCookie('histexpand', readCookie('histexpand') == 1 ? 0 : 1);
- setcomment();
- return false;
- };
- }
-
- // 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);
- }
-
- // date selector
- l = document.getElementsByTagName('input');
- for(i=0;i<l.length;i++)
- if(l[i].className == 'dateinput')
- dtLoad(l[i]);
-
- // forms.js
- if(x('relations'))
- relLoad();
- if(x('jt_box_vn_scr'))
- scrLoad();
- if(x('media'))
- medLoad();
- if(x('jt_box_rel_vn'))
- vnpLoad('vn');
- if(x('jt_box_rel_prod'))
- vnpLoad('producers');
- if(x('taglinks'))
- tglLoad();
-
- // make some fields readonly when patch flag is set
- if(x('jt_box_rel_geninfo')) {
- var func = function() {
- x('doujin').disabled = x('resolution').disabled = x('voiced').disabled = x('ani_story').disabled = x('ani_ero').disabled = x('patch').checked;
- };
- func();
- x('patch').onclick = func;
- }
-
- // spam protection on all forms
- if(document.forms.length >= 1)
- for(i=0; i<document.forms.length; i++)
- document.forms[i].action = document.forms[i].action.replace(/\/nospam\?/,'');
-
-});