diff options
author | Yorhel <git@yorhel.nl> | 2009-10-04 11:31:58 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2009-10-04 11:31:58 +0200 |
commit | 6c2b8498c9c9b828337e8adc6f1f873408b40d81 (patch) | |
tree | 6fce71f37a34c5b5f6811192961839f8034d219c /static | |
parent | bad759e90cae690cc4ccb36aa388d8157f5aeb4a (diff) |
JS: Moved and rewrote the release media selector
It works slightly different from the previous, in that it enforces a
proper selection instead of validating the selection on form submit, and
it handles adding new media differently. Probably a bit less efficient,
but less code and easier to maintain.
Diffstat (limited to 'static')
-rw-r--r-- | static/f/forms.js | 109 | ||||
-rw-r--r-- | static/f/script.js | 83 |
2 files changed, 82 insertions, 110 deletions
diff --git a/static/f/forms.js b/static/f/forms.js index cf03ebc4..7fdcadf5 100644 --- a/static/f/forms.js +++ b/static/f/forms.js @@ -257,113 +257,6 @@ function scrSerialize() { - - - /***************\ - * M E D I A * - \***************/ - - -var medTypes = [ [ '', '- medium -', false ] ]; -function medLoad() { - // load the medTypes and clear the div - var l = x('media_div').getElementsByTagName('select')[0].options; - for(var i=0;i<l.length;i++) - medTypes[medTypes.length] = [ l[i].value, l[i].text, l[i].className.indexOf('noqty') ? false : true ]; - x('media_div').innerHTML = ''; - - // load the selected media - l = x('media').value.split(','); - for(var i=0;i<l.length;i++) - if(l[i].length > 2) - medAddNew(l[i].split(' ')[0], Math.floor(l[i].split(' ')[1])); - - medAddNew('', 0); - medSetSubmit(); -} - -function medSetSubmit() { - var o=x('media'); - while(o.nodeName.toLowerCase() != 'form') - o = o.parentNode; - oldfunc = o.onsubmit; - o.onsubmit = function() { - var l = x('media_div').getElementsByTagName('span'); - for(var i=0;i<l.length-1;i++) { - var s = l[i].getElementsByTagName('select'); - if(!medTypes[s[1].selectedIndex][2] && s[0].selectedIndex == 0) { - alert('Media '+medTypes[s[1].selectedIndex][1]+' requires a quantity to be specified!'); - return false; - } - } - return oldfunc ? oldfunc() : true; - }; -} - -function medAddNew(med, qty) { - var o = document.createElement('span'); - var r = '<select class="qty" onchange="medSerialize()"><option value="0">- quantity -</option>'; - for(var i=1;i<=20;i++) - r += '<option value="'+i+'"'+(qty == i ? ' selected="selected"' : '')+'>'+i+'</option>'; - r += '</select><select class="medium" onchange="return medCheckNew(this)">'; - for(i=0;i<medTypes.length;i++) - r += '<option value="'+medTypes[i][0]+'"'+(med == medTypes[i][0] ? ' selected="selected"' : '')+'>'+medTypes[i][1]+'</option>'; - r += '</select>'; - if(med != '') - r += '<input type="button" class="submit" onclick="return medDel(this)" value="remove" />'; - o.innerHTML = r; - x('media_div').appendChild(o); -} - -function medDel(what) { - what = what.nodeName ? what : this; - while(what.nodeName.toLowerCase() != 'span') - what = what.parentNode; - x('media_div').removeChild(what); - medSerialize(); - return false; -} - -function medCheckNew() { - // check for non-new items and add remove buttons - var l = x('media_div').getElementsByTagName('span'); - var createnew=1; - for(var i=0;i<l.length;i++) { - var sel = l[i].getElementsByTagName('select')[1].selectedIndex; - if(sel == 0) - createnew = 0; - else if(l[i].getElementsByTagName('input').length < 1) { - var a = document.createElement('input'); - a.type = 'button'; - a.className = 'submit'; - a.onclick = medDel; - a.value = 'remove'; - l[i].appendChild(a); - } - } - if(createnew) - medAddNew('', 0); - medSerialize(); - - return true; -} - -function medSerialize() { - var r = ''; - var l = x('media_div').getElementsByTagName('span'); - for(var i=0;i<l.length;i++) { - var sel = l[i].getElementsByTagName('select'); - if(sel[1].selectedIndex != 0) - r += (r ? ',' : '') + medTypes[sel[1].selectedIndex][0] + ' ' + (medTypes[sel[1].selectedIndex][2] ? 0 : sel[0].selectedIndex); - } - x('media').value = r; -} - - - - - - /****************************************************\ * V I S U A L N O V E L S / P R O D U C E R S * \****************************************************/ @@ -617,8 +510,6 @@ function tglSerialize() { if(x('jt_box_vn_scr')) scrLoad(); -if(x('media')) - medLoad(); if(x('jt_box_rel_vn')) vnpLoad('vn'); if(x('jt_box_rel_prod')) diff --git a/static/f/script.js b/static/f/script.js index 47bce2c1..31225a6c 100644 --- a/static/f/script.js +++ b/static/f/script.js @@ -680,7 +680,7 @@ function dsResults(hr, obj) { function vnrLoad() { // read the current relations var rels = byId('vnrelations').value.split('|||'); - for(var i=0; i<rels.length; i++) { + for(var i=0; i<rels.length && rels[0].length>1; i++) { var rel = rels[i].split(',', 3); vnrAdd(rel[0], rel[1], rel[2]); } @@ -795,6 +795,87 @@ if(byId('vnrelations')) +/* R E L E A S E M E D I A (/r+/edit) */ + +var medTypes = [ ]; +function medLoad() { + // load the medTypes and clear the div + var sel = byName(byId('media_div'), 'select')[0].options; + for(var i=0; i<sel.length; i++) + medTypes[medTypes.length] = [ sel[i].value, getText(sel[i]), !hasClass(sel[i], 'noqty') ]; + setText(byId('media_div'), ''); + + // load the selected media + var med = byId('media').value.split(','); + for(var i=0; i<med.length && med[i].length > 1; i++) + medAdd(med[i].split(' ')[0], Math.floor(med[i].split(' ')[1])); + + medAdd('', 0); +} + +function medAdd(med, qty) { + var qsel = tag('select', {class:'qty', onchange:medSerialize}, tag('option', {value:0}, '- quantity -')); + for(var i=1; i<=20; i++) + qsel.appendChild(tag('option', {value:i, selected: qty==i}, i)); + + var msel = tag('select', {class:'medium', onchange: med == '' ? medFormAdd : medSerialize}); + if(med == '') + msel.appendChild(tag('option', {value:''}, '- medium -')); + for(var i=0; i<medTypes.length; i++) + msel.appendChild(tag('option', {value:medTypes[i][0], selected: med==medTypes[i][0]}, medTypes[i][1])); + + byId('media_div').appendChild(tag('span', qsel, msel, + med != '' ? tag('input', {type: 'button', class:'submit', onclick:medDel, value:'remove'}) : null + )); +} + +function medDel() { + var span = this; + while(span.nodeName.toLowerCase() != 'span') + span = span.parentNode; + byId('media_div').removeChild(span); + medSerialize(); + return false; +} + +function medFormAdd() { + var span = this; + while(span.nodeName.toLowerCase() != 'span') + span = span.parentNode; + var med = byClass(span, 'select', 'medium')[0]; + var qty = byClass(span, 'select', 'qty')[0]; + if(!med.selectedIndex) + return; + medAdd(med.options[med.selectedIndex].value, qty.options[qty.selectedIndex].value); + byId('media_div').removeChild(span); + medAdd('', 0); + medSerialize(); +} + +function medSerialize() { + var r = []; + var meds = byName(byId('media_div'), 'span'); + for(var i=0; i<meds.length-1; i++) { + var med = byClass(meds[i], 'select', 'medium')[0]; + var qty = byClass(meds[i], 'select', 'qty')[0]; + + /* correct quantity if necessary */ + if(medTypes[med.selectedIndex][2] && !qty.selectedIndex) + qty.selectedIndex = 1; + if(!medTypes[med.selectedIndex][2] && qty.selectedIndex) + qty.selectedIndex = 0; + + r[r.length] = medTypes[med.selectedIndex][0] + ' ' + qty.selectedIndex; + } + byId('media').value = r.join(','); +} + +if(byId('jt_box_rel_format')) + medLoad(); + + + + /* M I S C S T U F F */ // search box |