summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/VNDB/Handler/ULists.pm29
-rw-r--r--static/f/forms.js20
-rw-r--r--static/f/script.js40
4 files changed, 64 insertions, 30 deletions
diff --git a/ChangeLog b/ChangeLog
index 28d23ccb..8b5b26e1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
+}
+