diff options
author | Yorhel <git@yorhel.nl> | 2009-10-24 15:18:34 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2009-10-24 15:19:10 +0200 |
commit | 5251f791de0a0e1684107b373a08cfe3a17fc447 (patch) | |
tree | 53d39d0456b464bf4525020b8503ae2d0c98b1bc /static | |
parent | 8243d0b30d015c2464c34b02dd4e3ecf1c599762 (diff) | |
parent | a8921887bddb7242a95e99b5177aff6ff6cd11be (diff) |
Merge branch 'beta'2.8
+ ChangeLog update
Diffstat (limited to 'static')
-rw-r--r-- | static/f/forms.js | 955 | ||||
-rw-r--r-- | static/f/icons.png | bin | 9403 -> 9474 bytes | |||
-rw-r--r-- | static/f/script.js | 635 |
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,"&").replace(/</,"<").replace(/>/,">").replace(/"/g,'"'); -} -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') - +' </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[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 Binary files differindex 78ec79fc..42c9004d 100644 --- a/static/f/icons.png +++ b/static/f/icons.png 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"> </a>' - +'<a href="#" onclick="return ivClose()" id="ivclose">close</a>' - +'<a href="#" onclick="return ivView(this)" id="ivprev">« previous</a>' - +'<a href="#" onclick="return ivView(this)" id="ivnext">next »</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' ? '▸' : '▾'; - } - }; - 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 ? '▸' : '▾'; - } - this.getElementsByTagName('i')[0].innerHTML = allhid ? '▸' : '▾'; - }; - } - - // 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 ? '▸' : '▾'; - 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\?/,''); - -}); |