From: dbs Date: Tue, 19 Jan 2010 03:33:20 +0000 (+0000) Subject: Add the due-date-showing version of copy_details.js from rel_1_6 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=4133e8435d84be2f6fd4bfab5c9f0d7b57208300;p=contrib%2FConifer.git Add the due-date-showing version of copy_details.js from rel_1_6 Note - you need to set showDueDate and showDueTime to non-false values to make any difference, and even then the use still needs to click "Copy Details" to see it. git-svn-id: svn://svn.open-ils.org/ILS-Contrib/conifer/branches/rel_1_6_0@761 6d9bc8c9-1ec2-4278-b937-99fde70a366f --- diff --git a/web/opac/skin/default/js/copy_details.js b/web/opac/skin/default/js/copy_details.js new file mode 100644 index 0000000000..94adfd1f79 --- /dev/null +++ b/web/opac/skin/default/js/copy_details.js @@ -0,0 +1,371 @@ +var cpdTemplate; +var cpdCounter = 0; +var cpdNodes = {}; + +/* showDueDate will show the due date in the OPAC */ +var showDueDate = false; +/* showDueTime will show the due time (hours and minutes) in the OPAC; + if showDueDate is false, then showDueTime has no effect +*/ +var showDueTime = false; + +function cpdBuild( contextTbody, contextRow, record, callnumber, orgid, depth, copy_location ) { + var i = cpdCheckExisting(contextRow); + if(i) return i; + + var counter = cpdCounter++; + + /* yank out all of the template rows */ + if(!cpdTemplate) cpdTemplate = $('rdetail_volume_details_row'); + var templateRow = cpdTemplate.cloneNode(true); + templateRow.id = 'cpd_row_' + counter; + + /* shove a dummy a tag in before the context previous sibling */ + /* + contextTbody.insertBefore( + elem('a',{name:'slot_'+templateRow.id}), contextRow.previousSibling); + goTo('#slot_'+templateRow.id); + */ + + if(isXUL()) { + /* unhide before we unhide/clone the parent */ + unHideMe($n(templateRow, 'age_protect_label')); + unHideMe($n(templateRow, 'create_date_label')); + unHideMe($n(templateRow, 'holdable_label')); + } + + if (isXUL() || showDueDate) { + unHideMe($n(templateRow, 'due_date_label')); + } + + unHideMe(templateRow); + + var print = $n(templateRow,'print'); + print.onclick = function() { cpdBuildPrintPane( + contextRow, record, callnumber, orgid, depth) }; + + var mainTbody = $n(templateRow, 'copies_tbody'); + var extrasRow = mainTbody.removeChild($n(mainTbody, 'copy_extras_row')); + + var req = new Request(FETCH_COPIES_FROM_VOLUME, record.doc_id(), callnumber, orgid); + req.callback(cpdDrawCopies); + + req.request.args = { + contextTbody : contextTbody, /* tbody that holds the contextrow */ + contextRow : contextRow, /* the row our new row will be inserted after */ + record : record, + callnumber : callnumber, + orgid : orgid, + depth : depth, + templateRow : templateRow, /* contains everything */ + copy_location : copy_location, + mainTbody : mainTbody, /* holds the copy rows */ + extrasRow : extrasRow, /* wrapper row for all extras */ + counter : counter + }; + + if( contextRow.nextSibling ) + contextTbody.insertBefore( templateRow, contextRow.nextSibling ); + else + contextTbody.appendChild( templateRow ); + + req.send(); + _debug('creating new details row with id ' + templateRow.id); + cpdNodes[templateRow.id] = { templateRow : templateRow }; + return templateRow.id; +} + + +function cpdBuildPrintWindow(record, orgid) { + var div = $('rdetail_print_details').cloneNode(true); + div.id = ""; + + $n(div, 'lib').appendChild(text(findOrgUnit(orgid).name())); + $n(div, 'title').appendChild(text(record.title())); + $n(div, 'author').appendChild(text(record.author())); + $n(div, 'edition').appendChild(text(record.edition())); + $n(div, 'pubdate').appendChild(text(record.pubdate())); + $n(div, 'publisher').appendChild(text(record.publisher())); + $n(div, 'phys').appendChild(text(record.physical_description())); + + return div; +} + +function cpdStylePopupWindow(div) { + var tds = div.getElementsByTagName('td'); + for( var i = 0; i < tds.length ; i++ ) { + var td = tds[i]; + var sty = td.getAttribute('style'); + if(!sty) sty = ""; + td.setAttribute('style', sty + 'padding: 2px; border: 1px solid #F0F0E0;'); + if( td.className && td.className.match(/hide_me/) ) + td.parentNode.removeChild(td); + } +} + + +/* builds a friendly print window for this CNs data */ +function cpdBuildPrintPane(contextRow, record, callnumber, orgid, depth) { + + var div = cpdBuildPrintWindow( record, orgid); + + $n(div, 'cn').appendChild(text(callnumber)); + + unHideMe($n(div, 'copy_header')); + + var subtbody = $n(contextRow.nextSibling, 'copies_tbody'); + var rows = subtbody.getElementsByTagName('tr'); + + for( var r = 0; r < rows.length; r++ ) { + var row = rows[r]; + if(!row) continue; + var name = row.getAttribute('name'); + if( name.match(/extras_row/) ) continue; /* hide the copy notes, stat-cats */ + var clone = row.cloneNode(true); + var links = clone.getElementsByTagName('a'); + for( var i = 0; i < links.length; i++ ) + links[i].style.display = 'none'; + + $n(div, 'tbody').appendChild(clone); + } + + cpdStylePopupWindow(div); + openWindow( div.innerHTML); +} + + + +/* hide any open tables and if we've already + fleshed this cn, just unhide it */ +function cpdCheckExisting( contextRow ) { + + var existingid; + var next = contextRow.nextSibling; + + if( next && next.getAttribute('templateRow') ) { + var obj = cpdNodes[next.id]; + if(obj.templateRow.className.match(/hide_me/)) + unHideMe(obj.templateRow); + else hideMe(obj.templateRow); + existingid = next.id; + } + + if(existingid) _debug('row exists with id ' + existingid); + + for( var o in cpdNodes ) { + var node = cpdNodes[o]; + if( existingid && o == existingid ) continue; + hideMe(node.templateRow); + removeCSSClass(node.templateRow.previousSibling, 'rdetail_context_row'); + } + + addCSSClass(contextRow, 'rdetail_context_row'); + if(existingid) return existingid; + return null; +} + +/* +function cpdFetchCopies(r) { + var args = r.args; + args.cn = r.getResultObject(); + var req = new Request(FETCH_COPIES_FROM_VOLUME, args.cn.id()); + req.request.args = args; + req.callback(cpdDrawCopies); + req.send(); +} +*/ + +function cpdDrawCopies(r) { + + var copies = r.getResultObject(); + var args = r.args; + var copytbody = $n(args.templateRow, 'copies_tbody'); + var copyrow = copytbody.removeChild($n(copytbody, 'copies_row')); + + if(isXUL()) { + /* unhide before we unhide/clone the parent */ + unHideMe($n(copyrow, 'age_protect_value')); + unHideMe($n(copyrow, 'create_date_value')); + unHideMe($n(copyrow, 'copy_holdable_td')); + } + + if(isXUL() || showDueDate) { + unHideMe($n(copyrow, 'copy_due_date_td')); + } + + for( var i = 0; i < copies.length; i++ ) { + var row = copyrow.cloneNode(true); + var copyid = copies[i]; + var req = new Request(FETCH_FLESHED_COPY, copies[i]); + req.callback(cpdDrawCopy); + req.request.args = r.args; + req.request.row = row; + req.send(); + copytbody.appendChild(row); + } +} + +function cpdDrawCopy(r) { + var copy = r.getResultObject(); + var row = r.row; + + if (r.args.copy_location && copy.location().name() != r.args.copy_location) { + hideMe(row); + return; + } + + $n(row, 'barcode').appendChild(text(copy.barcode())); + $n(row, 'location').appendChild(text(copy.location().name())); + $n(row, 'status').appendChild(text(copy.status().name())); + + if(isXUL()) { + /* show the hold link */ + var l = $n(row, 'copy_hold_link'); + unHideMe(l); + l.onclick = function() { + holdsDrawEditor( + { + type : 'C', + copyObject : copy, + onComplete : function(){} + } + ); + } + + if( copy.age_protect() ) + appendClear($n(row, 'age_protect_value'), text(copy.age_protect().name())); + + var cd = copy.create_date(); + cd = cd.replace(/T.*/, ''); + $n(row, 'create_date_value').appendChild(text(cd)); + + var yes = $('rdetail.yes').innerHTML; + var no = $('rdetail.no').innerHTML; + + if( isTrue(copy.holdable()) && + isTrue(copy.location().holdable()) && + isTrue(copy.status().holdable()) ) { + $n(row, 'copy_is_holdable').appendChild(text(yes)); + } else { + $n(row, 'copy_is_holdable').appendChild(text(no)); + } + } + + if (isXUL() || showDueDate) { + var circ; + if( copy.circulations() ) { + circ = copy.circulations()[0]; + if( circ ) { + var due_time = dojo.date.stamp.fromISOString(circ.due_date()); + if( showDueTime ) { + $n(row, 'copy_due_date').appendChild(text(dojo.date.locale.format(due_time, {"formatLength": "medium"}))); + } else { + $n(row, 'copy_due_date').appendChild(text(dojo.date.locale.format(due_time, {"selector": "date", "formatLength": "medium"}))); + } + } + } + } + + r.args.copy = copy; + r.args.copyrow = row; + cpdShowNotes(copy, r.args) + cpdShowStats(copy, r.args); + +} + +function _cpdExtrasInit(args) { + + var newrid = 'extras_row_' + args.copy.barcode(); + var newrow = $(newrid); + if(!newrow) newrow = args.extrasRow.cloneNode(true); + var tbody = $n(newrow, 'extras_tbody'); + var rowt = $n(tbody, 'extras_row'); + newrow.id = newrid; + + var cr = args.copyrow; + var nr = cr.nextSibling; + var np = args.mainTbody; + + /* insert the extras row into the main table */ + if(nr) np.insertBefore( newrow, nr ); + else np.appendChild(newrow); + + var link = $n(args.copyrow, 'details_link'); + var link2 = $n(args.copyrow, 'less_details_link'); + var id = newrow.id; + link.id = id + '_morelink'; + link2.id = id + '_lesslink'; + unHideMe(link); + hideMe(link2); + + link.setAttribute('href', + 'javascript:unHideMe($("'+link2.id+'")); hideMe($("'+link.id+'"));unHideMe($("'+newrow.id+'"));'); + + link2.setAttribute('href', + 'javascript:unHideMe($("'+link.id+'")); hideMe($("'+link2.id+'"));hideMe($("'+newrow.id+'"));'); + + return [ tbody, rowt ]; +} + +function cpdShowNotes(copy, args) { + var notes = copy.notes(); + if(!notes || notes.length == 0) return; + + var a = _cpdExtrasInit(args); + var tbody = a[0]; + var rowt = a[1]; + + for( var n in notes ) { + var note = notes[n]; + if(!isTrue(note.pub())) continue; + var row = rowt.cloneNode(true); + $n(row, 'key').appendChild(text(note.title())); + $n(row, 'value').appendChild(text(note.value())); + unHideMe($n(row, 'note')); + unHideMe(row); + tbody.appendChild(row); + } +} + + +function cpdShowStats(copy, args) { + var entries = copy.stat_cat_entry_copy_maps(); + if(!entries || entries.length == 0) return; + + var visibleStatCat = false; + + /* + check all copy stat cats; if we find one that's OPAC visible, + set the flag and break the loop. If we've found one, or we're + in the staff client, build the table. if not, we return doing + nothing, as though the stat_cat_entry_copy_map was empty or null + */ + + for( var n in entries ) + { + var entry = entries[n]; + if(isTrue(entry.stat_cat().opac_visible())) + { + visibleStatCat = true; + break; + } + } + + if(!(isXUL() || visibleStatCat)) return; + + var a = _cpdExtrasInit(args); + var tbody = a[0]; + var rowt = a[1]; + + for( var n in entries ) { + var entry = entries[n]; + if(!(isXUL() || isTrue(entry.stat_cat().opac_visible()))) continue; + var row = rowt.cloneNode(true); + $n(row, 'key').appendChild(text(entry.stat_cat().name())); + $n(row, 'value').appendChild(text(entry.stat_cat_entry().value())); + unHideMe($n(row, 'cat')); + unHideMe(row); + tbody.appendChild(row); + } +} +