[open-ils-commits] r16371 - in trunk: . Open-ILS/web/js/dojo/openils (miker)

svn at svn.open-ils.org svn at svn.open-ils.org
Sun May 2 21:01:30 EDT 2010


Author: miker
Date: 2010-05-02 21:01:29 -0400 (Sun, 02 May 2010)
New Revision: 16371

Modified:
   trunk/
   trunk/Open-ILS/web/js/dojo/openils/BibTemplate.js
Log:
sub-object limiting (think: holdings); query limit/offset; new "templated" mode using opac/template-value elements and dojo.string.substitute; org depth support in constructed tag URIs


Property changes on: trunk
___________________________________________________________________
Name: bzr:revision-info
   - timestamp: 2010-04-12 10:56:29.252000093 -0400
committer: Mike Rylander <miker at esilibrary.com>
properties: 
	branch-nick: trunk

   + timestamp: 2010-05-02 21:01:26.194999933 -0400
committer: Mike Rylander <miker at esilibrary.com>
properties: 
	branch-nick: trunk

Name: bzr:file-ids
   - Open-ILS/examples/templates/overdue_combined_xml.example	10306 at dcc99617-32d9-48b4-a31d-7c20da2025e4:trunk:Open-ILS%2Fexamples%2Ftemplates%2Foverdue_combined_xml.example

   + Open-ILS/web/js/dojo/openils/BibTemplate.js	13010 at dcc99617-32d9-48b4-a31d-7c20da2025e4:trunk%2FOpen-ILS%2Fweb%2Fjs%2Fdojo%2Fopenils%2FBibTemplate.js

Name: bzr:revision-id:v4
   - 11741 phasefx at batrepo-20091014063041-ama3i5s87ziqohxo
11742 phasefx at batrepo-20091014063644-pn3a6urkw3uxgr6n
12108 phasefx at batrepo-20091120084700-lavt73oserscgalf
12166 jason at esilibrary.com-20091202233906-g8kh2kh3qmmz66r1
12184 jason at esilibrary.com-20091204161020-0dqezh01c05btffh
12198 jason at esilibrary.com-20091208140008-eofwdbn2u8dxk2kk
12199 jason at esilibrary.com-20091208155412-4qdzy8sgs51vm0yq
12215 jason at esilibrary.com-20091209133642-bp8mb3tc5vpoc1ij
12220 jason at esilibrary.com-20091209143447-i1st1to8ln4hhwyb
12231 jason at esilibrary.com-20091209221438-vv4crqppm8ajj3dr
12804 jason at esilibrary.com-20100324194046-jza2ic2dlpq8txhc
12946 miker at esilibrary.com-20100402183612-8xznj35wfohk7zyu
12955 miker at esilibrary.com-20100403141037-h8d57ryrmkkg9yhb
12971 miker at whirly-20100405202254-aztbsf3p3eey9e8e
12997 miker at esilibrary.com-20100408154146-zodwuxxizwf0y449
13010 miker at miker-msi-20100409021618-5f0ohbg5cgi5pai0
13014 miker at esilibrary.com-20100409135406-mitf09aw1srnps3g
13022 miker at esilibrary.com-20100412144909-fc4bx1n80ac0z8ox
13023 miker at esilibrary.com-20100412145629-92g9jts2k8yqsm38

   + 11741 phasefx at batrepo-20091014063041-ama3i5s87ziqohxo
11742 phasefx at batrepo-20091014063644-pn3a6urkw3uxgr6n
12108 phasefx at batrepo-20091120084700-lavt73oserscgalf
12166 jason at esilibrary.com-20091202233906-g8kh2kh3qmmz66r1
12184 jason at esilibrary.com-20091204161020-0dqezh01c05btffh
12198 jason at esilibrary.com-20091208140008-eofwdbn2u8dxk2kk
12199 jason at esilibrary.com-20091208155412-4qdzy8sgs51vm0yq
12215 jason at esilibrary.com-20091209133642-bp8mb3tc5vpoc1ij
12220 jason at esilibrary.com-20091209143447-i1st1to8ln4hhwyb
12231 jason at esilibrary.com-20091209221438-vv4crqppm8ajj3dr
12804 jason at esilibrary.com-20100324194046-jza2ic2dlpq8txhc
12946 miker at esilibrary.com-20100402183612-8xznj35wfohk7zyu
12955 miker at esilibrary.com-20100403141037-h8d57ryrmkkg9yhb
12971 miker at whirly-20100405202254-aztbsf3p3eey9e8e
12997 miker at esilibrary.com-20100408154146-zodwuxxizwf0y449
13010 miker at miker-msi-20100409021618-5f0ohbg5cgi5pai0
13014 miker at esilibrary.com-20100409135406-mitf09aw1srnps3g
13022 miker at esilibrary.com-20100412144909-fc4bx1n80ac0z8ox
13023 miker at esilibrary.com-20100412145629-92g9jts2k8yqsm38
13152 miker at esilibrary.com-20100503010126-67i6kclipxip27du

Name: bzr:text-parents
   - Open-ILS/examples/templates/overdue_combined_xml.example	svn-v4:dcc99617-32d9-48b4-a31d-7c20da2025e4:trunk:14971

   + Open-ILS/web/js/dojo/openils/BibTemplate.js	svn-v4:dcc99617-32d9-48b4-a31d-7c20da2025e4:trunk:16245


Modified: trunk/Open-ILS/web/js/dojo/openils/BibTemplate.js
===================================================================
--- trunk/Open-ILS/web/js/dojo/openils/BibTemplate.js	2010-05-01 18:11:47 UTC (rev 16370)
+++ trunk/Open-ILS/web/js/dojo/openils/BibTemplate.js	2010-05-03 01:01:29 UTC (rev 16371)
@@ -16,16 +16,22 @@
 
 if(!dojo._hasResource["openils.BibTemplate"]) {
 
+    dojo.require('DojoSRF');
     dojo.require('dojox.data.dom');
+    dojo.require('dojo.string');
     dojo._hasResource["openils.BibTemplate"] = true;
     dojo.provide("openils.BibTemplate");
     dojo.declare('openils.BibTemplate', null, {
 
         constructor : function(kwargs) {
             this.root = kwargs.root;
+            this.subObjectLimit = kwargs.subObjectLimit;
+            this.subObjectOffset = kwargs.subObjectOffset;
+            this.tagURI = kwargs.tagURI;
             this.record = kwargs.record;
             this.org_unit = kwargs.org_unit || '-';
-            this.locale = kwargs.locale || 'en-US';
+            this.depth = kwargs.depth;
+            this.locale = kwargs.locale || OpenSRF.locale || 'en-US';
 
             this.mode = 'biblio-record_entry';
             this.default_datatype = 'marcxml-uris';
@@ -46,47 +52,91 @@
                 // with bib records that have hundreds or thousands of copies
                 var current_datatype = default_datatype;
         
-                if (s.getAttribute('type').indexOf('+') > -1) 
+                if (s.getAttribute('datatype')) {
+                    current_datatype = s.getAttribute('datatype');
+                } else if (s.getAttribute('type').indexOf('+') > -1)  {
                     current_datatype = s.getAttribute('type').split('+').reverse()[0];
+                }
         
                 if (!slots[current_datatype]) slots[current_datatype] = [];
                 slots[current_datatype].push(s);
+
             });
         
             for (var datatype in slots) {
 
-                (function (slot_list,dtype,mode,rec,org) {
+                //(function (slot_list,dtype,mode,rec,org) {
+                (function (args) {
+                    var BT = args.renderer;
 
+                    var uri = '';
+                    if (BT.tagURI) {
+                        uri = BT.tagURI;
+                    } else {
+                        uri = 'tag:evergreen-opac:' + BT.mode + '/' + BT.record;
+                        if (BT.subObjectLimit) {
+                            uri += '[' + BT.subObjectLimit;
+                            if (BT.subObjectOffset)
+                                uri += ',' + BT.subObjectOffset;
+                            uri += ']';
+                        }
+                        uri += '/' + BT.org_unit;
+                        if (BT.depth || BT.depth == '0') uri += '/' + BT.depth;
+                    }
+
                     dojo.xhrGet({
-                        url: '/opac/extras/unapi?id=tag:opac:' + mode + '/' + rec + '/' + org + '&format=' + dtype + '&locale=' + this.locale,
+                        url: '/opac/extras/unapi?id=' + uri + '&format=' + args.dtype + '&locale=' + BT.locale,
                         handleAs: 'xml',
                         load: function (bib) {
 
-                            dojo.forEach(slot_list, function (slot) {
+                            dojo.forEach(args.slot_list, function (slot) {
                                 var joiner = slot.getAttribute('join') || ' ';
+                                var item_limit = slot.getAttribute('limit');
+                                var item_offset = slot.getAttribute('offset') || 0;
 
-                                var slot_handler = dojo.map(
-                                    dojo.query( '*[type=opac/slot-format]', slot ).orphan(), // IE, I really REALLY hate you
-                                    function(x){ return dojox.data.dom.textContent(x) || x.innerHTML }
-                                ).join('');
-
-                                if (slot_handler) slot_handler = new Function('item', slot_handler);
-                                else slot_handler = new Function('item','return dojox.data.dom.textContent(item);');
-                
                                 var item_list = dojo.query(
                                     slot.getAttribute('query'),
                                     bib
                                 );
 
-                                if (item_list.length) slot.innerHTML = dojo.map(item_list, slot_handler).join(joiner);
+                                if (item_limit) item_list = item_list.splice(parseInt(item_offset),parseInt(item_limit));
+                                if (!item_list.length) return;
 
+                                var templated = slot.getAttribute('templated') == 'true';
+                                if (templated) {
+                                    var template_values = {};
+
+                                    dojo.query(
+                                        '*[type=opac/template-value]',
+                                        slot
+                                    ).orphan().forEach(function(x) {
+                                        dojo.setObject(
+                                            x.getAttribute('name'),
+                                            (new Function( 'item_list', 'BT', 'slotXML', unescape(x.innerHTML) ))(item_list,BT,bib),
+                                            template_values
+                                        );
+                                    });
+
+                                    slot.innerHTML = dojo.string.substitute( unescape(slot.innerHTML), template_values );
+                                }
+
+                                var handler_node = dojo.query( '*[type=opac/slot-format]', slot )[0];
+                                if (handler_node) slot_handler = new Function('item_list', 'BT', 'slotXML', 'item', dojox.data.dom.textContent(handler_node) || handler_node.innerHTML);
+                                else slot_handler = new Function('item_list', 'BT', 'slotXML', 'item','return dojox.data.dom.textContent(item) || item.innerHTML;');
+            
+                                if (item_list.length) {
+                                    var content = dojo.map(item_list, dojo.partial(slot_handler,item_list,BT,bib)).join(joiner);
+                                    if (templated) handler_node.parentNode.replaceChild( dojo.doc.createTextNode( content ), handler_node );
+                                    else slot.innerHTML = content;
+                                }
+
                                 delete(slot_handler);
 
                             });
                        }
                     });
 
-                })(slots[datatype],datatype,this.mode,this.record,this.org_unit);
+                })({ slot_list : slots[datatype].reverse(), dtype : datatype, renderer : this });
             
             }
 



More information about the open-ils-commits mailing list