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 var dl_link = '<a href="' + x.download_url + '">' + l_strings.download + '</a>';
106 var tr = dojo.create("tr", null, dojo.byId('ebook_circs_main_table_body'));
107 dojo.create("td", { innerHTML: x.title }, tr);
108 dojo.create("td", { innerHTML: x.author }, tr);
109 dojo.create("td", { innerHTML: x.due_date }, tr);
110 dojo.create("td", { innerHTML: dl_link}, tr);
111 // TODO: more actions (renew, checkin)
113 dojo.addClass('no_ebook_circs', "hidden");
114 dojo.removeClass('ebook_circs_main', "hidden");
118 function updateHoldView() {
119 var holds_pending = xacts.holds_pending;
120 var holds_ready = xacts.holds_ready;
122 // combine all holds into a single list, ready-for-checkout holds first
123 var holds = holds_ready.concat(holds_pending);
125 if (holds.length < 1) {
126 dojo.removeClass('no_ebook_holds', "hidden");
128 dojo.forEach(holds, function(h) {
131 hold_status = l_strings.ready_for_checkout;
132 } else if (h.is_frozen) {
133 hold_status = l_strings.suspended;
135 hold_status = h.queue_position + ' / ' + h.queue_size;
137 var tr = dojo.create("tr", null, dojo.byId('ebook_holds_main_table_body'));
138 dojo.create("td", { innerHTML: h.title }, tr);
139 dojo.create("td", { innerHTML: h.author }, tr);
140 dojo.create("td", { innerHTML: h.expire_date }, tr);
141 dojo.create("td", { innerHTML: hold_status }, tr);
142 dojo.create("td", null, tr); // TODO actions
144 dojo.addClass('no_ebook_holds', "hidden");
145 dojo.removeClass('ebook_holds_main', "hidden");
149 function updateHoldReadyView() {
150 var holds = xacts.holds_ready;
151 if (holds.length < 1) {
152 dojo.removeClass('no_ebook_holds', "hidden");
154 dojo.forEach(holds, function(h) {
155 var tr = dojo.create("tr", null, dojo.byId('ebook_holds_main_table_body'));
156 dojo.create("td", { innerHTML: h.title }, tr);
157 dojo.create("td", { innerHTML: h.author }, tr);
158 dojo.create("td", { innerHTML: h.expire_date }, tr);
159 dojo.create("td", null, tr); // TODO actions
161 dojo.addClass('no_ebook_holds', "hidden");
162 dojo.removeClass('ebook_holds_main', "hidden");
166 // deserialize transactions from cache, returning them as a JS object
167 function getCachedTransactions() {
168 console.log('retrieving cached transaction details');
170 var current_cache = dojo.cookie('ebook_xact_cache');
172 cache_obj = JSON.parse(current_cache);
173 xacts.checkouts = cache_obj.checkouts;
174 xacts.holds_pending = cache_obj.holds_pending;
175 xacts.holds_ready = cache_obj.holds_ready;
180 // add a single vendor's transactions to transaction cache
181 function addTransactionsToCache(rel) {
182 console.log('updating transaction cache');
184 var updated_xacts = {
189 // preserve any transactions with other vendors
190 dojo.forEach(xacts.checkouts, function(xact) {
191 if (xact.vendor !== v)
192 updated_xacts.checkouts.push(xact);
194 dojo.forEach(xacts.holds_pending, function(xact) {
195 if (xact.vendor !== v)
196 updated_xacts.holds_pending.push(xact);
198 dojo.forEach(xacts.holds_ready, function(xact) {
199 if (xact.vendor !== v)
200 updated_xacts.holds_ready.push(xact);
202 // add transactions from current vendor
203 dojo.forEach(rel.checkouts, function(xact) {
204 updated_xacts.checkouts.push(xact);
206 dojo.forEach(rel.holds_pending, function(xact) {
207 updated_xacts.holds_pending.push(xact);
209 dojo.forEach(rel.holds_ready, function(xact) {
210 updated_xacts.holds_ready.push(xact);
212 // TODO sort transactions by date
213 // save transactions to cache
214 xacts = updated_xacts;
215 var new_cache = JSON.stringify(xacts);
216 dojo.cookie('ebook_xact_cache', new_cache, {path: '/'});
217 // update current page
219 addTransactionsToPage();