diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/VNDB/Handler/ULists.pm | 29 | ||||
-rw-r--r-- | static/f/forms.js | 20 | ||||
-rw-r--r-- | static/f/script.js | 40 |
4 files changed, 64 insertions, 30 deletions
@@ -1,4 +1,7 @@ -2.2 - ? +2.3 - ? + - No page reload needed when changing rlist status from vn page + +2.2 - 2009-01-16 - Additional custom CSS field to user profile - Search dropdown calls the return function automatically on select - Revised the media list diff --git a/lib/VNDB/Handler/ULists.pm b/lib/VNDB/Handler/ULists.pm index f86cba83..9d9fba9d 100644 --- a/lib/VNDB/Handler/ULists.pm +++ b/lib/VNDB/Handler/ULists.pm @@ -3,7 +3,7 @@ package VNDB::Handler::ULists; use strict; use warnings; -use YAWF ':html'; +use YAWF ':html', ':xml'; use VNDB::Func; @@ -11,6 +11,7 @@ YAWF::register( qr{v([1-9]\d*)/vote}, \&vnvote, qr{v([1-9]\d*)/wish}, \&vnwish, qr{r([1-9]\d*)/list}, \&rlist, + qr{xml/rlist.xml}, \&rlist, qr{u([1-9]\d*)/wish}, \&wishlist, qr{u([1-9]\d*)/list}, \&vnlist, ); @@ -55,6 +56,15 @@ sub vnwish { sub rlist { my($self, $id) = @_; + my $rid = $id; + if(!$rid) { + my $f = $self->formValidate( + { name => 'id', required => 1, template => 'int' } + ); + return 404 if $f->{_err}; + $rid = $f->{id}; + } + my $uid = $self->authInfo->{id}; return $self->htmlDenied() if !$uid; @@ -63,15 +73,24 @@ sub rlist { ); return 404 if $f->{_err}; - $self->dbVNListDel($uid, $id) if $f->{e} eq 'del'; + $self->dbVNListDel($uid, $rid) if $f->{e} eq 'del'; $self->dbVNListAdd( - rid => $id, + rid => $rid, uid => $uid, $f->{e} =~ /^([rv])(\d+)$/ && $1 eq 'r' ? (rstat => $2) : (vstat => $2) ) if $f->{e} ne 'del'; - (my $ref = $self->reqHeader('Referer')||"/r$id") =~ s/^\Q$self->{url}//; - $self->resRedirect($ref, 'temp'); + if($id) { + (my $ref = $self->reqHeader('Referer')||"/r$id") =~ s/^\Q$self->{url}//; + $self->resRedirect($ref, 'temp'); + } else { + $self->resHeader('Content-type' => 'text/xml'); + my $st = $self->dbVNListGet(uid => $self->authInfo->{id}, rid => [$rid])->[0]; + xml; + tag 'rlist', uid => $self->authInfo->{id}, rid => $rid; + txt $st ? liststat $st : '--'; + end; + } } diff --git a/static/f/forms.js b/static/f/forms.js index e25a880c..3a09dc88 100644 --- a/static/f/forms.js +++ b/static/f/forms.js @@ -7,26 +7,6 @@ function qq(v) { function shorten(v, l) { return qq(v.length > l ? v.substr(0, l-3)+'...' : v); } -var http_request = false; -function ajax(url, func) { - if(http_request) - http_request.abort(); - http_request = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); - if(http_request == null) { - alert("Your browse does not support the functionality this website requires."); - return; - } - http_request.onreadystatechange = function() { - if(!http_request || http_request.readyState != 4 || !http_request.responseText) - return; - if(http_request.status != 200) - return alert('Whoops, error! :('); - func(http_request); - }; - url += (url.indexOf('?')>=0 ? ';' : '?')+(Math.floor(Math.random()*999)+1); - http_request.open('GET', url, true); - http_request.send(null); -} diff --git a/static/f/script.js b/static/f/script.js index 68d40f75..069b5e5d 100644 --- a/static/f/script.js +++ b/static/f/script.js @@ -12,6 +12,27 @@ if(document.addEventListener)document.addEventListener("DOMCont" function(){if(/loaded|complete/.test(document.readyState)){ clearInterval(t);f()}},10);window.onload=f;} +var http_request = false; +function ajax(url, func) { + if(http_request) + http_request.abort(); + http_request = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); + if(http_request == null) { + alert("Your browse does not support the functionality this website requires."); + return; + } + http_request.onreadystatechange = function() { + if(!http_request || http_request.readyState != 4 || !http_request.responseText) + return; + if(http_request.status != 200) + return alert('Whoops, error! :('); + func(http_request); + }; + url += (url.indexOf('?')>=0 ? ';' : '?')+(Math.floor(Math.random()*999)+1); + http_request.open('GET', url, true); + http_request.send(null); +} + @@ -221,17 +242,19 @@ function vlDropDown(e) { } while(o = o.offsetParent); ddx -= 185; - var cu = '/r'+tg.id.substr(6)+'/list?e='; + var cu = tg.id.substr(6); var st = tg.innerHTML.split(' / '); + if(st[0].indexOf('loading') >= 0) + return; var r = '<ul><li><b>Release status</b></li>'; for(var i=0;i<rstat.length;i++) - r += st[0] && st[0].indexOf(rstat[i]) >= 0 ? '<li><i>'+rstat[i]+'</i></li>' : '<li><a href="'+cu+'r'+i+'">'+rstat[i]+'</a></li>'; + r += st[0] && st[0].indexOf(rstat[i]) >= 0 ? '<li><i>'+rstat[i]+'</i></li>' : '<li><a href="#" onclick="return vlMod('+cu+',\'r'+i+'\')">'+rstat[i]+'</a></li>'; r += '</ul><ul><li><b>Play status</b></li>'; for(var i=0;i<vstat.length;i++) - r += st[1] && st[1].indexOf(vstat[i]) >= 0 ? '<li><i>'+vstat[i]+'</i></li>' : '<li><a href="'+cu+'v'+i+'">'+vstat[i]+'</a></li>'; + r += st[1] && st[1].indexOf(vstat[i]) >= 0 ? '<li><i>'+vstat[i]+'</i></li>' : '<li><a href="#" onclick="return vlMod('+cu+',\'v'+i+'\')">'+vstat[i]+'</a></li>'; r += '</ul>'; if(tg.innerHTML != '--') - r += '<ul class="full"><li><a href="'+cu+'del">Remove from VN list</a></li></ul>'; + r += '<ul class="full"><li><a href="#" onclick="return vlMod('+cu+',\'del\')">Remove from VN list</a></li></ul>'; o = document.createElement('div'); o.id = 'vldd'; @@ -243,6 +266,15 @@ function vlDropDown(e) { } } +function vlMod(rid, act) { + document.body.removeChild(x('vldd')); + x('rlsel_'+rid).innerHTML = '<b class="patch">loading...</b>'; + ajax('/xml/rlist.xml?id='+rid+';e='+act, function(hr) { + x('rlsel_'+rid).innerHTML = hr.responseXML.getElementsByTagName('rlist')[0].firstChild.nodeValue; + }); + return false; +} + |