1 // Generated by CoffeeScript 1.8.0
2 var __slice = [].slice;
4 define(['jquery-noconflict', 'lodash', 'json', 'cookies', 'moment', 'od_config', 'od_session', 'od_data'], function($, _, json, C, M, config, Session, D) {
5 var $notify, eventList, eventObject, log, logError, od, serializeObject, session, _api;
9 for (_i = 0, _len = arguments.length; _i < _len; _i++) {
14 console.log(arguments);
18 logError = function(jqXHR, textStatus, errorThrown) {
19 log("" + textStatus + " " + jqXHR.status + " " + errorThrown);
20 return $notify.trigger('od.fail', arguments);
22 eventList = ['od.clientaccess', 'od.libraryinfo', 'od.metadata', 'od.availability', 'od.patronaccess', 'od.patroninfo', 'od.holds', 'od.checkouts', 'od.interests', 'od.action', 'od.hold.update', 'od.hold.delete', 'od.checkout.update', 'od.checkout.delete', 'od.prefs', 'od.login', 'od.logout', 'od.error'];
23 eventObject = $({}).on(eventList.join(' '), function() {
25 e = arguments[0], x = arguments[1], y = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
27 session = new Session(window.name, Boolean(C('eg_loggedin') || window.IAMXUL));
28 $(window).on('unload', function() {
29 return window.name = session.store();
31 _api = function(url, data) {
32 return $.ajax($.extend({}, {
34 Authorization: "Basic " + config.credentials
41 serializeObject = function(a) {
44 $.each(a, function() {
47 if ((n = o[this.name]) !== void 0) {
51 return o[this.name].push(v);
53 return o[this.name] = v;
59 _serializeObject: function() {
60 return serializeObject(this.serializeArray());
62 _serializeX: function(X) {
65 return json.stringify(this._serializeX('o'));
67 return json.stringify(this._serializeX('a'));
69 return $.param(this._serializeX('a'));
71 return this.serialize();
73 return serializeObject(this._serializeX('a'));
75 return this.serializeArray();
83 'od.prefs': function(ev, x) {
84 return session.prefs.update(x);
86 'od.logout': function(ev, x) {
88 if (session.token.is_patron_access()) {
89 return session = new Session();
95 labels: function(id) {
96 return session.labels[id] || id;
98 api: function(url, method, data, beforeSend) {
99 var v, _i, _len, _ref;
100 if (method === 'post') {
102 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
104 if (v.name === 'numberOfDays') {
105 v.value = 1 + M(v.value).diff(M().toArray().slice(0, 3), 'days');
109 return $.ajax($.extend({}, {
111 Authorization: "" + session.token.token_type + " " + session.token.access_token
115 contentType: 'application/json; charset=utf-8',
116 data: json.stringify(data),
117 beforeSend: beforeSend
118 })).done(function() {
120 if (method === 'post') {
121 if (/\/holds|\/suspension/.test(url)) {
123 holds: [arguments[0]]
125 od.$.triggerHandler('od.hold.update', x);
127 if (/\/checkouts/.test(url)) {
128 x = new D.Checkouts({
129 checkouts: [arguments[0]]
131 od.$.triggerHandler('od.checkout.update', x);
134 if (method === 'delete') {
135 if (id = url.match(/\/holds\/(.+)\/suspension$/)) {
138 if (id = url.match(/\/holds\/(.+)$/)) {
139 od.$.triggerHandler('od.hold.delete', id[1]);
141 if (id = url.match(/\/checkouts\/(.+)$/)) {
142 return od.$.triggerHandler('od.checkout.delete', id[1]);
146 return od.$.triggerHandler('od.error', [url, arguments[0]]);
149 apiDiscAccess: function() {
152 session.token.update(x);
153 od.$.triggerHandler('od.clientaccess', x);
156 return _api(session.links.token.href, {
157 grant_type: 'client_credentials'
158 }).then(ok, logError);
160 apiLibraryInfo: function() {
163 return od.api(session.links.libraries.href);
166 session.links.update(x);
167 session.labels.update(x);
168 od.$.triggerHandler('od.libraryinfo', x);
171 retry = function(jqXHR) {
172 if (jqXHR.status === 401) {
173 if (session.token.is_patron_access()) {
174 return od.$.triggerHandler('od.logout', 'od');
176 return od.apiDiscAccess().then(get, logError).then(ok);
180 return get().then(ok, retry);
182 login: function(credentials) {
185 session.creds.update(credentials);
186 session.token.update();
187 od.$.triggerHandler('od.login');
190 if (session.token.is_patron_access()) {
191 return $.Deferred().resolve().promise();
193 login = function(prefs) {
194 var pw, scope, un, x;
195 x = function(label) {
197 r = new RegExp("" + label + "<\\/td>\\s+<td.+>(.*?)<\\/td>", 'i');
198 return ((_ref = prefs.match(r)) != null ? _ref[1] : void 0) || '';
200 session.prefs.update({
201 barcode: x('barcode'),
202 email_address: x('email address'),
203 home_library: x('home library')
205 un = session.prefs.barcode || session.creds.un();
206 pw = session.creds.pw(config.password_required(session.prefs.home_library));
207 session.creds.update();
208 scope = "websiteid:" + config.websiteID + " authorizationname:" + (config.authorizationname(session.prefs.home_library));
209 return _api(session.links.patrontoken.href, {
210 grant_type: 'password',
213 password_required: config.password_required(session.prefs.home_library),
218 session.token.update(x);
219 od.$.triggerHandler('od.patronaccess', x);
222 return $.get('/eg/opac/myopac/prefs').then(login).then(ok).then(od.apiPatronInfo).fail(log);
224 apiSearch: function(x) {
228 return od.api(session.links.products.href, get, x);
230 apiMetadata: function(x) {
234 return od.api("" + session.links.products.href + "/" + x.id + "/metadata").then(function(y) {
235 y = new D.Metadata(y);
236 od.$.triggerHandler('od.metadata', y);
239 return od.$.triggerHandler('od.metadata', x);
242 apiAvailability: function(x) {
243 var alink, url, _ref;
247 url = (alink = (_ref = session.links.availability) != null ? _ref.href : void 0) ? alink.replace('{crId}', x.id) : "" + session.links.products.href + "/" + x.id + "/availability";
248 return od.api(url).then(function(y) {
249 y = new D.Availability(y, session.prefs.email_address);
250 od.$.triggerHandler('od.availability', y);
253 return od.$.triggerHandler('od.availability', x);
256 apiPatronInfo: function() {
259 session.links.update(x);
260 od.$.triggerHandler('od.patroninfo', x);
263 return od.api(session.links.patrons.href).then(ok, logError);
265 apiHoldsGet: function(x) {
266 if (!session.token.is_patron_access()) {
269 return od.api("" + session.links.holds.href + ((x != null ? x.productID : void 0) ? x.productID : '')).then(function(y) {
271 od.$.triggerHandler('od.holds', y);
275 apiCheckoutsGet: function(x) {
276 if (!session.token.is_patron_access()) {
279 return od.api("" + session.links.checkouts.href + ((x != null ? x.reserveID : void 0) ? x.reserveID : '')).then(function(y) {
280 y = new D.Checkouts(y);
281 od.$.triggerHandler('od.checkouts', y);
285 apiInterestsGet: function() {
286 return $.when(od.apiHoldsGet(), od.apiCheckoutsGet()).then(function(h, c) {
288 y = new D.Interests(h, c);
289 od.$.triggerHandler('od.interests', y);