2 * variables defined in base_js.tt2:
5 * vendor_list = [ 'ebook_test' ]
9 * progress_icon (probably not done right)
11 * base_js.tt2 also "imports" dojo.cookie and a bunch of ebook_api JS
14 // Array of objects representing this patron's relationship with a specific vendor.
24 dojo.addOnLoad(function() {
26 dojo.forEach(vendor_list, function(v) {
27 var rel = new Relation(v, patron_id);
31 // Pull patron transaction info from cache (cookie), if available.
32 // Otherwise, do a live lookup against all enabled vendors.
33 if (dojo.cookie('ebook_xact_cache')) {
34 getCachedTransactions();
36 addTransactionsToPage();
38 console.log('retrieving patron transaction info for all vendors');
39 dojo.forEach(relations, function(rel) {
40 checkSession(rel.vendor, function(ses) {
41 rel.getTransactions( function(r) {
42 addTransactionsToCache(r);
50 // Update current page with cross-vendor transaction totals.
51 function addTotalsToPage() {
52 console.log('updating page with transaction totals');
54 updateMyAccountSummary();
57 // Update current page with detailed transaction info, where appropriate.
58 function addTransactionsToPage() {
60 console.log('updating page with cached transaction details, if applicable');
61 if (myopac_page === 'ebook_circs')
63 if (myopac_page === 'ebook_holds')
65 if (myopac_page === 'ebook_holds_ready')
66 updateHoldReadyView();
70 function updateDashboard() {
71 console.log('updating dashboard');
72 var total_checkouts = (typeof xacts.checkouts === 'undefined') ? '-' : xacts.checkouts.length;
73 var total_holds_pending = (typeof xacts.holds_pending === 'undefined') ? '-' : xacts.holds_pending.length;
74 var total_holds_ready = (typeof xacts.holds_ready === 'undefined') ? '-' : xacts.holds_ready.length;
76 dojo.byId('dash_e_checked').innerHTML = total_checkouts;
77 dojo.byId('dash_e_holds').innerHTML = total_holds_pending;
78 dojo.byId('dash_e_pickup').innerHTML = total_holds_ready;
79 // unhide ebook dashboard
80 dojo.removeClass('dashboard_e', "hidden");
83 function updateMyAccountSummary() {
84 if (myopac_page === 'main') {
85 console.log('updating account summary');
86 var total_checkouts = (typeof xacts.checkouts === 'undefined') ? '-' : xacts.checkouts.length;
87 var total_holds_pending = (typeof xacts.holds_pending === 'undefined') ? '-' : xacts.holds_pending.length;
88 var total_holds_ready = (typeof xacts.holds_ready === 'undefined') ? '-' : xacts.holds_ready.length;
90 dojo.byId('acct_sum_ebook_circ_total').innerHTML = total_checkouts;
91 dojo.byId('acct_sum_ebook_hold_total').innerHTML = total_holds_pending;
92 dojo.byId('acct_sum_ebook_hold_ready_total').innerHTML = total_holds_ready;
93 // unhide display elements
94 dojo.removeClass('acct_sum_ebook_circs', "hidden");
95 dojo.removeClass('acct_sum_ebook_holds', "hidden");
96 dojo.removeClass('acct_sum_ebook_holds_ready', "hidden");
100 function updateCheckoutView() {
101 if (xacts.checkouts.length < 1) {
102 dojo.removeClass('no_ebook_circs', "hidden");
104 dojo.forEach(xacts.checkouts, function(x) {
105 dojo.empty('ebook_circs_main_table_body');
106 var dl_link = '<a href="' + x.download_url + '">' + l_strings.download + '</a>';
107 var tr = dojo.create("tr", null, dojo.byId('ebook_circs_main_table_body'));
108 dojo.create("td", { innerHTML: x.title }, tr);
109 dojo.create("td", { innerHTML: x.author }, tr);
110 dojo.create("td", { innerHTML: x.due_date }, tr);
111 dojo.create("td", { innerHTML: dl_link}, tr);
112 // TODO: more actions (renew, checkin)
114 dojo.addClass('no_ebook_circs', "hidden");
115 dojo.removeClass('ebook_circs_main', "hidden");
119 function updateHoldView() {
120 var holds_pending = xacts.holds_pending;
121 var holds_ready = xacts.holds_ready;
123 // combine all holds into a single list, ready-for-checkout holds first
124 var holds = holds_ready.concat(holds_pending);
126 if (holds.length < 1) {
127 dojo.removeClass('no_ebook_holds', "hidden");
129 dojo.forEach(holds, function(h) {
132 hold_status = l_strings.ready_for_checkout;
133 } else if (h.is_frozen) {
134 hold_status = l_strings.suspended;
136 hold_status = h.queue_position + ' / ' + h.queue_size;
138 dojo.empty('ebook_holds_main_table_body');
139 var tr = dojo.create("tr", null, dojo.byId('ebook_holds_main_table_body'));
140 dojo.create("td", { innerHTML: h.title }, tr);
141 dojo.create("td", { innerHTML: h.author }, tr);
142 dojo.create("td", { innerHTML: h.expire_date }, tr);
143 dojo.create("td", { innerHTML: hold_status }, tr);
144 dojo.create("td", null, tr); // TODO actions
146 dojo.addClass('no_ebook_holds', "hidden");
147 dojo.removeClass('ebook_holds_main', "hidden");
151 function updateHoldReadyView() {
152 var holds = xacts.holds_ready;
153 if (holds.length < 1) {
154 dojo.removeClass('no_ebook_holds', "hidden");
156 dojo.forEach(holds, function(h) {
157 dojo.empty('ebook_holds_main_table_body');
158 var tr = dojo.create("tr", null, dojo.byId('ebook_holds_main_table_body'));
159 dojo.create("td", { innerHTML: h.title }, tr);
160 dojo.create("td", { innerHTML: h.author }, tr);
161 dojo.create("td", { innerHTML: h.expire_date }, tr);
162 dojo.create("td", null, tr); // TODO actions
164 dojo.addClass('no_ebook_holds', "hidden");
165 dojo.removeClass('ebook_holds_main', "hidden");
169 // deserialize transactions from cache, returning them as a JS object
170 function getCachedTransactions() {
171 console.log('retrieving cached transaction details');
173 var current_cache = dojo.cookie('ebook_xact_cache');
175 cache_obj = JSON.parse(current_cache);
176 xacts.checkouts = cache_obj.checkouts;
177 xacts.holds_pending = cache_obj.holds_pending;
178 xacts.holds_ready = cache_obj.holds_ready;
183 // add a single vendor's transactions to transaction cache
184 function addTransactionsToCache(rel) {
185 console.log('updating transaction cache');
187 var updated_xacts = {
192 // preserve any transactions with other vendors
193 dojo.forEach(xacts.checkouts, function(xact) {
194 if (xact.vendor !== v)
195 updated_xacts.checkouts.push(xact);
197 dojo.forEach(xacts.holds_pending, function(xact) {
198 if (xact.vendor !== v)
199 updated_xacts.holds_pending.push(xact);
201 dojo.forEach(xacts.holds_ready, function(xact) {
202 if (xact.vendor !== v)
203 updated_xacts.holds_ready.push(xact);
205 // add transactions from current vendor
206 dojo.forEach(rel.checkouts, function(xact) {
207 updated_xacts.checkouts.push(xact);
209 dojo.forEach(rel.holds_pending, function(xact) {
210 updated_xacts.holds_pending.push(xact);
212 dojo.forEach(rel.holds_ready, function(xact) {
213 updated_xacts.holds_ready.push(xact);
215 // TODO sort transactions by date
216 // save transactions to cache
217 xacts = updated_xacts;
218 var new_cache = JSON.stringify(xacts);
219 dojo.cookie('ebook_xact_cache', new_cache, {path: '/'});
220 // update current page
222 addTransactionsToPage();