Backport BibTemplate callback support from trunk
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 20 Sep 2010 19:14:28 +0000 (19:14 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 20 Sep 2010 19:14:28 +0000 (19:14 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_2_0@17846 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/js/dojo/openils/BibTemplate.js

index 5827a6e..790d16a 100644 (file)
@@ -99,6 +99,16 @@ if(!dojo._hasResource["openils.BibTemplate"]) {
                                 var item_limit = parseInt(slot.getAttribute('limit'));
                                 var item_offset = parseInt(slot.getAttribute('offset')) || 0;
 
+                                var pre_render_callbacks = dojo.query( '*[type=opac/call-back+pre-render]', slot );
+                                var post_render_callbacks = dojo.query( '*[type=opac/call-back+post-render]', slot );
+                                var pre_query_callbacks = dojo.query( '*[type=opac/call-back+pre-query]', slot );
+                                var post_query_callbacks = dojo.query( '*[type=opac/call-back+post-query]', slot );
+
+                                // Do pre-query stuff
+                                dojo.forEach(pre_query_callbacks, function (cb) {
+                                    try { (new Function( 'BT', 'slotXML', 'slot', unescape(cb.innerHTML) ))(BT,bib,slot) } catch (e) {/*meh*/}
+                                });
+
                                 var item_list = dojo.query(
                                     slot.getAttribute('query'),
                                     bib
@@ -107,9 +117,20 @@ if(!dojo._hasResource["openils.BibTemplate"]) {
                                 if (item_limit) {
                                     if (debug) alert('BibTemplate debug -- item list limit/offset requested: ' + item_limit + '/' + item_offset);
                                     if (item_list.length) item_list = BT.subsetNL(item_list, item_offset, item_offset + item_limit);
-                                    if (!item_list.length) return;
                                 }
 
+                                // Do post-query stuff, only if there's an item list!
+                                dojo.forEach(post_query_callbacks, function (cb) {
+                                    try { (new Function( 'item_list', 'BT', 'slotXML', 'slot', unescape(cb.innerHTML) ))(item_list,BT,bib,slot) } catch (e) {/*meh*/}
+                                });
+
+                                if (!item_list.length) return;
+
+                                // Do pre-render stuff
+                                dojo.forEach(pre_render_callbacks, function (cb) {
+                                    try { (new Function( 'item_list', 'BT', 'slotXML', 'slot', unescape(cb.innerHTML) ))(item_list,BT,bib,slot) } catch (e) {/*meh*/}
+                                });
+
                                 var templated = slot.getAttribute('templated') == 'true';
                                 if (debug) alert('BibTemplate debug -- slot ' + (templated ? 'is' : 'is not') + ' templated');
                                 if (templated) {
@@ -147,6 +168,12 @@ if(!dojo._hasResource["openils.BibTemplate"]) {
                                 }
 
                                 delete(slot_handler);
+
+                                // Do post-render stuff
+                                dojo.forEach(post_render_callbacks, function (cb) {
+                                    try { (new Function( 'item_list', 'BT', 'slotXML', 'slot', unescape(cb.innerHTML) ))(item_list,BT,bib,slot) } catch (e) {/*meh*/}
+                                });
+
                             } catch (e) {
                                 if (debug) {
                                     alert('BibTemplate Error: ' + e + '\n' + dojo.toJson(e));