summaryrefslogtreecommitdiff
path: root/static
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2008-11-23 14:24:52 +0100
committerYorhel <git@yorhel.nl>2008-11-23 14:24:52 +0100
commitdc68c4e5de3b0df1f57e4b601672917ae532fe29 (patch)
tree2731f6ec386d6713d1b0f4200e59c952d0a4fe1f /static
parent03b6fc709593c611a319d348469acfef35a1231f (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.js72
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,"&amp;").replace(/</,"&lt;").replace(/>/,"&gt;").replace(/'/g,/*'*/ "\\'").replace(/"/g,/*"*/'&quot;');
+ 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);
}
+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;
+}
+