summaryrefslogtreecommitdiff
path: root/data/js/vnscr.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/js/vnscr.js')
-rw-r--r--data/js/vnscr.js282
1 files changed, 126 insertions, 156 deletions
diff --git a/data/js/vnscr.js b/data/js/vnscr.js
index c62eb982..21b1ba74 100644
--- a/data/js/vnscr.js
+++ b/data/js/vnscr.js
@@ -1,134 +1,135 @@
-var scrRel = [ [ 0, mt('_vnedit_scr_selrel') ] ];
-var scrStaticURL;
-var scrUplNr = 0;
-var scrDefRel;
-
-function scrLoad() {
- // get scrRel and scrStaticURL
- var rel = byId('scr_rel');
- scrStaticURL = rel.className;
- for(var i=0; i<rel.options.length; i++)
- scrRel[scrRel.length] = [ rel.options[i].value, getText(rel.options[i]) ];
- rel.parentNode.removeChild(rel);
- if(scrRel.length <= 2)
- scrRel.shift();
- scrDefRel = scrRel[0][0];
-
- // load the current screenshots
- var scr = byId('screenshots').value.split(' ');
- var siz = byId('screensizes').value.split(' ');
- for(i=0; i<scr.length && scr[i].length>1; i++) {
- var r = scr[i].split(',');
- var s = siz[i].split(',');
- scrSet(scrAdd(r[0], r[1], r[2]), s[0], s[1]);
+var rels;
+var defRid = 0;
+var staticUrl;
+
+function init() {
+ var data = jsonParse(getText(byId('screendata'))) || {};
+ rels = data.rel;
+ rels.unshift([ 0, mt('_vnedit_scr_selrel') ]);
+ staticUrl = data.staticurl;
+
+ var scr = jsonParse(byId('screenshots').value) || {};
+ for(i=0; i<scr.length; i++) {
+ var r = scr[i];
+ var s = data.size[r.id];
+ loaded(add(r.nsfw, r.rid), r.id, s[0], s[1]);
}
- ivInit();
- scrLast();
- scrSetSubmit();
-}
-
-function scrSetSubmit() {
var frm = byId('screenshots');
while(frm.nodeName.toLowerCase() != 'form')
frm = frm.parentNode;
- onSubmit(frm, function() {
- var loading = 0;
- var norelease = 0;
- var l = byName(byId('scr_table'), 'tr');
- for(var i=0; i<l.length-1; i++) {
- var rel = byName(l[i], 'select')[0];
- if(l[i].scr_status > 0)
- loading = 1;
- else if(rel.options[rel.selectedIndex].value == 0)
- norelease = 1;
- }
- if(loading) {
- alert(mt('_vnedit_scr_frmloading'));
- return false;
- } else if(norelease) {
- alert(mt('_vnedit_scr_frmnorel'));
- return false;
- }
- return true;
- });
+ onSubmit(frm, handleSubmit);
+
+ addLast();
+ ivInit();
}
-function scrURL(id, t) {
- return scrStaticURL+'/s'+t+'/'+(id%100<10?'0':'')+(id%100)+'/'+id+'.jpg';
+function handleSubmit() {
+ var loading = 0;
+ var norelease = 0;
+
+ var r = [];
+ var l = byName(byId('scr_table'), 'tr');
+ for(var i=0; i<l.length-1; i++)
+ if(l[i].scr_loading)
+ loading = 1;
+ else if(l[i].scr_rid == 0)
+ norelease = 1;
+ else
+ r.push({ rid: l[i].scr_rid, nsfw: l[i].scr_nsfw, id: l[i].scr_id });
+
+ if(loading)
+ alert(mt('_vnedit_scr_frmloading'));
+ else if(norelease)
+ alert(mt('_vnedit_scr_frmnorel'));
+ else
+ byId('screenshots').value = JSON.stringify(r);
+ return !loading && !norelease;
}
-function scrAdd(id, nsfw, rel) {
- // tr.scr_status = 0: done, 1: uploading
+function genRels(sel) {
+ var r = tag('select', {'class':'scr_relsel'});
+ for(var i=0; i<rels.length; i++)
+ r.appendChild(tag('option', {value: rels[i][0], selected: rels[i][0] == sel}, rels[i][1]));
+ return r;
+}
+
+function URL(id, t) {
+ return staticUrl+'/s'+t+'/'+(id%100<10?'0':'')+(id%100)+'/'+id+'.jpg';
+}
- var tr = tag('tr', { id:'scr_tr_'+id, scr_id: id, scr_status: 1, scr_rel: rel, scr_nsfw: nsfw},
+// Need to run addLast() after this function
+function add(nsfw, rid) {
+ var tr = tag('tr', { scr_id: 0, scr_loading: 1, scr_rid: rid, scr_nsfw: nsfw?1:0},
tag('td', { 'class': 'thumb'}, mt('_js_loading')),
tag('td',
tag('b', mt('_vnedit_scr_uploading')),
tag('br', null),
- id ? null : mt('_vnedit_scr_upl_msg'),
+ mt('_vnedit_scr_upl_msg'),
tag('br', null),
- id ? null : tag('a', {href:'#', onclick:scrDel}, mt('_vnedit_scr_cancel'))
+ tag('a', {href:'#', onclick:del}, mt('_vnedit_scr_cancel'))
)
);
byId('scr_table').appendChild(tr);
return tr;
}
-function scrSet(tr, width, height) {
- var dim = width+'x'+height;
- tr.scr_status = 0;
-
- // image
- setContent(byName(tr, 'td')[0],
- tag('a', {href: scrURL(tr.scr_id, 'f'), rel:'iv:'+dim+':edit'},
- tag('img', {src: scrURL(tr.scr_id, 't')})
- )
- );
-
- // check full resolution with the list of DB-defined resolutions
- var odd = true;
+function oddDim(dim) {
if(dim == '256x384') // special-case NDS resolution (not in the DB)
- odd = false;
- for(var j=0; j<VARS.resolutions.length && odd; j++) {
+ return false;
+ for(var j=0; j<VARS.resolutions.length; j++) {
if(typeof VARS.resolutions[j][1] != 'object') {
if(VARS.resolutions[j][0] == dim)
- odd = false;
+ return false;
} else {
for(var k=1; k<VARS.resolutions[j].length; k++)
if(VARS.resolutions[j][k][1] == dim)
- odd = false;
+ return false;;
}
}
+ return true;
+}
- // content
- var rel = tag('select', {onchange: scrSerialize, 'class':'scr_relsel'});
- for(var j=0; j<scrRel.length; j++)
- rel.appendChild(tag('option', {value: scrRel[j][0], selected: tr.scr_rel == scrRel[j][0]}, scrRel[j][1]));
- var nsfwid = 'scr_sfw_'+tr.scr_id;
+// Need to run ivInit() after this function
+function loaded(tr, id, width, height) {
+ var dim = width+'x'+height;
+ tr.id = 'scr_tr_'+id;
+ tr.scr_id = id;
+ tr.scr_loading = 0;
+
+ setContent(byName(tr, 'td')[0],
+ tag('a', {href: URL(tr.scr_id, 'f'), rel:'iv:'+dim+':edit'},
+ tag('img', {src: URL(tr.scr_id, 't')})
+ )
+ );
+
+ var rel = genRels(tr.scr_rid);
+ rel.onchange = function() { tr.scr_rid = this.options[this.selectedIndex].value };
+
+ var nsfwid = 'scr_nsfw_'+id;
setContent(byName(tr, 'td')[1],
- tag('b', mt('_vnedit_scr_id', tr.scr_id)),
- ' (', tag('a', {href: '#', onclick:scrDel}, mt('_js_remove')), ')',
+ tag('b', mt('_vnedit_scr_id', id)),
+ ' (', tag('a', {href: '#', onclick:del}, mt('_js_remove')), ')',
tag('br', null),
mt('_vnedit_scr_fullsize', dim),
- odd ? tag('b', {'class':'standout', 'style':'font-weight: bold'}, ' '+mt('_vnedit_scr_nonstandard')) : null,
+ oddDim(dim) ? tag('b', {'class':'standout', 'style':'font-weight: bold'}, ' '+mt('_vnedit_scr_nonstandard')) : null,
tag('br', null),
tag('br', null),
- tag('input', {type:'checkbox', onclick:scrSerialize, id:nsfwid, name:nsfwid, checked: tr.scr_nsfw>0, 'class':'scr_nsfw'}),
+ tag('input', {type:'checkbox', name:nsfwid, id:nsfwid, checked: tr.scr_nsfw!=0, onclick: function() { tr.scr_nsfw = this.checked?1:0 }, 'class':'scr_nsfw'}),
tag('label', {'for':nsfwid}, mt('_vnedit_scr_nsfw')),
tag('br', null),
rel
);
}
-function scrLast() {
+function addLast() {
if(byId('scr_last'))
byId('scr_table').removeChild(byId('scr_last'));
var full = byName(byId('scr_table'), 'tr').length >= 10;
- var rel = tag('select', {onchange: function(){scrDefRel=this.options[this.selectedIndex].value}, 'class':'scr_relsel', 'id':'scradd_relsel'});
- for(var j=0; j<scrRel.length; j++)
- rel.appendChild(tag('option', {value: scrRel[j][0], selected: scrDefRel == scrRel[j][0]}, scrRel[j][1]));
+ var rel = genRels(defRid);
+ rel.onchange = function() { defRid = this.options[this.selectedIndex].value };
+ rel.id = 'scradd_relsel';
byId('scr_table').appendChild(tag('tr', {id:'scr_last'},
tag('td', {'class': 'thumb'}),
@@ -143,91 +144,60 @@ function scrLast() {
tag('br', null),
rel,
tag('br', null),
- tag('input', {name:'scr_upload', id:'scr_upload', type:'file', 'class':'text'}),
+ tag('input', {name:'scr_upload', id:'scr_upload', type:'file', 'class':'text', multiple:true}),
tag('br', null),
- tag('input', {type:'button', value:mt('_vnedit_scr_addbut'), 'class':'submit', onclick:scrUpload})
+ tag('input', {type:'button', value:mt('_vnedit_scr_addbut'), 'class':'submit', onclick:upload})
)
));
}
-function scrDel(what) {
- var tr = what && what.scr_status != null ? what : this;
- while(tr.nodeName.toLowerCase() != 'tr')
+function del(what) {
+ var tr = what && what.scr_id != null ? what : this;
+ while(tr.scr_id == null)
tr = tr.parentNode;
- tr.scr_status = null;
- if(tr.scr_upl && byId(tr.scr_upl))
- byId(tr.scr_upl).parentNode.removeChild(byId(tr.scr_upl));
+ if(tr.scr_ajax)
+ tr.scr_ajax.abort();
byId('scr_table').removeChild(tr);
- scrSerialize();
- scrLast();
+ addLast();
ivInit();
return false;
}
-function scrUpload() {
- scrUplNr++;
-
- // create temporary form
- var ifid = 'scr_upl_'+scrUplNr;
- var frm = tag('form', {method: 'post', action:'/xml/screenshots.xml?upload='+scrUplNr,
- target: ifid, enctype:'multipart/form-data'});
- var ifr = tag('iframe', {id:ifid, name:ifid, src:'about:blank', onload:scrUploadComplete});
- addBody(tag('div', {'class':'scr_uploader'}, ifr, frm));
-
- // submit form
- var upl = byId('scr_upload');
- upl.id = upl.name = 'scr_upl_file_'+scrUplNr;
- frm.appendChild(upl);
- frm.submit();
- ifr.scr_tr = scrAdd(0, 0, 0);
- ifr.scr_upl = ifid;
- ifr.scr_tr.scr_rel = byId('scradd_relsel').options[byId('scradd_relsel').selectedIndex].value;
- scrLast();
- return false;
-}
-
-function scrUploadComplete() {
- var ifr = this;
- var fr = window.frames[ifr.id];
- if(fr.location.href.indexOf('screenshots') < 0)
- return;
-
- var tr = ifr.scr_tr;
- if(tr && tr.scr_status == 1) {
- try {
- tr.scr_id = fr.window.document.getElementsByTagName('image')[0].getAttribute('id');
- } catch(e) {
- tr.scr_id = -10;
- }
- if(tr.scr_id < 0) {
- alert(tr.scr_id == -10 ? mt('_vnedit_scr_oops') :
- tr.scr_id == -1 ? mt('_vnedit_scr_errformat') : mt('_vnedit_scr_errempty'));
- scrDel(tr);
+function uploadFile(f) {
+ var tr = add(0, defRid);
+ var fname = f.name;
+ var frm = new FormData();
+ frm.append('file', f);
+ tr.scr_ajax = ajax('/xml/screenshots.xml', function(hr) {
+ tr.scr_ajax = null;
+ var img = hr.responseXML.getElementsByTagName('image')[0];
+ var id = img.getAttribute('id');
+ if(id < 0) {
+ alert(fname + ":\n" + (id == -1 ? mt('_vnedit_scr_errformat') : mt('_vnedit_scr_errempty')));
+ del(tr);
} else {
- tr.id = 'scr_tr_'+tr.scr_id;
- scrSet(tr, fr.window.document.getElementsByTagName('image')[0].getAttribute('width'), fr.window.document.getElementsByTagName('image')[0].getAttribute('height'));
- scrSerialize();
+ loaded(tr, id, img.getAttribute('width'), img.getAttribute('height'));
ivInit();
}
- }
-
- tr.scr_upl = null;
- /* remove the <div> in a timeout, otherwise some browsers think the page is still loading */
- setTimeout(function() { ifr.parentNode.parentNode.removeChild(ifr.parentNode) }, 1000);
+ }, true, frm);
}
-function scrSerialize() {
- var r = [];
- var l = byName(byId('scr_table'), 'tr');
- for(var i=0; i<l.length-1; i++)
- if(l[i].scr_status == 0)
- r[r.length] = [
- l[i].scr_id,
- byClass(l[i], 'input', 'scr_nsfw')[0].checked ? 1 : 0,
- scrRel[byClass(l[i], 'select', 'scr_relsel')[0].selectedIndex][0]
- ].join(',');
- byId('screenshots').value = r.join(' ');
+function upload() {
+ var files = byId('scr_upload').files;
+
+ if(files.length < 1) {
+ alert(mt('_vnedit_scr_errempty'));
+ return false;
+ } else if(files.length + byName(byId('scr_table'), 'tr').length - 1 > 10) {
+ alert(mt('_vnedit_scr_errtoomany'));
+ return false;
+ }
+
+ for(var i=0; i<files.length; i++)
+ uploadFile(files[i]);
+ addLast();
+ return false;
}
-if(byId('jt_box_vn_scr') && byId('scr_table'))
- scrLoad();
+if(byId('jt_box_vn_scr'))
+ init();