UNPKG

sp-jello

Version:
270 lines (242 loc) 8.96 kB
Jello.ListItems = (function(options) { var _private = (function(){ var _requestDigest = null; var GetRequestDigest = function() { var dfd = $.Deferred(); if (_requestDigest && _requestDigest.expiresOn > (new Date())) { return dfd.resolve(_requestDigest); } else { $.ajax({ type: "POST", url: siteUrl + "/_api/contextinfo", headers: { "accept": "application/json;odata=verbose" } }).done(function(resp) { var now = (new Date()).getTime(); _requestDigest = resp.d.GetContextWebInformation; _requestDigest.expiresOn = now + (resp.d.GetContextWebInformation.FormDigestTimeoutSeconds * 1000) - 60000; // -60000 To prevent any calls to fail at all, by refreshing a minute before // console.log("Token", self.requestDigest.FormDigestValue); dfd.resolve(_requestDigest.FormDigestValue); }) .fail(function(err) { console.log("Error fetching Request Digest. Some parts won't work."); dfd.reject(err); }); } return dfd.promise(); }; return { GetRequestDigest : GetRequestDigest }; })(); var filterObj = { filter: null, expand: null, select: null, orderBy: null }; var siteUrl = options.site; var list = options.list; var contentType = options.contentType; var get = function(top) { var dfd = $.Deferred(); var filter = ""; // If filter is set, execute if (filterObj.select || filterObj.filter || filterObj.expand || filterObj.orderBy) { if (filterObj.expand) filter = (filter.length > 0) ? filter + "&" + filterObj.expand : filter + "?" + filterObj.expand; if (filterObj.select) filter = (filter.length > 0) ? filter + "&" + filterObj.select : filter + "?" + filterObj.select; if (filterObj.filter) filter = (filter.length > 0) ? filter + "&" + filterObj.filter : filter + "?" + filterObj.filter; if (filterObj.orderBy) filter = (filter.length > 0) ? filter + "&" + filterObj.orderBy : filter + "?" + filterObj.orderBy; if (top) filter = (filter.length > 0) ? filter + "&$top=" + top : filter + "?$top=" + top; // Reset the filter filterObj = { filter: null, expand: null, select: null, orderBy: null }; } else { filter = (top) ? "?$top=" + top : ""; } url = siteUrl + "/_api/web/lists/getbytitle('" + list + "')/items" + filter; $.ajax({ type: 'GET', headers: { "accept": "application/json;odata=verbose" }, url: url }).done(function(resp) { // Add paging methods resp.next = function() { var dfd_next = $.Deferred(); get(null, resp.d.__next).then(function(next_res) { dfd_next.resolve(next_res); }, function(err) { dfd_next.reject(err); }); return dfd_next.promise(); }; resp.prev = function() { var dfd_prev = $.Deferred(); get(null, resp.d.__prev).then(function(prev_res) { dfd_prev.resolve(prev_res); }, function(err) { dfd_prev.reject(err); }); return dfd_prev.promise(); }; dfd.resolve(resp); }).fail(function(err) { dfd.reject(err); }); return dfd.promise(); }; var getById = function(id) { var dfd = $.Deferred(); if (!id) throw ("Provided ID is not valid"); $.ajax({ type: 'GET', headers: { "accept": "application/json;odata=verbose" }, url: siteUrl + "/_api/web/lists/getbytitle('" + list + "')/items(" + id + ")" }).done(function(resp) { dfd.resolve(resp); }).fail(function(err) { dfd.reject(err); }); return dfd.promise(); }; var add = function(item) { var dfd = $.Deferred(); _private.GetRequestDigest().then(function(requestDigest) { item.__metadata = { type: contentType }; var payload = JSON.stringify(item); $.ajax({ type: 'POST', headers: { "accept": "application/json;odata=verbose", "content-type": "application/json;odata=verbose", "X-RequestDigest": requestDigest }, data: payload, url: siteUrl + "/_api/web/lists/getbytitle('" + list + "')/items" }).done(function(resp) { dfd.resolve(resp); }).fail(function(err) { dfd.reject(err); }); }, function(err) { dfd.reject(err); }); return dfd.promise(); }; var remove = function(id, etag) { // if etag not provided, overwrite item even if outdated if (!etag) etag = "*"; var dfd = $.Deferred(); _private.GetRequestDigest().then(function(requestDigest) { $.ajax({ type: 'POST', headers: { "X-RequestDigest": requestDigest, "X-HTTP-Method": "DELETE", "If-Match": etag }, url: siteUrl + "/_api/web/lists/getbytitle('" + list + "')/items(" + id + ")" }).done(function(resp) { dfd.resolve(resp); }).fail(function(err) { dfd.reject(err); }); }, function(err) { dfd.reject(err); }); return dfd.promise(); }; var update = function(id, update, etag) { // if etag not provided, overwrite item even if outdated if (!etag) etag = "*"; var dfd = $.Deferred(); _private.GetRequestDigest().then(function(requestDigest) { update.__metadata = { type: contentType }; var payload = JSON.stringify(update); $.ajax({ type: 'POST', headers: { "accept": "application/json;odata=verbose", "content-type": "application/json;odata=verbose", "X-RequestDigest": requestDigest, "X-HTTP-Method": "MERGE", "If-Match": etag }, data: payload, url: siteUrl + "/_api/web/lists/getbytitle('" + list + "')/items(" + id + ")" }).done(function(resp) { dfd.resolve(resp); }).fail(function(err) { dfd.reject(err); }); }, function(err) { dfd.reject(err); }); return dfd.promise(); }; var query = function(filter) { var dfd = $.Deferred(); filter = (filter) ? "?" + filter : ""; $.ajax({ type: 'GET', headers: { "accept": "application/json;odata=verbose" }, url: siteUrl + "/_api/web/lists/getbytitle('" + list + "')/items" + filter }).done(function(resp) { dfd.resolve(resp); }).fail(function(err) { dfd.reject(err); }); return dfd.promise(); }; var where = function(filter) { filterObj.filter = "$filter=" + filter; return this; }; var expand = function(filter) { filterObj.expand = "$expand=" + filter; return this; }; var select = function(filter) { filterObj.select = "$select=" + filter; return this; }; var orderBy = function(filter) { filterObj.orderBy = "$orderby=" + filter; return this; }; return { get: get, getById: getById, add: add, remove: remove, update: update, query: query, where: where, expand: expand, select: select, orderBy: orderBy }; });