diff options
author | Yorhel <git@yorhel.nl> | 2008-11-23 14:24:52 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2008-11-23 14:24:52 +0100 |
commit | dc68c4e5de3b0df1f57e4b601672917ae532fe29 (patch) | |
tree | 2731f6ec386d6713d1b0f4200e59c952d0a4fe1f /static | |
parent | 03b6fc709593c611a319d348469acfef35a1231f (diff) |
Adding VN relations using the new interface works
By specifying an ID, we still need a JS-powered search >.>
Diffstat (limited to 'static')
-rw-r--r-- | static/f/forms.js | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/static/f/forms.js b/static/f/forms.js index bbbccb2d..656a47db 100644 --- a/static/f/forms.js +++ b/static/f/forms.js @@ -2,11 +2,32 @@ // called by script.js function qq(v) { - return v.replace(/&/g,"&").replace(/</,"<").replace(/>/,">").replace(/'/g,/*'*/ "\\'").replace(/"/g,/*"*/'"'); + return v.replace(/&/g,"&").replace(/</,"<").replace(/>/,">").replace(/"/g,'"'); } function shorten(v, l) { return qq(v.length > l ? v.substr(0, l-3)+'...' : v); } +var http_request = false; +function ajax(url, func) { + if(http_request) + http_request.abort(); + http_request = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); + if(http_request == null) { + alert("Your browse does not support the functionality this website requires."); + return; + } + http_request.onreadystatechange = function() { + if(!http_request || http_request.readyState != 4 || !http_request.responseText) + return; + if(http_request.status != 200) + return alert('Whoops, error! :('); + func(http_request); + }; + url += (url.indexOf('?')>=0 ? '&' : '?')+(Math.floor(Math.random()*999)+1); + http_request.open('GET', url, true); + http_request.send(null); +} + @@ -78,7 +99,7 @@ function relLoad() { var i;var l;var o; // fetch the relation types from the add new relation selectbox - l = x('relation_sel_new').options; + l = x('relation_new').getElementsByTagName('select')[0].options; for(i=0;i<l.length;i++) relTypes[Math.floor(l[i].value)] = l[i].text; @@ -99,6 +120,16 @@ function relLoad() { if(l[i].className == 'tc3') l[i].innerHTML = shorten(this.value, 40); }; + + // bind the add-link + x('relation_new').getElementsByTagName('a')[0].onclick = relFormAdd; + // catch return key + x('relation_new').getElementsByTagName('input')[0].onkeydown = function(ev) { + var c = document.layers ? ev.which : document.all ? event.keyCode : ev.keyCode; + if(c == 13) + return relFormAdd(); + return true; + }; } function relAdd(rel, vid, title) { @@ -169,5 +200,42 @@ function relDel(vid) { 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('vn'); + 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; +} + |